From f174633b36ef102d8e8324dd708b96335188f5dd Mon Sep 17 00:00:00 2001
From: Unknown <joe2010xtmf@163.com>
Date: Sat, 15 Mar 2014 09:17:16 -0400
Subject: [PATCH] Clean code

---
 modules/log/log.go            | 12 --------
 modules/middleware/context.go | 11 +++++--
 routers/dashboard.go          |  5 ++--
 routers/repo/repo.go          | 14 ++++-----
 routers/repo/single.go        |  6 ++--
 routers/user/setting.go       | 11 +++----
 routers/user/user.go          | 55 +++++++++++++++++------------------
 templates/base/footer.tmpl    |  2 +-
 8 files changed, 56 insertions(+), 60 deletions(-)

diff --git a/modules/log/log.go b/modules/log/log.go
index b3a3e0a63c..0634bde655 100644
--- a/modules/log/log.go
+++ b/modules/log/log.go
@@ -6,13 +6,7 @@
 package log
 
 import (
-	"fmt"
-
-	"github.com/martini-contrib/render"
-
 	"github.com/gogits/logs"
-
-	"github.com/gogits/gogs/modules/base"
 )
 
 var logger *logs.BeeLogger
@@ -41,9 +35,3 @@ func Warn(format string, v ...interface{}) {
 func Critical(format string, v ...interface{}) {
 	logger.Critical(format, v...)
 }
-
-func Handle(status int, title string, data base.TmplData, r render.Render, err error) {
-	data["ErrorMsg"] = err
-	Error("%s: %v", title, err)
-	r.HTML(status, fmt.Sprintf("status/%d", status), data)
-}
diff --git a/modules/middleware/context.go b/modules/middleware/context.go
index 3167823794..dccd3351c7 100644
--- a/modules/middleware/context.go
+++ b/modules/middleware/context.go
@@ -5,6 +5,7 @@
 package middleware
 
 import (
+	"fmt"
 	"net/http"
 
 	"github.com/codegangsta/martini"
@@ -17,6 +18,7 @@ import (
 	"github.com/gogits/gogs/modules/log"
 )
 
+// Context represents context of a request.
 type Context struct {
 	c        martini.Context
 	p        martini.Params
@@ -29,6 +31,7 @@ type Context struct {
 	IsSigned bool
 }
 
+// Query querys form parameter.
 func (ctx *Context) Query(name string) string {
 	ctx.Req.ParseForm()
 	return ctx.Req.Form.Get(name)
@@ -38,10 +41,14 @@ func (ctx *Context) Query(name string) string {
 // 	return ctx.p[name]
 // }
 
-func (ctx *Context) Log(status int, title string, err error) {
-	log.Handle(status, title, ctx.Data, ctx.Render, err)
+// Handle handles and logs error by given status.
+func (ctx *Context) Handle(status int, title string, err error) {
+	ctx.Data["ErrorMsg"] = err
+	log.Error("%s: %v", title, err)
+	ctx.Render.HTML(status, fmt.Sprintf("status/%d", status), ctx.Data)
 }
 
+// InitContext initializes a classic context for a request.
 func InitContext() martini.Handler {
 	return func(res http.ResponseWriter, r *http.Request, c martini.Context,
 		session sessions.Session, rd render.Render) {
diff --git a/routers/dashboard.go b/routers/dashboard.go
index a75445003a..de9378b0fa 100644
--- a/routers/dashboard.go
+++ b/routers/dashboard.go
@@ -10,12 +10,13 @@ import (
 
 	"github.com/gogits/gogs/modules/auth"
 	"github.com/gogits/gogs/modules/base"
+	"github.com/gogits/gogs/modules/middleware"
 	"github.com/gogits/gogs/routers/user"
 )
 
-func Home(r render.Render, data base.TmplData, session sessions.Session) {
+func Home(ctx *middleware.Context, r render.Render, data base.TmplData, session sessions.Session) {
 	if auth.IsSignedIn(session) {
-		user.Dashboard(r, data, session)
+		user.Dashboard(ctx)
 		return
 	}
 	data["PageIsHome"] = true
diff --git a/routers/repo/repo.go b/routers/repo/repo.go
index 5aee4cdae4..f920a70c19 100644
--- a/routers/repo/repo.go
+++ b/routers/repo/repo.go
@@ -13,10 +13,10 @@ import (
 	"github.com/gogits/gogs/models"
 	"github.com/gogits/gogs/modules/auth"
 	"github.com/gogits/gogs/modules/base"
-	"github.com/gogits/gogs/modules/log"
+	"github.com/gogits/gogs/modules/middleware"
 )
 
-func Create(form auth.CreateRepoForm, req *http.Request, r render.Render, data base.TmplData, session sessions.Session) {
+func Create(form auth.CreateRepoForm, ctx *middleware.Context, req *http.Request, r render.Render, data base.TmplData, session sessions.Session) {
 	data["Title"] = "Create repository"
 
 	if req.Method == "GET" {
@@ -61,10 +61,10 @@ func Create(form auth.CreateRepoForm, req *http.Request, r render.Render, data b
 		return
 	}
 
-	log.Handle(200, "repo.Create", data, r, err)
+	ctx.Handle(200, "repo.Create", err)
 }
 
-func Delete(form auth.DeleteRepoForm, req *http.Request, r render.Render, data base.TmplData, session sessions.Session) {
+func Delete(form auth.DeleteRepoForm, ctx *middleware.Context, req *http.Request, r render.Render, data base.TmplData, session sessions.Session) {
 	data["Title"] = "Delete repository"
 
 	if req.Method == "GET" {
@@ -73,14 +73,14 @@ func Delete(form auth.DeleteRepoForm, req *http.Request, r render.Render, data b
 	}
 
 	if err := models.DeleteRepository(form.UserId, form.RepoId, form.UserName); err != nil {
-		log.Handle(200, "repo.Delete", data, r, err)
+		ctx.Handle(200, "repo.Delete", err)
 		return
 	}
 
 	r.Redirect("/", 302)
 }
 
-func List(req *http.Request, r render.Render, data base.TmplData, session sessions.Session) {
+func List(ctx *middleware.Context, req *http.Request, r render.Render, data base.TmplData, session sessions.Session) {
 	u := auth.SignedInUser(session)
 	if u != nil {
 		r.Redirect("/")
@@ -90,7 +90,7 @@ func List(req *http.Request, r render.Render, data base.TmplData, session sessio
 	data["Title"] = "Repositories"
 	repos, err := models.GetRepositories(u)
 	if err != nil {
-		log.Handle(200, "repo.List", data, r, err)
+		ctx.Handle(200, "repo.List", err)
 		return
 	}
 
diff --git a/routers/repo/single.go b/routers/repo/single.go
index fc6661d05c..605eb231f3 100644
--- a/routers/repo/single.go
+++ b/routers/repo/single.go
@@ -7,10 +7,10 @@ import (
 
 	"github.com/gogits/gogs/models"
 	"github.com/gogits/gogs/modules/base"
-	"github.com/gogits/gogs/modules/log"
+	"github.com/gogits/gogs/modules/middleware"
 )
 
-func Single(params martini.Params, r render.Render, data base.TmplData) {
+func Single(params martini.Params, ctx *middleware.Context, r render.Render, data base.TmplData) {
 	if !data["IsRepositoryValid"].(bool) {
 		return
 	}
@@ -21,7 +21,7 @@ func Single(params martini.Params, r render.Render, data base.TmplData) {
 	files, err := models.GetReposFiles(params["username"], params["reponame"],
 		params["branchname"], treename)
 	if err != nil {
-		log.Handle(200, "repo.Single", data, r, err)
+		ctx.Handle(200, "repo.Single", err)
 		return
 	}
 	data["Username"] = params["username"]
diff --git a/routers/user/setting.go b/routers/user/setting.go
index 8b5a2d18df..347aec4e03 100644
--- a/routers/user/setting.go
+++ b/routers/user/setting.go
@@ -15,9 +15,10 @@ import (
 	"github.com/gogits/gogs/modules/auth"
 	"github.com/gogits/gogs/modules/base"
 	"github.com/gogits/gogs/modules/log"
+	"github.com/gogits/gogs/modules/middleware"
 )
 
-func Setting(form auth.UpdateProfileForm, r render.Render, data base.TmplData, req *http.Request, session sessions.Session) {
+func Setting(form auth.UpdateProfileForm, ctx *middleware.Context, r render.Render, data base.TmplData, req *http.Request, session sessions.Session) {
 	data["Title"] = "Setting"
 	data["PageIsUserSetting"] = true
 
@@ -40,7 +41,7 @@ func Setting(form auth.UpdateProfileForm, r render.Render, data base.TmplData, r
 	user.Avatar = base.EncodeMd5(form.Avatar)
 	user.AvatarEmail = form.Avatar
 	if err := models.UpdateUser(user); err != nil {
-		log.Handle(200, "setting.Setting", data, r, err)
+		ctx.Handle(200, "setting.Setting", err)
 		return
 	}
 
@@ -48,7 +49,7 @@ func Setting(form auth.UpdateProfileForm, r render.Render, data base.TmplData, r
 	r.HTML(200, "user/setting", data)
 }
 
-func SettingPassword(form auth.UpdatePasswdForm, r render.Render, data base.TmplData, session sessions.Session, req *http.Request) {
+func SettingPassword(form auth.UpdatePasswdForm, ctx *middleware.Context, r render.Render, data base.TmplData, session sessions.Session, req *http.Request) {
 	data["Title"] = "Password"
 	data["PageIsUserSetting"] = true
 
@@ -60,7 +61,7 @@ func SettingPassword(form auth.UpdatePasswdForm, r render.Render, data base.Tmpl
 	user := auth.SignedInUser(session)
 	newUser := &models.User{Passwd: form.NewPasswd}
 	if err := newUser.EncodePasswd(); err != nil {
-		log.Handle(200, "setting.SettingPassword", data, r, err)
+		ctx.Handle(200, "setting.SettingPassword", err)
 		return
 	}
 
@@ -73,7 +74,7 @@ func SettingPassword(form auth.UpdatePasswdForm, r render.Render, data base.Tmpl
 	} else {
 		user.Passwd = newUser.Passwd
 		if err := models.UpdateUser(user); err != nil {
-			log.Handle(200, "setting.SettingPassword", data, r, err)
+			ctx.Handle(200, "setting.SettingPassword", err)
 			return
 		}
 		data["IsSuccess"] = true
diff --git a/routers/user/user.go b/routers/user/user.go
index c66904a24f..9dbcb2a190 100644
--- a/routers/user/user.go
+++ b/routers/user/user.go
@@ -15,27 +15,26 @@ import (
 	"github.com/gogits/gogs/models"
 	"github.com/gogits/gogs/modules/auth"
 	"github.com/gogits/gogs/modules/base"
-	"github.com/gogits/gogs/modules/log"
 	"github.com/gogits/gogs/modules/middleware"
 )
 
-func Dashboard(r render.Render, data base.TmplData, session sessions.Session) {
-	data["Title"] = "Dashboard"
-	data["PageIsUserDashboard"] = true
-	repos, err := models.GetRepositories(&models.User{Id: auth.SignedInId(session)})
+func Dashboard(ctx *middleware.Context) {
+	ctx.Data["Title"] = "Dashboard"
+	ctx.Data["PageIsUserDashboard"] = true
+	repos, err := models.GetRepositories(&models.User{Id: ctx.User.Id})
 	if err != nil {
-		log.Handle(200, "user.Dashboard", data, r, err)
+		ctx.Handle(200, "user.Dashboard", err)
 		return
 	}
-	data["MyRepos"] = repos
+	ctx.Data["MyRepos"] = repos
 
-	feeds, err := models.GetFeeds(auth.SignedInId(session), 0, false)
+	feeds, err := models.GetFeeds(ctx.User.Id, 0, false)
 	if err != nil {
-		log.Handle(200, "user.Dashboard", data, r, err)
+		ctx.Handle(200, "user.Dashboard", err)
 		return
 	}
-	data["Feeds"] = feeds
-	r.HTML(200, "user/dashboard", data)
+	ctx.Data["Feeds"] = feeds
+	ctx.Render.HTML(200, "user/dashboard", ctx.Data)
 }
 
 func Profile(ctx *middleware.Context, params martini.Params) {
@@ -44,7 +43,7 @@ func Profile(ctx *middleware.Context, params martini.Params) {
 	// TODO: Need to check view self or others.
 	user, err := models.GetUserByName(params["username"])
 	if err != nil {
-		ctx.Log(200, "user.Profile", err)
+		ctx.Handle(200, "user.Profile", err)
 		return
 	}
 
@@ -57,7 +56,7 @@ func Profile(ctx *middleware.Context, params martini.Params) {
 	case "activity":
 		feeds, err := models.GetFeeds(user.Id, 0, true)
 		if err != nil {
-			ctx.Log(200, "user.Profile", err)
+			ctx.Handle(200, "user.Profile", err)
 			return
 		}
 		ctx.Data["Feeds"] = feeds
@@ -68,30 +67,30 @@ func Profile(ctx *middleware.Context, params martini.Params) {
 	ctx.Render.HTML(200, "user/profile", ctx.Data)
 }
 
-func SignIn(form auth.LogInForm, data base.TmplData, req *http.Request, r render.Render, session sessions.Session) {
-	data["Title"] = "Log In"
+func SignIn(form auth.LogInForm, ctx *middleware.Context, r render.Render, session sessions.Session) {
+	ctx.Data["Title"] = "Log In"
 
-	if req.Method == "GET" {
-		r.HTML(200, "user/signin", data)
+	if ctx.Req.Method == "GET" {
+		ctx.Render.HTML(200, "user/signin", ctx.Data)
 		return
 	}
 
-	if hasErr, ok := data["HasError"]; ok && hasErr.(bool) {
-		r.HTML(200, "user/signin", data)
+	if hasErr, ok := ctx.Data["HasError"]; ok && hasErr.(bool) {
+		ctx.Render.HTML(200, "user/signin", ctx.Data)
 		return
 	}
 
 	user, err := models.LoginUserPlain(form.UserName, form.Password)
 	if err != nil {
 		if err.Error() == models.ErrUserNotExist.Error() {
-			data["HasError"] = true
-			data["ErrorMsg"] = "Username or password is not correct"
-			auth.AssignForm(form, data)
-			r.HTML(200, "user/signin", data)
+			ctx.Data["HasError"] = true
+			ctx.Data["ErrorMsg"] = "Username or password is not correct"
+			auth.AssignForm(form, ctx.Data)
+			ctx.Render.HTML(200, "user/signin", ctx.Data)
 			return
 		}
 
-		log.Handle(200, "user.SignIn", data, r, err)
+		ctx.Handle(200, "user.SignIn", err)
 		return
 	}
 
@@ -106,7 +105,7 @@ func SignOut(r render.Render, session sessions.Session) {
 	r.Redirect("/")
 }
 
-func SignUp(form auth.RegisterForm, data base.TmplData, req *http.Request, r render.Render) {
+func SignUp(form auth.RegisterForm, ctx *middleware.Context, data base.TmplData, req *http.Request, r render.Render) {
 	data["Title"] = "Sign Up"
 	data["PageIsSignUp"] = true
 
@@ -148,7 +147,7 @@ func SignUp(form auth.RegisterForm, data base.TmplData, req *http.Request, r ren
 			data["ErrorMsg"] = "E-mail address has been already used"
 			r.HTML(200, "user/signup", data)
 		default:
-			log.Handle(200, "user.SignUp", data, r, err)
+			ctx.Handle(200, "user.SignUp", err)
 		}
 		return
 	}
@@ -156,7 +155,7 @@ func SignUp(form auth.RegisterForm, data base.TmplData, req *http.Request, r ren
 	r.Redirect("/user/login")
 }
 
-func Delete(data base.TmplData, req *http.Request, session sessions.Session, r render.Render) {
+func Delete(data base.TmplData, ctx *middleware.Context, req *http.Request, session sessions.Session, r render.Render) {
 	data["Title"] = "Delete Account"
 
 	if req.Method == "GET" {
@@ -172,7 +171,7 @@ func Delete(data base.TmplData, req *http.Request, session sessions.Session, r r
 		case models.ErrUserOwnRepos.Error():
 			data["ErrorMsg"] = "Your account still have ownership of repository, you have to delete or transfer them first."
 		default:
-			log.Handle(200, "user.Delete", data, r, err)
+			ctx.Handle(200, "user.Delete", err)
 			return
 		}
 	}
diff --git a/templates/base/footer.tmpl b/templates/base/footer.tmpl
index 0f17c5ea64..09466e9e9a 100644
--- a/templates/base/footer.tmpl
+++ b/templates/base/footer.tmpl
@@ -10,7 +10,7 @@
 <footer id="footer">
 	<div class="container footer-wrap">
 		<p>
-			© 2014 Gogs. ver {{AppVer}}. <a target="_blank" href="https://github.com/gogits/gogs">GitHub</a>
+			© 2014 Gogs · ver {{AppVer}} · <i class="fa fa-github"></i><a target="_blank" href="https://github.com/gogits/gogs">GitHub</a>
 		</p>
 		<p class="desc"></p>
 	</div>