Documentation
¶
Overview ¶
Package oauth1 enables management of OpenStack OAuth1 tokens and Authentication.
Example to Create an OAuth1 Consumer
createConsumerOpts := oauth1.CreateConsumerOpts{
Description: "My consumer",
}
consumer, err := oauth1.CreateConsumer(identityClient, createConsumerOpts).Extract()
if err != nil {
panic(err)
}
// NOTE: Consumer secret is available only on create response
fmt.Printf("Consumer: %+v\n", consumer)
Example to Request an unauthorized OAuth1 token
requestTokenOpts := oauth1.RequestTokenOpts{
OAuthConsumerKey: consumer.ID,
OAuthConsumerSecret: consumer.Secret,
OAuthSignatureMethod: oauth1.HMACSHA1,
RequestedProjectID: projectID,
}
requestToken, err := oauth1.RequestToken(identityClient, requestTokenOpts).Extract()
if err != nil {
panic(err)
}
// NOTE: Request token secret is available only on request response
fmt.Printf("Request token: %+v\n", requestToken)
Example to Authorize an unauthorized OAuth1 token
authorizeTokenOpts := oauth1.AuthorizeTokenOpts{
Roles: []oauth1.Role{
{Name: "member"},
},
}
authToken, err := oauth1.AuthorizeToken(identityClient, requestToken.OAuthToken, authorizeTokenOpts).Extract()
if err != nil {
panic(err)
}
fmt.Printf("Verifier ID of the unauthorized Token: %+v\n", authToken.OAuthVerifier)
Example to Create an OAuth1 Access Token
accessTokenOpts := oauth1.CreateAccessTokenOpts{
OAuthConsumerKey: consumer.ID,
OAuthConsumerSecret: consumer.Secret,
OAuthToken: requestToken.OAuthToken,
OAuthTokenSecret: requestToken.OAuthTokenSecret,
OAuthVerifier: authToken.OAuthVerifier,
OAuthSignatureMethod: oauth1.HMACSHA1,
}
accessToken, err := oauth1.CreateAccessToken(identityClient, accessTokenOpts).Extract()
if err != nil {
panic(err)
}
// NOTE: Access token secret is available only on create response
fmt.Printf("OAuth1 Access Token: %+v\n", accessToken)
Example to List User's OAuth1 Access Tokens
allPages, err := oauth1.ListAccessTokens(identityClient, userID).AllPages()
if err != nil {
panic(err)
}
accessTokens, err := oauth1.ExtractAccessTokens(allPages)
if err != nil {
panic(err)
}
for _, accessToken := range accessTokens {
fmt.Printf("Access Token: %+v\n", accessToken)
}
Example to Authenticate a client using OAuth1 method
client, err := openstack.NewClient("http://localhost:5000/v3")
if err != nil {
panic(err)
}
authOptions := &oauth1.AuthOptions{
// consumer token, created earlier
OAuthConsumerKey: consumer.ID,
OAuthConsumerSecret: consumer.Secret,
// access token, created earlier
OAuthToken: accessToken.OAuthToken,
OAuthTokenSecret: accessToken.OAuthTokenSecret,
OAuthSignatureMethod: oauth1.HMACSHA1,
}
err = openstack.AuthenticateV3(client, authOptions, gophercloud.EndpointOpts{})
if err != nil {
panic(err)
}
Example to Create a Token using OAuth1 method
var oauth1Token struct {
tokens.Token
oauth1.TokenExt
}
createOpts := &oauth1.AuthOptions{
// consumer token, created earlier
OAuthConsumerKey: consumer.ID,
OAuthConsumerSecret: consumer.Secret,
// access token, created earlier
OAuthToken: accessToken.OAuthToken,
OAuthTokenSecret: accessToken.OAuthTokenSecret,
OAuthSignatureMethod: oauth1.HMACSHA1,
}
err := tokens.Create(identityClient, createOpts).ExtractInto(&oauth1Token)
if err != nil {
panic(err)
}
Index ¶
- func Create(client *gophercloud.ServiceClient, opts tokens.AuthOptionsBuilder) (r tokens.CreateResult)
- func ListAccessTokenRoles(client *gophercloud.ServiceClient, userID string, id string) pagination.Pager
- func ListAccessTokens(client *gophercloud.ServiceClient, userID string) pagination.Pager
- func ListConsumers(client *gophercloud.ServiceClient) pagination.Pager
- type AccessToken
- type AccessTokenRole
- type AccessTokenRolesPage
- type AccessTokensPage
- type AuthOptions
- func (opts AuthOptions) CanReauth() bool
- func (opts AuthOptions) ToTokenV3CreateMap(map[string]interface{}) (map[string]interface{}, error)
- func (opts AuthOptions) ToTokenV3HeadersMap(headerOpts map[string]interface{}) (map[string]string, error)
- func (opts AuthOptions) ToTokenV3ScopeMap() (map[string]interface{}, error)
- type AuthorizeTokenOpts
- type AuthorizeTokenOptsBuilder
- type AuthorizeTokenResult
- type AuthorizedToken
- type Consumer
- type ConsumersPage
- type CreateAccessTokenOpts
- type CreateAccessTokenOptsBuilder
- type CreateConsumerOpts
- type CreateConsumerOptsBuilder
- type CreateConsumerResult
- type DeleteConsumerResult
- type GetAccessTokenResult
- type GetAccessTokenRoleResult
- type GetConsumerResult
- type OAuth1
- type RequestTokenOpts
- type RequestTokenOptsBuilder
- type RevokeAccessTokenResult
- type Role
- type SignatureMethod
- type Token
- type TokenExt
- type TokenResult
- type UpdateConsumerOpts
- type UpdateConsumerResult
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Create ¶
func Create(client *gophercloud.ServiceClient, opts tokens.AuthOptionsBuilder) (r tokens.CreateResult)
Create authenticates and either generates a new OpenStack token from an OAuth1 token.
func ListAccessTokenRoles ¶
func ListAccessTokenRoles(client *gophercloud.ServiceClient, userID string, id string) pagination.Pager
ListAccessTokenRoles enumerates authorized access token roles.
func ListAccessTokens ¶
func ListAccessTokens(client *gophercloud.ServiceClient, userID string) pagination.Pager
ListAccessTokens enumerates authorized access tokens.
func ListConsumers ¶
func ListConsumers(client *gophercloud.ServiceClient) pagination.Pager
List enumerates Consumers.
Types ¶
type AccessToken ¶
type AccessToken struct {
ID string `json:"id"`
ConsumerID string `json:"consumer_id"`
ProjectID string `json:"project_id"`
AuthorizingUserID string `json:"authorizing_user_id"`
ExpiresAt *time.Time `json:"-"`
}
AccessToken represents an AccessToken response as a struct.
func ExtractAccessTokens ¶
func ExtractAccessTokens(r pagination.Page) ([]AccessToken, error)
ExtractAccessTokens returns a slice of AccessTokens contained in a single page of results.
func (*AccessToken) UnmarshalJSON ¶
func (r *AccessToken) UnmarshalJSON(b []byte) error
type AccessTokenRole ¶
type AccessTokenRole struct {
ID string `json:"id"`
Name string `json:"name"`
DomainID string `json:"domain_id"`
}
AccessTokenRole represents an Access Token Role struct.
func ExtractAccessTokenRoles ¶
func ExtractAccessTokenRoles(r pagination.Page) ([]AccessTokenRole, error)
ExtractAccessTokenRoles returns a slice of AccessTokenRole contained in a single page of results.
type AccessTokenRolesPage ¶
type AccessTokenRolesPage struct {
pagination.LinkedPageBase
}
AccessTokenRolesPage is a single page of Access Token roles results.
func (AccessTokenRolesPage) IsEmpty ¶
func (r AccessTokenRolesPage) IsEmpty() (bool, error)
IsEmpty determines whether or not a an AccessTokensPage contains any results.
func (AccessTokenRolesPage) NextPageURL ¶
func (r AccessTokenRolesPage) NextPageURL() (string, error)
NextPageURL extracts the "next" link from the links section of the result.
type AccessTokensPage ¶
type AccessTokensPage struct {
pagination.LinkedPageBase
}
AccessTokensPage is a single page of Access Tokens results.
func (AccessTokensPage) IsEmpty ¶
func (r AccessTokensPage) IsEmpty() (bool, error)
IsEmpty determines whether or not a an AccessTokensPage contains any results.
func (AccessTokensPage) NextPageURL ¶
func (r AccessTokensPage) NextPageURL() (string, error)
NextPageURL extracts the "next" link from the links section of the result.
type AuthOptions ¶
type AuthOptions struct {
// OAuthConsumerKey is the OAuth1 Consumer Key.
OAuthConsumerKey string `q:"oauth_consumer_key" required:"true"`
// OAuthConsumerSecret is the OAuth1 Consumer Secret. Used to generate
// an OAuth1 request signature.
OAuthConsumerSecret string `required:"true"`
// OAuthToken is the OAuth1 Request Token.
OAuthToken string `q:"oauth_token" required:"true"`
// OAuthTokenSecret is the OAuth1 Request Token Secret. Used to generate
// an OAuth1 request signature.
OAuthTokenSecret string `required:"true"`
// OAuthSignatureMethod is the OAuth1 signature method the Consumer used
// to sign the request. Supported values are "HMAC-SHA1" or "PLAINTEXT".
// "PLAINTEXT" is not recommended for production usage.
OAuthSignatureMethod SignatureMethod `q:"oauth_signature_method" required:"true"`
// OAuthTimestamp is an OAuth1 request timestamp. If nil, current Unix
// timestamp will be used.
OAuthTimestamp *time.Time
// OAuthNonce is an OAuth1 request nonce. Nonce must be a random string,
// uniquely generated for each request. Will be generated automatically
// when it is not set.
OAuthNonce string `q:"oauth_nonce"`
// AllowReauth allows Gophercloud to re-authenticate automatically
// if/when your token expires.
AllowReauth bool
}
AuthOptions represents options for authenticating a user using OAuth1 tokens.
func (AuthOptions) CanReauth ¶
func (opts AuthOptions) CanReauth() bool
CanReauth allows AuthOptions to satisfy the tokens.AuthOptionsBuilder interface.
func (AuthOptions) ToTokenV3CreateMap ¶
func (opts AuthOptions) ToTokenV3CreateMap(map[string]interface{}) (map[string]interface{}, error)
ToTokenV3CreateMap builds a create request body.
func (AuthOptions) ToTokenV3HeadersMap ¶
func (opts AuthOptions) ToTokenV3HeadersMap(headerOpts map[string]interface{}) (map[string]string, error)
ToTokenV3HeadersMap builds the headers required for an OAuth1-based create request.
func (AuthOptions) ToTokenV3ScopeMap ¶
func (opts AuthOptions) ToTokenV3ScopeMap() (map[string]interface{}, error)
ToTokenV3ScopeMap allows AuthOptions to satisfy the tokens.AuthOptionsBuilder interface.
type AuthorizeTokenOpts ¶
type AuthorizeTokenOpts struct {
Roles []Role `json:"roles"`
}
AuthorizeTokenOpts provides options used to authorize a request token.
func (AuthorizeTokenOpts) ToOAuth1AuthorizeTokenMap ¶
func (opts AuthorizeTokenOpts) ToOAuth1AuthorizeTokenMap() (map[string]interface{}, error)
ToOAuth1AuthorizeTokenMap formats an AuthorizeTokenOpts into an authorize token request.
type AuthorizeTokenOptsBuilder ¶
type AuthorizeTokenOptsBuilder interface {
ToOAuth1AuthorizeTokenMap() (map[string]interface{}, error)
}
AuthorizeTokenOptsBuilder allows extensions to add additional parameters to the AuthorizeToken request.
type AuthorizeTokenResult ¶
type AuthorizeTokenResult struct {
gophercloud.Result
}
func AuthorizeToken ¶
func AuthorizeToken(client *gophercloud.ServiceClient, id string, opts AuthorizeTokenOptsBuilder) (r AuthorizeTokenResult)
AuthorizeToken authorizes an unauthorized consumer token.
func (AuthorizeTokenResult) Extract ¶
func (r AuthorizeTokenResult) Extract() (*AuthorizedToken, error)
Extract interprets AuthorizeTokenResult result as a AuthorizedToken.
type AuthorizedToken ¶
type AuthorizedToken struct {
// OAuthVerifier is the ID of the token verifier.
OAuthVerifier string `json:"oauth_verifier"`
}
AuthorizedToken contains an OAuth1 authorized token info.
type Consumer ¶
type Consumer struct {
ID string `json:"id"`
Secret string `json:"secret"`
Description string `json:"description"`
}
Consumer represents a delegated authorization request between two identities.
func ExtractConsumers ¶
func ExtractConsumers(r pagination.Page) ([]Consumer, error)
ExtractConsumers returns a slice of Consumers contained in a single page of results.
type ConsumersPage ¶
type ConsumersPage struct {
pagination.LinkedPageBase
}
ConsumersPage is a single page of Region results.
func (ConsumersPage) IsEmpty ¶
func (c ConsumersPage) IsEmpty() (bool, error)
IsEmpty determines whether or not a page of Consumers contains any results.
func (ConsumersPage) NextPageURL ¶
func (c ConsumersPage) NextPageURL() (string, error)
NextPageURL extracts the "next" link from the links section of the result.
type CreateAccessTokenOpts ¶
type CreateAccessTokenOpts struct {
// OAuthConsumerKey is the OAuth1 Consumer Key.
OAuthConsumerKey string `q:"oauth_consumer_key" required:"true"`
// OAuthConsumerSecret is the OAuth1 Consumer Secret. Used to generate
// an OAuth1 request signature.
OAuthConsumerSecret string `required:"true"`
// OAuthToken is the OAuth1 Request Token.
OAuthToken string `q:"oauth_token" required:"true"`
// OAuthTokenSecret is the OAuth1 Request Token Secret. Used to generate
// an OAuth1 request signature.
OAuthTokenSecret string `required:"true"`
// OAuthVerifier is the OAuth1 verification code.
OAuthVerifier string `q:"oauth_verifier" required:"true"`
// OAuthSignatureMethod is the OAuth1 signature method the Consumer used
// to sign the request. Supported values are "HMAC-SHA1" or "PLAINTEXT".
// "PLAINTEXT" is not recommended for production usage.
OAuthSignatureMethod SignatureMethod `q:"oauth_signature_method" required:"true"`
// OAuthTimestamp is an OAuth1 request timestamp. If nil, current Unix
// timestamp will be used.
OAuthTimestamp *time.Time
// OAuthNonce is an OAuth1 request nonce. Nonce must be a random string,
// uniquely generated for each request. Will be generated automatically
// when it is not set.
OAuthNonce string `q:"oauth_nonce"`
}
CreateAccessTokenOpts provides options used to create an OAuth1 token.
func (CreateAccessTokenOpts) ToOAuth1CreateAccessTokenHeaders ¶
func (opts CreateAccessTokenOpts) ToOAuth1CreateAccessTokenHeaders(method, u string) (map[string]string, error)
ToOAuth1CreateAccessTokenHeaders formats a CreateAccessTokenOpts into a map of request headers.
type CreateAccessTokenOptsBuilder ¶
type CreateAccessTokenOptsBuilder interface {
ToOAuth1CreateAccessTokenHeaders(string, string) (map[string]string, error)
}
CreateAccessTokenOptsBuilder allows extensions to add additional parameters to the CreateAccessToken request.
type CreateConsumerOpts ¶
type CreateConsumerOpts struct {
// Description is the consumer description.
Description string `json:"description"`
}
CreateConsumerOpts provides options used to create a new Consumer.
func (CreateConsumerOpts) ToOAuth1CreateConsumerMap ¶
func (opts CreateConsumerOpts) ToOAuth1CreateConsumerMap() (map[string]interface{}, error)
ToOAuth1CreateConsumerMap formats a CreateConsumerOpts into a create request.
type CreateConsumerOptsBuilder ¶
type CreateConsumerOptsBuilder interface {
ToOAuth1CreateConsumerMap() (map[string]interface{}, error)
}
CreateConsumerOptsBuilder allows extensions to add additional parameters to the CreateConsumer request.
type CreateConsumerResult ¶
type CreateConsumerResult struct {
// contains filtered or unexported fields
}
CreateConsumerResult is the response from a Create operation. Call its Extract method to interpret it as a Consumer.
func CreateConsumer ¶
func CreateConsumer(client *gophercloud.ServiceClient, opts CreateConsumerOptsBuilder) (r CreateConsumerResult)
Create creates a new Consumer.
type DeleteConsumerResult ¶
type DeleteConsumerResult struct {
gophercloud.ErrResult
}
DeleteConsumerResult is the response from a Delete operation. Call its ExtractErr to determine if the request succeeded or failed.
func DeleteConsumer ¶
func DeleteConsumer(client *gophercloud.ServiceClient, id string) (r DeleteConsumerResult)
Delete deletes a Consumer.
type GetAccessTokenResult ¶
type GetAccessTokenResult struct {
gophercloud.Result
}
func GetAccessToken ¶
func GetAccessToken(client *gophercloud.ServiceClient, userID string, id string) (r GetAccessTokenResult)
GetAccessToken retrieves details on a single OAuth1 access token by an ID.
func (GetAccessTokenResult) Extract ¶
func (r GetAccessTokenResult) Extract() (*AccessToken, error)
Extract interprets any GetAccessTokenResult result as an AccessToken.
type GetAccessTokenRoleResult ¶
type GetAccessTokenRoleResult struct {
gophercloud.Result
}
func GetAccessTokenRole ¶
func GetAccessTokenRole(client *gophercloud.ServiceClient, userID string, id string, roleID string) (r GetAccessTokenRoleResult)
GetAccessTokenRole retrieves details on a single OAuth1 access token role by an ID.
func (GetAccessTokenRoleResult) Extract ¶
func (r GetAccessTokenRoleResult) Extract() (*AccessTokenRole, error)
Extract interprets any GetAccessTokenRoleResult result as an AccessTokenRole.
type GetConsumerResult ¶
type GetConsumerResult struct {
// contains filtered or unexported fields
}
GetConsumerResult is the response from a Get operation. Call its Extract method to interpret it as a Consumer.
func GetConsumer ¶
func GetConsumer(client *gophercloud.ServiceClient, id string) (r GetConsumerResult)
GetConsumer retrieves details on a single Consumer by ID.
type OAuth1 ¶
type OAuth1 struct {
AccessTokenID string `json:"access_token_id"`
ConsumerID string `json:"consumer_id"`
}
OAuth1 is an OAuth1 object, returned in OAuth1 token result.
type RequestTokenOpts ¶
type RequestTokenOpts struct {
// OAuthConsumerKey is the OAuth1 Consumer Key.
OAuthConsumerKey string `q:"oauth_consumer_key" required:"true"`
// OAuthConsumerSecret is the OAuth1 Consumer Secret. Used to generate
// an OAuth1 request signature.
OAuthConsumerSecret string `required:"true"`
// OAuthSignatureMethod is the OAuth1 signature method the Consumer used
// to sign the request. Supported values are "HMAC-SHA1" or "PLAINTEXT".
// "PLAINTEXT" is not recommended for production usage.
OAuthSignatureMethod SignatureMethod `q:"oauth_signature_method" required:"true"`
// OAuthTimestamp is an OAuth1 request timestamp. If nil, current Unix
// timestamp will be used.
OAuthTimestamp *time.Time
// OAuthNonce is an OAuth1 request nonce. Nonce must be a random string,
// uniquely generated for each request. Will be generated automatically
// when it is not set.
OAuthNonce string `q:"oauth_nonce"`
// RequestedProjectID is a Project ID a consumer user requested an
// access to.
RequestedProjectID string `h:"Requested-Project-Id"`
}
RequestTokenOpts provides options used to get a consumer unauthorized request token.
func (RequestTokenOpts) ToOAuth1RequestTokenHeaders ¶
func (opts RequestTokenOpts) ToOAuth1RequestTokenHeaders(method, u string) (map[string]string, error)
ToOAuth1RequestTokenHeaders formats a RequestTokenOpts into a map of request headers.
type RequestTokenOptsBuilder ¶
type RequestTokenOptsBuilder interface {
ToOAuth1RequestTokenHeaders(string, string) (map[string]string, error)
}
RequestTokenOptsBuilder allows extensions to add additional parameters to the RequestToken request.
type RevokeAccessTokenResult ¶
type RevokeAccessTokenResult struct {
gophercloud.ErrResult
}
RevokeAccessTokenResult is the response from a Delete operation. Call its ExtractErr to determine if the request succeeded or failed.
func RevokeAccessToken ¶
func RevokeAccessToken(client *gophercloud.ServiceClient, userID string, id string) (r RevokeAccessTokenResult)
RevokeAccessToken revokes an OAuth1 access token.
type SignatureMethod ¶
type SignatureMethod string
Type SignatureMethod is a OAuth1 SignatureMethod type.
const ( // HMACSHA1 is a recommended OAuth1 signature method. HMACSHA1 SignatureMethod = "HMAC-SHA1" // PLAINTEXT signature method is not recommended to be used in // production environment. PLAINTEXT SignatureMethod = "PLAINTEXT" // OAuth1TokenContentType is a supported content type for an OAuth1 // token. OAuth1TokenContentType = "application/x-www-form-urlencoded" )
type Token ¶
type Token struct {
// OAuthToken is the key value for the oauth token that the Identity API returns.
OAuthToken string `q:"oauth_token"`
// OAuthTokenSecret is the secret value associated with the OAuth Token.
OAuthTokenSecret string `q:"oauth_token_secret"`
// OAuthExpiresAt is the date and time when an OAuth token expires.
OAuthExpiresAt *time.Time `q:"-"`
}
Token contains an OAuth1 token.
type TokenExt ¶
type TokenExt struct {
OAuth1 OAuth1 `json:"OS-OAUTH1"`
}
TokenExt represents an extension of the base token result.
type TokenResult ¶
type TokenResult struct {
gophercloud.Result
Body []byte
}
TokenResult is a struct to handle "Content-Type: application/x-www-form-urlencoded" response.
func CreateAccessToken ¶
func CreateAccessToken(client *gophercloud.ServiceClient, opts CreateAccessTokenOptsBuilder) (r TokenResult)
CreateAccessToken creates a new OAuth1 Access Token
func RequestToken ¶
func RequestToken(client *gophercloud.ServiceClient, opts RequestTokenOptsBuilder) (r TokenResult)
RequestToken requests an unauthorized OAuth1 Token.
func (TokenResult) Extract ¶
func (r TokenResult) Extract() (*Token, error)
Extract interprets any OAuth1 token result as a Token.
type UpdateConsumerOpts ¶
type UpdateConsumerOpts struct {
// Description is the consumer description.
Description string `json:"description"`
}
UpdateConsumerOpts provides options used to update a consumer.
func (UpdateConsumerOpts) ToOAuth1UpdateConsumerMap ¶
func (opts UpdateConsumerOpts) ToOAuth1UpdateConsumerMap() (map[string]interface{}, error)
ToOAuth1UpdateConsumerMap formats an UpdateConsumerOpts into a consumer update request.
type UpdateConsumerResult ¶
type UpdateConsumerResult struct {
// contains filtered or unexported fields
}
UpdateConsumerResult is the response from a Create operation. Call its Extract method to interpret it as a Consumer.
func UpdateConsumer ¶
func UpdateConsumer(client *gophercloud.ServiceClient, id string, opts UpdateConsumerOpts) (r UpdateConsumerResult)
UpdateConsumer updates an existing Consumer.