From 7356153ba3c19ff49f3ecfa28bac0b8bb38eccb9 Mon Sep 17 00:00:00 2001
From: Unknown <joe2010xtmf@163.com>
Date: Sat, 22 Mar 2014 17:59:22 -0400
Subject: [PATCH] Batch updates

---
 README.md                  |  4 ++--
 conf/app.ini               | 10 ++++++++--
 modules/base/conf.go       |  4 ++++
 modules/middleware/auth.go |  3 +++
 routers/admin/user.go      |  2 +-
 routers/repo/issue.go      |  2 +-
 routers/repo/repo.go       |  8 ++++----
 routers/user/user.go       | 21 ++++++++++++++++++---
 8 files changed, 41 insertions(+), 13 deletions(-)

diff --git a/README.md b/README.md
index 89a346d602..325c3a9736 100644
--- a/README.md
+++ b/README.md
@@ -43,8 +43,8 @@ There are two ways to install Gogs:
 ## Acknowledgments
 
 - Logo is inspired by [martini](https://github.com/martini-contrib).
-- Mail Service is based on [WeTalk](https://github.com/beego/wetalk).
-- System Monitor Status is based on [GoBlog](https://github.com/fuxiaohei/goblog).
+- Mail Service, modules design is inspired by [WeTalk](https://github.com/beego/wetalk).
+- System Monitor Status is inspired by [GoBlog](https://github.com/fuxiaohei/goblog).
 
 ## Contributors
 
diff --git a/conf/app.ini b/conf/app.ini
index 7f283012fd..b051557f41 100644
--- a/conf/app.ini
+++ b/conf/app.ini
@@ -107,7 +107,7 @@ SERVICE = server
 PATH = data/pictures
 
 [log]
-; Either "console", "file", "conn" or "smtp", default is "console"
+; Either "console", "file", "conn", "smtp" or "database", default is "console"
 MODE = console
 ; Buffer length of channel, keep it as it is if you don't know what it is.
 BUFFER_LEN = 10000
@@ -156,4 +156,10 @@ HOST =
 USER = 
 PASSWD =
 ; Receivers, can be one or more, e.g. ["1@example.com","2@example.com"]
-RECEIVERS = 
\ No newline at end of file
+RECEIVERS = 
+
+; For "database" mode only
+[log.database]
+LEVEL = 
+Driver = 
+CONN = 
\ No newline at end of file
diff --git a/modules/base/conf.go b/modules/base/conf.go
index cdbe2b36ce..19f587077b 100644
--- a/modules/base/conf.go
+++ b/modules/base/conf.go
@@ -143,6 +143,10 @@ func newLogService() {
 			Cfg.MustValue(modeSec, "HOST", "127.0.0.1:25"),
 			Cfg.MustValue(modeSec, "RECEIVERS", "[]"),
 			Cfg.MustValue(modeSec, "SUBJECT", "Diagnostic message from serve"))
+	case "database":
+		LogConfig = fmt.Sprintf(`{"level":%s,"driver":%s,"conn":%s}`, level,
+			Cfg.MustValue(modeSec, "Driver"),
+			Cfg.MustValue(modeSec, "CONN"))
 	}
 
 	log.NewLogger(Cfg.MustInt64("log", "BUFFER_LEN", 10000), LogMode, LogConfig)
diff --git a/modules/middleware/auth.go b/modules/middleware/auth.go
index 3224b3df91..82c3367c48 100644
--- a/modules/middleware/auth.go
+++ b/modules/middleware/auth.go
@@ -5,6 +5,8 @@
 package middleware
 
 import (
+	"net/url"
+
 	"github.com/codegangsta/martini"
 
 	"github.com/gogits/gogs/modules/base"
@@ -35,6 +37,7 @@ func Toggle(options *ToggleOptions) martini.Handler {
 
 		if options.SignInRequire {
 			if !ctx.IsSigned {
+				ctx.SetCookie("redirect_to", "/"+url.QueryEscape(ctx.Req.RequestURI))
 				ctx.Redirect("/user/login")
 				return
 			} else if !ctx.User.IsActive && base.Service.RegisterEmailConfirm {
diff --git a/routers/admin/user.go b/routers/admin/user.go
index fa27d11664..7f66c5528c 100644
--- a/routers/admin/user.go
+++ b/routers/admin/user.go
@@ -140,5 +140,5 @@ func DeleteUser(ctx *middleware.Context, params martini.Params) {
 	log.Trace("%s User deleted by admin(%s): %s", ctx.Req.RequestURI,
 		ctx.User.LowerName, ctx.User.LowerName)
 
-	ctx.Redirect("/admin/users", 302)
+	ctx.Redirect("/admin/users")
 }
diff --git a/routers/repo/issue.go b/routers/repo/issue.go
index 154e8308ab..4cc007e9ee 100644
--- a/routers/repo/issue.go
+++ b/routers/repo/issue.go
@@ -56,7 +56,7 @@ func CreateIssue(ctx *middleware.Context, params martini.Params, form auth.Creat
 		form.IssueName, form.Labels, form.Content, false)
 	if err == nil {
 		log.Trace("%s Issue created: %d", form.RepoId, issue.Id)
-		ctx.Redirect(fmt.Sprintf("/%s/%s/issues/%d", params["username"], params["reponame"], issue.Index), 302)
+		ctx.Redirect(fmt.Sprintf("/%s/%s/issues/%d", params["username"], params["reponame"], issue.Index))
 		return
 	}
 	ctx.Handle(200, "issue.CreateIssue", err)
diff --git a/routers/repo/repo.go b/routers/repo/repo.go
index c436d38714..4782d64f70 100644
--- a/routers/repo/repo.go
+++ b/routers/repo/repo.go
@@ -40,7 +40,7 @@ func Create(ctx *middleware.Context, form auth.CreateRepoForm) {
 		form.Language, form.License, form.Visibility == "private", form.InitReadme == "on")
 	if err == nil {
 		log.Trace("%s Repository created: %s/%s", ctx.Req.RequestURI, ctx.User.LowerName, form.RepoName)
-		ctx.Redirect("/"+ctx.User.Name+"/"+form.RepoName, 302)
+		ctx.Redirect("/" + ctx.User.Name + "/" + form.RepoName)
 		return
 	} else if err == models.ErrRepoAlreadyExist {
 		ctx.RenderWithErr("Repository name has already been used", "repo/create", &form)
@@ -73,7 +73,7 @@ func SettingPost(ctx *middleware.Context) {
 	}
 
 	log.Trace("%s Repository deleted: %s/%s", ctx.Req.RequestURI, ctx.User.LowerName, ctx.Repo.Repository.LowerName)
-	ctx.Redirect("/", 302)
+	ctx.Redirect("/")
 }
 
 func Branches(ctx *middleware.Context, params martini.Params) {
@@ -113,8 +113,8 @@ func Single(ctx *middleware.Context, params martini.Params) {
 	treename := params["_1"]
 
 	if len(treename) > 0 && treename[len(treename)-1] == '/' {
-		ctx.Redirect("/"+ctx.Repo.Owner.LowerName+"/"+
-			ctx.Repo.Repository.Name+"/src/"+params["branchname"]+"/"+treename[:len(treename)-1], 302)
+		ctx.Redirect("/" + ctx.Repo.Owner.LowerName + "/" +
+			ctx.Repo.Repository.Name + "/src/" + params["branchname"] + "/" + treename[:len(treename)-1])
 		return
 	}
 
diff --git a/routers/user/user.go b/routers/user/user.go
index 56bc5f8e37..c34b529ec3 100644
--- a/routers/user/user.go
+++ b/routers/user/user.go
@@ -6,6 +6,7 @@ package user
 
 import (
 	"fmt"
+	"net/url"
 	"strings"
 
 	"github.com/codegangsta/martini"
@@ -109,7 +110,13 @@ func SignIn(ctx *middleware.Context, form auth.LogInForm) {
 		isSucceed = true
 		ctx.Session.Set("userId", user.Id)
 		ctx.Session.Set("userName", user.Name)
-		ctx.Redirect("/")
+		redirectTo, _ := url.QueryUnescape(ctx.GetCookie("redirect_to"))
+		if len(redirectTo) > 0 {
+			ctx.SetCookie("redirect_to", "", -1)
+			ctx.Redirect(redirectTo)
+		} else {
+			ctx.Redirect("/")
+		}
 		return
 	}
 
@@ -139,12 +146,20 @@ func SignIn(ctx *middleware.Context, form auth.LogInForm) {
 
 	ctx.Session.Set("userId", user.Id)
 	ctx.Session.Set("userName", user.Name)
-	ctx.Redirect("/")
+	redirectTo, _ := url.QueryUnescape(ctx.GetCookie("redirect_to"))
+	if len(redirectTo) > 0 {
+		ctx.SetCookie("redirect_to", "", -1)
+		ctx.Redirect(redirectTo)
+	} else {
+		ctx.Redirect("/")
+	}
 }
 
 func SignOut(ctx *middleware.Context) {
 	ctx.Session.Delete("userId")
 	ctx.Session.Delete("userName")
+	ctx.SetCookie(base.CookieUserName, "", -1)
+	ctx.SetCookie(base.CookieRememberName, "", -1)
 	ctx.Redirect("/")
 }
 
@@ -314,7 +329,7 @@ func Activate(ctx *middleware.Context) {
 
 		ctx.Session.Set("userId", user.Id)
 		ctx.Session.Set("userName", user.Name)
-		ctx.Redirect("/", 302)
+		ctx.Redirect("/")
 		return
 	}