From b7be327a370368932ff390968acffaa1ce6d55a0 Mon Sep 17 00:00:00 2001 From: aeneasr <3372410+aeneasr@users.noreply.github.com> Date: Wed, 2 Mar 2022 09:36:15 +0100 Subject: [PATCH] feat(identity): add identity credentials helpers --- identity/identity.go | 21 +++++++++++++++++++++ identity/identity_test.go | 24 ++++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/identity/identity.go b/identity/identity.go index 472416cb941..aba41567d90 100644 --- a/identity/identity.go +++ b/identity/identity.go @@ -216,6 +216,27 @@ func (i *Identity) DeleteCredentialsType(t CredentialsType) { delete(i.Credentials, t) } +func (i *Identity) GetCredentialsOr(t CredentialsType, or *Credentials) *Credentials { + c, ok := i.GetCredentials(t) + if !ok { + return or + } + return c +} + +func (i *Identity) UpsertCredentialsConfig(t CredentialsType, conf []byte) { + c, ok := i.GetCredentials(t) + if !ok { + c = &Credentials{} + } + + c.Type = t + c.IdentityID = i.ID + c.Config = conf + + i.SetCredentials(t, *c) +} + func (i *Identity) GetCredentials(t CredentialsType) (*Credentials, bool) { i.lock().RLock() defer i.lock().RUnlock() diff --git a/identity/identity_test.go b/identity/identity_test.go index 304f7979370..49a2b4b7d52 100644 --- a/identity/identity_test.go +++ b/identity/identity_test.go @@ -29,6 +29,30 @@ func TestNewIdentity(t *testing.T) { assert.True(t, i.IsActive()) } +func TestIdentityCredentialsOr(t *testing.T) { + i := NewIdentity(config.DefaultIdentityTraitsSchemaID) + i.Credentials = nil + + expected := &Credentials{ID: x.NewUUID(), Type: CredentialsTypePassword} + assert.Equal(t, expected, i.GetCredentialsOr(CredentialsTypePassword, expected)) + + expected = &Credentials{ID: x.NewUUID(), Type: CredentialsTypeWebAuthn} + i.SetCredentials(CredentialsTypeWebAuthn, *expected) + + assert.Equal(t, expected, i.GetCredentialsOr(CredentialsTypeWebAuthn, nil)) +} + +func TestIdentityCredentialsOrCreate(t *testing.T) { + i := NewIdentity(config.DefaultIdentityTraitsSchemaID) + i.Credentials = nil + + expected := &Credentials{Config: []byte("true"), IdentityID: i.ID, Type: CredentialsTypePassword} + i.UpsertCredentialsConfig(CredentialsTypePassword, []byte("true")) + actual, ok := i.GetCredentials(CredentialsTypePassword) + assert.True(t, ok) + assert.Equal(t, expected, actual) +} + func TestIdentityCredentials(t *testing.T) { i := NewIdentity(config.DefaultIdentityTraitsSchemaID) i.Credentials = nil