// NewUser builds a new User object for Github. func NewUser(data objx.Map, creds *common.Credentials, provider common.Provider) *User { user := &User{data} creds.Set(common.CredentialsKeyID, data[spotifyKeyID]) // set provider credentials user.data[common.UserKeyProviderCredentials] = map[string]*common.Credentials{ provider.Name(): creds, } return user }
// Get executes an authenticated HTTP GET against the given provider and returns an // objx.Map of the response. // // The response type is automatically detected and used to unmarshal the response. func Get(provider common.Provider, creds *common.Credentials, endpoint string) (objx.Map, error) { client, clientErr := provider.GetClient(creds) if clientErr != nil { return nil, clientErr } response, responseErr := client.Get(endpoint) if responseErr != nil { return nil, responseErr } body, bodyErr := ioutil.ReadAll(response.Body) if bodyErr != nil { return nil, bodyErr } defer response.Body.Close() codecs := services.NewWebCodecService() codec, getCodecErr := codecs.GetCodec(response.Header.Get("Content-Type")) if getCodecErr != nil { return nil, getCodecErr } var data objx.Map unmarshalErr := codec.Unmarshal(body, &data) if unmarshalErr != nil { return nil, unmarshalErr } return data, nil }
// ProviderPublicData gets the public data for the specified provider. // // The options should contain the `loginpathFormat`, which will determine how the // loginpath value is created. func ProviderPublicData(provider common.Provider, options map[string]interface{}) (interface{}, error) { optionsx := objx.New(options) return map[string]interface{}{ "name": provider.Name(), "display": provider.DisplayName(), "loginpath": fmt.Sprintf(optionsx.Get("loginpathFormat").Str("auth/%s/login"), provider.Name()), }, nil }