summaryrefslogtreecommitdiffstats
path: root/routers/user/user.go
diff options
context:
space:
mode:
authorskyblue <ssx205@gmail.com>2014-04-12 01:01:30 +0800
committerskyblue <ssx205@gmail.com>2014-04-12 01:01:30 +0800
commitdd815ae7b532ceba1f96e6751e231dc351eb19b9 (patch)
tree3e8383106585e5a990ab5074ff3a2fd87d4239d7 /routers/user/user.go
parentdf000245d19ffa3e4f88d252763269bbdd04f8eb (diff)
downloadgitea-dd815ae7b532ceba1f96e6751e231dc351eb19b9.tar.gz
gitea-dd815ae7b532ceba1f96e6751e231dc351eb19b9.zip
finish github oauth2 support
Diffstat (limited to 'routers/user/user.go')
-rw-r--r--routers/user/user.go31
1 files changed, 30 insertions, 1 deletions
diff --git a/routers/user/user.go b/routers/user/user.go
index 37c6baa9f2..0d9f67e497 100644
--- a/routers/user/user.go
+++ b/routers/user/user.go
@@ -82,6 +82,7 @@ func SignIn(ctx *middleware.Context) {
ctx.Data["OauthGitHubEnabled"] = base.OauthService.GitHub.Enabled
}
+ var user *models.User
// Check auto-login.
userName := ctx.GetCookie(base.CookieUserName)
if len(userName) == 0 {
@@ -90,15 +91,17 @@ func SignIn(ctx *middleware.Context) {
}
isSucceed := false
+ var err error
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)
+ return
}
}()
- user, err := models.GetUserByName(userName)
+ user, err = models.GetUserByName(userName)
if err != nil {
ctx.HTML(200, "user/signin")
return
@@ -112,6 +115,7 @@ func SignIn(ctx *middleware.Context) {
}
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 {
@@ -155,6 +159,13 @@ func SignInPost(ctx *middleware.Context, form auth.LogInForm) {
ctx.SetSecureCookie(secret, base.CookieRememberName, user.Name, days)
}
+ // Bind with social account
+ if sid, ok := ctx.Session.Get("socialId").(int64); ok {
+ if err = models.BindUserOauth2(user.Id, sid); err != nil {
+ log.Error("bind user error: %v", err)
+ }
+ ctx.Session.Delete("socialId")
+ }
ctx.Session.Set("userId", user.Id)
ctx.Session.Set("userName", user.Name)
if redirectTo, _ := url.QueryUnescape(ctx.GetCookie("redirect_to")); len(redirectTo) > 0 {
@@ -169,6 +180,7 @@ func SignInPost(ctx *middleware.Context, form auth.LogInForm) {
func SignOut(ctx *middleware.Context) {
ctx.Session.Delete("userId")
ctx.Session.Delete("userName")
+ ctx.Session.Delete("socialId")
ctx.SetCookie(base.CookieUserName, "", -1)
ctx.SetCookie(base.CookieRememberName, "", -1)
ctx.Redirect("/")
@@ -178,11 +190,23 @@ func SignUp(ctx *middleware.Context) {
ctx.Data["Title"] = "Sign Up"
ctx.Data["PageIsSignUp"] = true
+ if sid, ok := ctx.Session.Get("socialId").(int64); ok {
+ var err error
+ if _, err = models.GetOauth2ById(sid); err == nil {
+ ctx.Data["IsSocialLogin"] = true
+ // FIXME: don't set in error page
+ ctx.Data["username"] = ctx.Session.Get("socialName")
+ ctx.Data["email"] = ctx.Session.Get("socialEmail")
+ } else {
+ log.Error("unaccepted oauth error: %s", err) // FIXME: should it show in page
+ }
+ }
if base.Service.DisenableRegisteration {
ctx.Data["DisenableRegisteration"] = true
ctx.HTML(200, "user/signup")
return
}
+ log.Info("session: %v", ctx.Session.Get("socialId"))
ctx.HTML(200, "user/signup")
}
@@ -232,6 +256,11 @@ func SignUpPost(ctx *middleware.Context, form auth.RegisterForm) {
}
log.Trace("%s User created: %s", ctx.Req.RequestURI, strings.ToLower(form.UserName))
+ // Bind Social Account
+ if sid, ok := ctx.Session.Get("socialId").(int64); ok {
+ models.BindUserOauth2(u.Id, sid)
+ ctx.Session.Delete("socialId")
+ }
// Send confirmation e-mail.
if base.Service.RegisterEmailConfirm && u.Id > 1 {