|
@@ -74,57 +74,63 @@ func Profile(ctx *middleware.Context, params martini.Params) {
|
|
|
ctx.HTML(200, "user/profile")
|
|
|
}
|
|
|
|
|
|
-func SignIn(ctx *middleware.Context, form auth.LogInForm) {
|
|
|
+func SignIn(ctx *middleware.Context) {
|
|
|
ctx.Data["Title"] = "Log In"
|
|
|
|
|
|
- if ctx.Req.Method == "GET" {
|
|
|
- if base.OauthService != nil {
|
|
|
- ctx.Data["OauthEnabled"] = true
|
|
|
- ctx.Data["OauthGitHubEnabled"] = base.OauthService.GitHub.Enabled
|
|
|
- }
|
|
|
-
|
|
|
- // Check auto-login.
|
|
|
- userName := ctx.GetCookie(base.CookieUserName)
|
|
|
- if len(userName) == 0 {
|
|
|
- ctx.HTML(200, "user/signin")
|
|
|
- return
|
|
|
- }
|
|
|
+ if base.OauthService != nil {
|
|
|
+ ctx.Data["OauthEnabled"] = true
|
|
|
+ ctx.Data["OauthGitHubEnabled"] = base.OauthService.GitHub.Enabled
|
|
|
+ }
|
|
|
|
|
|
- isSucceed := false
|
|
|
- defer func() {
|
|
|
- if !isSucceed {
|
|
|
- log.Trace("%s auto-login cookie cleared: %s", ctx.Req.RequestURI, userName)
|
|
|
- ctx.SetCookie(base.CookieUserName, "", -1)
|
|
|
- ctx.SetCookie(base.CookieRememberName, "", -1)
|
|
|
- }
|
|
|
- }()
|
|
|
+ // Check auto-login.
|
|
|
+ userName := ctx.GetCookie(base.CookieUserName)
|
|
|
+ if len(userName) == 0 {
|
|
|
+ ctx.HTML(200, "user/signin")
|
|
|
+ return
|
|
|
+ }
|
|
|
|
|
|
- user, err := models.GetUserByName(userName)
|
|
|
- if err != nil {
|
|
|
- ctx.HTML(200, "user/signin")
|
|
|
- return
|
|
|
+ isSucceed := false
|
|
|
+ defer func() {
|
|
|
+ if !isSucceed {
|
|
|
+ log.Trace("%s auto-login cookie cleared: %s", ctx.Req.RequestURI, userName)
|
|
|
+ ctx.SetCookie(base.CookieUserName, "", -1)
|
|
|
+ ctx.SetCookie(base.CookieRememberName, "", -1)
|
|
|
}
|
|
|
+ }()
|
|
|
|
|
|
- secret := base.EncodeMd5(user.Rands + user.Passwd)
|
|
|
- value, _ := ctx.GetSecureCookie(secret, base.CookieRememberName)
|
|
|
- if value != user.Name {
|
|
|
- ctx.HTML(200, "user/signin")
|
|
|
- return
|
|
|
- }
|
|
|
+ user, err := models.GetUserByName(userName)
|
|
|
+ if err != nil {
|
|
|
+ ctx.HTML(200, "user/signin")
|
|
|
+ return
|
|
|
+ }
|
|
|
|
|
|
- isSucceed = true
|
|
|
- ctx.Session.Set("userId", user.Id)
|
|
|
- ctx.Session.Set("userName", user.Name)
|
|
|
- redirectTo, _ := url.QueryUnescape(ctx.GetCookie("redirect_to"))
|
|
|
- if len(redirectTo) > 0 {
|
|
|
- ctx.SetCookie("redirect_to", "", -1)
|
|
|
- ctx.Redirect(redirectTo)
|
|
|
- } else {
|
|
|
- ctx.Redirect("/")
|
|
|
- }
|
|
|
+ secret := base.EncodeMd5(user.Rands + user.Passwd)
|
|
|
+ value, _ := ctx.GetSecureCookie(secret, base.CookieRememberName)
|
|
|
+ if value != user.Name {
|
|
|
+ ctx.HTML(200, "user/signin")
|
|
|
return
|
|
|
}
|
|
|
|
|
|
+ isSucceed = true
|
|
|
+ ctx.Session.Set("userId", user.Id)
|
|
|
+ ctx.Session.Set("userName", user.Name)
|
|
|
+ if redirectTo, _ := url.QueryUnescape(ctx.GetCookie("redirect_to")); len(redirectTo) > 0 {
|
|
|
+ ctx.SetCookie("redirect_to", "", -1)
|
|
|
+ ctx.Redirect(redirectTo)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ ctx.Redirect("/")
|
|
|
+}
|
|
|
+
|
|
|
+func SignInPost(ctx *middleware.Context, form auth.LogInForm) {
|
|
|
+ ctx.Data["Title"] = "Log In"
|
|
|
+
|
|
|
+ if base.OauthService != nil {
|
|
|
+ ctx.Data["OauthEnabled"] = true
|
|
|
+ ctx.Data["OauthGitHubEnabled"] = base.OauthService.GitHub.Enabled
|
|
|
+ }
|
|
|
+
|
|
|
if ctx.HasError() {
|
|
|
ctx.HTML(200, "user/signin")
|
|
|
return
|
|
@@ -138,7 +144,7 @@ func SignIn(ctx *middleware.Context, form auth.LogInForm) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- ctx.Handle(200, "user.SignIn", err)
|
|
|
+ ctx.Handle(500, "user.SignIn", err)
|
|
|
return
|
|
|
}
|
|
|
|
|
@@ -151,13 +157,13 @@ func SignIn(ctx *middleware.Context, form auth.LogInForm) {
|
|
|
|
|
|
ctx.Session.Set("userId", user.Id)
|
|
|
ctx.Session.Set("userName", user.Name)
|
|
|
- redirectTo, _ := url.QueryUnescape(ctx.GetCookie("redirect_to"))
|
|
|
- if len(redirectTo) > 0 {
|
|
|
+ if redirectTo, _ := url.QueryUnescape(ctx.GetCookie("redirect_to")); len(redirectTo) > 0 {
|
|
|
ctx.SetCookie("redirect_to", "", -1)
|
|
|
ctx.Redirect(redirectTo)
|
|
|
- } else {
|
|
|
- ctx.Redirect("/")
|
|
|
+ return
|
|
|
}
|
|
|
+
|
|
|
+ ctx.Redirect("/")
|
|
|
}
|
|
|
|
|
|
func SignOut(ctx *middleware.Context) {
|
|
@@ -168,7 +174,7 @@ func SignOut(ctx *middleware.Context) {
|
|
|
ctx.Redirect("/")
|
|
|
}
|
|
|
|
|
|
-func SignUp(ctx *middleware.Context, form auth.RegisterForm) {
|
|
|
+func SignUp(ctx *middleware.Context) {
|
|
|
ctx.Data["Title"] = "Sign Up"
|
|
|
ctx.Data["PageIsSignUp"] = true
|
|
|
|
|
@@ -178,8 +184,15 @@ func SignUp(ctx *middleware.Context, form auth.RegisterForm) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- if ctx.Req.Method == "GET" {
|
|
|
- ctx.HTML(200, "user/signup")
|
|
|
+ ctx.HTML(200, "user/signup")
|
|
|
+}
|
|
|
+
|
|
|
+func SignUpPost(ctx *middleware.Context, form auth.RegisterForm) {
|
|
|
+ ctx.Data["Title"] = "Sign Up"
|
|
|
+ ctx.Data["PageIsSignUp"] = true
|
|
|
+
|
|
|
+ if base.Service.DisenableRegisteration {
|
|
|
+ ctx.Handle(403, "user.SignUpPost", nil)
|
|
|
return
|
|
|
}
|
|
|
|
|
@@ -213,7 +226,7 @@ func SignUp(ctx *middleware.Context, form auth.RegisterForm) {
|
|
|
case models.ErrUserNameIllegal:
|
|
|
ctx.RenderWithErr(models.ErrRepoNameIllegal.Error(), "user/signup", &form)
|
|
|
default:
|
|
|
- ctx.Handle(200, "user.SignUp", err)
|
|
|
+ ctx.Handle(500, "user.SignUp", err)
|
|
|
}
|
|
|
return
|
|
|
}
|
|
@@ -240,25 +253,28 @@ func Delete(ctx *middleware.Context) {
|
|
|
ctx.Data["Title"] = "Delete Account"
|
|
|
ctx.Data["PageIsUserSetting"] = true
|
|
|
ctx.Data["IsUserPageSettingDelete"] = true
|
|
|
+ ctx.HTML(200, "user/delete")
|
|
|
+}
|
|
|
|
|
|
- if ctx.Req.Method == "GET" {
|
|
|
- ctx.HTML(200, "user/delete")
|
|
|
- return
|
|
|
- }
|
|
|
+func DeletePost(ctx *middleware.Context) {
|
|
|
+ ctx.Data["Title"] = "Delete Account"
|
|
|
+ ctx.Data["PageIsUserSetting"] = true
|
|
|
+ ctx.Data["IsUserPageSettingDelete"] = true
|
|
|
|
|
|
- tmpUser := models.User{Passwd: ctx.Query("password")}
|
|
|
+ tmpUser := models.User{
|
|
|
+ Passwd: ctx.Query("password"),
|
|
|
+ Salt: ctx.User.Salt,
|
|
|
+ }
|
|
|
tmpUser.EncodePasswd()
|
|
|
- if len(tmpUser.Passwd) == 0 || tmpUser.Passwd != ctx.User.Passwd {
|
|
|
- ctx.Data["HasError"] = true
|
|
|
- ctx.Data["ErrorMsg"] = "Password is not correct. Make sure you are owner of this account."
|
|
|
+ if tmpUser.Passwd != ctx.User.Passwd {
|
|
|
+ ctx.Flash.Error("Password is not correct. Make sure you are owner of this account.")
|
|
|
} else {
|
|
|
if err := models.DeleteUser(ctx.User); err != nil {
|
|
|
- ctx.Data["HasError"] = true
|
|
|
switch err {
|
|
|
case models.ErrUserOwnRepos:
|
|
|
- ctx.Data["ErrorMsg"] = "Your account still have ownership of repository, you have to delete or transfer them first."
|
|
|
+ ctx.Flash.Error("Your account still have ownership of repository, you have to delete or transfer them first.")
|
|
|
default:
|
|
|
- ctx.Handle(200, "user.Delete", err)
|
|
|
+ ctx.Handle(500, "user.Delete", err)
|
|
|
return
|
|
|
}
|
|
|
} else {
|
|
@@ -267,7 +283,7 @@ func Delete(ctx *middleware.Context) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- ctx.HTML(200, "user/delete")
|
|
|
+ ctx.Redirect("/user/delete")
|
|
|
}
|
|
|
|
|
|
const (
|
|
@@ -439,10 +455,17 @@ func ForgotPasswd(ctx *middleware.Context) {
|
|
|
}
|
|
|
|
|
|
ctx.Data["IsResetRequest"] = true
|
|
|
- if ctx.Req.Method == "GET" {
|
|
|
- ctx.HTML(200, "user/forgot_passwd")
|
|
|
+ ctx.HTML(200, "user/forgot_passwd")
|
|
|
+}
|
|
|
+
|
|
|
+func ForgotPasswdPost(ctx *middleware.Context) {
|
|
|
+ ctx.Data["Title"] = "Forgot Password"
|
|
|
+
|
|
|
+ if base.MailService == nil {
|
|
|
+ ctx.Handle(403, "user.ForgotPasswdPost", nil)
|
|
|
return
|
|
|
}
|
|
|
+ ctx.Data["IsResetRequest"] = true
|
|
|
|
|
|
email := ctx.Query("email")
|
|
|
u, err := models.GetUserByEmail(email)
|
|
@@ -450,7 +473,7 @@ func ForgotPasswd(ctx *middleware.Context) {
|
|
|
if err == models.ErrUserNotExist {
|
|
|
ctx.RenderWithErr("This e-mail address does not associate to any account.", "user/forgot_passwd", nil)
|
|
|
} else {
|
|
|
- ctx.Handle(404, "user.ResetPasswd(check existence)", err)
|
|
|
+ ctx.Handle(500, "user.ResetPasswd(check existence)", err)
|
|
|
}
|
|
|
return
|
|
|
}
|
|
@@ -473,6 +496,8 @@ func ForgotPasswd(ctx *middleware.Context) {
|
|
|
}
|
|
|
|
|
|
func ResetPasswd(ctx *middleware.Context) {
|
|
|
+ ctx.Data["Title"] = "Reset Password"
|
|
|
+
|
|
|
code := ctx.Query("code")
|
|
|
if len(code) == 0 {
|
|
|
ctx.Error(404)
|
|
@@ -480,11 +505,19 @@ func ResetPasswd(ctx *middleware.Context) {
|
|
|
}
|
|
|
ctx.Data["Code"] = code
|
|
|
|
|
|
- if ctx.Req.Method == "GET" {
|
|
|
- ctx.Data["IsResetForm"] = true
|
|
|
- ctx.HTML(200, "user/reset_passwd")
|
|
|
+ ctx.Data["IsResetForm"] = true
|
|
|
+ ctx.HTML(200, "user/reset_passwd")
|
|
|
+}
|
|
|
+
|
|
|
+func ResetPasswdPost(ctx *middleware.Context) {
|
|
|
+ ctx.Data["Title"] = "Reset Password"
|
|
|
+
|
|
|
+ code := ctx.Query("code")
|
|
|
+ if len(code) == 0 {
|
|
|
+ ctx.Error(404)
|
|
|
return
|
|
|
}
|
|
|
+ ctx.Data["Code"] = code
|
|
|
|
|
|
if u := models.VerifyUserActiveCode(code); u != nil {
|
|
|
// Validate password length.
|
|
@@ -500,7 +533,7 @@ func ResetPasswd(ctx *middleware.Context) {
|
|
|
u.Salt = models.GetUserSalt()
|
|
|
u.EncodePasswd()
|
|
|
if err := models.UpdateUser(u); err != nil {
|
|
|
- ctx.Handle(404, "user.ResetPasswd(UpdateUser)", err)
|
|
|
+ ctx.Handle(500, "user.ResetPasswd(UpdateUser)", err)
|
|
|
return
|
|
|
}
|
|
|
|