From fb12c99c34c9c67bfe6ee8c6e34c3253460cde13 Mon Sep 17 00:00:00 2001 From: Till Faelligen Date: Wed, 27 Apr 2022 09:58:11 +0200 Subject: [PATCH] Add OpenID tests --- userapi/storage/interface.go | 8 ++++++-- userapi/storage/storage_test.go | 28 +++++++++++++++++++++++++--- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/userapi/storage/interface.go b/userapi/storage/interface.go index 160c99425..c89e13836 100644 --- a/userapi/storage/interface.go +++ b/userapi/storage/interface.go @@ -97,19 +97,23 @@ type LoginToken interface { GetLoginTokenDataByToken(ctx context.Context, token string) (*api.LoginTokenData, error) } +type OpenID interface { + CreateOpenIDToken(ctx context.Context, token, userID string) (exp int64, err error) + GetOpenIDTokenAttributes(ctx context.Context, token string) (*api.OpenIDTokenAttributes, error) +} + type Database interface { Account AccountData Device KeyBackup LoginToken + OpenID Profile SaveThreePIDAssociation(ctx context.Context, threepid, localpart, medium string) (err error) RemoveThreePIDAssociation(ctx context.Context, threepid string, medium string) (err error) GetLocalpartForThreePID(ctx context.Context, threepid string, medium string) (localpart string, err error) GetThreePIDsForLocalpart(ctx context.Context, localpart string) (threepids []authtypes.ThreePID, err error) - CreateOpenIDToken(ctx context.Context, token, localpart string) (exp int64, err error) - GetOpenIDTokenAttributes(ctx context.Context, token string) (*api.OpenIDTokenAttributes, error) InsertNotification(ctx context.Context, localpart, eventID string, pos int64, tweaks map[string]interface{}, n *api.Notification) error DeleteNotificationsUpTo(ctx context.Context, localpart, roomID string, pos int64) (affected bool, err error) diff --git a/userapi/storage/storage_test.go b/userapi/storage/storage_test.go index 1460423e6..146d329df 100644 --- a/userapi/storage/storage_test.go +++ b/userapi/storage/storage_test.go @@ -20,11 +20,13 @@ import ( const loginTokenLifetime = time.Minute +var openIDLifetimeMS = time.Minute.Milliseconds() + func mustCreateDatabase(t *testing.T, dbType test.DBType) (storage.Database, func()) { connStr, close := test.PrepareDBConnectionString(t, dbType) db, err := storage.NewUserAPIDatabase(&config.DatabaseOptions{ ConnectionString: config.DataSource(connStr), - }, "localhost", bcrypt.MinCost, time.Minute.Milliseconds(), loginTokenLifetime, "_server") + }, "localhost", bcrypt.MinCost, openIDLifetimeMS, loginTokenLifetime, "_server") if err != nil { t.Fatalf("NewUserAPIDatabase returned %s", err) } @@ -171,9 +173,8 @@ func Test_Devices(t *testing.T) { func Test_KeyBackup(t *testing.T) { ctx := context.Background() alice := test.NewUser() - //localpart, _, err := gomatrixserverlib.SplitID('@', alice.ID) - //assert.NoError(t, err) room := test.NewRoom(t, alice) + test.WithAllDatabases(t, func(t *testing.T, dbType test.DBType) { db, close := mustCreateDatabase(t, dbType) defer close() @@ -279,3 +280,24 @@ func Test_LoginToken(t *testing.T) { assert.Error(t, err, "expected an error, but got none") }) } + +func Test_OpenID(t *testing.T) { + ctx := context.Background() + alice := test.NewUser() + token := util.RandomString(24) + + test.WithAllDatabases(t, func(t *testing.T, dbType test.DBType) { + db, close := mustCreateDatabase(t, dbType) + defer close() + + expiresAtMS := time.Now().UnixNano()/int64(time.Millisecond) + openIDLifetimeMS + expires, err := db.CreateOpenIDToken(ctx, token, alice.ID) + assert.NoError(t, err, "unable to create OpenID token") + assert.Equal(t, expiresAtMS, expires) + + attributes, err := db.GetOpenIDTokenAttributes(ctx, token) + assert.NoError(t, err, "unable to get OpenID token attributes") + assert.Equal(t, alice.ID, attributes.UserID) + assert.Equal(t, expiresAtMS, attributes.ExpiresAtMS) + }) +}