1
0
Fork 0

#1525 Triggere mailer for admin created accounts

This commit is contained in:
Unknwon 2015-09-25 19:45:44 -04:00
parent 986447335d
commit 21e13cb51e
11 changed files with 213 additions and 191 deletions

View file

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

View file

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

File diff suppressed because one or more lines are too long

View file

@ -19,8 +19,8 @@ import (
const ( const (
AUTH_ACTIVATE base.TplName = "mail/auth/activate" AUTH_ACTIVATE base.TplName = "mail/auth/activate"
AUTH_ACTIVATE_EMAIL base.TplName = "mail/auth/activate_email" 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" 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_COLLABORATOR base.TplName = "mail/notify/collaborator"
NOTIFY_MENTION base.TplName = "mail/notify/mention" 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") 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. // SendActivateAccountMail sends confirmation e-mail.
func SendActivateEmailMail(c *macaron.Context, u *models.User, email *models.EmailAddress) { func SendActivateEmailMail(c *macaron.Context, u *models.User, email *models.EmailAddress) {
data := ComposeTplData(u) data := ComposeTplData(u)

View file

@ -14,6 +14,7 @@ import (
"github.com/gogits/gogs/modules/auth" "github.com/gogits/gogs/modules/auth"
"github.com/gogits/gogs/modules/base" "github.com/gogits/gogs/modules/base"
"github.com/gogits/gogs/modules/log" "github.com/gogits/gogs/modules/log"
"github.com/gogits/gogs/modules/mailer"
"github.com/gogits/gogs/modules/middleware" "github.com/gogits/gogs/modules/middleware"
"github.com/gogits/gogs/modules/setting" "github.com/gogits/gogs/modules/setting"
) )
@ -60,6 +61,8 @@ func NewUser(ctx *middleware.Context) {
return return
} }
ctx.Data["Sources"] = sources ctx.Data["Sources"] = sources
ctx.Data["CanSendEmail"] = setting.MailService != nil
ctx.HTML(200, USER_NEW) ctx.HTML(200, USER_NEW)
} }
@ -75,6 +78,8 @@ func NewUserPost(ctx *middleware.Context, form auth.AdminCrateUserForm) {
} }
ctx.Data["Sources"] = sources ctx.Data["Sources"] = sources
ctx.Data["CanSendEmail"] = setting.MailService != nil
if ctx.HasError() { if ctx.HasError() {
ctx.HTML(200, USER_NEW) ctx.HTML(200, USER_NEW)
return 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) 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.Flash.Success(ctx.Tr("admin.users.new_success", u.Name))
ctx.Redirect(setting.AppSubUrl + "/admin/users/" + com.ToStr(u.Id)) ctx.Redirect(setting.AppSubUrl + "/admin/users/" + com.ToStr(u.Id))
} }

View file

@ -56,7 +56,6 @@
</div> </div>
{{end}} {{end}}
{{end}} {{end}}
</div> </div>
</div> </div>
</div> </div>

View file

@ -14,7 +14,6 @@
<tr> <tr>
<th>ID</th> <th>ID</th>
<th>{{.i18n.Tr "admin.orgs.name"}}</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.teams"}}</th>
<th>{{.i18n.Tr "admin.orgs.members"}}</th> <th>{{.i18n.Tr "admin.orgs.members"}}</th>
<th>{{.i18n.Tr "admin.users.repos"}}</th> <th>{{.i18n.Tr "admin.users.repos"}}</th>
@ -26,7 +25,6 @@
<tr> <tr>
<td>{{.Id}}</td> <td>{{.Id}}</td>
<td><a href="{{AppSubUrl}}/org/{{.Name}}">{{.Name}}</a></td> <td><a href="{{AppSubUrl}}/org/{{.Name}}">{{.Name}}</a></td>
<td>{{.Email}}</td>
<td>{{.NumTeams}}</td> <td>{{.NumTeams}}</td>
<td>{{.NumMembers}}</td> <td>{{.NumMembers}}</td>
<td>{{.NumRepos}}</td> <td>{{.NumRepos}}</td>
@ -60,7 +58,6 @@
</div> </div>
{{end}} {{end}}
{{end}} {{end}}
</div> </div>
</div> </div>
</div> </div>

View file

@ -62,7 +62,6 @@
</div> </div>
{{end}} {{end}}
{{end}} {{end}}
</div> </div>
</div> </div>
</div> </div>

View file

@ -44,6 +44,16 @@
<input id="password" name="password" type="password" value="{{.password}}" {{if eq .login_type "0-0"}}required{{end}}> <input id="password" name="password" type="password" value="{{.password}}" {{if eq .login_type "0-0"}}required{{end}}>
</div> </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"> <div class="field">
<button class="ui green button">{{.i18n.Tr "admin.users.new_account"}}</button> <button class="ui green button">{{.i18n.Tr "admin.users.new_account"}}</button>
</div> </div>

View file

@ -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>

View file

@ -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>