mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-03 20:36:07 +01:00 
			
		
		
		
	Add SignInRequire and SignOutRequire middleware
This commit is contained in:
		
							
								
								
									
										2
									
								
								gogs.go
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								gogs.go
									
									
									
									
									
								
							@@ -19,7 +19,7 @@ import (
 | 
				
			|||||||
// Test that go1.1 tag above is included in builds. main.go refers to this definition.
 | 
					// Test that go1.1 tag above is included in builds. main.go refers to this definition.
 | 
				
			||||||
const go11tag = true
 | 
					const go11tag = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const APP_VER = "0.0.1.0306"
 | 
					const APP_VER = "0.0.1.0307"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func init() {
 | 
					func init() {
 | 
				
			||||||
	runtime.GOMAXPROCS(runtime.NumCPU())
 | 
						runtime.GOMAXPROCS(runtime.NumCPU())
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										82
									
								
								modules/auth/user.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								modules/auth/user.go
									
									
									
									
									
										Normal file
									
								
							@@ -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("/")
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -5,14 +5,16 @@
 | 
				
			|||||||
package routers
 | 
					package routers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"github.com/gogits/gogs/modules/base"
 | 
					 | 
				
			||||||
	"github.com/gogits/gogs/routers/user"
 | 
					 | 
				
			||||||
	"github.com/martini-contrib/render"
 | 
						"github.com/martini-contrib/render"
 | 
				
			||||||
	"github.com/martini-contrib/sessions"
 | 
						"github.com/martini-contrib/sessions"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/gogits/gogs/modules/auth"
 | 
				
			||||||
 | 
						"github.com/gogits/gogs/modules/base"
 | 
				
			||||||
 | 
						"github.com/gogits/gogs/routers/user"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func Home(r render.Render, data base.TmplData, session sessions.Session) {
 | 
					func Home(r render.Render, data base.TmplData, session sessions.Session) {
 | 
				
			||||||
	if user.IsSignedIn(session) {
 | 
						if auth.IsSignedIn(session) {
 | 
				
			||||||
		user.Dashboard(r, data, session)
 | 
							user.Dashboard(r, data, session)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,19 +10,21 @@ import (
 | 
				
			|||||||
	"strconv"
 | 
						"strconv"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/martini-contrib/render"
 | 
						"github.com/martini-contrib/render"
 | 
				
			||||||
 | 
						"github.com/martini-contrib/sessions"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/gogits/gogs/models"
 | 
						"github.com/gogits/gogs/models"
 | 
				
			||||||
	"github.com/gogits/gogs/routers/user"
 | 
						"github.com/gogits/gogs/modules/auth"
 | 
				
			||||||
	"github.com/martini-contrib/sessions"
 | 
						"github.com/gogits/gogs/modules/base"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func Create(req *http.Request, r render.Render, session sessions.Session) {
 | 
					func Create(req *http.Request, r render.Render, data base.TmplData, session sessions.Session) {
 | 
				
			||||||
 | 
						data["Title"] = "Create repository"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if req.Method == "GET" {
 | 
						if req.Method == "GET" {
 | 
				
			||||||
		r.HTML(200, "repo/create", map[string]interface{}{
 | 
							r.HTML(200, "repo/create", map[string]interface{}{
 | 
				
			||||||
			"Title":    "Create repository",
 | 
								"UserName": auth.SignedInName(session),
 | 
				
			||||||
			"UserName": user.SignedInName(session),
 | 
								"UserId":   auth.SignedInId(session),
 | 
				
			||||||
			"UserId":   user.SignedInId(session),
 | 
								"IsSigned": auth.IsSignedIn(session),
 | 
				
			||||||
			"IsSigned": user.IsSignedIn(session),
 | 
					 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -42,7 +44,7 @@ func Create(req *http.Request, r render.Render, session sessions.Session) {
 | 
				
			|||||||
		if err == nil {
 | 
							if err == nil {
 | 
				
			||||||
			r.HTML(200, "repo/created", map[string]interface{}{
 | 
								r.HTML(200, "repo/created", map[string]interface{}{
 | 
				
			||||||
				"RepoName": u.Name + "/" + req.FormValue("name"),
 | 
									"RepoName": u.Name + "/" + req.FormValue("name"),
 | 
				
			||||||
				"IsSigned": user.IsSignedIn(session),
 | 
									"IsSigned": auth.IsSignedIn(session),
 | 
				
			||||||
			})
 | 
								})
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -51,7 +53,7 @@ func Create(req *http.Request, r render.Render, session sessions.Session) {
 | 
				
			|||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		r.HTML(200, "base/error", map[string]interface{}{
 | 
							r.HTML(200, "base/error", map[string]interface{}{
 | 
				
			||||||
			"Error":    fmt.Sprintf("%v", err),
 | 
								"Error":    fmt.Sprintf("%v", err),
 | 
				
			||||||
			"IsSigned": user.IsSignedIn(session),
 | 
								"IsSigned": auth.IsSignedIn(session),
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -60,7 +62,7 @@ func Delete(req *http.Request, r render.Render, session sessions.Session) {
 | 
				
			|||||||
	if req.Method == "GET" {
 | 
						if req.Method == "GET" {
 | 
				
			||||||
		r.HTML(200, "repo/delete", map[string]interface{}{
 | 
							r.HTML(200, "repo/delete", map[string]interface{}{
 | 
				
			||||||
			"Title":    "Delete repository",
 | 
								"Title":    "Delete repository",
 | 
				
			||||||
			"IsSigned": user.IsSignedIn(session),
 | 
								"IsSigned": auth.IsSignedIn(session),
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -70,19 +72,19 @@ func Delete(req *http.Request, r render.Render, session sessions.Session) {
 | 
				
			|||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		r.HTML(200, "base/error", map[string]interface{}{
 | 
							r.HTML(200, "base/error", map[string]interface{}{
 | 
				
			||||||
			"Error":    fmt.Sprintf("%v", err),
 | 
								"Error":    fmt.Sprintf("%v", err),
 | 
				
			||||||
			"IsSigned": user.IsSignedIn(session),
 | 
								"IsSigned": auth.IsSignedIn(session),
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func List(req *http.Request, r render.Render, session sessions.Session) {
 | 
					func List(req *http.Request, r render.Render, session sessions.Session) {
 | 
				
			||||||
	u := user.SignedInUser(session)
 | 
						u := auth.SignedInUser(session)
 | 
				
			||||||
	repos, err := models.GetRepositories(u)
 | 
						repos, err := models.GetRepositories(u)
 | 
				
			||||||
	fmt.Println("repos", repos)
 | 
						fmt.Println("repos", repos)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		r.HTML(200, "base/error", map[string]interface{}{
 | 
							r.HTML(200, "base/error", map[string]interface{}{
 | 
				
			||||||
			"Error":    fmt.Sprintf("%v", err),
 | 
								"Error":    fmt.Sprintf("%v", err),
 | 
				
			||||||
			"IsSigned": user.IsSignedIn(session),
 | 
								"IsSigned": auth.IsSignedIn(session),
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -90,6 +92,6 @@ func List(req *http.Request, r render.Render, session sessions.Session) {
 | 
				
			|||||||
	r.HTML(200, "repo/list", map[string]interface{}{
 | 
						r.HTML(200, "repo/list", map[string]interface{}{
 | 
				
			||||||
		"Title":    "repositories",
 | 
							"Title":    "repositories",
 | 
				
			||||||
		"Repos":    repos,
 | 
							"Repos":    repos,
 | 
				
			||||||
		"IsSigned": user.IsSignedIn(session),
 | 
							"IsSigned": auth.IsSignedIn(session),
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,21 +9,22 @@ import (
 | 
				
			|||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/martini-contrib/render"
 | 
						"github.com/martini-contrib/render"
 | 
				
			||||||
 | 
						"github.com/martini-contrib/sessions"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/gogits/gogs/models"
 | 
						"github.com/gogits/gogs/models"
 | 
				
			||||||
	"github.com/martini-contrib/sessions"
 | 
						"github.com/gogits/gogs/modules/auth"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func AddPublicKey(req *http.Request, r render.Render, session sessions.Session) {
 | 
					func AddPublicKey(req *http.Request, r render.Render, session sessions.Session) {
 | 
				
			||||||
	if req.Method == "GET" {
 | 
						if req.Method == "GET" {
 | 
				
			||||||
		r.HTML(200, "user/publickey_add", map[string]interface{}{
 | 
							r.HTML(200, "user/publickey_add", map[string]interface{}{
 | 
				
			||||||
			"Title":    "Add Public Key",
 | 
								"Title":    "Add Public Key",
 | 
				
			||||||
			"IsSigned": IsSignedIn(session),
 | 
								"IsSigned": auth.IsSignedIn(session),
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	k := &models.PublicKey{OwnerId: SignedInId(session),
 | 
						k := &models.PublicKey{OwnerId: auth.SignedInId(session),
 | 
				
			||||||
		Name:    req.FormValue("keyname"),
 | 
							Name:    req.FormValue("keyname"),
 | 
				
			||||||
		Content: req.FormValue("key_content"),
 | 
							Content: req.FormValue("key_content"),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -31,7 +32,7 @@ func AddPublicKey(req *http.Request, r render.Render, session sessions.Session)
 | 
				
			|||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		r.HTML(403, "status/403", map[string]interface{}{
 | 
							r.HTML(403, "status/403", map[string]interface{}{
 | 
				
			||||||
			"Title":    fmt.Sprintf("%v", err),
 | 
								"Title":    fmt.Sprintf("%v", err),
 | 
				
			||||||
			"IsSigned": IsSignedIn(session),
 | 
								"IsSigned": auth.IsSignedIn(session),
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		r.HTML(200, "user/publickey_added", map[string]interface{}{})
 | 
							r.HTML(200, "user/publickey_added", map[string]interface{}{})
 | 
				
			||||||
@@ -39,11 +40,11 @@ func AddPublicKey(req *http.Request, r render.Render, session sessions.Session)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func ListPublicKey(req *http.Request, r render.Render, session sessions.Session) {
 | 
					func ListPublicKey(req *http.Request, r render.Render, session sessions.Session) {
 | 
				
			||||||
	keys, err := models.ListPublicKey(SignedInId(session))
 | 
						keys, err := models.ListPublicKey(auth.SignedInId(session))
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		r.HTML(200, "base/error", map[string]interface{}{
 | 
							r.HTML(200, "base/error", map[string]interface{}{
 | 
				
			||||||
			"Error":    fmt.Sprintf("%v", err),
 | 
								"Error":    fmt.Sprintf("%v", err),
 | 
				
			||||||
			"IsSigned": IsSignedIn(session),
 | 
								"IsSigned": auth.IsSignedIn(session),
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -51,6 +52,6 @@ func ListPublicKey(req *http.Request, r render.Render, session sessions.Session)
 | 
				
			|||||||
	r.HTML(200, "user/publickey_list", map[string]interface{}{
 | 
						r.HTML(200, "user/publickey_list", map[string]interface{}{
 | 
				
			||||||
		"Title":    "repositories",
 | 
							"Title":    "repositories",
 | 
				
			||||||
		"Keys":     keys,
 | 
							"Keys":     keys,
 | 
				
			||||||
		"IsSigned": IsSignedIn(session),
 | 
							"IsSigned": auth.IsSignedIn(session),
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,7 +8,6 @@ import (
 | 
				
			|||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	//"github.com/martini-contrib/binding"
 | 
					 | 
				
			||||||
	"github.com/martini-contrib/render"
 | 
						"github.com/martini-contrib/render"
 | 
				
			||||||
	"github.com/martini-contrib/sessions"
 | 
						"github.com/martini-contrib/sessions"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -19,80 +18,23 @@ import (
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func Dashboard(r render.Render, data base.TmplData, session sessions.Session) {
 | 
					func Dashboard(r render.Render, data base.TmplData, session sessions.Session) {
 | 
				
			||||||
	if !IsSignedIn(session) {
 | 
					 | 
				
			||||||
		// todo : direct to logout
 | 
					 | 
				
			||||||
		r.Redirect("/")
 | 
					 | 
				
			||||||
		return
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	data["IsSigned"] = true
 | 
					 | 
				
			||||||
	data["SignedUserId"] = SignedInId(session)
 | 
					 | 
				
			||||||
	data["SignedUserName"] = SignedInName(session)
 | 
					 | 
				
			||||||
	data["PageIsUserDashboard"] = true
 | 
					 | 
				
			||||||
	data["Avatar"] = SignedInUser(session).Avatar
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	data["Title"] = "Dashboard"
 | 
						data["Title"] = "Dashboard"
 | 
				
			||||||
 | 
						data["PageIsUserDashboard"] = true
 | 
				
			||||||
	r.HTML(200, "user/dashboard", data)
 | 
						r.HTML(200, "user/dashboard", data)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func Profile(r render.Render, data base.TmplData, session sessions.Session) {
 | 
					func Profile(r render.Render, data base.TmplData, session sessions.Session) {
 | 
				
			||||||
	data["Title"] = "Profile"
 | 
						data["Title"] = "Profile"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	data["IsSigned"] = IsSignedIn(session)
 | 
						data["IsSigned"] = auth.IsSignedIn(session)
 | 
				
			||||||
	// TODO: Need to check view self or others.
 | 
						// TODO: Need to check view self or others.
 | 
				
			||||||
	user := SignedInUser(session)
 | 
						user := auth.SignedInUser(session)
 | 
				
			||||||
	data["Avatar"] = user.Avatar
 | 
						data["Avatar"] = user.Avatar
 | 
				
			||||||
	data["Username"] = user.Name
 | 
						data["Username"] = user.Name
 | 
				
			||||||
	r.HTML(200, "user/profile", data)
 | 
						r.HTML(200, "user/profile", data)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func IsSignedIn(session sessions.Session) bool {
 | 
					 | 
				
			||||||
	return SignedInId(session) > 0
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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 SignIn(form auth.LogInForm, data base.TmplData, req *http.Request, r render.Render, session sessions.Session) {
 | 
					func SignIn(form auth.LogInForm, data base.TmplData, req *http.Request, r render.Render, session sessions.Session) {
 | 
				
			||||||
	// if logged, do not show login page
 | 
					 | 
				
			||||||
	if IsSignedIn(session) {
 | 
					 | 
				
			||||||
		r.Redirect("/")
 | 
					 | 
				
			||||||
		return
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	data["Title"] = "Log In"
 | 
						data["Title"] = "Log In"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if req.Method == "GET" {
 | 
						if req.Method == "GET" {
 | 
				
			||||||
@@ -128,11 +70,6 @@ func SignIn(form auth.LogInForm, data base.TmplData, req *http.Request, r render
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func SignOut(r render.Render, session sessions.Session) {
 | 
					func SignOut(r render.Render, session sessions.Session) {
 | 
				
			||||||
	if !IsSignedIn(session) {
 | 
					 | 
				
			||||||
		r.Redirect("/")
 | 
					 | 
				
			||||||
		return
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	session.Delete("userId")
 | 
						session.Delete("userId")
 | 
				
			||||||
	session.Delete("userName")
 | 
						session.Delete("userName")
 | 
				
			||||||
	r.Redirect("/")
 | 
						r.Redirect("/")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,6 +10,7 @@
 | 
				
			|||||||
                <input type="hidden" value="{{.UserId}}" name="userId"/>
 | 
					                <input type="hidden" value="{{.UserId}}" name="userId"/>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <div class="form-group">
 | 
					        <div class="form-group">
 | 
				
			||||||
            <label class="col-md-2 control-label">Repository<strong class="text-danger">*</strong></label>
 | 
					            <label class="col-md-2 control-label">Repository<strong class="text-danger">*</strong></label>
 | 
				
			||||||
            <div class="col-md-8">
 | 
					            <div class="col-md-8">
 | 
				
			||||||
@@ -17,12 +18,21 @@
 | 
				
			|||||||
                <span class="help-block">Great repository names are short and memorable. </span>
 | 
					                <span class="help-block">Great repository names are short and memorable. </span>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <div class="form-group">
 | 
				
			||||||
 | 
					            <label class="col-md-2 control-label">Visibility<strong class="text-danger">*</strong></label>
 | 
				
			||||||
 | 
					            <div class="col-md-8">
 | 
				
			||||||
 | 
					                <p class="form-control-static">Public</p>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <div class="form-group">
 | 
					        <div class="form-group">
 | 
				
			||||||
            <label class="col-md-2 control-label">Description</label>
 | 
					            <label class="col-md-2 control-label">Description</label>
 | 
				
			||||||
            <div class="col-md-8">
 | 
					            <div class="col-md-8">
 | 
				
			||||||
                <textarea name="desc" class="form-control" placeholder="Type your repository name"></textarea>
 | 
					                <textarea name="desc" class="form-control" placeholder="Type your repository name"></textarea>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <div class="form-group">
 | 
					        <div class="form-group">
 | 
				
			||||||
            <label class="col-md-2 control-label">Language</label>
 | 
					            <label class="col-md-2 control-label">Language</label>
 | 
				
			||||||
            <div class="col-md-8">
 | 
					            <div class="col-md-8">
 | 
				
			||||||
@@ -36,6 +46,7 @@
 | 
				
			|||||||
                </select>
 | 
					                </select>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <div class="form-group">
 | 
					        <div class="form-group">
 | 
				
			||||||
            <div class="col-md-8 col-md-offset-2">
 | 
					            <div class="col-md-8 col-md-offset-2">
 | 
				
			||||||
                <div class="checkbox">
 | 
					                <div class="checkbox">
 | 
				
			||||||
@@ -46,6 +57,7 @@
 | 
				
			|||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <div class="form-group">
 | 
					        <div class="form-group">
 | 
				
			||||||
            <div class="col-md-offset-2 col-md-8">
 | 
					            <div class="col-md-offset-2 col-md-8">
 | 
				
			||||||
                <button type="submit" class="btn btn-lg btn-primary">Create repository</button>
 | 
					                <button type="submit" class="btn btn-lg btn-primary">Create repository</button>
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										16
									
								
								web.go
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								web.go
									
									
									
									
									
								
							@@ -57,17 +57,17 @@ func runWeb(*cli.Context) {
 | 
				
			|||||||
	m.Use(sessions.Sessions("my_session", store))
 | 
						m.Use(sessions.Sessions("my_session", store))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Routers.
 | 
						// Routers.
 | 
				
			||||||
	m.Get("/", routers.Home)
 | 
						m.Get("/", auth.SignInRequire(false), routers.Home)
 | 
				
			||||||
	m.Any("/user/login", binding.BindIgnErr(auth.LogInForm{}), user.SignIn)
 | 
						m.Any("/user/login", auth.SignOutRequire(), binding.BindIgnErr(auth.LogInForm{}), user.SignIn)
 | 
				
			||||||
	m.Any("/user/logout", user.SignOut)
 | 
						m.Any("/user/logout", auth.SignInRequire(true), user.SignOut)
 | 
				
			||||||
	m.Any("/user/sign_up", binding.BindIgnErr(auth.RegisterForm{}), user.SignUp)
 | 
						m.Any("/user/sign_up", auth.SignOutRequire(), binding.BindIgnErr(auth.RegisterForm{}), user.SignUp)
 | 
				
			||||||
 | 
					 | 
				
			||||||
	m.Get("/user/profile", user.Profile) // should be /username
 | 
						m.Get("/user/profile", user.Profile) // should be /username
 | 
				
			||||||
	m.Any("/user/delete", user.Delete)
 | 
						m.Any("/user/delete", auth.SignInRequire(true), user.Delete)
 | 
				
			||||||
	m.Any("/user/publickey/add", user.AddPublicKey)
 | 
						m.Any("/user/publickey/add", user.AddPublicKey)
 | 
				
			||||||
	m.Any("/user/publickey/list", user.ListPublicKey)
 | 
						m.Any("/user/publickey/list", user.ListPublicKey)
 | 
				
			||||||
	m.Any("/repo/create", repo.Create)
 | 
					
 | 
				
			||||||
	m.Any("/repo/delete", repo.Delete)
 | 
						m.Any("/repo/create", auth.SignInRequire(true), repo.Create)
 | 
				
			||||||
 | 
						m.Any("/repo/delete", auth.SignInRequire(true), repo.Delete)
 | 
				
			||||||
	m.Any("/repo/list", repo.List)
 | 
						m.Any("/repo/list", repo.List)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	listenAddr := fmt.Sprintf("%s:%s",
 | 
						listenAddr := fmt.Sprintf("%s:%s",
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user