summaryrefslogtreecommitdiffstats
path: root/routers/user
diff options
context:
space:
mode:
authorPeter <peter@smitmail.eu>2014-12-17 17:42:54 +0200
committerPeter <peter@smitmail.eu>2014-12-17 17:42:54 +0200
commitb033f2f535ad498ed78da6599d446abe2fd5c27d (patch)
tree6723f1c29fd32cea03e68717d992984850450ace /routers/user
parentf34b04cfc09a3bf0d18c7c4d8950869a252f0a28 (diff)
downloadgitea-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.go108
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