github.com/keybase/client/go@v0.0.0-20240309051027-028f7c731f8b/kbnm/hostmanifest/user.go (about) 1 package hostmanifest 2 3 import ( 4 "os/user" 5 ) 6 7 // User is an interface for an OS user. 8 type User interface { 9 // IsAdmin returns true if the user is root, usually uid == 0 10 IsAdmin() bool 11 // PrefixPath is where paths relative to that user should be. Usually $HOME. 12 PrefixPath() string 13 } 14 15 // UserPath is a straightforward implementation of User. 16 type UserPath struct { 17 Admin bool 18 Path string 19 } 20 21 // IsAdmin implements User. 22 func (u *UserPath) IsAdmin() bool { return u.Admin } 23 24 // PrefixPath implements User. 25 func (u *UserPath) PrefixPath() string { return u.Path } 26 27 // CurrentUser returns a UserPath representing the current user. 28 func CurrentUser() (*UserPath, error) { 29 current, err := user.Current() 30 if err != nil { 31 return nil, err 32 } 33 u := &UserPath{ 34 Admin: current.Uid == "0", 35 } 36 if !u.IsAdmin() { 37 u.Path = current.HomeDir 38 } 39 return u, nil 40 }