// Creates a new user func Register(w http.ResponseWriter, req *http.Request) { if req.Method == "POST" { req.ParseForm() passwordHash, err := bcrypt.GenerateFromPassword([]byte(req.FormValue("password")), bcrypt.DefaultCost) if err != nil { panic(err) } u := &models.User{ Firstname: sPtr(req.FormValue("firstname")), Surname: sPtr(req.FormValue("surname")), Mail: sPtr(req.FormValue("mail")), Password: sPtr(string(passwordHash)), } errs := u.Validate() if len(errs) > 0 { logs.Debug(errs) return } var store = models.UserStore(getDB(req)) err = store.Save(u) if err != nil { logs.Error(err) return } } templates := getTemplates(req) if err := templates["users/register"].ExecuteTemplate(w, "base", nil); err != nil { logs.Error(err) } }
// Returns a user func RetrieveUser(w http.ResponseWriter, r *http.Request) { id, err := strconv.Atoi(router.Context(r).Param("id")) if err != nil { logs.Debug(err) Fail(w, r, map[string]interface{}{"id": "not integer"}, http.StatusBadRequest) return } var ( u = models.User{ID: int64(id)} db = getDB(r) userStore = models.UserStore(db) ) if err = userStore.First(&u); err != nil { if err == sql.ErrNoRows { Fail(w, r, nil, http.StatusNotFound) return } logs.Error(err) Error(w, r, err.Error(), http.StatusInternalServerError) return } Success(w, r, views.User{User: &u}, http.StatusOK) }
// Returns the user infos from the database using the credentials func getUserInfos(username string, password string, r *http.Request) (string, error) { var ( u = models.User{Mail: &username, Password: sPtr(password)} db = getDB(r) userStore = models.UserStore(db) ) if err := userStore.First(&u); err != nil { logs.Error(err) return "0", err } if u.ID == 0 { return "0", errors.New("no such user") } if err := bcrypt.CompareHashAndPassword([]byte(*u.Password), []byte(password)); err != nil { return "0", errors.New("wrong password") } userInfos := fmt.Sprintf("%d:%d", u.ID, u.GroupID) return userInfos, nil }
func add(ctx *cli.Context) error { var err error var config settings.Config if ctx.String("config") != "" { config, err = settings.Parse(ctx.String("config")) if err != nil { logs.Error(err) } } var mail = ctx.String("mail") var password = ctx.String("password") var firstname = ctx.String("firstname") var surname = ctx.String("surname") var groupID = ctx.String("group") if mail == "" || password == "" || firstname == "" || surname == "" { logs.Error("All arguments are required") return errors.New("all arguments are required") } passwordHash, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost) if err != nil { panic(err) } var convGroupID = 0 if groupID != "" { convGroupID, err = strconv.Atoi(groupID) if err != nil { logs.Error(err) return err } } u := &models.User{ Mail: sPtr(mail), Password: sPtr(string(passwordHash)), Firstname: sPtr(firstname), Surname: sPtr(surname), GroupID: uint(convGroupID), } errs := u.Validate() logs.Level(logs.DebugLevel) if len(errs) > 0 { logs.Error(errs) return errors.New("Informations are not valid") } dialect, args, err := config.SqlDB() if err != nil { logs.Critical(err) os.Exit(1) } logs.Debug("database type: %s", dialect) var db *gorm.DB if db, err = databases.InitGORM(dialect, args); err != nil { logs.Critical(err) os.Exit(1) } logs.Debug("connected to %s", args) if config.Migrate() { db.AutoMigrate(models.Models()...) logs.Debug("database migrated successfully") } db.LogMode(true) var store = models.UserStore(db) err = store.Save(u) if err != nil { logs.Error(err) return err } logs.Debug("New user :"******"-Mail : %s", mail) logs.Debug("-Password : %s", password) logs.Debug("-Firstname : %s", firstname) logs.Debug("-Surname : %s", surname) logs.Debug("-GroupID : %d", convGroupID) return nil }