mirror of
https://github.com/matrix-org/dendrite.git
synced 2026-01-05 21:23:10 -06:00
Add LoginToken tests
This commit is contained in:
parent
8be56eeb65
commit
4b977cefd5
|
|
@ -84,19 +84,7 @@ type KeyBackup interface {
|
||||||
CountBackupKeys(ctx context.Context, version, userID string) (count int64, err error)
|
CountBackupKeys(ctx context.Context, version, userID string) (count int64, err error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type Database interface {
|
type LoginToken interface {
|
||||||
Account
|
|
||||||
AccountData
|
|
||||||
Device
|
|
||||||
KeyBackup
|
|
||||||
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)
|
|
||||||
|
|
||||||
// CreateLoginToken generates a token, stores and returns it. The lifetime is
|
// CreateLoginToken generates a token, stores and returns it. The lifetime is
|
||||||
// determined by the loginTokenLifetime given to the Database constructor.
|
// determined by the loginTokenLifetime given to the Database constructor.
|
||||||
CreateLoginToken(ctx context.Context, data *api.LoginTokenData) (*api.LoginTokenMetadata, error)
|
CreateLoginToken(ctx context.Context, data *api.LoginTokenData) (*api.LoginTokenMetadata, error)
|
||||||
|
|
@ -107,6 +95,21 @@ type Database interface {
|
||||||
// GetLoginTokenDataByToken returns the data associated with the given token.
|
// GetLoginTokenDataByToken returns the data associated with the given token.
|
||||||
// May return sql.ErrNoRows.
|
// May return sql.ErrNoRows.
|
||||||
GetLoginTokenDataByToken(ctx context.Context, token string) (*api.LoginTokenData, error)
|
GetLoginTokenDataByToken(ctx context.Context, token string) (*api.LoginTokenData, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
type Database interface {
|
||||||
|
Account
|
||||||
|
AccountData
|
||||||
|
Device
|
||||||
|
KeyBackup
|
||||||
|
LoginToken
|
||||||
|
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
|
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)
|
DeleteNotificationsUpTo(ctx context.Context, localpart, roomID string, pos int64) (affected bool, err error)
|
||||||
|
|
|
||||||
|
|
@ -18,11 +18,13 @@ import (
|
||||||
"golang.org/x/crypto/bcrypt"
|
"golang.org/x/crypto/bcrypt"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const loginTokenLifetime = time.Minute
|
||||||
|
|
||||||
func mustCreateDatabase(t *testing.T, dbType test.DBType) (storage.Database, func()) {
|
func mustCreateDatabase(t *testing.T, dbType test.DBType) (storage.Database, func()) {
|
||||||
connStr, close := test.PrepareDBConnectionString(t, dbType)
|
connStr, close := test.PrepareDBConnectionString(t, dbType)
|
||||||
db, err := storage.NewUserAPIDatabase(&config.DatabaseOptions{
|
db, err := storage.NewUserAPIDatabase(&config.DatabaseOptions{
|
||||||
ConnectionString: config.DataSource(connStr),
|
ConnectionString: config.DataSource(connStr),
|
||||||
}, "localhost", bcrypt.MinCost, time.Minute.Milliseconds(), time.Minute, "_server")
|
}, "localhost", bcrypt.MinCost, time.Minute.Milliseconds(), loginTokenLifetime, "_server")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("NewUserAPIDatabase returned %s", err)
|
t.Fatalf("NewUserAPIDatabase returned %s", err)
|
||||||
}
|
}
|
||||||
|
|
@ -246,3 +248,34 @@ func Test_KeyBackup(t *testing.T) {
|
||||||
assert.False(t, exists)
|
assert.False(t, exists)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Test_LoginToken(t *testing.T) {
|
||||||
|
ctx := context.Background()
|
||||||
|
alice := test.NewUser()
|
||||||
|
test.WithAllDatabases(t, func(t *testing.T, dbType test.DBType) {
|
||||||
|
db, close := mustCreateDatabase(t, dbType)
|
||||||
|
defer close()
|
||||||
|
|
||||||
|
// create a new token
|
||||||
|
wantLoginToken := &api.LoginTokenData{UserID: alice.ID}
|
||||||
|
|
||||||
|
gotMetadata, err := db.CreateLoginToken(ctx, wantLoginToken)
|
||||||
|
assert.NoError(t, err, "unable to create login token")
|
||||||
|
assert.NotNil(t, gotMetadata)
|
||||||
|
assert.Equal(t, time.Now().Add(loginTokenLifetime).Truncate(loginTokenLifetime), gotMetadata.Expiration.Truncate(loginTokenLifetime))
|
||||||
|
|
||||||
|
// get the new token
|
||||||
|
gotLoginToken, err := db.GetLoginTokenDataByToken(ctx, gotMetadata.Token)
|
||||||
|
assert.NoError(t, err, "unable to get login token")
|
||||||
|
assert.NotNil(t, gotLoginToken)
|
||||||
|
assert.Equal(t, wantLoginToken, gotLoginToken, "unexpected login token")
|
||||||
|
|
||||||
|
// remove the login token again
|
||||||
|
err = db.RemoveLoginToken(ctx, gotMetadata.Token)
|
||||||
|
assert.NoError(t, err, "unable to remove login token")
|
||||||
|
|
||||||
|
// check if the token was actually deleted
|
||||||
|
_, err = db.GetLoginTokenDataByToken(ctx, gotMetadata.Token)
|
||||||
|
assert.Error(t, err, "expected an error, but got none")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue