From 54d25c13d7a5f52d44680626c45d84d0193091a0 Mon Sep 17 00:00:00 2001
From: Unknwon <joe2010xtmf@163.com>
Date: Mon, 24 Nov 2014 18:47:59 -0500
Subject: [PATCH] Fix #543

---
 conf/app.ini               |  2 ++
 modules/middleware/auth.go |  6 ++++++
 modules/setting/setting.go | 15 +++++++++++++++
 3 files changed, 23 insertions(+)

diff --git a/conf/app.ini b/conf/app.ini
index 6374c2423f..e0620f31d6 100644
--- a/conf/app.ini
+++ b/conf/app.ini
@@ -29,6 +29,8 @@ KEY_FILE = custom/https/key.pem
 STATIC_ROOT_PATH =
 ; Application level GZIP support
 ENABLE_GZIP = false
+; Landing page for non-logged users, can be "home" or "explore"
+LANDING_PAGE = home
 
 [database]
 ; Either "mysql", "postgres" or "sqlite3", it's your choice
diff --git a/modules/middleware/auth.go b/modules/middleware/auth.go
index fc8e94bbd0..94bb1c14a4 100644
--- a/modules/middleware/auth.go
+++ b/modules/middleware/auth.go
@@ -29,6 +29,12 @@ func Toggle(options *ToggleOptions) macaron.Handler {
 			return
 		}
 
+		// Checking non-logged users landing page.
+		if !ctx.IsSigned && ctx.Req.RequestURI == "/" && setting.LandingPageUrl != setting.LANDING_PAGE_HOME {
+			ctx.Redirect(string(setting.LandingPageUrl))
+			return
+		}
+
 		// Redirect to dashboard if user tries to visit any non-login page.
 		if options.SignOutRequire && ctx.IsSigned && ctx.Req.RequestURI != "/" {
 			ctx.Redirect(setting.AppSubUrl + "/")
diff --git a/modules/setting/setting.go b/modules/setting/setting.go
index cf34c2edc6..a775847c1f 100644
--- a/modules/setting/setting.go
+++ b/modules/setting/setting.go
@@ -31,6 +31,13 @@ const (
 	FCGI  Scheme = "fcgi"
 )
 
+type LandingPage string
+
+const (
+	LANDING_PAGE_HOME    LandingPage = "/"
+	LANDING_PAGE_EXPLORE LandingPage = "/explore"
+)
+
 var (
 	// App settings.
 	AppVer    string
@@ -48,6 +55,7 @@ var (
 	CertFile, KeyFile  string
 	StaticRootPath     string
 	EnableGzip         bool
+	LandingPageUrl     LandingPage
 
 	// Security settings.
 	InstallLock          bool
@@ -197,6 +205,13 @@ func NewConfigContext() {
 	LogRootPath = Cfg.MustValue("log", "ROOT_PATH", path.Join(workDir, "log"))
 	EnableGzip = Cfg.MustBool("server", "ENABLE_GZIP")
 
+	switch Cfg.MustValue("server", "LANDING_PAGE", "home") {
+	case "explore":
+		LandingPageUrl = LANDING_PAGE_EXPLORE
+	default:
+		LandingPageUrl = LANDING_PAGE_HOME
+	}
+
 	InstallLock = Cfg.MustBool("security", "INSTALL_LOCK")
 	SecretKey = Cfg.MustValue("security", "SECRET_KEY")
 	LogInRememberDays = Cfg.MustInt("security", "LOGIN_REMEMBER_DAYS")