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  }