diff options
Diffstat (limited to 'internal/route')
-rw-r--r-- | internal/route/admin/users.go | 55 | ||||
-rw-r--r-- | internal/route/api/v1/admin/user.go | 55 | ||||
-rw-r--r-- | internal/route/api/v1/org/org.go | 23 | ||||
-rw-r--r-- | internal/route/org/setting.go | 15 | ||||
-rw-r--r-- | internal/route/repo/setting.go | 2 | ||||
-rw-r--r-- | internal/route/user/auth.go | 48 | ||||
-rw-r--r-- | internal/route/user/setting.go | 45 |
7 files changed, 127 insertions, 116 deletions
diff --git a/internal/route/admin/users.go b/internal/route/admin/users.go index 592f3fee..9b47b5fc 100644 --- a/internal/route/admin/users.go +++ b/internal/route/admin/users.go @@ -8,7 +8,6 @@ import ( "strconv" "strings" - "github.com/unknwon/com" log "unknwon.dev/clog/v2" "gogs.io/gogs/internal/conf" @@ -17,7 +16,6 @@ import ( "gogs.io/gogs/internal/email" "gogs.io/gogs/internal/form" "gogs.io/gogs/internal/route" - "gogs.io/gogs/internal/userutil" ) const ( @@ -176,38 +174,37 @@ func EditUserPost(c *context.Context, f form.AdminEditUser) { return } + opts := db.UpdateUserOptions{ + LoginName: &f.LoginName, + FullName: &f.FullName, + Website: &f.Website, + Location: &f.Location, + MaxRepoCreation: &f.MaxRepoCreation, + IsActivated: &f.Active, + IsAdmin: &f.Admin, + AllowGitHook: &f.AllowGitHook, + AllowImportLocal: &f.AllowImportLocal, + ProhibitLogin: &f.ProhibitLogin, + } + fields := strings.Split(f.LoginType, "-") if len(fields) == 2 { - loginSource := com.StrTo(fields[1]).MustInt64() - + loginSource, _ := strconv.ParseInt(fields[1], 10, 64) if u.LoginSource != loginSource { - u.LoginSource = loginSource + opts.LoginSource = &loginSource } } - if len(f.Password) > 0 { - u.Password = f.Password - var err error - if u.Salt, err = userutil.RandomSalt(); err != nil { - c.Error(err, "get user salt") - return - } - u.Password = userutil.EncodePassword(u.Password, u.Salt) - } - - u.LoginName = f.LoginName - u.FullName = f.FullName - u.Email = f.Email - u.Website = f.Website - u.Location = f.Location - u.MaxRepoCreation = f.MaxRepoCreation - u.IsActive = f.Active - u.IsAdmin = f.Admin - u.AllowGitHook = f.AllowGitHook - u.AllowImportLocal = f.AllowImportLocal - u.ProhibitLogin = f.ProhibitLogin - - if err := db.UpdateUser(u); err != nil { + if f.Password != "" { + opts.Password = &f.Password + } + + if u.Email != f.Email { + opts.Email = &f.Email + } + + err := db.Users.Update(c.Req.Context(), u.ID, opts) + if err != nil { if db.IsErrEmailAlreadyUsed(err) { c.Data["Err_Email"] = true c.RenderWithErr(c.Tr("form.email_been_used"), USER_EDIT, &f) @@ -216,7 +213,7 @@ func EditUserPost(c *context.Context, f form.AdminEditUser) { } return } - log.Trace("Account profile updated by admin (%s): %s", c.User.Name, u.Name) + log.Trace("Account updated by admin %q: %s", c.User.Name, u.Name) c.Flash.Success(c.Tr("admin.users.update_profile_success")) c.Redirect(conf.Server.Subpath + "/admin/users/" + c.Params(":userid")) diff --git a/internal/route/api/v1/admin/user.go b/internal/route/api/v1/admin/user.go index c7c207af..97f7a0bb 100644 --- a/internal/route/api/v1/admin/user.go +++ b/internal/route/api/v1/admin/user.go @@ -15,7 +15,6 @@ import ( "gogs.io/gogs/internal/db" "gogs.io/gogs/internal/email" "gogs.io/gogs/internal/route/api/v1/user" - "gogs.io/gogs/internal/userutil" ) func parseLoginSource(c *context.APIContext, sourceID int64) { @@ -83,39 +82,30 @@ func EditUser(c *context.APIContext, form api.EditUserOption) { return } - if len(form.Password) > 0 { - u.Password = form.Password - var err error - if u.Salt, err = userutil.RandomSalt(); err != nil { - c.Error(err, "get user salt") - return - } - u.Password = userutil.EncodePassword(u.Password, u.Salt) + opts := db.UpdateUserOptions{ + LoginSource: &form.SourceID, + LoginName: &form.LoginName, + FullName: &form.FullName, + Website: &form.Website, + Location: &form.Location, + MaxRepoCreation: form.MaxRepoCreation, + IsActivated: form.Active, + IsAdmin: form.Admin, + AllowGitHook: form.AllowGitHook, + AllowImportLocal: form.AllowImportLocal, + ProhibitLogin: nil, // TODO: Add this option to API } - u.LoginSource = form.SourceID - u.LoginName = form.LoginName - u.FullName = form.FullName - u.Email = form.Email - u.Website = form.Website - u.Location = form.Location - if form.Active != nil { - u.IsActive = *form.Active - } - if form.Admin != nil { - u.IsAdmin = *form.Admin - } - if form.AllowGitHook != nil { - u.AllowGitHook = *form.AllowGitHook + if form.Password != "" { + opts.Password = &form.Password } - if form.AllowImportLocal != nil { - u.AllowImportLocal = *form.AllowImportLocal - } - if form.MaxRepoCreation != nil { - u.MaxRepoCreation = *form.MaxRepoCreation + + if u.Email != form.Email { + opts.Email = &form.Email } - if err := db.UpdateUser(u); err != nil { + err := db.Users.Update(c.Req.Context(), u.ID, opts) + if err != nil { if db.IsErrEmailAlreadyUsed(err) { c.ErrorStatus(http.StatusUnprocessableEntity, err) } else { @@ -123,8 +113,13 @@ func EditUser(c *context.APIContext, form api.EditUserOption) { } return } - log.Trace("Account profile updated by admin %q: %s", c.User.Name, u.Name) + log.Trace("Account updated by admin %q: %s", c.User.Name, u.Name) + u, err = db.Users.GetByID(c.Req.Context(), u.ID) + if err != nil { + c.Error(err, "get user") + return + } c.JSONSuccess(u.APIFormat()) } diff --git a/internal/route/api/v1/org/org.go b/internal/route/api/v1/org/org.go index 2f6b4b70..9b99bead 100644 --- a/internal/route/api/v1/org/org.go +++ b/internal/route/api/v1/org/org.go @@ -89,14 +89,25 @@ func Edit(c *context.APIContext, form api.EditOrgOption) { return } - org.FullName = form.FullName - org.Description = form.Description - org.Website = form.Website - org.Location = form.Location - if err := db.UpdateUser(org); err != nil { - c.Error(err, "update user") + err := db.Users.Update( + c.Req.Context(), + c.Org.Organization.ID, + db.UpdateUserOptions{ + FullName: &form.FullName, + Website: &form.Website, + Location: &form.Location, + Description: &form.Description, + }, + ) + if err != nil { + c.Error(err, "update organization") return } + org, err = db.GetOrgByName(org.Name) + if err != nil { + c.Error(err, "get organization") + return + } c.JSONSuccess(convert.ToOrganization(org)) } diff --git a/internal/route/org/setting.go b/internal/route/org/setting.go index 0cfc2454..e632e8a7 100644 --- a/internal/route/org/setting.go +++ b/internal/route/org/setting.go @@ -63,16 +63,15 @@ func SettingsPost(c *context.Context, f form.UpdateOrgSetting) { } opts := db.UpdateUserOptions{ - FullName: f.FullName, - Website: f.Website, - Location: f.Location, - Description: f.Description, - MaxRepoCreation: org.MaxRepoCreation, + FullName: &f.FullName, + Website: &f.Website, + Location: &f.Location, + Description: &f.Description, } if c.User.IsAdmin { - opts.MaxRepoCreation = f.MaxRepoCreation + opts.MaxRepoCreation = &f.MaxRepoCreation } - err := db.Users.Update(c.Req.Context(), c.User.ID, opts) + err := db.Users.Update(c.Req.Context(), c.Org.Organization.ID, opts) if err != nil { c.Error(err, "update organization") return @@ -83,7 +82,7 @@ func SettingsPost(c *context.Context, f form.UpdateOrgSetting) { } func SettingsAvatar(c *context.Context, f form.Avatar) { - f.Source = form.AVATAR_LOCAL + f.Source = form.AvatarLocal if err := user.UpdateAvatarSetting(c, f, c.Org.Organization); err != nil { c.Flash.Error(err.Error()) } else { diff --git a/internal/route/repo/setting.go b/internal/route/repo/setting.go index e5e4fe6f..c02254ee 100644 --- a/internal/route/repo/setting.go +++ b/internal/route/repo/setting.go @@ -309,7 +309,7 @@ func SettingsAvatar(c *context.Context) { } func SettingsAvatarPost(c *context.Context, f form.Avatar) { - f.Source = form.AVATAR_LOCAL + f.Source = form.AvatarLocal if err := UpdateAvatarSetting(c, f, c.Repo.Repository); err != nil { c.Flash.Error(err.Error()) } else { diff --git a/internal/route/user/auth.go b/internal/route/user/auth.go index 8e63d914..ff0febb9 100644 --- a/internal/route/user/auth.go +++ b/internal/route/user/auth.go @@ -367,9 +367,16 @@ func SignUpPost(c *context.Context, cpt *captcha.Captcha, f form.Register) { // // Auto-set admin for the only user. if db.Users.Count(c.Req.Context()) == 1 { - user.IsAdmin = true - user.IsActive = true - if err := db.UpdateUser(user); err != nil { + v := true + err := db.Users.Update( + c.Req.Context(), + user.ID, + db.UpdateUserOptions{ + IsActivated: &v, + IsAdmin: &v, + }, + ) + if err != nil { c.Error(err, "update user") return } @@ -476,13 +483,16 @@ func Activate(c *context.Context) { // Verify code. if user := verifyUserActiveCode(code); user != nil { - user.IsActive = true - var err error - if user.Rands, err = userutil.RandomSalt(); err != nil { - c.Error(err, "get user salt") - return - } - if err := db.UpdateUser(user); err != nil { + v := true + err := db.Users.Update( + c.Req.Context(), + user.ID, + db.UpdateUserOptions{ + GenerateNewRands: true, + IsActivated: &v, + }, + ) + if err != nil { c.Error(err, "update user") return } @@ -601,26 +611,16 @@ func ResetPasswdPost(c *context.Context) { if u := verifyUserActiveCode(code); u != nil { // Validate password length. - passwd := c.Query("password") - if len(passwd) < 6 { + password := c.Query("password") + if len(password) < 6 { c.Data["IsResetForm"] = true c.Data["Err_Password"] = true c.RenderWithErr(c.Tr("auth.password_too_short"), RESET_PASSWORD, nil) return } - u.Password = passwd - var err error - if u.Rands, err = userutil.RandomSalt(); err != nil { - c.Error(err, "get user salt") - return - } - if u.Salt, err = userutil.RandomSalt(); err != nil { - c.Error(err, "get user salt") - return - } - u.Password = userutil.EncodePassword(u.Password, u.Salt) - if err := db.UpdateUser(u); err != nil { + err := db.Users.Update(c.Req.Context(), u.ID, db.UpdateUserOptions{Password: &password}) + if err != nil { c.Error(err, "update user") return } diff --git a/internal/route/user/setting.go b/internal/route/user/setting.go index fbb7c9ae..0f5a62bf 100644 --- a/internal/route/user/setting.go +++ b/internal/route/user/setting.go @@ -96,10 +96,9 @@ func SettingsPost(c *context.Context, f form.UpdateProfile) { c.Req.Context(), c.User.ID, db.UpdateUserOptions{ - FullName: f.FullName, - Website: f.Website, - Location: f.Location, - MaxRepoCreation: c.User.MaxRepoCreation, + FullName: &f.FullName, + Website: &f.Website, + Location: &f.Location, }, ) if err != nil { @@ -113,13 +112,23 @@ func SettingsPost(c *context.Context, f form.UpdateProfile) { // FIXME: limit upload size func UpdateAvatarSetting(c *context.Context, f form.Avatar, ctxUser *db.User) error { - if f.Source == form.AVATAR_BYMAIL && len(f.Gravatar) > 0 { - ctxUser.UseCustomAvatar = false - ctxUser.Avatar = cryptoutil.MD5(f.Gravatar) - ctxUser.AvatarEmail = f.Gravatar + if f.Source == form.AvatarLookup && f.Gravatar != "" { + avatar := cryptoutil.MD5(f.Gravatar) + err := db.Users.Update( + c.Req.Context(), + ctxUser.ID, + db.UpdateUserOptions{ + Avatar: &avatar, + AvatarEmail: &f.Gravatar, + }, + ) + if err != nil { + return errors.Wrap(err, "update user") + } - if err := db.UpdateUser(ctxUser); err != nil { - return fmt.Errorf("update user: %v", err) + err = db.Users.DeleteCustomAvatar(c.Req.Context(), c.User.ID) + if err != nil { + return errors.Wrap(err, "delete custom avatar") } return nil } @@ -193,14 +202,14 @@ func SettingsPasswordPost(c *context.Context, f form.ChangePassword) { } else if f.Password != f.Retype { c.Flash.Error(c.Tr("form.password_not_match")) } else { - c.User.Password = f.Password - var err error - if c.User.Salt, err = userutil.RandomSalt(); err != nil { - c.Errorf(err, "get user salt") - return - } - c.User.Password = userutil.EncodePassword(c.User.Password, c.User.Salt) - if err := db.UpdateUser(c.User); err != nil { + err := db.Users.Update( + c.Req.Context(), + c.User.ID, + db.UpdateUserOptions{ + Password: &f.Password, + }, + ) + if err != nil { c.Errorf(err, "update user") return } |