Skip to content

Commit e362f13

Browse files
committed
Verify passwords for activation
This is to prevent 3rd party activation
1 parent 4ca8e66 commit e362f13

File tree

3 files changed

+36
-4
lines changed

3 files changed

+36
-4
lines changed

models/user.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -902,6 +902,16 @@ func VerifyUserActiveCode(code string) (user *User) {
902902
return nil
903903
}
904904

905+
// VerifyUserActiveCode verifies active code and password when activating account
906+
func VerifyUserActiveCodeAndPassword(code string, password string) (user *User) {
907+
if user = VerifyUserActiveCode(code); user != nil {
908+
if user.ValidatePassword(password) {
909+
return user
910+
}
911+
}
912+
return nil
913+
}
914+
905915
// VerifyActiveEmailCode verifies active email code when active account
906916
func VerifyActiveEmailCode(code, email string) *EmailAddress {
907917
minutes := setting.Service.ActiveCodeLives

routers/user/auth.go

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ const (
3939
tplSignIn base.TplName = "user/auth/signin"
4040
// tplSignUp template path for sign up page
4141
tplSignUp base.TplName = "user/auth/signup"
42-
// TplActivate template path for activate user
42+
// Tpl template path for activate user
4343
TplActivate base.TplName = "user/auth/activate"
4444
tplForgotPassword base.TplName = "user/auth/forgot_passwd"
4545
tplResetPassword base.TplName = "user/auth/reset_passwd"
@@ -1215,6 +1215,8 @@ func SignUpPost(ctx *context.Context, cpt *captcha.Captcha, form auth.RegisterFo
12151215
// Activate render activate user page
12161216
func Activate(ctx *context.Context) {
12171217
code := ctx.Query("code")
1218+
password := ctx.Query("password")
1219+
12181220
if len(code) == 0 {
12191221
ctx.Data["IsActivatePage"] = true
12201222
if ctx.User.IsActive {
@@ -1240,8 +1242,15 @@ func Activate(ctx *context.Context) {
12401242
return
12411243
}
12421244

1243-
// Verify code.
1244-
if user := models.VerifyUserActiveCode(code); user != nil {
1245+
if len(password) == 0 {
1246+
ctx.Data["Code"] = code
1247+
ctx.Data["NeedsPassword"] = true
1248+
ctx.HTML(200, TplActivate)
1249+
return
1250+
}
1251+
1252+
// Verify code and password
1253+
if user := models.VerifyUserActiveCodeAndPassword(code, password); user != nil {
12451254
user.IsActive = true
12461255
var err error
12471256
if user.Rands, err = models.GetUserSalt(); err != nil {

templates/user/auth/activate.tmpl

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,20 @@
1818
<p>{{.i18n.Tr "auth.confirmation_mail_sent_prompt" (.SignedUser.Email|Escape) .ActiveCodeLives | Str2html}}</p>
1919
{{end}}
2020
{{else}}
21-
{{if .IsSendRegisterMail}}
21+
{{if .NeedsPassword}}
22+
<form class="ui form" action="/user/activate" method="post">
23+
<div class="required inline field">
24+
<label for="password">{{.i18n.Tr "password"}}</label>
25+
<input id="password" name="password" type="password" autocomplete="off" required>
26+
</div>
27+
28+
<div class="inline field">
29+
<label></label>
30+
<button class="ui green button">{{.i18n.Tr "install.confirm_password"}}</button>
31+
</div>
32+
<input id="code" name="code" type="hidden" value="{{.Code}}">
33+
</form>
34+
{{else if .IsSendRegisterMail}}
2235
<p>{{.i18n.Tr "auth.confirmation_mail_sent_prompt" (.Email|Escape) .ActiveCodeLives | Str2html}}</p>
2336
{{else if .IsActivateFailed}}
2437
<p>{{.i18n.Tr "auth.invalid_code"}}</p>

0 commit comments

Comments
 (0)