github.com/DaAlbrecht/cf-cli@v0.0.0-20231128151943-1fe19bb400b9/util/configv3/default_user_config.go (about) 1 package configv3 2 3 import ( 4 "github.com/SermoDigital/jose/jws" 5 ) 6 7 type DefaultUserConfig struct { 8 // ConfigFile stores the configuration from the .cf/config 9 ConfigFile *JSONConfig 10 } 11 12 // CurrentUser returns user information decoded from the JWT access token in 13 // .cf/config.json. 14 func (config DefaultUserConfig) CurrentUser() (User, error) { 15 return decodeUserFromJWT(config.ConfigFile.AccessToken) 16 } 17 18 // CurrentUserName returns the name of a user as returned by CurrentUser() 19 func (config DefaultUserConfig) CurrentUserName() (string, error) { 20 user, err := config.CurrentUser() 21 if err != nil { 22 return "", err 23 } 24 return user.Name, nil 25 } 26 27 func decodeUserFromJWT(accessToken string) (User, error) { 28 if accessToken == "" { 29 return User{}, nil 30 } 31 32 token, err := jws.ParseJWT([]byte(accessToken[7:])) 33 if err != nil { 34 return User{}, err 35 } 36 37 claims := token.Claims() 38 39 var name, GUID, origin string 40 var isClient bool 41 if claims.Has("user_name") { 42 name = claims.Get("user_name").(string) 43 GUID = claims.Get("user_id").(string) 44 origin = claims.Get("origin").(string) 45 isClient = false 46 } else { 47 name = claims.Get("client_id").(string) 48 GUID = name 49 isClient = true 50 } 51 52 return User{ 53 Name: name, 54 GUID: GUID, 55 Origin: origin, 56 IsClient: isClient, 57 }, nil 58 }