Skip to content
This repository was archived by the owner on Aug 1, 2023. It is now read-only.

Commit b764089

Browse files
author
hzlouchao
committed
modify according jrperritt's suggestion
1 parent f6e2926 commit b764089

File tree

3 files changed

+55
-14
lines changed

3 files changed

+55
-14
lines changed

openstack/identity/v2/tokens/requests.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -91,12 +91,12 @@ func Create(client *gophercloud.ServiceClient, auth AuthOptionsBuilder) CreateRe
9191

9292
// Validates and retrieves information for user's token.
9393
func Get(client *gophercloud.ServiceClient, token string) GetResult {
94-
var result GetResult
95-
_, result.Err = client.Get(CreateGetURL(client, token), &result.Body, &gophercloud.RequestOpts{
96-
OkCodes: []int{200, 203},
97-
})
98-
if result.Err != nil {
99-
return result
100-
}
101-
return result
102-
}
94+
var result GetResult
95+
_, result.Err = client.Get(GetURL(client, token), &result.Body, &gophercloud.RequestOpts{
96+
OkCodes: []int{200, 203},
97+
})
98+
if result.Err != nil {
99+
return result
100+
}
101+
return result
102+
}

openstack/identity/v2/tokens/results.go

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ type Token struct {
2323

2424
// Tenant provides information about the tenant to which this token grants access.
2525
Tenant tenants.Tenant
26+
27+
// the owner user of token
28+
UserName string
29+
UserID string
2630
}
2731

2832
// Endpoint represents a single API endpoint offered by a service.
@@ -76,7 +80,7 @@ type CreateResult struct {
7680

7781
// GetResult is the deferred response from a Get call.
7882
type GetResult struct {
79-
gophercloud.Result
83+
gophercloud.Result
8084
}
8185

8286
// ExtractToken returns the just-created Token from a CreateResult.
@@ -136,3 +140,40 @@ func (result CreateResult) ExtractServiceCatalog() (*ServiceCatalog, error) {
136140
func createErr(err error) CreateResult {
137141
return CreateResult{gophercloud.Result{Err: err}}
138142
}
143+
144+
// ExtractToken returns the Token from a GetResult.
145+
func (result GetResult) ExtractToken() (*Token, error) {
146+
if result.Err != nil {
147+
return nil, result.Err
148+
}
149+
150+
var response struct {
151+
Access struct {
152+
Token struct {
153+
Expires string `mapstructure:"expires"`
154+
ID string `mapstructure:"id"`
155+
} `mapstructure:"token"`
156+
User struct {
157+
ID string `mapstructure:"id"`
158+
Name string `mapstructure:"name"`
159+
} `mapstructure:"user"`
160+
} `mapstructure:"access"`
161+
}
162+
163+
err := mapstructure.Decode(result.Body, &response)
164+
if err != nil {
165+
return nil, err
166+
}
167+
168+
expiresTs, err := time.Parse(gophercloud.RFC3339Milli, response.Access.Token.Expires)
169+
if err != nil {
170+
return nil, err
171+
}
172+
173+
return &Token{
174+
ID: response.Access.Token.ID,
175+
ExpiresAt: expiresTs,
176+
UserID: response.Access.User.ID,
177+
UserName: response.Access.User.Name,
178+
}, nil
179+
}

openstack/identity/v2/tokens/urls.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ func CreateURL(client *gophercloud.ServiceClient) string {
77
return client.ServiceURL("tokens")
88
}
99

10-
// CreateGetURL generates the URL used to Validate Tokens.
11-
func CreateGetURL(client *gophercloud.ServiceClient, token string) string {
12-
return client.ServiceURL("tokens", token)
13-
}
10+
// GetURL generates the URL used to Validate Tokens.
11+
func GetURL(client *gophercloud.ServiceClient, token string) string {
12+
return client.ServiceURL("tokens", token)
13+
}

0 commit comments

Comments
 (0)