summaryrefslogtreecommitdiff
path: root/build/db-init/base.sql
blob: 784eaaa6f92a43c183eebe6a3ad9818e9e1168e6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
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;