summaryrefslogtreecommitdiffstats
path: root/routers
diff options
context:
space:
mode:
author无闻 <u@gogs.io>2014-12-20 22:47:05 -0500
committer无闻 <u@gogs.io>2014-12-20 22:47:05 -0500
commita18decf4ccc9498f5fd394b03f77744bab89081b (patch)
tree63352d102a17c4c45f5bdfd376b415da1901db31 /routers
parente6e2cf7855b61f6acd7bc98b6757f99846038365 (diff)
parent20b5c23a192b3a87b4fdac724c5be705588e461c (diff)
downloadgitea-a18decf4ccc9498f5fd394b03f77744bab89081b.tar.gz
gitea-a18decf4ccc9498f5fd394b03f77744bab89081b.zip
Merge pull request #755 from phsmit/multiple_emails
Multiple emails
Diffstat (limited to 'routers')
-rw-r--r--routers/user/auth.go21
-rw-r--r--routers/user/setting.go108
2 files changed, 129 insertions, 0 deletions
diff --git a/routers/user/auth.go b/routers/user/auth.go
index e576e6af9c..9ed44e353c 100644
--- a/routers/user/auth.go
+++ b/routers/user/auth.go
@@ -345,6 +345,27 @@ func Activate(ctx *middleware.Context) {
ctx.HTML(200, ACTIVATE)
}
+func ActivateEmail(ctx *middleware.Context) {
+ code := ctx.Query("code")
+ email_string := ctx.Query("email")
+
+ // Verify code.
+ if email := models.VerifyActiveEmailCode(code, email_string); email != nil {
+ err := email.Activate()
+ if err != nil {
+ ctx.Handle(500, "ActivateEmail", err)
+ }
+
+ log.Trace("Email activated: %s", email.Email)
+
+ ctx.Flash.Success(ctx.Tr("settings.activate_email_success"))
+
+ }
+
+ ctx.Redirect(setting.AppSubUrl + "/user/settings/email")
+ return
+}
+
func ForgotPasswd(ctx *middleware.Context) {
ctx.Data["Title"] = ctx.Tr("auth.forgot_password")
diff --git a/routers/user/setting.go b/routers/user/setting.go
index 304ddd362b..419e84b395 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{
+ Uid: 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