Browse Source

#1525 Triggere mailer for admin created accounts

Unknwon 9 năm trước cách đây
mục cha
commit
21e13cb51e

+ 1 - 0
conf/locale/locale_en-US.ini

@@ -788,6 +788,7 @@ users.activated = Activated
 users.admin = Admin
 users.repos = Repos
 users.created = Created
+users.send_register_notify = Send Registration Notification To User
 users.new_success = New account '%s' has been created successfully.
 users.edit = Edit
 users.auth_source = Authentication Source

+ 6 - 5
modules/auth/admin.go

@@ -11,11 +11,12 @@ import (
 )
 
 type AdminCrateUserForm struct {
-	LoginType string `binding:"Required"`
-	LoginName string
-	UserName  string `binding:"Required;AlphaDashDot;MaxSize(35)"`
-	Email     string `binding:"Required;Email;MaxSize(254)"`
-	Password  string `binding:"MaxSize(255)"`
+	LoginType  string `binding:"Required"`
+	LoginName  string
+	UserName   string `binding:"Required;AlphaDashDot;MaxSize(35)"`
+	Email      string `binding:"Required;Email;MaxSize(254)"`
+	Password   string `binding:"MaxSize(255)"`
+	SendNotify bool
 }
 
 func (f *AdminCrateUserForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors {

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
modules/bindata/bindata.go


+ 18 - 4
modules/mailer/mail.go

@@ -17,10 +17,10 @@ import (
 )
 
 const (
-	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"
+	AUTH_ACTIVATE        base.TplName = "mail/auth/activate"
+	AUTH_ACTIVATE_EMAIL  base.TplName = "mail/auth/activate_email"
+	AUTH_REGISTER_NOTIFY base.TplName = "mail/auth/register_notify"
+	AUTH_RESET_PASSWORD  base.TplName = "mail/auth/reset_passwd"
 
 	NOTIFY_COLLABORATOR base.TplName = "mail/notify/collaborator"
 	NOTIFY_MENTION      base.TplName = "mail/notify/mention"
@@ -64,6 +64,20 @@ func SendResetPasswordMail(c *macaron.Context, u *models.User) {
 	SendUserMail(c, u, AUTH_RESET_PASSWORD, u.GenerateActivateCode(), c.Tr("mail.reset_password"), "reset password")
 }
 
+// SendRegisterNotifyMail triggers a notify e-mail by admin created a account.
+func SendRegisterNotifyMail(c *macaron.Context, u *models.User) {
+	body, err := c.HTMLString(string(AUTH_REGISTER_NOTIFY), ComposeTplData(u))
+	if err != nil {
+		log.Error(4, "HTMLString: %v", err)
+		return
+	}
+
+	msg := NewMessage([]string{u.Email}, c.Tr("mail.register_notify"), body)
+	msg.Info = fmt.Sprintf("UID: %d, registration notify", u.Id)
+
+	SendAsync(msg)
+}
+
 // SendActivateAccountMail sends confirmation e-mail.
 func SendActivateEmailMail(c *macaron.Context, u *models.User, email *models.EmailAddress) {
 	data := ComposeTplData(u)

+ 10 - 0
routers/admin/users.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"
 )
@@ -60,6 +61,8 @@ func NewUser(ctx *middleware.Context) {
 		return
 	}
 	ctx.Data["Sources"] = sources
+
+	ctx.Data["CanSendEmail"] = setting.MailService != nil
 	ctx.HTML(200, USER_NEW)
 }
 
@@ -75,6 +78,8 @@ func NewUserPost(ctx *middleware.Context, form auth.AdminCrateUserForm) {
 	}
 	ctx.Data["Sources"] = sources
 
+	ctx.Data["CanSendEmail"] = setting.MailService != nil
+
 	if ctx.HasError() {
 		ctx.HTML(200, USER_NEW)
 		return
@@ -118,6 +123,11 @@ func NewUserPost(ctx *middleware.Context, form auth.AdminCrateUserForm) {
 	}
 	log.Trace("Account created by admin(%s): %s", ctx.User.Name, u.Name)
 
+	// Send e-mail notification.
+	if form.SendNotify && setting.MailService != nil {
+		mailer.SendRegisterNotifyMail(ctx.Context, u)
+	}
+
 	ctx.Flash.Success(ctx.Tr("admin.users.new_success", u.Name))
 	ctx.Redirect(setting.AppSubUrl + "/admin/users/" + com.ToStr(u.Id))
 }

+ 32 - 33
templates/admin/notice.tmpl

@@ -20,43 +20,42 @@
               </tr>
             </thead>
             <tbody>
-               {{range .Notices}}
-               <tr>
-		<td>{{.Id}}</td>
-		<td>{{$.i18n.Tr .TrStr}}</td>
-		<td><span>{{.Description}}</span></td>
-		<td>{{.Created}}</td>
-		<td><a href="{{AppSubUrl}}/admin/notices/{{.Id}}/delete"><i class="fa fa-trash-o text-red"></i></a></td>
-               </tr>
-               {{end}}
+              {{range .Notices}}
+              <tr>
+                <td>{{.Id}}</td>
+                <td>{{$.i18n.Tr .TrStr}}</td>
+                <td><span>{{.Description}}</span></td>
+                <td>{{.Created}}</td>
+                <td><a href="{{AppSubUrl}}/admin/notices/{{.Id}}/delete"><i class="fa fa-trash-o text-red"></i></a></td>
+              </tr>
+              {{end}}
             </tbody>
           </table>
-	</div>
-
-	{{with .Page}}
-	  {{if gt .TotalPages 1}}
-	    <div class="center page buttons">
-	      <div class="ui borderless pagination menu">
-		<a class="{{if .IsFirst}}disabled{{end}} item" href="{{$.Link}}"><i class="angle double left icon"></i> {{$.i18n.Tr "admin.first_page"}}</a>
-                <a class="{{if not .HasPrevious}}disabled{{end}} item" {{if .HasPrevious}}href="{{$.Link}}?page={{.Previous}}"{{end}}>
-                  <i class="left arrow icon"></i> {{$.i18n.Tr "repo.issues.previous"}}
-                </a>
-                {{range .Pages}}
-                      {{if eq .Num -1}}
-                        <a class="disabled item">...</a>
-                      {{else}}
-                        <a class="{{if .IsCurrent}}active{{end}} item" {{if not .IsCurrent}}href="{{$.Link}}?page={{.Num}}"{{end}}>{{.Num}}</a>
-                      {{end}}
-                {{end}}
-                <a class="{{if not .HasNext}}disabled{{end}} item" {{if .HasNext}}href="{{$.Link}}?page={{.Next}}"{{end}}>
-		      {{$.i18n.Tr "repo.issues.next"}}&nbsp;<i class="icon right arrow"></i>
-                </a>
-		<a class="{{if .IsLast}}disabled{{end}} item" href="{{$.Link}}?page={{.TotalPages}}">{{$.i18n.Tr "admin.last_page"}}&nbsp;<i class="angle double right icon"></i></a>
 	      </div>
-	    </div>
-          {{end}}
-	{{end}}
 
+	      {{with .Page}}
+        {{if gt .TotalPages 1}}
+        <div class="center page buttons">
+          <div class="ui borderless pagination menu">
+            <a class="{{if .IsFirst}}disabled{{end}} item" href="{{$.Link}}"><i class="angle double left icon"></i> {{$.i18n.Tr "admin.first_page"}}</a>
+            <a class="{{if not .HasPrevious}}disabled{{end}} item" {{if .HasPrevious}}href="{{$.Link}}?page={{.Previous}}"{{end}}>
+              <i class="left arrow icon"></i> {{$.i18n.Tr "repo.issues.previous"}}
+            </a>
+            {{range .Pages}}
+            {{if eq .Num -1}}
+            <a class="disabled item">...</a>
+            {{else}}
+            <a class="{{if .IsCurrent}}active{{end}} item" {{if not .IsCurrent}}href="{{$.Link}}?page={{.Num}}"{{end}}>{{.Num}}</a>
+            {{end}}
+            {{end}}
+            <a class="{{if not .HasNext}}disabled{{end}} item" {{if .HasNext}}href="{{$.Link}}?page={{.Next}}"{{end}}>
+              {{$.i18n.Tr "repo.issues.next"}}&nbsp;<i class="icon right arrow"></i>
+            </a>
+            <a class="{{if .IsLast}}disabled{{end}} item" href="{{$.Link}}?page={{.TotalPages}}">{{$.i18n.Tr "admin.last_page"}}&nbsp;<i class="angle double right icon"></i></a>
+          </div>
+        </div>
+        {{end}}
+        {{end}}
       </div>
     </div>
   </div>

+ 55 - 58
templates/admin/org/list.tmpl

@@ -2,65 +2,62 @@
 <div class="admin user">
   <div class="ui container">
     <div class="ui grid">
-      {{template "admin/navbar" .}}
-      <div class="twelve wide column content">
-        {{template "base/alert" .}}
-        <h4 class="ui top attached header">
-          {{.i18n.Tr "admin.orgs.org_manage_panel"}} ({{.i18n.Tr "admin.total" .Total}})
-        </h4>
-        <div class="ui attached table segment">
-          <table class="ui very basic striped table">
-			<thead>
-			  <tr>
-			    <th>ID</th>
-			    <th>{{.i18n.Tr "admin.orgs.name"}}</th>
-			    <th>{{.i18n.Tr "email"}}</th>
-			    <th>{{.i18n.Tr "admin.orgs.teams"}}</th>
-			    <th>{{.i18n.Tr "admin.orgs.members"}}</th>
-			    <th>{{.i18n.Tr "admin.users.repos"}}</th>
-				<th>{{.i18n.Tr "admin.users.created"}}</th>
-			  </tr>
-			</thead>
-			<tbody>
-			  {{range .Orgs}}
-			  <tr>
-			    <td>{{.Id}}</td>
-			    <td><a href="{{AppSubUrl}}/org/{{.Name}}">{{.Name}}</a></td>
-			    <td>{{.Email}}</td>
-			    <td>{{.NumTeams}}</td>
-			    <td>{{.NumMembers}}</td>
-			    <td>{{.NumRepos}}</td>
-			    <td><span title="{{DateFmtLong .Created}}">{{DateFmtShort .Created}}</span></td>
-			  </tr>
-			  {{end}}
-			</tbody>
-		  </table>
-	</div>
-
-	{{with .Page}}
-	  {{if gt .TotalPages 1}}
-	    <div class="center page buttons">
-	      <div class="ui borderless pagination menu">
-		<a class="{{if .IsFirst}}disabled{{end}} item" href="{{$.Link}}"><i class="angle double left icon"></i> {{$.i18n.Tr "admin.first_page"}}</a>
-                <a class="{{if not .HasPrevious}}disabled{{end}} item" {{if .HasPrevious}}href="{{$.Link}}?page={{.Previous}}"{{end}}>
-                  <i class="left arrow icon"></i> {{$.i18n.Tr "repo.issues.previous"}}
-                </a>
-                {{range .Pages}}
-                      {{if eq .Num -1}}
-                        <a class="disabled item">...</a>
-                      {{else}}
-                        <a class="{{if .IsCurrent}}active{{end}} item" {{if not .IsCurrent}}href="{{$.Link}}?page={{.Num}}"{{end}}>{{.Num}}</a>
-                      {{end}}
-                {{end}}
-                <a class="{{if not .HasNext}}disabled{{end}} item" {{if .HasNext}}href="{{$.Link}}?page={{.Next}}"{{end}}>
-		      {{$.i18n.Tr "repo.issues.next"}}&nbsp;<i class="icon right arrow"></i>
-                </a>
-		<a class="{{if .IsLast}}disabled{{end}} item" href="{{$.Link}}?page={{.TotalPages}}">{{$.i18n.Tr "admin.last_page"}}&nbsp;<i class="angle double right icon"></i></a>
-	      </div>
-	    </div>
-          {{end}}
-	{{end}}
+	    {{template "admin/navbar" .}}
+	    <div class="twelve wide column content">
+	      {{template "base/alert" .}}
+	      <h4 class="ui top attached header">
+	        {{.i18n.Tr "admin.orgs.org_manage_panel"}} ({{.i18n.Tr "admin.total" .Total}})
+	      </h4>
+	      <div class="ui attached table segment">
+	        <table class="ui very basic striped table">
+						<thead>
+						  <tr>
+						    <th>ID</th>
+						    <th>{{.i18n.Tr "admin.orgs.name"}}</th>
+						    <th>{{.i18n.Tr "admin.orgs.teams"}}</th>
+						    <th>{{.i18n.Tr "admin.orgs.members"}}</th>
+						    <th>{{.i18n.Tr "admin.users.repos"}}</th>
+								<th>{{.i18n.Tr "admin.users.created"}}</th>
+						  </tr>
+						</thead>
+						<tbody>
+						  {{range .Orgs}}
+						  <tr>
+						    <td>{{.Id}}</td>
+						    <td><a href="{{AppSubUrl}}/org/{{.Name}}">{{.Name}}</a></td>
+						    <td>{{.NumTeams}}</td>
+						    <td>{{.NumMembers}}</td>
+						    <td>{{.NumRepos}}</td>
+						    <td><span title="{{DateFmtLong .Created}}">{{DateFmtShort .Created}}</span></td>
+						  </tr>
+						  {{end}}
+						</tbody>
+				  </table>
+				</div>
 
+				{{with .Page}}
+			  {{if gt .TotalPages 1}}
+		    <div class="center page buttons">
+		      <div class="ui borderless pagination menu">
+						<a class="{{if .IsFirst}}disabled{{end}} item" href="{{$.Link}}"><i class="angle double left icon"></i> {{$.i18n.Tr "admin.first_page"}}</a>
+	          <a class="{{if not .HasPrevious}}disabled{{end}} item" {{if .HasPrevious}}href="{{$.Link}}?page={{.Previous}}"{{end}}>
+	            <i class="left arrow icon"></i> {{$.i18n.Tr "repo.issues.previous"}}
+	          </a>
+	          {{range .Pages}}
+	          {{if eq .Num -1}}
+	          <a class="disabled item">...</a>
+	          {{else}}
+	          <a class="{{if .IsCurrent}}active{{end}} item" {{if not .IsCurrent}}href="{{$.Link}}?page={{.Num}}"{{end}}>{{.Num}}</a>
+	          {{end}}
+	          {{end}}
+	          <a class="{{if not .HasNext}}disabled{{end}} item" {{if .HasNext}}href="{{$.Link}}?page={{.Next}}"{{end}}>
+	    			{{$.i18n.Tr "repo.issues.next"}}&nbsp;<i class="icon right arrow"></i>
+	          </a>
+						<a class="{{if .IsLast}}disabled{{end}} item" href="{{$.Link}}?page={{.TotalPages}}">{{$.i18n.Tr "admin.last_page"}}&nbsp;<i class="angle double right icon"></i></a>
+		      </div>
+		    </div>
+		    {{end}}
+				{{end}}
       </div>
     </div>
   </div>

+ 64 - 65
templates/admin/repo/list.tmpl

@@ -1,70 +1,69 @@
 {{template "base/head" .}}
 <div class="admin user">
-  <div class="ui container">
-    <div class="ui grid">
-      {{template "admin/navbar" .}}
-      <div class="twelve wide column content">
-        {{template "base/alert" .}}
-        <h4 class="ui top attached header">
-          {{.i18n.Tr "admin.repos.repo_manage_panel"}} ({{.i18n.Tr "admin.total" .Total}})
-        </h4>
-        <div class="ui attached table segment">
-          <table class="ui very basic striped table">
-			<thead>
-			  <tr>
-			    <th>ID</th>
-				<th>{{.i18n.Tr "admin.repos.owner"}}</th>
-				<th>{{.i18n.Tr "admin.repos.name"}}</th>
-				<th>{{.i18n.Tr "admin.repos.private"}}</th>
-				<th>{{.i18n.Tr "admin.repos.watches"}}</th>
-				<th>{{.i18n.Tr "admin.repos.stars"}}</th>
-				<th>{{.i18n.Tr "admin.repos.issues"}}</th>
-				<th>{{.i18n.Tr "admin.users.created"}}</th>
-			  </tr>
-			</thead>
-			<tbody>
-			  {{range .Repos}}
-				<tr>
-				  <td>{{.ID}}</td>
-				  <td><a href="{{AppSubUrl}}/{{.Owner.Name}}">{{.Owner.Name}}</a></td>
-                  <td><a href="{{AppSubUrl}}/{{.Owner.Name}}/{{.Name}}">{{.Name}}</a></td>
-			      <td><i class="fa fa{{if .IsPrivate}}-check{{end}}-square-o"></i></td>
-				  <td>{{.NumWatches}}</td>
-				  <td>{{.NumStars}}</td>
-			      <td>{{.NumIssues}}</td>
-				  <td><span title="{{DateFmtLong .Created}}">{{DateFmtShort .Created}}</span></td>
-				</tr>
-			  {{end}}
-			</tbody>
-		  </table>
-	</div>
-
-	{{with .Page}}
-	  {{if gt .TotalPages 1}}
-	    <div class="center page buttons">
-	      <div class="ui borderless pagination menu">
-		<a class="{{if .IsFirst}}disabled{{end}} item" href="{{$.Link}}"><i class="angle double left icon"></i> {{$.i18n.Tr "admin.first_page"}}</a>
-                <a class="{{if not .HasPrevious}}disabled{{end}} item" {{if .HasPrevious}}href="{{$.Link}}?page={{.Previous}}"{{end}}>
-                  <i class="left arrow icon"></i> {{$.i18n.Tr "repo.issues.previous"}}
-                </a>
-                {{range .Pages}}
-                      {{if eq .Num -1}}
-                        <a class="disabled item">...</a>
-                      {{else}}
-                        <a class="{{if .IsCurrent}}active{{end}} item" {{if not .IsCurrent}}href="{{$.Link}}?page={{.Num}}"{{end}}>{{.Num}}</a>
-                      {{end}}
-                {{end}}
-                <a class="{{if not .HasNext}}disabled{{end}} item" {{if .HasNext}}href="{{$.Link}}?page={{.Next}}"{{end}}>
-		      {{$.i18n.Tr "repo.issues.next"}}&nbsp;<i class="icon right arrow"></i>
-                </a>
-		<a class="{{if .IsLast}}disabled{{end}} item" href="{{$.Link}}?page={{.TotalPages}}">{{$.i18n.Tr "admin.last_page"}}&nbsp;<i class="angle double right icon"></i></a>
-	      </div>
-	    </div>
-          {{end}}
-	{{end}}
+	<div class="ui container">
+		<div class="ui grid">
+			{{template "admin/navbar" .}}
+			<div class="twelve wide column content">
+				{{template "base/alert" .}}
+				<h4 class="ui top attached header">
+				{{.i18n.Tr "admin.repos.repo_manage_panel"}} ({{.i18n.Tr "admin.total" .Total}})
+				</h4>
+				<div class="ui attached table segment">
+					<table class="ui very basic striped table">
+						<thead>
+							<tr>
+								<th>ID</th>
+								<th>{{.i18n.Tr "admin.repos.owner"}}</th>
+								<th>{{.i18n.Tr "admin.repos.name"}}</th>
+								<th>{{.i18n.Tr "admin.repos.private"}}</th>
+								<th>{{.i18n.Tr "admin.repos.watches"}}</th>
+								<th>{{.i18n.Tr "admin.repos.stars"}}</th>
+								<th>{{.i18n.Tr "admin.repos.issues"}}</th>
+								<th>{{.i18n.Tr "admin.users.created"}}</th>
+							</tr>
+						</thead>
+						<tbody>
+							{{range .Repos}}
+							<tr>
+								<td>{{.ID}}</td>
+								<td><a href="{{AppSubUrl}}/{{.Owner.Name}}">{{.Owner.Name}}</a></td>
+								<td><a href="{{AppSubUrl}}/{{.Owner.Name}}/{{.Name}}">{{.Name}}</a></td>
+								<td><i class="fa fa{{if .IsPrivate}}-check{{end}}-square-o"></i></td>
+								<td>{{.NumWatches}}</td>
+								<td>{{.NumStars}}</td>
+								<td>{{.NumIssues}}</td>
+								<td><span title="{{DateFmtLong .Created}}">{{DateFmtShort .Created}}</span></td>
+							</tr>
+							{{end}}
+						</tbody>
+					</table>
+				</div>
 
-      </div>
-    </div>
-  </div>
+				{{with .Page}}
+				{{if gt .TotalPages 1}}
+				<div class="center page buttons">
+					<div class="ui borderless pagination menu">
+						<a class="{{if .IsFirst}}disabled{{end}} item" href="{{$.Link}}"><i class="angle double left icon"></i> {{$.i18n.Tr "admin.first_page"}}</a>
+						<a class="{{if not .HasPrevious}}disabled{{end}} item" {{if .HasPrevious}}href="{{$.Link}}?page={{.Previous}}"{{end}}>
+							<i class="left arrow icon"></i> {{$.i18n.Tr "repo.issues.previous"}}
+						</a>
+						{{range .Pages}}
+						{{if eq .Num -1}}
+						<a class="disabled item">...</a>
+						{{else}}
+						<a class="{{if .IsCurrent}}active{{end}} item" {{if not .IsCurrent}}href="{{$.Link}}?page={{.Num}}"{{end}}>{{.Num}}</a>
+						{{end}}
+						{{end}}
+						<a class="{{if not .HasNext}}disabled{{end}} item" {{if .HasNext}}href="{{$.Link}}?page={{.Next}}"{{end}}>
+							{{$.i18n.Tr "repo.issues.next"}}&nbsp;<i class="icon right arrow"></i>
+						</a>
+						<a class="{{if .IsLast}}disabled{{end}} item" href="{{$.Link}}?page={{.TotalPages}}">{{$.i18n.Tr "admin.last_page"}}&nbsp;<i class="angle double right icon"></i></a>
+					</div>
+				</div>
+				{{end}}
+				{{end}}
+			</div>
+		</div>
+	</div>
 </div>
 {{template "base/footer" .}}

+ 10 - 0
templates/admin/user/new.tmpl

@@ -44,6 +44,16 @@
               <input id="password" name="password" type="password" value="{{.password}}" {{if eq .login_type "0-0"}}required{{end}}>
             </div>
 
+            <!-- Send register notify e-mail -->
+            {{if .CanSendEmail}}
+            <div class="inline field">
+              <div class="ui checkbox">
+                <label><strong>{{.i18n.Tr "admin.users.send_register_notify"}}</strong></label>
+                <input name="send_notify" type="checkbox" {{if .send_notify}}checked{{end}}>
+              </div>
+            </div>
+            {{end}}
+
             <div class="field">
               <button class="ui green button">{{.i18n.Tr "admin.users.new_account"}}</button>
             </div>

+ 13 - 0
templates/mail/auth/register_notify.tmpl

@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html>  
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+  <title>{{.User.Name}}, welcome to {{.AppName}}</title>
+</head>
+
+<body>
+  <p>Hi <b>{{.User.Name}}</b>, this is your registration confirmation email for {{.AppName}}!</p>
+  <p>You can now login via username: {{.User.Name}}.</p>
+  <p>© 2015 <a target="_blank" href="http://gogs.io">Gogs: Go Git Service</a></p>
+</body>
+</html>

+ 0 - 22
templates/mail/auth/register_success.tmpl

@@ -1,22 +0,0 @@
-<!DOCTYPE html>
-<html>  
-<head>
-  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-  <title>{{.User.Name}}, welcome to {{.AppName}}</title>
-</head>
-
-<body class="mail register success">
-  <div class="ui segment">
-    <div class="ui header">
-      <img class="ui image" src="{{.AppUrl}}/img/favicon.png">
-      {{.AppName}}
-    </div>
-    <div class="ui divider"></div>
-    <p>Hi <b>{{.User.Name}}</b>, this is your registration email for {{.AppName}}!</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?code={{.Code}}">{{.AppUrl}}user/activate?code={{.Code}}</a></p>
-    <p>Not working? Try copying and pasting it to your browser.</p>
-  </div>
-  <p class="copyright text grey">© 2015 <a target="_blank" href="http://gogs.io">Gogs: Go Git Service</a></p>
-</body>
-</html>

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác