Skip to content

Commit

Permalink
Merge pull request #27 from ably/feature/INF-3250-add-ably-key-revoca…
Browse files Browse the repository at this point in the history
…ble-tokens-param

[INF-3250] - Add Token Revocation parameter for Ably Keys
  • Loading branch information
graham-russell authored Feb 1, 2024
2 parents 0938128 + 9537245 commit 3cf28e6
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"`
}

// 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, k.RevocableTokens)
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, k.RevocableTokens)

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

0 comments on commit 3cf28e6

Please sign in to comment.