Tie AccessProvider back to service Provider.
To issue a revokation request, I needed to know the Identity API
endpoint. This endpoint exists in the Provider used to create the
AccessProvider. This change threads a link back to the Provider.
diff --git a/authenticate.go b/authenticate.go
index 7665304..edd447c 100644
--- a/authenticate.go
+++ b/authenticate.go
@@ -44,6 +44,7 @@
Token Token
ServiceCatalog []CatalogEntry
User User
+ provider Provider `json:"-"`
}
// Token encapsulates an authentication token and when it expires. It also includes
@@ -125,6 +126,9 @@
&access,
},
})
+ if err == nil {
+ access.provider = p
+ }
return access, err
}
@@ -142,5 +146,12 @@
// See AccessProvider interface definition for details.
func (a *Access) Revoke(tok string) error {
- return nil
+ url := a.provider.AuthEndpoint + "/" + tok
+ err := perigee.Delete(url, perigee.Options{
+ MoreHeaders: map[string]string{
+ "X-Auth-Token": a.AuthToken(),
+ },
+ OkCodes: []int{204},
+ })
+ return err
}
diff --git a/authenticate_test.go b/authenticate_test.go
index e08a0a6..1d4d1f5 100644
--- a/authenticate_test.go
+++ b/authenticate_test.go
@@ -53,7 +53,7 @@
`
func TestAuthProvider(t *testing.T) {
- tt := newTransport()
+ tt := newTransport().WithResponse(SUCCESSFUL_RESPONSE)
c := TestContext().UseCustomClient(&http.Client{
Transport: tt,
})
@@ -86,7 +86,7 @@
}
func TestTenantIdEncoding(t *testing.T) {
- tt := newTransport()
+ tt := newTransport().WithResponse(SUCCESSFUL_RESPONSE)
c := TestContext().
UseCustomClient(&http.Client{
Transport: tt,
@@ -126,7 +126,7 @@
func TestUserNameAndPassword(t *testing.T) {
c := TestContext().
WithProvider("provider", Provider{AuthEndpoint: "http://localhost/"}).
- UseCustomClient(&http.Client{Transport: newTransport()})
+ UseCustomClient(&http.Client{Transport: newTransport().WithResponse(SUCCESSFUL_RESPONSE)})
credentials := []AuthOptions{
AuthOptions{},
diff --git a/reauth_test.go b/reauth_test.go
index c1911e3..62d3e7e 100644
--- a/reauth_test.go
+++ b/reauth_test.go
@@ -107,6 +107,9 @@
func (my *MyAccess) AuthToken() string {
return ""
}
+func (my *MyAccess) Revoke(string) error {
+ return nil
+}
func TestReauthHandlerUsesSameAccessProvider(t *testing.T) {
fakeAccess := &MyAccess{}
diff --git a/servers_test.go b/servers_test.go
index 46ba6db..d95fa40 100644
--- a/servers_test.go
+++ b/servers_test.go
@@ -20,6 +20,10 @@
return ""
}
+func (ta *testAccess) Revoke(string) error {
+ return nil
+}
+
func TestGetServersApi(t *testing.T) {
c := TestContext().UseCustomClient(&http.Client{Transport: newTransport().WithResponse("Hello")})