Files

94 lines
2.9 KiB
Go
Raw Permalink Normal View History

2020-12-31 02:07:32 +04:00
package client
import (
"context"
"encoding/json"
"fmt"
"github.com/dexidp/dex/storage"
)
// CreateOfflineSessions saves provided offline session into the database.
func (d *Database) CreateOfflineSessions(ctx context.Context, session storage.OfflineSessions) error {
2020-12-31 02:07:32 +04:00
encodedRefresh, err := json.Marshal(session.Refresh)
if err != nil {
return fmt.Errorf("encode refresh offline session: %w", err)
}
id := compositeKeyID(session.UserID, session.ConnID, d.hasher)
2020-12-31 02:07:32 +04:00
_, err = d.client.OfflineSession.Create().
SetID(id).
SetUserID(session.UserID).
SetConnID(session.ConnID).
SetConnectorData(session.ConnectorData).
SetRefresh(encodedRefresh).
Save(ctx)
2020-12-31 02:07:32 +04:00
if err != nil {
return convertDBError("create offline session: %w", err)
}
return nil
}
// GetOfflineSessions extracts an offline session from the database by user id and connector id.
2025-02-04 04:11:44 -05:00
func (d *Database) GetOfflineSessions(ctx context.Context, userID, connID string) (storage.OfflineSessions, error) {
id := compositeKeyID(userID, connID, d.hasher)
2020-12-31 02:07:32 +04:00
2025-02-04 04:11:44 -05:00
offlineSession, err := d.client.OfflineSession.Get(ctx, id)
2020-12-31 02:07:32 +04:00
if err != nil {
return storage.OfflineSessions{}, convertDBError("get offline session: %w", err)
}
return toStorageOfflineSession(offlineSession), nil
}
// DeleteOfflineSessions deletes an offline session from the database by user id and connector id.
2025-02-04 04:11:44 -05:00
func (d *Database) DeleteOfflineSessions(ctx context.Context, userID, connID string) error {
id := compositeKeyID(userID, connID, d.hasher)
2020-12-31 02:07:32 +04:00
2025-02-04 04:11:44 -05:00
err := d.client.OfflineSession.DeleteOneID(id).Exec(ctx)
2020-12-31 02:07:32 +04:00
if err != nil {
return convertDBError("delete offline session: %w", err)
}
return nil
}
2021-05-27 17:11:12 +04:00
// UpdateOfflineSessions changes an offline session by user id and connector id using an updater function.
2025-02-04 04:11:44 -05:00
func (d *Database) UpdateOfflineSessions(ctx context.Context, userID string, connID string, updater func(s storage.OfflineSessions) (storage.OfflineSessions, error)) error {
id := compositeKeyID(userID, connID, d.hasher)
2020-12-31 02:07:32 +04:00
2025-02-04 04:11:44 -05:00
tx, err := d.BeginTx(ctx)
2020-12-31 02:07:32 +04:00
if err != nil {
return convertDBError("update offline session tx: %w", err)
}
2025-02-04 04:11:44 -05:00
offlineSession, err := tx.OfflineSession.Get(ctx, id)
2020-12-31 02:07:32 +04:00
if err != nil {
return rollback(tx, "update offline session database: %w", err)
}
newOfflineSession, err := updater(toStorageOfflineSession(offlineSession))
if err != nil {
return rollback(tx, "update offline session updating: %w", err)
}
encodedRefresh, err := json.Marshal(newOfflineSession.Refresh)
if err != nil {
return rollback(tx, "encode refresh offline session: %w", err)
}
_, err = tx.OfflineSession.UpdateOneID(id).
SetUserID(newOfflineSession.UserID).
SetConnID(newOfflineSession.ConnID).
SetConnectorData(newOfflineSession.ConnectorData).
SetRefresh(encodedRefresh).
2025-02-04 04:11:44 -05:00
Save(ctx)
2020-12-31 02:07:32 +04:00
if err != nil {
return rollback(tx, "update offline session uploading: %w", err)
}
if err = tx.Commit(); err != nil {
2021-05-27 17:11:12 +04:00
return rollback(tx, "update offline session commit: %w", err)
2020-12-31 02:07:32 +04:00
}
return nil
}