diff options
Diffstat (limited to 'build/db-init/base.sql')
-rw-r--r-- | build/db-init/base.sql | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/build/db-init/base.sql b/build/db-init/base.sql new file mode 100644 index 0000000..784eaaa --- /dev/null +++ b/build/db-init/base.sql @@ -0,0 +1,86 @@ +--- CRIMSON --- A simple PHP framework. +--- Copyright © 2024 Freya Murphy <contact@freyacat.org> +--- +--- This file is part of CRIMSON. +--- +--- CRIMSON is free software; you can redistribute it and/or modify it +--- under the terms of the GNU General Public License as published by +--- the Free Software Foundation; either version 3 of the License, or (at +--- your option) any later version. +--- +--- CRIMSON is distributed in the hope that it will be useful, but +--- WITHOUT ANY WARRANTY; without even the implied warranty of +--- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +--- GNU General Public License for more details. +--- +--- You should have received a copy of the GNU General Public License +--- along with CRIMSON. If not, see <http://www.gnu.org/licenses/>. + +-- Set's up crimsons baseline database. Can be run multiple times. + +BEGIN TRANSACTION; +SET search_path = public; +SET client_min_messages TO WARNING; + +-- Migration Start + +CREATE SCHEMA IF NOT EXISTS sys; + +-- sys + +ALTER SCHEMA sys OWNER TO POSTGRES_USER; + +-- sys.*/* + +DROP DOMAIN IF EXISTS sys."*/*" CASCADE; +CREATE DOMAIN sys."*/*" AS BYTEA; + +-- sys.database_info + +CREATE TABLE IF NOT EXISTS sys.database_info ( + name TEXT DEFAULT ''::text NOT NULL, + jwt_secret TEXT DEFAULT ''::text NOT NULL, + curr_revision INTEGER DEFAULT 0 NOT NULL +); + +ALTER TABLE sys.database_info + DROP CONSTRAINT IF EXISTS database_info_pkey; + +ALTER TABLE sys.database_info + ADD CONSTRAINT database_info_pkey PRIMARY KEY (name); + +ALTER TABLE sys.database_info OWNER TO POSTGRES_USER; + +INSERT INTO sys.database_info + (name, curr_revision) VALUES (current_database(), 0) + ON CONFLICT DO NOTHING; + +-- sys.JWT + +DROP TYPE IF EXISTS sys.JWT CASCADE; +CREATE TYPE sys.JWT AS ( + token TEXT +); + +-- authenticator +DO +$$ +BEGIN + IF NOT EXISTS (SELECT * FROM pg_user WHERE usename = 'authenticator') + THEN + CREATE ROLE authenticator + LOGIN NOINHERIT NOCREATEDB NOCREATEROLE NOSUPERUSER; + END IF; +END +$$; + +ALTER ROLE authenticator WITH PASSWORD 'postgrest'; + +-- anonymous + +DROP ROLE IF EXISTS anonymous; +CREATE ROLE anonymous NOLOGIN; + +-- Migration End; + +COMMIT TRANSACTION; |