diff options
author | Peter <peter@smitmail.eu> | 2014-12-17 17:42:54 +0200 |
---|---|---|
committer | Peter <peter@smitmail.eu> | 2014-12-17 17:42:54 +0200 |
commit | b033f2f535ad498ed78da6599d446abe2fd5c27d (patch) | |
tree | 6723f1c29fd32cea03e68717d992984850450ace /routers/user | |
parent | f34b04cfc09a3bf0d18c7c4d8950869a252f0a28 (diff) | |
download | gitea-b033f2f535ad498ed78da6599d446abe2fd5c27d.tar.gz gitea-b033f2f535ad498ed78da6599d446abe2fd5c27d.zip |
Finish method for having multiple emails/user.
All basics are implemented. Missing are the right (localized) strings
and the page markup could have a look at by a frontend guy.
Diffstat (limited to 'routers/user')
-rw-r--r-- | routers/user/setting.go | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/routers/user/setting.go b/routers/user/setting.go index 304ddd362b..7dca5d8697 100644 --- a/routers/user/setting.go +++ b/routers/user/setting.go @@ -14,6 +14,7 @@ import ( "github.com/gogits/gogs/modules/auth" "github.com/gogits/gogs/modules/base" "github.com/gogits/gogs/modules/log" + "github.com/gogits/gogs/modules/mailer" "github.com/gogits/gogs/modules/middleware" "github.com/gogits/gogs/modules/setting" ) @@ -21,6 +22,7 @@ import ( const ( SETTINGS_PROFILE base.TplName = "user/settings/profile" SETTINGS_PASSWORD base.TplName = "user/settings/password" + SETTINGS_EMAILS base.TplName = "user/settings/email" SETTINGS_SSH_KEYS base.TplName = "user/settings/sshkeys" SETTINGS_SOCIAL base.TplName = "user/settings/social" SETTINGS_APPLICATIONS base.TplName = "user/settings/applications" @@ -126,6 +128,112 @@ func SettingsAvatar(ctx *middleware.Context, form auth.UploadAvatarForm) { ctx.Flash.Success(ctx.Tr("settings.update_avatar_success")) } +func SettingsEmails(ctx *middleware.Context) { + ctx.Data["Title"] = ctx.Tr("settings") + ctx.Data["PageIsUserSettings"] = true + ctx.Data["PageIsSettingsEmails"] = true + + var err error + ctx.Data["Emails"], err = models.GetEmailAddresses(ctx.User.Id) + + if err != nil { + ctx.Handle(500, "email.GetEmailAddresses", err) + return + } + + ctx.HTML(200, SETTINGS_EMAILS) +} + +func SettingsEmailPost(ctx *middleware.Context, form auth.AddEmailForm) { + ctx.Data["Title"] = ctx.Tr("settings") + ctx.Data["PageIsUserSettings"] = true + ctx.Data["PageIsSettingsEmails"] = true + + var err error + ctx.Data["Emails"], err = models.GetEmailAddresses(ctx.User.Id) + if err != nil { + ctx.Handle(500, "email.GetEmailAddresses", err) + return + } + + // Delete Email address. + if ctx.Query("_method") == "DELETE" { + id := com.StrTo(ctx.Query("id")).MustInt64() + if id <= 0 { + return + } + + if err = models.DeleteEmailAddress(&models.EmailAddress{Id: id}); err != nil { + ctx.Handle(500, "DeleteEmail", err) + } else { + log.Trace("Email address deleted: %s", ctx.User.Name) + ctx.Redirect(setting.AppSubUrl + "/user/settings/email") + } + return + } + + // Make emailaddress primary. + if ctx.Query("_method") == "PRIMARY" { + id := com.StrTo(ctx.Query("id")).MustInt64() + if id <= 0 { + return + } + + if err = models.MakeEmailPrimary(&models.EmailAddress{Id: id}); err != nil { + ctx.Handle(500, "MakeEmailPrimary", err) + } else { + log.Trace("Email made primary: %s", ctx.User.Name) + ctx.Redirect(setting.AppSubUrl + "/user/settings/email") + } + return + } + + // Add Email address. + if ctx.Req.Method == "POST" { + if ctx.HasError() { + ctx.HTML(200, SETTINGS_EMAILS) + return + } + + cleanEmail := strings.Replace(form.Email, "\n", "", -1) + e := &models.EmailAddress{ + OwnerId: ctx.User.Id, + Email: cleanEmail, + IsActivated: !setting.Service.RegisterEmailConfirm, + } + + if err := models.AddEmailAddress(e); err != nil { + if err == models.ErrEmailAlreadyUsed { + ctx.RenderWithErr(ctx.Tr("form.email_has_been_used"), SETTINGS_EMAILS, &form) + return + } + ctx.Handle(500, "email.AddEmailAddress", err) + return + } else { + + // Send confirmation e-mail + if setting.Service.RegisterEmailConfirm { + mailer.SendActivateEmail(ctx.Render, ctx.User, e) + + if err := ctx.Cache.Put("MailResendLimit_"+ctx.User.LowerName, ctx.User.LowerName, 180); err != nil { + log.Error(4, "Set cache(MailResendLimit) fail: %v", err) + } + ctx.Flash.Success(ctx.Tr("settings.add_email_success_confirmation_email_sent")) + } else { + ctx.Flash.Success(ctx.Tr("settings.add_email_success")) + } + + log.Trace("Email address added: %s", e.Email) + + ctx.Redirect(setting.AppSubUrl + "/user/settings/email") + return + } + + } + + ctx.HTML(200, SETTINGS_EMAILS) +} + func SettingsPassword(ctx *middleware.Context) { ctx.Data["Title"] = ctx.Tr("settings") ctx.Data["PageIsUserSettings"] = true |