aboutsummaryrefslogtreecommitdiff
path: root/internal/route
diff options
context:
space:
mode:
Diffstat (limited to 'internal/route')
-rw-r--r--internal/route/admin/users.go55
-rw-r--r--internal/route/api/v1/admin/user.go55
-rw-r--r--internal/route/api/v1/org/org.go23
-rw-r--r--internal/route/org/setting.go15
-rw-r--r--internal/route/repo/setting.go2
-rw-r--r--internal/route/user/auth.go48
-rw-r--r--internal/route/user/setting.go45
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
}