Skip to content

Commit eb0c848

Browse files
SagePtrlunny
authored andcommitted
Use native go method to get current user rather than environment variable (#4930)
* Use native go method to get current user rather than environment var * Use t.Skip instead of return in test
1 parent 637c5fe commit eb0c848

File tree

2 files changed

+48
-10
lines changed

2 files changed

+48
-10
lines changed

modules/user/user.go

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,29 @@
44

55
package user
66

7-
import "os"
7+
import (
8+
"os"
9+
"os/user"
10+
"runtime"
11+
"strings"
12+
)
813

914
// CurrentUsername return current login OS user name
1015
func CurrentUsername() string {
16+
userinfo, err := user.Current()
17+
if err != nil {
18+
return fallbackCurrentUsername()
19+
}
20+
username := userinfo.Username
21+
if runtime.GOOS == "windows" {
22+
parts := strings.Split(username, "\\")
23+
username = parts[len(parts)-1]
24+
}
25+
return username
26+
}
27+
28+
// Old method, used if new method doesn't work on your OS for some reason
29+
func fallbackCurrentUsername() string {
1130
curUserName := os.Getenv("USER")
1231
if len(curUserName) > 0 {
1332
return curUserName

modules/user/user_test.go

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,40 @@ package user
22

33
import (
44
"os"
5+
"os/exec"
6+
"runtime"
7+
"strings"
58
"testing"
69
)
710

8-
func TestCurrentUsername(t *testing.T) {
9-
os.Setenv("USER", "")
10-
os.Setenv("USERNAME", "foobar")
11+
func getWhoamiOutput() (string, error) {
12+
output, err := exec.Command("whoami").Output()
13+
if err != nil {
14+
return "", err
15+
}
16+
return strings.TrimSpace(string(output[:])), nil
17+
}
1118

19+
func TestCurrentUsername(t *testing.T) {
1220
user := CurrentUsername()
13-
if user != "foobar" {
14-
t.Errorf("expected foobar as user, got: %s", user)
21+
if len(user) <= 0 {
22+
t.Errorf("expected non-empty user, got: %s", user)
1523
}
16-
17-
os.Setenv("USER", "gitea")
24+
// Windows whoami is weird, so just skip remaining tests
25+
if runtime.GOOS == "windows" {
26+
t.Skip("skipped test because of weird whoami on Windows")
27+
}
28+
whoami, err := getWhoamiOutput()
29+
if err != nil {
30+
t.Errorf("failed to run whoami to test current user: %f", err)
31+
}
32+
user = CurrentUsername()
33+
if user != whoami {
34+
t.Errorf("expected %s as user, got: %s", whoami, user)
35+
}
36+
os.Setenv("USER", "spoofed")
1837
user = CurrentUsername()
19-
if user != "gitea" {
20-
t.Errorf("expected gitea as user, got: %s", user)
38+
if user != whoami {
39+
t.Errorf("expected %s as user, got: %s", whoami, user)
2140
}
2241
}

0 commit comments

Comments
 (0)