From 0d38794c7f9b25b2e602cb0d2f686e74cd1ab1cb Mon Sep 17 00:00:00 2001
From: Paolo Borelli <pborelli@gnome.org>
Date: Fri, 31 Jul 2015 08:50:11 +0200
Subject: [PATCH] Factor out function to get the current user

The same logic was duplicated in three places. Factor it
out so that we can add further fallbacks in a single place.
---
 modules/setting/setting.go |  6 ++----
 modules/user/user.go       | 18 ++++++++++++++++++
 routers/install.go         | 11 +++--------
 3 files changed, 23 insertions(+), 12 deletions(-)
 create mode 100644 modules/user/user.go

diff --git a/modules/setting/setting.go b/modules/setting/setting.go
index acd3aae689..79e47c8901 100644
--- a/modules/setting/setting.go
+++ b/modules/setting/setting.go
@@ -24,6 +24,7 @@ import (
 	"github.com/gogits/gogs/modules/bindata"
 	"github.com/gogits/gogs/modules/log"
 	// "github.com/gogits/gogs/modules/ssh"
+	"github.com/gogits/gogs/modules/user"
 )
 
 type Scheme string
@@ -309,10 +310,7 @@ func NewConfigContext() {
 	}[Cfg.Section("time").Key("FORMAT").MustString("RFC1123")]
 
 	RunUser = Cfg.Section("").Key("RUN_USER").String()
-	curUser := os.Getenv("USER")
-	if len(curUser) == 0 {
-		curUser = os.Getenv("USERNAME")
-	}
+	curUser := user.CurrentUsername()
 	// Does not check run user when the install lock is off.
 	if InstallLock && RunUser != curUser {
 		log.Fatal(4, "Expect user(%s) but current user is: %s", RunUser, curUser)
diff --git a/modules/user/user.go b/modules/user/user.go
new file mode 100644
index 0000000000..8a2557f327
--- /dev/null
+++ b/modules/user/user.go
@@ -0,0 +1,18 @@
+// 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 user
+
+import (
+       "os"
+)
+
+func CurrentUsername() string {
+	curUserName := os.Getenv("USER")
+	if len(curUserName) > 0 {
+		return curUserName
+	}
+
+	return os.Getenv("USERNAME")
+}
diff --git a/routers/install.go b/routers/install.go
index 3d3e899763..8fed105fc2 100644
--- a/routers/install.go
+++ b/routers/install.go
@@ -26,6 +26,7 @@ import (
 	"github.com/gogits/gogs/modules/middleware"
 	"github.com/gogits/gogs/modules/setting"
 	"github.com/gogits/gogs/modules/social"
+	"github.com/gogits/gogs/modules/user"
 )
 
 const (
@@ -111,10 +112,7 @@ func Install(ctx *middleware.Context) {
 	// Note(unknwon): it's hard for Windows users change a running user,
 	// 	so just use current one if config says default.
 	if setting.IsWindows && setting.RunUser == "git" {
-		form.RunUser = os.Getenv("USER")
-		if len(form.RunUser) == 0 {
-			form.RunUser = os.Getenv("USERNAME")
-		}
+		form.RunUser = user.CurrentUsername()
 	} else {
 		form.RunUser = setting.RunUser
 	}
@@ -201,10 +199,7 @@ func InstallPost(ctx *middleware.Context, form auth.InstallForm) {
 	}
 
 	// Check run user.
-	curUser := os.Getenv("USER")
-	if len(curUser) == 0 {
-		curUser = os.Getenv("USERNAME")
-	}
+	curUser := user.CurrentUsername()
 	if form.RunUser != curUser {
 		ctx.Data["Err_RunUser"] = true
 		ctx.RenderWithErr(ctx.Tr("install.run_user_not_match", form.RunUser, curUser), INSTALL, &form)