-- migrate:up CREATE TABLE IF NOT EXISTS `user` ( id INTEGER PRIMARY KEY AUTOINCREMENT, created_on INTEGER NOT NULL DEFAULT 0, modified_on INTEGER NOT NULL DEFAULT 0, name TEXT NOT NULL, nickname TEXT NOT NULL, email TEXT NOT NULL, is_system INTEGER NOT NULL DEFAULT 0, is_disabled INTEGER NOT NULL DEFAULT 0, is_deleted INTEGER NOT NULL DEFAULT 0 ); CREATE TABLE IF NOT EXISTS `capability` ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, UNIQUE (name) ); CREATE TABLE IF NOT EXISTS `user_has_capability` ( user_id INTEGER NOT NULL, capability_id INTEGER NOT NULL, UNIQUE (user_id, capability_id), FOREIGN KEY (capability_id) REFERENCES capability (id) ); CREATE TABLE IF NOT EXISTS `auth` ( id INTEGER PRIMARY KEY AUTOINCREMENT, created_on INTEGER NOT NULL DEFAULT 0, modified_on INTEGER NOT NULL DEFAULT 0, user_id INTEGER NOT NULL, type TEXT NOT NULL, secret TEXT NOT NULL, is_deleted INTEGER NOT NULL DEFAULT 0, FOREIGN KEY (user_id) REFERENCES user (id), UNIQUE (user_id, type) ); CREATE TABLE IF NOT EXISTS `setting` ( id INTEGER PRIMARY KEY AUTOINCREMENT, created_on INTEGER NOT NULL DEFAULT 0, modified_on INTEGER NOT NULL DEFAULT 0, name TEXT NOT NULL, description TEXT NOT NULL DEFAULT "", value TEXT NOT NULL, UNIQUE (name) ); CREATE TABLE IF NOT EXISTS `audit_log` ( id INTEGER PRIMARY KEY AUTOINCREMENT, created_on INTEGER NOT NULL DEFAULT 0, modified_on INTEGER NOT NULL DEFAULT 0, user_id INTEGER NOT NULL, object_type TEXT NOT NULL, object_id INTEGER NOT NULL, action TEXT NOT NULL, meta TEXT NOT NULL, FOREIGN KEY (user_id) REFERENCES user (id) ); CREATE TABLE IF NOT EXISTS `certificate_authority` ( id INTEGER PRIMARY KEY AUTOINCREMENT, created_on INTEGER NOT NULL DEFAULT 0, modified_on INTEGER NOT NULL DEFAULT 0, name TEXT NOT NULL, acmesh_server TEXT NOT NULL DEFAULT "", ca_bundle TEXT NOT NULL DEFAULT "", is_wildcard_supported INTEGER NOT NULL DEFAULT 0, -- specific to each CA, acme v1 doesn't usually have wildcards max_domains INTEGER NOT NULL DEFAULT 5, -- per request is_readonly INTEGER NOT NULL DEFAULT 0, is_deleted INTEGER NOT NULL DEFAULT 0 ); CREATE TABLE IF NOT EXISTS `dns_provider` ( id INTEGER PRIMARY KEY AUTOINCREMENT, created_on INTEGER NOT NULL DEFAULT 0, modified_on INTEGER NOT NULL DEFAULT 0, user_id INTEGER NOT NULL, name TEXT NOT NULL, acmesh_name TEXT NOT NULL, dns_sleep INTEGER NOT NULL DEFAULT 0, meta TEXT NOT NULL, is_deleted INTEGER NOT NULL DEFAULT 0, FOREIGN KEY (user_id) REFERENCES user (id) ); CREATE TABLE IF NOT EXISTS `certificate` ( id INTEGER PRIMARY KEY AUTOINCREMENT, created_on INTEGER NOT NULL DEFAULT 0, modified_on INTEGER NOT NULL DEFAULT 0, type TEXT NOT NULL, -- custom,dns,http user_id INTEGER NOT NULL, certificate_authority_id INTEGER, -- 0 for a custom cert dns_provider_id INTEGER, -- 0, for a http or custom cert name TEXT NOT NULL, domain_names TEXT NOT NULL, expires_on INTEGER DEFAULT 0, status TEXT NOT NULL, -- ready,requesting,failed,provided error_message text NOT NULL DEFAULT "", meta TEXT NOT NULL, is_ecc INTEGER NOT NULL DEFAULT 0, is_deleted INTEGER NOT NULL DEFAULT 0, FOREIGN KEY (user_id) REFERENCES user (id), FOREIGN KEY (certificate_authority_id) REFERENCES certificate_authority (id), FOREIGN KEY (dns_provider_id) REFERENCES dns_provider (id) ); CREATE TABLE IF NOT EXISTS `stream` ( id INTEGER PRIMARY KEY AUTOINCREMENT, created_on INTEGER NOT NULL DEFAULT 0, modified_on INTEGER NOT NULL DEFAULT 0, user_id INTEGER NOT NULL, listen_interface TEXT NOT NULL, incoming_port INTEGER NOT NULL, upstream_options TEXT NOT NULL, tcp_forwarding INTEGER NOT NULL DEFAULT 0, udp_forwarding INTEGER NOT NULL DEFAULT 0, advanced_config TEXT NOT NULL, is_disabled INTEGER NOT NULL DEFAULT 0, is_deleted INTEGER NOT NULL DEFAULT 0, FOREIGN KEY (user_id) REFERENCES user (id) ); CREATE TABLE IF NOT EXISTS `upstream` ( id INTEGER PRIMARY KEY AUTOINCREMENT, created_on INTEGER NOT NULL DEFAULT 0, modified_on INTEGER NOT NULL DEFAULT 0, user_id INTEGER NOT NULL, hosts TEXT NOT NULL, balance_method TEXT NOT NULL, max_fails INTEGER NOT NULL DEFAULT 1, fail_timeout INTEGER NOT NULL DEFAULT 10, advanced_config TEXT NOT NULL, is_deleted INTEGER NOT NULL DEFAULT 0, FOREIGN KEY (user_id) REFERENCES user (id) ); CREATE TABLE IF NOT EXISTS `access_list` ( id INTEGER PRIMARY KEY AUTOINCREMENT, created_on INTEGER NOT NULL DEFAULT 0, modified_on INTEGER NOT NULL DEFAULT 0, user_id INTEGER NOT NULL, name TEXT NOT NULL, meta TEXT NOT NULL, is_deleted INTEGER NOT NULL DEFAULT 0, FOREIGN KEY (user_id) REFERENCES user (id) ); CREATE TABLE IF NOT EXISTS `host_template` ( id INTEGER PRIMARY KEY AUTOINCREMENT, created_on INTEGER NOT NULL DEFAULT 0, modified_on INTEGER NOT NULL DEFAULT 0, user_id INTEGER NOT NULL, name TEXT NOT NULL, host_type TEXT NOT NULL, template TEXT NOT NULL, is_deleted INTEGER NOT NULL DEFAULT 0, FOREIGN KEY (user_id) REFERENCES user (id) ); CREATE TABLE IF NOT EXISTS `host` ( id INTEGER PRIMARY KEY AUTOINCREMENT, created_on INTEGER NOT NULL DEFAULT 0, modified_on INTEGER NOT NULL DEFAULT 0, user_id INTEGER NOT NULL, type TEXT NOT NULL, host_template_id INTEGER NOT NULL, listen_interface TEXT NOT NULL, domain_names TEXT NOT NULL, upstream_id INTEGER NOT NULL, certificate_id INTEGER, access_list_id INTEGER, ssl_forced INTEGER NOT NULL DEFAULT 0, caching_enabled INTEGER NOT NULL DEFAULT 0, block_exploits INTEGER NOT NULL DEFAULT 0, allow_websocket_upgrade INTEGER NOT NULL DEFAULT 0, http2_support INTEGER NOT NULL DEFAULT 0, hsts_enabled INTEGER NOT NULL DEFAULT 0, hsts_subdomains INTEGER NOT NULL DEFAULT 0, paths TEXT NOT NULL, upstream_options TEXT NOT NULL DEFAULT "", advanced_config TEXT NOT NULL DEFAULT "", is_disabled INTEGER NOT NULL DEFAULT 0, is_deleted INTEGER NOT NULL DEFAULT 0, FOREIGN KEY (user_id) REFERENCES user (id), FOREIGN KEY (host_template_id) REFERENCES host_template (id), FOREIGN KEY (upstream_id) REFERENCES upstream (id), FOREIGN KEY (certificate_id) REFERENCES certificate (id), FOREIGN KEY (access_list_id) REFERENCES access_list (id) ); -- migrate:down -- Not allowed to go down from initial