Document Directus production contract and repair auth

This commit is contained in:
makearmy 2026-07-10 10:51:04 -04:00
parent 0a7ee5ff35
commit 92ce8bce97
32 changed files with 24821 additions and 65 deletions

View file

@ -0,0 +1,29 @@
# Directus Deployment Inventory
Generated from the running production container.
- Directus version: 12.1.1
- Container image: directus/directus:latest
- Public URL: https://forms.lasereverything.net
- Host binding: 127.0.0.1:8056
- Database client: mysql
- Database service and database names: intentionally omitted
- Email transport: smtp
- SMTP port: 465
- SMTP secure mode: true
- Explicit AUTH_PROVIDERS variable: not set
- Explicit CORS variables: not set
- Explicit cookie variables: not set
- Explicit registration environment variables: not set
## Persistent mounts
- `/directus/extensions` is mounted from the host, mode `rw`
- `/directus/uploads` is mounted from the host, mode `rw`
## Notes
- Secret values are intentionally excluded.
- Registration behavior also depends on fields stored in the Directus settings table.
- Role, policy, and permission exports are stored separately.
- Flow option values are excluded because they may contain credentials, headers, addresses, or other sensitive configuration.

View file

@ -0,0 +1,28 @@
services:
directus:
image: directus/directus:latest
container_name: directus
ports:
- "127.0.0.1:8056:8055"
env_file:
- .env
volumes:
- ./uploads:/directus/uploads
- ./extensions:/directus/extensions
networks:
- default
- backend_net
restart: unless-stopped
networks:
default:
name: directus_net
driver: bridge
enable_ipv6: true
ipam:
config:
- subnet: 10.40.0.0/16
- subnet: fd00:40::/64
backend_net:
external: true

View file

@ -0,0 +1,24 @@
ADMIN_EMAIL
ADMIN_PASSWORD
DB_CLIENT
DB_DATABASE
DB_FILENAME
DB_HOST
DB_PASSWORD
DB_PORT
DB_USER
EMAIL_FROM
EMAIL_SMTP_HOST
EMAIL_SMTP_PASSWORD
EMAIL_SMTP_PORT
EMAIL_SMTP_SECURE
EMAIL_SMTP_USER
EMAIL_TRANSPORT
KEY
NODE_ENV
NODE_VERSION
NPM_CONFIG_UPDATE_NOTIFIER
PATH
PUBLIC_URL
SECRET
YARN_VERSION

View file

@ -0,0 +1,44 @@
[
{
"id": "45b5000f-f495-4940-935a-d4bf2e409844",
"role": "a6d3c757-a96b-4f0c-b96b-a6109d60a7ba",
"policy": "93fc7a9e-16de-45d4-89b1-9fa129e81442",
"sort": null,
"user": null
},
{
"id": "2ddbc9da-e0f5-4dff-a952-c3d7586ab706",
"role": "296a28bc-60ab-4251-8bef-27f6dfb67948",
"policy": "80b3902c-06e6-480c-9d29-d2a46552f60e",
"sort": 1,
"user": null
},
{
"id": "767277dd-3b08-4d72-9bde-437af91e1d88",
"role": "a2a695be-88f9-4948-b2a4-e0e22b01b32e",
"policy": "2e4acc56-7f7e-4a10-9775-1c0dd9f47ded",
"sort": 1,
"user": null
},
{
"id": "abfa5434-1ace-4e1f-9a93-7d84aabb0a95",
"role": "00e518e3-75b3-4c6f-b57d-51a4f1af4781",
"policy": "494e10a0-03ec-40b9-a7a5-c3a1e2b95001",
"sort": 1,
"user": null
},
{
"id": "c1480ea2-ca4d-46c9-8034-09b76d0a41cf",
"role": null,
"policy": "abf8a154-5b1c-4a46-ac9c-7300570f4f17",
"sort": 1,
"user": null
},
{
"id": "cf8e40bd-3fbe-4df5-a845-01802a3e7e1c",
"role": "296a28bc-60ab-4251-8bef-27f6dfb67948",
"policy": "536f020c-4f05-497d-8a6c-54e13f62c694",
"sort": 2,
"user": null
}
]

View file

@ -0,0 +1,19 @@
[
{
"field": "username",
"special": null,
"interface": "input",
"options": null,
"display": "raw",
"display_options": null,
"readonly": 0,
"hidden": 0,
"required": 1,
"sort": 1,
"width": "full",
"note": null,
"conditions": null,
"validation": null,
"validation_message": null
}
]

View file

@ -0,0 +1,35 @@
[
{
"id": "fdc2d675-e365-4431-9cd0-27e571c89e04",
"name": "claim_auto_assign",
"icon": "bolt",
"color": null,
"description": "Assigns a claimant to owner and rejects other pending claims.",
"status": "active",
"trigger": "event",
"accountability": "all",
"options_keys": [
"type",
"scope",
"collections"
],
"root_operation": "e19723a6-e75c-4bc8-92aa-be06bb0528af"
},
{
"id": "99cc3ea5-3ab7-431f-a4f6-ce4e7677b092",
"name": "unique_key_claims",
"icon": "bolt",
"color": null,
"description": "A flow for setting a unique key for each claim to prevent duplicates.",
"status": "active",
"trigger": "event",
"accountability": "all",
"options_keys": [
"type",
"scope",
"collections",
"return"
],
"root_operation": "2245466f-8178-4e5c-b058-819eb421de47"
}
]

View file

@ -0,0 +1,94 @@
[
{
"id": "03c6582f-800d-4e94-9fea-f77a9ea5e3aa",
"name": "Condition",
"key": "condition_s458i",
"type": "condition",
"position_x": 55,
"position_y": 1,
"resolve": "d4266993-ceae-452a-9b7d-664c11bf1013",
"reject": null,
"flow": "99cc3ea5-3ab7-431f-a4f6-ce4e7677b092",
"options_keys": [
"filter"
]
},
{
"id": "cb7101fc-e2c5-4cfc-b1d6-486ac70d286f",
"name": "Read Data",
"key": "item_read_e4myo",
"type": "item-read",
"position_x": 37,
"position_y": 1,
"resolve": "03c6582f-800d-4e94-9fea-f77a9ea5e3aa",
"reject": null,
"flow": "99cc3ea5-3ab7-431f-a4f6-ce4e7677b092",
"options_keys": [
"permissions",
"emitEvents",
"collection",
"query"
]
},
{
"id": "2245466f-8178-4e5c-b058-819eb421de47",
"name": "Run Script",
"key": "exec_5dli5",
"type": "exec",
"position_x": 19,
"position_y": 1,
"resolve": "cb7101fc-e2c5-4cfc-b1d6-486ac70d286f",
"reject": null,
"flow": "99cc3ea5-3ab7-431f-a4f6-ce4e7677b092",
"options_keys": [
"code"
]
},
{
"id": "d4266993-ceae-452a-9b7d-664c11bf1013",
"name": "Throw Error",
"key": "throw_error_22tpm",
"type": "throw-error",
"position_x": 73,
"position_y": 1,
"resolve": null,
"reject": null,
"flow": "99cc3ea5-3ab7-431f-a4f6-ce4e7677b092",
"options_keys": [
"status",
"message",
"code"
]
},
{
"id": "e19723a6-e75c-4bc8-92aa-be06bb0528af",
"name": "Condition",
"key": "condition_dl7cj",
"type": "condition",
"position_x": 19,
"position_y": 1,
"resolve": "ebd0e644-1be0-4200-89c4-844b06c7d788",
"reject": null,
"flow": "fdc2d675-e365-4431-9cd0-27e571c89e04",
"options_keys": [
"filter"
]
},
{
"id": "ebd0e644-1be0-4200-89c4-844b06c7d788",
"name": "Read Data",
"key": "item_read_oyges",
"type": "item-read",
"position_x": 37,
"position_y": 1,
"resolve": null,
"reject": null,
"flow": "fdc2d675-e365-4431-9cd0-27e571c89e04",
"options_keys": [
"permissions",
"emitEvents",
"collection",
"key"
]
}
]

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,62 @@
[
{
"id": "abf8a154-5b1c-4a46-ac9c-7300570f4f17",
"name": "$t:public_label",
"icon": "public",
"description": "$t:public_description",
"admin_access": 0,
"app_access": 0,
"enforce_tfa": 0,
"ip_access": null
},
{
"id": "93fc7a9e-16de-45d4-89b1-9fa129e81442",
"name": "Administrator",
"icon": "verified",
"description": "$t:admin_description",
"admin_access": 1,
"app_access": 1,
"enforce_tfa": 0,
"ip_access": null
},
{
"id": "494e10a0-03ec-40b9-a7a5-c3a1e2b95001",
"name": "Registration",
"icon": "robot",
"description": "Registration Bot",
"admin_access": 0,
"app_access": 0,
"enforce_tfa": 0,
"ip_access": null
},
{
"id": "2e4acc56-7f7e-4a10-9775-1c0dd9f47ded",
"name": "Supporter",
"icon": "robot_2",
"description": "Supporter Bot",
"admin_access": 0,
"app_access": 0,
"enforce_tfa": 0,
"ip_access": null
},
{
"id": "536f020c-4f05-497d-8a6c-54e13f62c694",
"name": "Users",
"icon": "badge",
"description": "Registered Users",
"admin_access": 0,
"app_access": 0,
"enforce_tfa": 0,
"ip_access": null
},
{
"id": "80b3902c-06e6-480c-9d29-d2a46552f60e",
"name": "Users Self Access",
"icon": "badge",
"description": "Registered Users Self Access",
"admin_access": 0,
"app_access": 0,
"enforce_tfa": 0,
"ip_access": null
}
]

View file

@ -0,0 +1,30 @@
[
{
"id": "a6d3c757-a96b-4f0c-b96b-a6109d60a7ba",
"name": "Administrator",
"icon": "verified",
"description": "$t:admin_description",
"parent": null
},
{
"id": "00e518e3-75b3-4c6f-b57d-51a4f1af4781",
"name": "Registration Bot",
"icon": "robot",
"description": "Registers accounts.",
"parent": null
},
{
"id": "a2a695be-88f9-4948-b2a4-e0e22b01b32e",
"name": "Supporter Bot",
"icon": "supervised_user_circle",
"description": "Registers supporters.",
"parent": null
},
{
"id": "296a28bc-60ab-4251-8bef-27f6dfb67948",
"name": "Users",
"icon": "accessibility_new",
"description": "Registered users.",
"parent": null
}
]

View file

@ -0,0 +1,11 @@
[
{
"project_name": "Directus",
"project_url": null,
"default_language": "en-US",
"public_registration": 0,
"public_registration_verify_email": 0,
"public_registration_role": null,
"public_registration_email_filter": null
}
]

View file

@ -0,0 +1,33 @@
3: listen 80;
4: server_name forms.lasereverything.net;
5: client_max_body_size 100M;
8: location /.well-known/acme-challenge/ {
13: location / {
20: listen 443 ssl;
22: server_name forms.lasereverything.net;
23: client_max_body_size 100M;
28: ssl_protocols TLSv1.2 TLSv1.3;
31: add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
33: location / {
34: proxy_pass http://127.0.0.1:8056;
37: proxy_set_header Host $host;
38: proxy_set_header X-Real-IP $remote_addr;
39: proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
40: proxy_set_header X-Forwarded-Proto $scheme;
43: proxy_set_header Upgrade $http_upgrade;
44: proxy_set_header Connection "upgrade";
46: proxy_read_timeout 300;
48: proxy_send_timeout 300;
57: add_header Access-Control-Allow-Origin "$http_origin" always;
58: add_header Access-Control-Allow-Credentials "true" always;
59: add_header Access-Control-Allow-Headers "Authorization, Content-Type, X-Requested-With" always;
60: add_header Access-Control-Allow-Methods "GET, POST, PUT, PATCH, DELETE, OPTIONS" always;
61: add_header Vary "Origin" always;
66: add_header Access-Control-Max-Age 1728000 always;
67: add_header Content-Type "text/plain; charset=utf-8" always;
68: add_header Content-Length 0 always;
71: add_header Access-Control-Allow-Origin "$http_origin" always;
72: add_header Access-Control-Allow-Credentials "true" always;
73: add_header Access-Control-Allow-Headers "Authorization, Content-Type, X-Requested-With" always;
74: add_header Access-Control-Allow-Methods "GET, POST, PUT, PATCH, DELETE, OPTIONS" always;
75: add_header Vary "Origin" always;

View file

@ -0,0 +1,8 @@
Live schema SHA-256:
709c5f5fa6c239406085e8c7e5959d2d096d36ad1d8676727a0ca473536498e6 /root/directus-codex-context-20260710-102253/schema.yaml
Existing repository schema SHA-256:
8e21cd555b297e729a39f387eadbf4d32621c986516c9d3cc896b01d02efdf8b /srv/codex-work/lasereverything.net.db/app/schema.yaml
Comparison:
The live and repository schema files differ.

View file

@ -0,0 +1,5 @@
id char(36) NO PRI NULL
role char(36) YES MUL NULL
user char(36) YES MUL NULL
policy char(36) NO MUL NULL
sort int(11) YES NULL
1 id char(36) NO PRI NULL
2 role char(36) YES MUL NULL
3 user char(36) YES MUL NULL
4 policy char(36) NO MUL NULL
5 sort int(11) YES NULL

View file

@ -0,0 +1,20 @@
id int(10) unsigned NO PRI NULL auto_increment
collection varchar(64) NO MUL NULL
field varchar(64) NO NULL
special varchar(64) YES NULL
interface varchar(64) YES NULL
options longtext YES NULL
display varchar(64) YES NULL
display_options longtext YES NULL
readonly tinyint(1) NO 0
hidden tinyint(1) NO 0
sort int(10) unsigned YES NULL
width varchar(30) YES full
translations longtext YES NULL
note text YES NULL
conditions longtext YES NULL
required tinyint(1) YES 0
group varchar(64) YES NULL
validation longtext YES NULL
validation_message text YES NULL
searchable tinyint(1) NO 1
1 id int(10) unsigned NO PRI NULL auto_increment
2 collection varchar(64) NO MUL NULL
3 field varchar(64) NO NULL
4 special varchar(64) YES NULL
5 interface varchar(64) YES NULL
6 options longtext YES NULL
7 display varchar(64) YES NULL
8 display_options longtext YES NULL
9 readonly tinyint(1) NO 0
10 hidden tinyint(1) NO 0
11 sort int(10) unsigned YES NULL
12 width varchar(30) YES full
13 translations longtext YES NULL
14 note text YES NULL
15 conditions longtext YES NULL
16 required tinyint(1) YES 0
17 group varchar(64) YES NULL
18 validation longtext YES NULL
19 validation_message text YES NULL
20 searchable tinyint(1) NO 1

View file

@ -0,0 +1,12 @@
id char(36) NO PRI NULL
name varchar(255) NO NULL
icon varchar(64) YES NULL
color varchar(255) YES NULL
description text YES NULL
status varchar(255) NO active
trigger varchar(255) YES NULL
accountability varchar(255) YES all
options longtext YES NULL
operation char(36) YES UNI NULL
date_created timestamp YES current_timestamp()
user_created char(36) YES MUL NULL
1 id char(36) NO PRI NULL
2 name varchar(255) NO NULL
3 icon varchar(64) YES NULL
4 color varchar(255) YES NULL
5 description text YES NULL
6 status varchar(255) NO active
7 trigger varchar(255) YES NULL
8 accountability varchar(255) YES all
9 options longtext YES NULL
10 operation char(36) YES UNI NULL
11 date_created timestamp YES current_timestamp()
12 user_created char(36) YES MUL NULL

View file

@ -0,0 +1,12 @@
id char(36) NO PRI NULL
name varchar(255) YES NULL
key varchar(255) NO NULL
type varchar(255) NO NULL
position_x int(11) NO NULL
position_y int(11) NO NULL
options longtext YES NULL
resolve char(36) YES UNI NULL
reject char(36) YES UNI NULL
flow char(36) NO MUL NULL
date_created timestamp YES current_timestamp()
user_created char(36) YES MUL NULL
1 id char(36) NO PRI NULL
2 name varchar(255) YES NULL
3 key varchar(255) NO NULL
4 type varchar(255) NO NULL
5 position_x int(11) NO NULL
6 position_y int(11) NO NULL
7 options longtext YES NULL
8 resolve char(36) YES UNI NULL
9 reject char(36) YES UNI NULL
10 flow char(36) NO MUL NULL
11 date_created timestamp YES current_timestamp()
12 user_created char(36) YES MUL NULL

View file

@ -0,0 +1,8 @@
id int(10) unsigned NO PRI NULL auto_increment
collection varchar(64) NO MUL NULL
action varchar(10) NO NULL
permissions longtext YES NULL
validation longtext YES NULL
presets longtext YES NULL
fields text YES NULL
policy char(36) NO MUL NULL
1 id int(10) unsigned NO PRI NULL auto_increment
2 collection varchar(64) NO MUL NULL
3 action varchar(10) NO NULL
4 permissions longtext YES NULL
5 validation longtext YES NULL
6 presets longtext YES NULL
7 fields text YES NULL
8 policy char(36) NO MUL NULL

View file

@ -0,0 +1,8 @@
id char(36) NO PRI NULL
name varchar(100) NO NULL
icon varchar(64) NO badge
description text YES NULL
ip_access text YES NULL
enforce_tfa tinyint(1) NO 0
admin_access tinyint(1) NO 0
app_access tinyint(1) NO 0
1 id char(36) NO PRI NULL
2 name varchar(100) NO NULL
3 icon varchar(64) NO badge
4 description text YES NULL
5 ip_access text YES NULL
6 enforce_tfa tinyint(1) NO 0
7 admin_access tinyint(1) NO 0
8 app_access tinyint(1) NO 0

View file

@ -0,0 +1,5 @@
id char(36) NO PRI NULL
name varchar(100) NO NULL
icon varchar(64) NO supervised_user_circle
description text YES NULL
parent char(36) YES MUL NULL
1 id char(36) NO PRI NULL
2 name varchar(100) NO NULL
3 icon varchar(64) NO supervised_user_circle
4 description text YES NULL
5 parent char(36) YES MUL NULL

View file

@ -0,0 +1,66 @@
id int(10) unsigned NO PRI NULL auto_increment
project_name varchar(100) NO Directus
project_url varchar(255) YES NULL
project_color varchar(255) NO #6644FF
project_logo char(36) YES MUL NULL
public_foreground char(36) YES MUL NULL
public_background char(36) YES MUL NULL
public_note text YES NULL
auth_login_attempts int(10) unsigned YES 25
auth_password_policy varchar(100) YES NULL
storage_asset_transform varchar(7) YES all
storage_asset_presets longtext YES NULL
custom_css text YES NULL
storage_default_folder char(36) YES MUL NULL
basemaps longtext YES NULL
mapbox_key varchar(255) YES NULL
module_bar longtext YES NULL
project_descriptor varchar(100) YES NULL
default_language varchar(255) NO en-US
custom_aspect_ratios longtext YES NULL
public_favicon char(36) YES MUL NULL
default_appearance varchar(255) NO auto
default_theme_light varchar(255) YES NULL
theme_light_overrides longtext YES NULL
default_theme_dark varchar(255) YES NULL
theme_dark_overrides longtext YES NULL
report_error_url varchar(255) YES NULL
report_bug_url varchar(255) YES NULL
report_feature_url varchar(255) YES NULL
public_registration tinyint(1) NO 0
public_registration_verify_email tinyint(1) NO 1
public_registration_role char(36) YES MUL NULL
public_registration_email_filter longtext YES NULL
visual_editor_urls longtext YES NULL
project_id char(36) YES NULL
mcp_enabled tinyint(1) NO 0
mcp_allow_deletes tinyint(1) NO 0
mcp_prompts_collection varchar(255) YES NULL
mcp_system_prompt_enabled tinyint(1) NO 1
mcp_system_prompt text YES NULL
project_owner varchar(255) YES NULL
project_usage varchar(255) YES NULL
org_name varchar(255) YES NULL
product_updates tinyint(1) YES NULL
project_status varchar(255) YES NULL
ai_openai_api_key text YES NULL
ai_anthropic_api_key text YES NULL
ai_system_prompt text YES NULL
ai_google_api_key text YES NULL
ai_openai_compatible_api_key text YES NULL
ai_openai_compatible_base_url text YES NULL
ai_openai_compatible_name text YES NULL
ai_openai_compatible_models longtext YES NULL
ai_openai_compatible_headers longtext YES NULL
ai_openai_allowed_models longtext YES NULL
ai_anthropic_allowed_models longtext YES NULL
ai_google_allowed_models longtext YES NULL
collaborative_editing_enabled tinyint(1) NO 0
ai_translation_default_model text YES NULL
ai_translation_glossary longtext YES NULL
ai_translation_style_guide text YES NULL
license_key varchar(255) YES NULL
license_token text YES NULL
mcp_oauth_enabled tinyint(1) NO 0
mcp_oauth_dcr_enabled tinyint(1) NO 0
mcp_oauth_cimd_enabled tinyint(1) NO 0
1 id int(10) unsigned NO PRI NULL auto_increment
2 project_name varchar(100) NO Directus
3 project_url varchar(255) YES NULL
4 project_color varchar(255) NO #6644FF
5 project_logo char(36) YES MUL NULL
6 public_foreground char(36) YES MUL NULL
7 public_background char(36) YES MUL NULL
8 public_note text YES NULL
9 auth_login_attempts int(10) unsigned YES 25
10 auth_password_policy varchar(100) YES NULL
11 storage_asset_transform varchar(7) YES all
12 storage_asset_presets longtext YES NULL
13 custom_css text YES NULL
14 storage_default_folder char(36) YES MUL NULL
15 basemaps longtext YES NULL
16 mapbox_key varchar(255) YES NULL
17 module_bar longtext YES NULL
18 project_descriptor varchar(100) YES NULL
19 default_language varchar(255) NO en-US
20 custom_aspect_ratios longtext YES NULL
21 public_favicon char(36) YES MUL NULL
22 default_appearance varchar(255) NO auto
23 default_theme_light varchar(255) YES NULL
24 theme_light_overrides longtext YES NULL
25 default_theme_dark varchar(255) YES NULL
26 theme_dark_overrides longtext YES NULL
27 report_error_url varchar(255) YES NULL
28 report_bug_url varchar(255) YES NULL
29 report_feature_url varchar(255) YES NULL
30 public_registration tinyint(1) NO 0
31 public_registration_verify_email tinyint(1) NO 1
32 public_registration_role char(36) YES MUL NULL
33 public_registration_email_filter longtext YES NULL
34 visual_editor_urls longtext YES NULL
35 project_id char(36) YES NULL
36 mcp_enabled tinyint(1) NO 0
37 mcp_allow_deletes tinyint(1) NO 0
38 mcp_prompts_collection varchar(255) YES NULL
39 mcp_system_prompt_enabled tinyint(1) NO 1
40 mcp_system_prompt text YES NULL
41 project_owner varchar(255) YES NULL
42 project_usage varchar(255) YES NULL
43 org_name varchar(255) YES NULL
44 product_updates tinyint(1) YES NULL
45 project_status varchar(255) YES NULL
46 ai_openai_api_key text YES NULL
47 ai_anthropic_api_key text YES NULL
48 ai_system_prompt text YES NULL
49 ai_google_api_key text YES NULL
50 ai_openai_compatible_api_key text YES NULL
51 ai_openai_compatible_base_url text YES NULL
52 ai_openai_compatible_name text YES NULL
53 ai_openai_compatible_models longtext YES NULL
54 ai_openai_compatible_headers longtext YES NULL
55 ai_openai_allowed_models longtext YES NULL
56 ai_anthropic_allowed_models longtext YES NULL
57 ai_google_allowed_models longtext YES NULL
58 collaborative_editing_enabled tinyint(1) NO 0
59 ai_translation_default_model text YES NULL
60 ai_translation_glossary longtext YES NULL
61 ai_translation_style_guide text YES NULL
62 license_key varchar(255) YES NULL
63 license_token text YES NULL
64 mcp_oauth_enabled tinyint(1) NO 0
65 mcp_oauth_dcr_enabled tinyint(1) NO 0
66 mcp_oauth_cimd_enabled tinyint(1) NO 0