diff options
author | Unknown <joe2010xtmf@163.com> | 2014-03-07 16:05:18 -0500 |
---|---|---|
committer | Unknown <joe2010xtmf@163.com> | 2014-03-07 16:05:18 -0500 |
commit | ba5c7ea7719abbef792e8b9897dcfadf4d54bbab (patch) | |
tree | e1986ff36562366278fd134e7ce1793193828dcb /modules/auth | |
parent | 8e821c75d7432ffe7eb7d72ba479f6f68e620ad1 (diff) |
Add SignInRequire and SignOutRequire middleware
Diffstat (limited to 'modules/auth')
-rw-r--r-- | modules/auth/user.go | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/modules/auth/user.go b/modules/auth/user.go new file mode 100644 index 00000000..3a793f45 --- /dev/null +++ b/modules/auth/user.go @@ -0,0 +1,82 @@ +// Copyright 2014 The Gogs Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package auth + +import ( + "github.com/codegangsta/martini" + "github.com/martini-contrib/render" + "github.com/martini-contrib/sessions" + + "github.com/gogits/gogs/models" + "github.com/gogits/gogs/modules/base" + "github.com/gogits/gogs/utils/log" +) + +func SignedInId(session sessions.Session) int64 { + userId := session.Get("userId") + if userId == nil { + return 0 + } + if s, ok := userId.(int64); ok { + return s + } + return 0 +} + +func SignedInName(session sessions.Session) string { + userName := session.Get("userName") + if userName == nil { + return "" + } + if s, ok := userName.(string); ok { + return s + } + return "" +} + +func SignedInUser(session sessions.Session) *models.User { + id := SignedInId(session) + if id <= 0 { + return nil + } + + user, err := models.GetUserById(id) + if err != nil { + log.Error("user.SignedInUser: %v", err) + return nil + } + return user +} + +func IsSignedIn(session sessions.Session) bool { + return SignedInId(session) > 0 +} + +// SignInRequire checks user status from session. +// It will assign correspoding values to +// template data map if user has signed in. +func SignInRequire(redirect bool) martini.Handler { + return func(r render.Render, data base.TmplData, session sessions.Session) { + if !IsSignedIn(session) { + if redirect { + r.Redirect("/") + } + return + } + + data["IsSigned"] = true + data["SignedUserId"] = SignedInId(session) + data["SignedUserName"] = SignedInName(session) + data["Avatar"] = SignedInUser(session).Avatar + } +} + +func SignOutRequire() martini.Handler { + return func(r render.Render, session sessions.Session) { + if IsSignedIn(session) { + r.Redirect("/") + } + } +} |