ultisuite-backend/internal/authentik/store.go
2026-06-04 00:12:11 +02:00

55 lines
1.7 KiB
Go

package authentik
import (
"context"
"errors"
"time"
"github.com/jackc/pgx/v5"
"github.com/jackc/pgx/v5/pgxpool"
)
type ProvisionRecord struct {
AppKey string
AuthentikSlug string
ClientID string
ProviderID *int
ApplicationID *int
ProvisionedAt time.Time
}
func IsProvisioned(ctx context.Context, pool *pgxpool.Pool, appKey string) (bool, error) {
var exists bool
err := pool.QueryRow(ctx,
`SELECT EXISTS(SELECT 1 FROM suite_authentik_provisioned WHERE app_key = $1)`,
appKey,
).Scan(&exists)
return exists, err
}
func SaveProvisioned(ctx context.Context, pool *pgxpool.Pool, rec ProvisionRecord) error {
_, err := pool.Exec(ctx, `
INSERT INTO suite_authentik_provisioned (app_key, authentik_slug, client_id, provider_id, application_id, provisioned_at)
VALUES ($1, $2, $3, $4, $5, COALESCE($6, NOW()))
ON CONFLICT (app_key) DO UPDATE SET
authentik_slug = EXCLUDED.authentik_slug,
client_id = EXCLUDED.client_id,
provider_id = EXCLUDED.provider_id,
application_id = EXCLUDED.application_id,
provisioned_at = EXCLUDED.provisioned_at
`, rec.AppKey, rec.AuthentikSlug, rec.ClientID, rec.ProviderID, rec.ApplicationID, rec.ProvisionedAt)
return err
}
func GetProvisioned(ctx context.Context, pool *pgxpool.Pool, appKey string) (ProvisionRecord, error) {
var rec ProvisionRecord
err := pool.QueryRow(ctx, `
SELECT app_key, authentik_slug, client_id, provider_id, application_id, provisioned_at
FROM suite_authentik_provisioned WHERE app_key = $1
`, appKey).Scan(&rec.AppKey, &rec.AuthentikSlug, &rec.ClientID, &rec.ProviderID, &rec.ApplicationID, &rec.ProvisionedAt)
if errors.Is(err, pgx.ErrNoRows) {
return rec, err
}
return rec, err
}