Unknwon лет назад: 8
Родитель
Сommit
9d36fc6986

+ 3 - 2
conf/locale/locale_en-US.ini

@@ -161,9 +161,10 @@ reset_password_helper = Click here to reset your password
 password_too_short = Password length cannot be less then 6.
 
 [mail]
-register_success = Register success, Welcome
 activate_account = Please activate your account
 activate_email = Verify your e-mail address
+reset_password = Reset your password
+register_success = Register success, Welcome
 
 [modal]
 yes = Yes
@@ -281,7 +282,7 @@ email_deletion_desc = Delete this e-mail address will remove related information
 email_deletion_success = E-mail has been deleted successfully!
 add_new_email = Add new e-mail address
 add_email = Add e-mail
-add_email_confirmation_sent = A new confirmation e-mail has been sent to <b>%s</b>, please check your inbox within the next %d hours to complete the confirmation process.
+add_email_confirmation_sent = A new confirmation e-mail has been sent to '%s', please check your inbox within the next %d hours to complete the confirmation process.
 add_email_success = Your new E-mail address was successfully added.
 
 manage_ssh_keys = Manage SSH Keys

Разница между файлами не показана из-за своего большого размера
+ 17 - 17
modules/bindata/bindata.go


+ 11 - 15
modules/mailer/mail.go

@@ -18,10 +18,10 @@ import (
 )
 
 const (
-	AUTH_REGISTER_SUCCESS base.TplName = "mail/auth/register_success"
 	AUTH_ACTIVATE         base.TplName = "mail/auth/activate"
 	AUTH_ACTIVATE_EMAIL   base.TplName = "mail/auth/activate_email"
 	AUTH_RESET_PASSWORD   base.TplName = "mail/auth/reset_passwd"
+	AUTH_REGISTER_SUCCESS base.TplName = "mail/auth/register_success"
 
 	NOTIFY_COLLABORATOR base.TplName = "mail/notify/collaborator"
 	NOTIFY_MENTION      base.TplName = "mail/notify/mention"
@@ -67,27 +67,23 @@ func SendActivateEmailMail(c *macaron.Context, u *models.User, email *models.Ema
 	}
 
 	msg := NewMessage([]string{email.Email}, c.Tr("mail.activate_email"), body)
-	msg.Info = fmt.Sprintf("UID: %d, activate email: %s", u.Id, email.Email)
+	msg.Info = fmt.Sprintf("UID: %d, activate email", u.Id)
 
 	SendAsync(msg)
 }
 
-// Send reset password email.
-func SendResetPasswdMail(r macaron.Render, u *models.User) {
-	code := u.GenerateActivateCode()
-
-	subject := "Reset your password"
-
+// SendResetPasswordMail sends reset password e-mail.
+func SendResetPasswordMail(c *macaron.Context, u *models.User) {
 	data := ComposeTplData(u)
-	data["Code"] = code
-	body, err := r.HTMLString(string(AUTH_RESET_PASSWORD), data)
+	data["Code"] = u.GenerateActivateCode()
+	body, err := c.HTMLString(string(AUTH_RESET_PASSWORD), data)
 	if err != nil {
-		log.Error(4, "mail.SendResetPasswdMail(fail to render): %v", err)
+		log.Error(4, "HTMLString: %v", err)
 		return
 	}
 
-	msg := NewMessage([]string{u.Email}, subject, body)
-	msg.Info = fmt.Sprintf("UID: %d, send reset password email", u.Id)
+	msg := NewMessage([]string{u.Email}, c.Tr("mail.reset_password"), body)
+	msg.Info = fmt.Sprintf("UID: %d, reset password", u.Id)
 
 	SendAsync(msg)
 }
@@ -120,7 +116,7 @@ func SendIssueNotifyMail(u, owner *models.User, repo *models.Repository, issue *
 	content := fmt.Sprintf("%s<br>-<br> <a href=\"%s%s/%s/issues/%d\">View it on Gogs</a>.",
 		base.RenderSpecialLink([]byte(issue.Content), owner.Name+"/"+repo.Name),
 		setting.AppUrl, owner.Name, repo.Name, issue.Index)
-	msg := NewMessageFrom(tos, u.Email, subject, content)
+	msg := NewMessage(tos, subject, content)
 	msg.Info = fmt.Sprintf("Subject: %s, send issue notify emails", subject)
 	SendAsync(msg)
 	return tos, nil
@@ -145,7 +141,7 @@ func SendIssueMentionMail(r macaron.Render, u, owner *models.User,
 		return fmt.Errorf("mail.SendIssueMentionMail(fail to render): %v", err)
 	}
 
-	msg := NewMessageFrom(tos, u.Email, subject, body)
+	msg := NewMessage(tos, subject, body)
 	msg.Info = fmt.Sprintf("Subject: %s, send issue mention emails", subject)
 	SendAsync(msg)
 	return nil

Разница между файлами не показана из-за своего большого размера
+ 1 - 1
public/css/gogs.min.css


+ 4 - 2
public/less/_form.less

@@ -47,8 +47,10 @@
 }
 
 .user.activate,
-.signin,
-.signup {
+.user.forgot.password,
+.user.reset.password,
+.user.signin,
+.user.signup {
 	@input-padding: 200px!important;
 	#create-page-form;
 	form {

+ 5 - 4
routers/user/auth.go

@@ -327,7 +327,7 @@ func ActivateEmail(ctx *middleware.Context) {
 		}
 
 		log.Trace("Email activated: %s", email.Email)
-		ctx.Flash.Success(ctx.Tr("settings.activate_email_success"))
+		ctx.Flash.Success(ctx.Tr("settings.add_email_successs"))
 	}
 
 	ctx.Redirect(setting.AppSubUrl + "/user/settings/email")
@@ -351,12 +351,14 @@ func ForgotPasswdPost(ctx *middleware.Context) {
 	ctx.Data["Title"] = ctx.Tr("auth.forgot_password")
 
 	if setting.MailService == nil {
-		ctx.Handle(403, "user.ForgotPasswdPost", nil)
+		ctx.Handle(403, "ForgotPasswdPost", nil)
 		return
 	}
 	ctx.Data["IsResetRequest"] = true
 
 	email := ctx.Query("email")
+	ctx.Data["Email"] = email
+
 	u, err := models.GetUserByEmail(email)
 	if err != nil {
 		if models.IsErrUserNotExist(err) {
@@ -374,12 +376,11 @@ func ForgotPasswdPost(ctx *middleware.Context) {
 		return
 	}
 
-	mailer.SendResetPasswdMail(ctx.Render, u)
+	mailer.SendResetPasswordMail(ctx.Context, u)
 	if err = ctx.Cache.Put("MailResendLimit_"+u.LowerName, u.LowerName, 180); err != nil {
 		log.Error(4, "Set cache(MailResendLimit) fail: %v", err)
 	}
 
-	ctx.Data["Email"] = email
 	ctx.Data["Hours"] = setting.Service.ActiveCodeLives / 60
 	ctx.Data["IsResetSent"] = true
 	ctx.HTML(200, FORGOT_PASSWORD)

+ 12 - 27
templates/mail/auth/activate_email.tmpl

@@ -1,30 +1,15 @@
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<title>{{.User.Name}}, please activate your e-mail address</title>
+<!DOCTYPE html>
+<html>  
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+  <title>{{.User.Name}}, please verify your e-mail address</title>
 </head>
-<body style="background:#eee;">
-<div style="color:#333; font:12px/1.5 Tahoma,Arial,sans-serif;; text-shadow:1px 1px #fff; padding:0; margin:0;">
-    <div style="width:600px;margin:0 auto; padding:40px 0 20px;">
-        <div style="border:1px solid #d9d9d9;border-radius:3px; background:#fff; box-shadow: 0px 2px 5px rgba(0, 0, 0,.05); -webkit-box-shadow: 0px 2px 5px rgba(0, 0, 0,.05);">
-            <div style="padding: 20px 15px;">
-                <h1 style="font-size:20px; padding:10px 0 20px; margin:0; border-bottom:1px solid #ddd;"><img src="{{.AppUrl}}/img/favicon.png" style="height: 32px; margin-bottom: -10px;"> <a style="color:#333;text-decoration:none;" target="_blank" href="{{.AppUrl}}">{{.AppName}}</a></h1>
-                <div style="padding:40px 15px;">
-                    <div style="font-size:16px; padding-bottom:30px; font-weight:bold;">
-                        Hi <span style="color: #00BFFF;">{{.User.Name}}</span>,
-                    </div>
-                    <div style="font-size:14px; padding:0 15px;">
-						<p style="margin:0;padding:0 0 9px 0;">Please click the following link to verify your e-mail address within <b>{{.ActiveCodeLives}} hours</b>.</p>
-						<p style="margin:0;padding:0 0 9px 0;">
-							<a href="{{.AppUrl}}user/activate_email?code={{.Code}}&email={{.Email}}">{{.AppUrl}}user/activate_email?code={{.Code}}&email={{.Email}}</a>
-						</p>
-						<p style="margin:0;padding:0 0 9px 0;">Not working? Try copying and pasting it to your browser.</p>
-                    </div>
-                </div>
-            </div>
-        </div>
-        <div style="color:#aaa;padding:10px;text-align:center;">
-            © 2014 <a style="color:#888;text-decoration:none;" target="_blank" href="http://gogits.org">Gogs: Go Git Service</a>
-        </div>
-    </div>
-</div>
+
+<body>
+  <p>Hi <b>{{.User.Name}}</b>,</p>
+  <p>Please click the following link to verify your e-mail address within <b>{{.ActiveCodeLives}} hours</b>:</p>
+  <p><a href="{{.AppUrl}}user/activate_email?code={{.Code}}&email={{.Email}}">{{.AppUrl}}user/activate_email?code={{.Code}}&email={{.Email}}</a></p>
+  <p>Not working? Try copying and pasting it to your browser.</p>
+  <p>© 2015 <a target="_blank" href="http://gogs.io">Gogs: Go Git Service</a></p>
 </body>
 </html>

+ 11 - 29
templates/mail/auth/reset_passwd.tmpl

@@ -1,33 +1,15 @@
 <!DOCTYPE html>
-<html>
+<html>  
 <head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<title>{{.User.Name}}, please reset your password</title>
+  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+  <title>{{.User.Name}}, you have requested to reset your password</title>
 </head>
-<body style="background:#eee;">
-<div style="color:#333; font:12px/1.5 Tahoma,Arial,sans-serif;; text-shadow:1px 1px #fff; padding:0; margin:0;">
-    <div style="width:600px;margin:0 auto; padding:40px 0 20px;">
-        <div style="border:1px solid #d9d9d9;border-radius:3px; background:#fff; box-shadow: 0px 2px 5px rgba(0, 0, 0,.05); -webkit-box-shadow: 0px 2px 5px rgba(0, 0, 0,.05);">
-            <div style="padding: 20px 15px;">
-                <h1 style="font-size:20px; padding:10px 0 20px; margin:0; border-bottom:1px solid #ddd;"><img src="{{.AppUrl}}/img/favicon.png" style="height: 32px; margin-bottom: -10px;"> <a style="color:#333;text-decoration:none;" target="_blank" href="{{.AppUrl}}">{{.AppName}}</a></h1>
-                <div style="padding:40px 15px;">
-                    <div style="font-size:16px; padding-bottom:30px; font-weight:bold;">
-                        Hi <span style="color: #00BFFF;">{{.User.Name}}</span>,
-                    </div>
-                    <div style="font-size:14px; padding:0 15px;">
-						<p style="margin:0;padding:0 0 9px 0;">Please click the following link to reset your password within <b>{{.ActiveCodeLives}} hours</b>.</p>
-						<p style="margin:0;padding:0 0 9px 0;">
-							<a href="{{.AppUrl}}user/reset_password?code={{.Code}}">{{.AppUrl}}user/reset_password?code={{.Code}}</a>
-						</p>
-						<p style="margin:0;padding:0 0 9px 0;">Not working? Try copying and pasting it to your browser.</p>
-                    </div>
-                </div>
-            </div>
-        </div>
-        <div style="color:#aaa;padding:10px;text-align:center;">
-            © 2014 <a style="color:#888;text-decoration:none;" target="_blank" href="http://gogits.org">Gogs: Go Git Service</a>
-        </div>
-    </div>
-</div>
+
+<body>
+  <p>Hi <b>{{.User.Name}}</b>,</p>
+  <p>Please click the following link to verify your e-mail address within <b>{{.ActiveCodeLives}} hours</b>:</p>
+  <p><a href="{{.AppUrl}}user/reset_password?code={{.Code}}">{{.AppUrl}}user/reset_password?code={{.Code}}</a></p>
+  <p>Not working? Try copying and pasting it to your browser.</p>
+  <p>© 2015 <a target="_blank" href="http://gogs.io">Gogs: Go Git Service</a></p>
 </body>
-</html>
+</html>

+ 19 - 18
templates/user/auth/activate.tmpl

@@ -8,33 +8,34 @@
           {{.i18n.Tr "auth.active_your_account"}}
         </h2>
         <div class="ui attached segment">
+          {{template "base/alert" .}}
           {{if .IsActivatePage}}
             {{if .ServiceNotEnabled}}
-            <p>{{.i18n.Tr "auth.disable_register_mail"}}</p>
+              <p class="center">{{.i18n.Tr "auth.disable_register_mail"}}</p>
             {{else if .ResendLimited}}
-            <p>{{.i18n.Tr "auth.resent_limit_prompt"}}</p>
+              <p class="center">{{.i18n.Tr "auth.resent_limit_prompt"}}</p>
             {{else}}
-            <p>{{.i18n.Tr "auth.confirmation_mail_sent_prompt" .SignedUser.Email .Hours | Str2html}}</p>
-            <div class="ui divider"></div>
-            <div class="text right">
-              <a class="ui green button" href="http://{{Mail2Domain .SignedUser.Email}}">{{.i18n.Tr "auth.sign_in_to_account"}}</a>
-            </div>
+              <p>{{.i18n.Tr "auth.confirmation_mail_sent_prompt" .SignedUser.Email .Hours | Str2html}}</p>
+              <div class="ui divider"></div>
+              <div class="text right">
+                <a class="ui green button" href="http://{{Mail2Domain .SignedUser.Email}}">{{.i18n.Tr "auth.sign_in_to_account"}}</a>
+              </div>
             {{end}}
           {{else}}
             {{if .IsSendRegisterMail}}
-            <p>{{.i18n.Tr "auth.confirmation_mail_sent_prompt" .Email .Hours | Str2html}}</p>
-            <div class="ui divider"></div>
-            <div class="text right">
-              <a class="ui green button" href="http://{{Mail2Domain .Email}}">{{.i18n.Tr "auth.sign_in_to_account"}}</a>
-            </div>
+              <p>{{.i18n.Tr "auth.confirmation_mail_sent_prompt" .Email .Hours | Str2html}}</p>
+              <div class="ui divider"></div>
+              <div class="text right">
+                <a class="ui green button" href="http://{{Mail2Domain .Email}}">{{.i18n.Tr "auth.sign_in_to_account"}}</a>
+              </div>
             {{else if .IsActivateFailed}}
-            <p>{{.i18n.Tr "auth.invalid_code"}}</p>
+              <p>{{.i18n.Tr "auth.invalid_code"}}</p>
             {{else}}
-            <p>{{.i18n.Tr "auth.has_unconfirmed_mail" .SignedUser.Name .SignedUser.Email | Str2html}}</p>
-            <div class="ui divider"></div>
-            <div class="text right">
-              <button class="ui blue button" href="http://{{Mail2Domain .SignedUser.Email}}">{{.i18n.Tr "auth.resend_mail"}}</button>
-            </div>
+              <p>{{.i18n.Tr "auth.has_unconfirmed_mail" .SignedUser.Name .SignedUser.Email | Str2html}}</p>
+              <div class="ui divider"></div>
+              <div class="text right">
+                <button class="ui blue button">{{.i18n.Tr "auth.resend_mail"}}</button>
+              </div>
             {{end}}
           {{end}}
         </div>

+ 33 - 27
templates/user/auth/forgot_passwd.tmpl

@@ -1,32 +1,38 @@
-{{template "ng/base/head" .}}
-{{template "ng/base/header" .}}
-<div id="sign-wrapper">
-    <form class="form-align form panel sign-panel sign-form container panel-radius" id="sign-up-form" action="{{AppSubUrl}}/user/forget_password" method="post">
+{{template "base/head" .}}
+<div class="user forgot password">
+  <div class="ui middle very relaxed page grid">
+    <div class="column">
+      <form class="ui form" action="{{.Link}}" method="post">
         {{.CsrfTokenHtml}}
-        <div class="panel-header">
-            <h2>{{.i18n.Tr "auth.forgot_password"}}</h2>
-        </div>
-        <div class="panel-content">
-            {{template "ng/base/alert" .}}
-            {{if .IsResetSent}}
+        <h2 class="ui top attached header">
+          {{.i18n.Tr "auth.forgot_password"}}
+        </h2>
+        <div class="ui attached segment">
+          {{template "base/alert" .}}
+          {{if .IsResetSent}}
             <p>{{.i18n.Tr "auth.confirmation_mail_sent_prompt" .Email .Hours | Str2html}}</p>
-            <hr/>
-            <label></label>
-            <a class="btn btn-green btn-large btn-link btn-radius" href="http://{{Mail2Domain .Email}}">{{.i18n.Tr "auth.sign_in_email"}}</a>
-            {{else if .IsResetRequest}}
-            <div class="field">
-                <label class="req" for="email">{{.i18n.Tr "email"}}</label>
-                <input class="ipt ipt-large ipt-radius {{if .Err_Email}}ipt-error{{end}}" id="email" name="email" type="email"  value="{{.email}}"required/>
+            <div class="ui divider"></div>
+            <div class="text right">
+              <a class="ui green button" href="http://{{Mail2Domain .Email}}">{{.i18n.Tr "auth.sign_in_to_account"}}</a>
+            </div>
+          {{else if .IsResetRequest}}
+            <div class="required inline field {{if .Err_Email}}error{{end}}">
+                <label for="email">{{.i18n.Tr "email"}}</label>
+                <input id="email" name="email" type="email"  value="{{.Email}}" autofocus required>
+            </div>
+            <div class="ui divider"></div>
+            <div class="inline field">
+              <label></label>
+              <button class="ui blue button">{{.i18n.Tr "auth.send_reset_mail"}}</button>
             </div>
-            <hr/>
-            <label></label>
-            <button class="btn btn-blue btn-large btn-radius">{{.i18n.Tr "auth.send_reset_mail"}}</button>
-            {{else if .IsResetDisable}}
-            <p>{{.i18n.Tr "auth.disable_register_mail"}}</p>
-            {{else if .ResendLimited}}
-            <p>{{.i18n.Tr "auth.resent_limit_prompt"}}</p>
-            {{end}}
+          {{else if .IsResetDisable}}
+            <p class="center">{{.i18n.Tr "auth.disable_register_mail"}}</p>
+          {{else if .ResendLimited}}
+            <p class="center">{{.i18n.Tr "auth.resent_limit_prompt"}}</p>
+          {{end}}
         </div>
-    </form>
+      </form>
+    </div>
+  </div>
 </div>
-{{template "ng/base/footer" .}}
+{{template "base/footer" .}}

+ 27 - 21
templates/user/auth/reset_passwd.tmpl

@@ -1,25 +1,31 @@
-{{template "ng/base/head" .}}
-{{template "ng/base/header" .}}
-<div id="sign-wrapper">
-    <form class="form-align form panel sign-panel sign-form container panel-radius" id="sign-up-form" action="{{AppSubUrl}}/user/reset_password?code={{.Code}}" method="post">
+{{template "base/head" .}}
+<div class="user reset password">
+  <div class="ui middle very relaxed page grid">
+    <div class="column">
+      <form class="ui form" action="{{.Link}}" method="post">
         {{.CsrfTokenHtml}}
-        <div class="panel-header">
-            <h2>{{.i18n.Tr "auth.reset_password"}}</h2>
-        </div>
-        <div class="panel-content">
-            {{template "ng/base/alert" .}}
-            {{if .IsResetForm}}
-            <div class="field">
-                <label class="req" for="password">{{.i18n.Tr "password"}}</label>
-                <input class="ipt ipt-large ipt-radius {{if .Err_Password}}ipt-error{{end}}" id="password" name="password" type="password" value="{{.password}}" required/>
+        <input name="code" type="hidden" value="{{.Code}}">
+        <h2 class="ui top attached header">
+          {{.i18n.Tr "auth.reset_password"}}
+        </h2>
+        <div class="ui attached segment">
+          {{template "base/alert" .}}
+          {{if .IsResetForm}}
+            <div class="required inline field {{if .Err_Password}}error{{end}}">
+              <label for="password">{{.i18n.Tr "password"}}</label>
+              <input id="password" name="password" type="password"  value="{{.password}}" autofocus required>
+            </div>
+            <div class="ui divider"></div>
+            <div class="inline field">
+              <label></label>
+              <button class="ui blue button">{{.i18n.Tr "auth.reset_password_helper"}}</button>
             </div>
-            <hr/>
-            <label></label>
-            <button class="btn btn-blue btn-large btn-radius">{{.i18n.Tr "auth.reset_password_helper"}}</button>
-            {{else}}
-            <p>{{.i18n.Tr "auth.invalid_code"}}</p>
-            {{end}}
+          {{else}}
+            <p class="center">{{.i18n.Tr "auth.invalid_code"}}</p>
+          {{end}}
         </div>
-    </form>
+      </form>
+    </div>
+  </div>
 </div>
-{{template "ng/base/footer" .}}
+{{template "base/footer" .}}

+ 1 - 1
templates/user/auth/signin.tmpl

@@ -1,5 +1,5 @@
 {{template "base/head" .}}
-<div class="signin">
+<div class="user signin">
   <div class="ui middle very relaxed page grid">
     <div class="column">
       <form class="ui form" action="{{.Link}}" method="post">

+ 1 - 1
templates/user/auth/signup.tmpl

@@ -1,5 +1,5 @@
 {{template "base/head" .}}
-<div class="signup">
+<div class="user signup">
   <div class="ui middle very relaxed page grid">
     <div class="column">
       <form class="ui form" action="{{.Link}}" method="post">