package main import ( "context" "atlas9.dev/c/core" "atlas9.dev/c/core/dbi" "atlas9.dev/c/core/iam" ) type SqliteOAuthStore struct { db dbi.DBI } var _ iam.OAuthStore = (*SqliteOAuthStore)(nil) func NewSqliteOAuthStore(db dbi.DBI) *SqliteOAuthStore { return &SqliteOAuthStore{db: db} } func (s *SqliteOAuthStore) AddProvider(ctx context.Context, userID core.ID, provider, providerID string) error { _, err := s.db.Exec(ctx, ` INSERT INTO oauth_providers (user_id, provider, provider_id) VALUES ($1, $2, $3) ON CONFLICT (provider, provider_id) DO NOTHING `, userID, provider, providerID) return err } func (s *SqliteOAuthStore) GetUserByProvider(ctx context.Context, provider, providerID string) (*iam.User, error) { var user iam.User err := dbi.Get(ctx, s.db, &user, ` SELECT u.id, u.email FROM users u JOIN oauth_providers op ON u.id = op.user_id WHERE op.provider = $1 AND op.provider_id = $2 `, provider, providerID) return &user, err }