55 lines
1.7 KiB
Go
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
|
|
}
|