From c2268c285648ef02ece04de0d9df0813c6d70ff8 Mon Sep 17 00:00:00 2001
From: benj <benj@rse8.com>
Date: Sat, 24 Dec 2022 00:43:38 -0800
Subject: refactor everything with more abstraction and a nicer interface

---
 .../sqlite/migrations/20221125051738_bootstrap.sql | 133 ++++++++++-----------
 1 file changed, 66 insertions(+), 67 deletions(-)

(limited to 'crates/secd/store/sqlite/migrations/20221125051738_bootstrap.sql')

diff --git a/crates/secd/store/sqlite/migrations/20221125051738_bootstrap.sql b/crates/secd/store/sqlite/migrations/20221125051738_bootstrap.sql
index a8784f5..299f282 100644
--- a/crates/secd/store/sqlite/migrations/20221125051738_bootstrap.sql
+++ b/crates/secd/store/sqlite/migrations/20221125051738_bootstrap.sql
@@ -1,82 +1,81 @@
-create table if not exists identity (
-       identity_id integer primary key autoincrement
-       , identity_public_id uuid
-       , data text
-       , created_at timestamptz not null
-       , deleted_at timestamptz
-       , unique(identity_public_id)
+create table if not exists realm (
+       realm_id integer primary key
+       , created_at integer not null
 );
 
-create table if not exists session (
-       session_id integer primary key autoincrement
-       , identity_id bigint not null references identity(identity_id)
-       , secret_hash bytea not null
-       , created_at timestamptz not null
-       , expired_at timestamptz
-       , revoked_at timestamptz
-       , unique(secret_hash)
+create table if not exists realm_data (
+       realm_data_id integer primary key
+       , realm_id integer not null references realm(realm_id)
+       , email_provider text not null
+       , sms_provider text not null
+       , created_at integer not null
+       , deleted_at integer
 );
 
-create table if not exists oauth_provider (
-       oauth_provider_id integer primary key autoincrement
-       , name text not null
-       , flow text not null
-       , base_url text not null
-       , response_type text not null
-       , default_scope text
-       , client_id text not null
-       , client_secret text not null
-       , redirect_url text not null
-       , created_at timestamptz not null
-       , deleted_at timestamptz
-       , unique (name, flow)
+create table if not exists identity (
+       identity_id integer primary key
+       , identity_public_id uuid not null
+       , data text -- some things are dervied, others are not
+       , created_at integer not null
+       , updated_at integer not null
+       , deleted_at integer
+       , unique(identity_public_id)
 );
 
-create table if not exists oauth_validation (
-       oauth_validation_id integer primary key autoincrement
-       , oauth_validation_public_id uuid not null
-       , oauth_provider_id integer not null references oauth_provider(oauth_provider_id)
-       , access_token text
-       , raw_response text
-       , created_at timestamptz not null
-       , validated_at timestamptz
-       , unique (oauth_validation_public_id)
+create table if not exists credential (
+       credential_id integer primary key
+       , credential_public_id uuid not null
+       , identity_id integer not null references identity(identity_id)
+       , type text not null-- e.g. password, oidc, totop, lookup_secret, webauthn, ...
+       , data text not null
+       , version integer not null
+       , created_at integer not null
+       , revoked_at integer
+       , deleted_at integer
 );
 
-create table if not exists identity_oauth_validation (
-       identity_oauth_validation_id integer primary key autoincrement
-       -- A validation does not require an identity to initiate
-       , identity_id bigint references identity(identity_id)
-       , oauth_validation_id bigint not null references oauth_validation(oauth_validation_id)
-       , revoked_at timestamptz
-       , deleted_at timestamptz
-       , unique(identity_id, oauth_validation_id)
+create table if not exists address (
+       address_id integer primary key
+       , address_public_id uuid not null
+       , type text not null
+       , value text not null
+       , created_at integer not null
+       , unique(value, type)
 );
 
-create table if not exists email (
-       email_id integer primary key autoincrement
-       , address text not null
-       , unique(address)
+create table if not exists address_validation (
+       address_validation_id integer primary key
+       , address_validation_public_id uuid not null
+       , identity_id integer references identity(identity_id)
+       , address_id integer not null references address(address_id)
+       , method text not null -- e.g. email, sms, voice, oidc
+       , token_hash blob
+       , code_hash blob
+       , attempts integer not null
+       , created_at integer not null
+       , expires_at integer not null
+       , revoked_at integer
+       , validated_at integer
+       , unique(address_validation_public_id)
 );
 
-create table if not exists email_validation (
-       email_validation_id integer primary key autoincrement
-       , email_validation_public_id uuid not null
-       , email_id bigint not null references email(email_id)
-       , code text
-       , is_oauth_derived boolean not null
-       , created_at timestamptz not null
-       , validated_at timestamptz
-       , expired_at timestamptz
-       , unique(email_validation_public_id)
+create table if not exists session (
+       session_id integer primary key
+       , identity_id integer not null references identity(identity_id)
+       , token_hash blob not null
+       , created_at integer not null
+       , expired_at integer not null
+       , revoked_at integer
+       , unique(token_hash)
 );
 
-create table if not exists identity_email_validation (
-       identity_email_validation_id integer primary key autoincrement
-       -- A validation does not require an identity to initiate
-       , identity_id bigint references identity(identity_id)
-       , email_validation_id bigint not null references email_validation(email_validation_id)
-       , revoked_at timestamptz
-       , deleted_at timestamptz
-       , unique(identity_id, email_validation_id)
+create table if not exists message (
+       message_id integer primary key
+       , address_id integer not null references address(address_id)
+       , subject text
+       , body text
+       , template text not null
+       , template_vars text not null
+       , created_at integer not null
+       , sent_at integer
 );
-- 
cgit v1.2.3

