From 5373a3093eaf9bc9ced7a6b3335ccf1b17fd343e Mon Sep 17 00:00:00 2001
From: Unknown <joe2010xtmf@163.com>
Date: Fri, 21 Mar 2014 01:59:15 -0400
Subject: [PATCH] config option: Require sign in to view repository

---
 conf/app.ini               | 2 ++
 modules/base/conf.go       | 2 ++
 modules/middleware/auth.go | 2 +-
 web.go                     | 3 ++-
 4 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/conf/app.ini b/conf/app.ini
index d38cd1f05e..d4fdc0dcf7 100644
--- a/conf/app.ini
+++ b/conf/app.ini
@@ -42,6 +42,8 @@ RESET_PASSWD_CODE_LIVE_MINUTES = 180
 REGISTER_EMAIL_CONFIRM = false
 ; Does not allow register and admin create account only
 DISENABLE_REGISTERATION = false
+; User must sign in to view anything.
+REQUIRE_SIGNIN_VIEW = false
 
 [mailer]
 ENABLED = false
diff --git a/modules/base/conf.go b/modules/base/conf.go
index 42d50da4f3..3050b915fa 100644
--- a/modules/base/conf.go
+++ b/modules/base/conf.go
@@ -41,6 +41,7 @@ var (
 var Service struct {
 	RegisterEmailConfirm   bool
 	DisenableRegisteration bool
+	RequireSignInView      bool
 	ActiveCodeLives        int
 	ResetPwdCodeLives      int
 }
@@ -70,6 +71,7 @@ func newService() {
 	Service.ActiveCodeLives = Cfg.MustInt("service", "ACTIVE_CODE_LIVE_MINUTES", 180)
 	Service.ResetPwdCodeLives = Cfg.MustInt("service", "RESET_PASSWD_CODE_LIVE_MINUTES", 180)
 	Service.DisenableRegisteration = Cfg.MustBool("service", "DISENABLE_REGISTERATION", false)
+	Service.RequireSignInView = Cfg.MustBool("service", "REQUIRE_SIGNIN_VIEW", false)
 }
 
 func newLogService() {
diff --git a/modules/middleware/auth.go b/modules/middleware/auth.go
index 44033abb8f..f211de32b9 100644
--- a/modules/middleware/auth.go
+++ b/modules/middleware/auth.go
@@ -15,7 +15,7 @@ func SignInRequire(redirect bool) martini.Handler {
 	return func(ctx *Context) {
 		if !ctx.IsSigned {
 			if redirect {
-				ctx.Redirect("/")
+				ctx.Redirect("/user/login")
 			}
 			return
 		} else if !ctx.User.IsActive && base.Service.RegisterEmailConfirm {
diff --git a/web.go b/web.go
index 648cb9d79c..6fe838aa78 100644
--- a/web.go
+++ b/web.go
@@ -87,7 +87,8 @@ func runWeb(*cli.Context) {
 
 	m.Use(middleware.InitContext())
 
-	reqSignIn, ignSignIn := middleware.SignInRequire(true), middleware.SignInRequire(false)
+	reqSignIn := middleware.SignInRequire(true)
+	ignSignIn := middleware.SignInRequire(base.Service.RequireSignInView)
 	reqSignOut := middleware.SignOutRequire()
 	// Routers.
 	m.Get("/", ignSignIn, routers.Home)