Skip to content

Commit

Permalink
[INF-3250] - Add Token Revocation parameter for Ably Keys
Browse files Browse the repository at this point in the history
Ably keys support token revocation. This commit updates ably-control-go to allow configuring this.

Ably key tests have also been updated with the Token revocation parameter.

More information on Token Revocation can be found in the Ably documentation https://ably.com/docs/auth/revocation
  • Loading branch information
graham-russell committed Jan 31, 2024
1 parent 0938128 commit 5ca7907
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 4 deletions.
6 changes: 6 additions & 0 deletions keys.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ type Key struct {
Created int `json:"created"`
// Unix timestamp representing the date and time of the last modification of the key.
Modified int `json:"modified"`
// (Token revocation is a security mechanism allowing an app to invalidate authentication tokens,
// primarily used against malicious clients. Implementation sets tokens' maximum time-to-live (TTL) to one hour.)
RevocableTokens bool `json:"revocableTokens"`
}

// A struct representing the settable fields of an Ably key.
Expand All @@ -28,6 +31,9 @@ type NewKey struct {
// The capabilities that this key has. More information on capabilities
// can be found in the Ably documentation https://ably.com/documentation/core-features/authentication#capabilities-explained.
Capability map[string][]string `json:"capability"`
// Enable Revocable Tokens. More information on Token Revocation can be
// found in the Ably documentation https://ably.com/docs/auth/revocation
RevocableTokens bool `json:"revocableTokens,omitempty"`
}

// Keys lists the API keys associated with the application ID.
Expand Down
12 changes: 8 additions & 4 deletions keys_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,17 @@ func TestKeys(t *testing.T) {
name := "test-key-" + fmt.Sprint(rand.Uint64())

key := NewKey{
Name: name,
Capability: map[string][]string{"a": {"subscribe"}},
Name: name,
Capability: map[string][]string{"a": {"subscribe"}},
RevocableTokens: true,
}

k, err := client.CreateKey(app.ID, &key)
assert.NoError(t, err)
assert.Equal(t, key.Name, k.Name)
assert.Equal(t, key.Capability, k.Capability)
assert.Equal(t, k.Status, 0)
assert.Equal(t, key.RevocableTokens, true)
assert.NotEmpty(t, k.AppID)
assert.NotEmpty(t, k.Created)
assert.NotEmpty(t, k.Modified)
Expand All @@ -35,14 +37,16 @@ func TestKeys(t *testing.T) {
assert.NotEmpty(t, keys)

key = NewKey{
Name: name + "-changed",
Capability: map[string][]string{"b": {"publish"}},
Name: name + "-changed",
Capability: map[string][]string{"b": {"publish"}},
RevocableTokens: false,
}

k, err = client.UpdateKey(app.ID, k.ID, &key)
assert.NoError(t, err)
assert.Equal(t, key.Name, k.Name)
assert.Equal(t, key.Capability, k.Capability)
assert.Equal(t, key.RevocableTokens, false)

err = client.RevokeKey(app.ID, k.ID)
assert.NoError(t, err)
Expand Down

0 comments on commit 5ca7907

Please sign in to comment.