215 lines
8.7 KiB
TypeScript
215 lines
8.7 KiB
TypeScript
export const ADVANCE_AUTHORIZATION_AFTER_CLAIM_SQL = `
|
|
UPDATE tenant_authorization_state
|
|
SET revision = revision + 1, updated_at = ?1
|
|
WHERE tenant_id = (SELECT id FROM tenant_instances WHERE account_id = ?2)
|
|
AND EXISTS (
|
|
SELECT 1 FROM device_credentials
|
|
WHERE id = ?3 AND host_id = ?4 AND token_hash = ?5 AND status = 'active'
|
|
)
|
|
`;
|
|
|
|
export const ADVANCE_AUTHORIZATION_AFTER_REVOKE_SQL = `
|
|
UPDATE tenant_authorization_state
|
|
SET revision = revision + 1, updated_at = ?1
|
|
WHERE tenant_id = (SELECT id FROM tenant_instances WHERE account_id = ?2)
|
|
AND EXISTS (
|
|
SELECT 1 FROM hosts
|
|
WHERE id = ?3 AND lifecycle = 'deactivated' AND deactivated_at = ?4
|
|
)
|
|
`;
|
|
|
|
export const CONSUME_PHONE_HANDOFF_SQL = `
|
|
UPDATE phone_handoff_tickets
|
|
SET consumed_at = ?1, consumed_by_node_id = ?5,
|
|
pending_phone_name = ?6, pending_ed25519_public = ?7,
|
|
pending_x25519_public = ?8, pending_identity_fingerprint = ?9
|
|
WHERE id = ?2 AND ticket_hash = ?3 AND expected_origin = ?4
|
|
AND consumed_at IS NULL AND expires_at > ?1
|
|
`;
|
|
|
|
export const DELETE_SUPERSEDED_PENDING_PHONE_ROUTES_SQL = `
|
|
DELETE FROM phone_route_handles
|
|
WHERE status = 'pending'
|
|
AND EXISTS (
|
|
SELECT 1
|
|
FROM phone_handoff_tickets AS previous
|
|
INNER JOIN phone_handoff_tickets AS current ON current.id = ?1
|
|
WHERE previous.id != current.id
|
|
AND previous.tenant_id = current.tenant_id
|
|
AND previous.pending_identity_fingerprint = current.pending_identity_fingerprint
|
|
AND previous.completed_phone_id = phone_route_handles.phone_id
|
|
AND previous.completed_route_handle_hash = phone_route_handles.handle_hash
|
|
AND previous.expires_at <= ?2
|
|
AND previous.activation_nonce IS NULL
|
|
)
|
|
`;
|
|
|
|
export const DELETE_SUPERSEDED_PENDING_PHONE_PRINCIPALS_SQL = `
|
|
DELETE FROM relay_phone_principals
|
|
WHERE status = 'pending'
|
|
AND EXISTS (
|
|
SELECT 1
|
|
FROM phone_handoff_tickets AS previous
|
|
INNER JOIN phone_handoff_tickets AS current ON current.id = ?1
|
|
WHERE previous.id != current.id
|
|
AND previous.tenant_id = current.tenant_id
|
|
AND previous.pending_identity_fingerprint = current.pending_identity_fingerprint
|
|
AND previous.completed_phone_id = relay_phone_principals.phone_id
|
|
AND previous.completed_phone_token_hash = relay_phone_principals.token_hash
|
|
AND previous.expires_at <= ?2
|
|
AND previous.activation_nonce IS NULL
|
|
)
|
|
`;
|
|
|
|
export const CLAIM_PHONE_HANDOFF_ACTIVATION_SQL = `
|
|
UPDATE phone_handoff_tickets
|
|
SET activation_nonce = ?1
|
|
WHERE completed_route_handle_hash = ?2
|
|
AND completed_phone_token_hash = ?3
|
|
AND completed_at > ?4
|
|
AND consumed_by_node_id = ?5
|
|
AND activation_nonce IS NULL
|
|
AND EXISTS (
|
|
SELECT 1
|
|
FROM phone_route_handles AS handles
|
|
INNER JOIN relay_phone_principals AS phones ON phones.phone_id = handles.phone_id
|
|
INNER JOIN tenant_placements AS placements ON placements.tenant_id = handles.tenant_id
|
|
INNER JOIN tenant_authorization_state AS authorizations ON authorizations.tenant_id = handles.tenant_id
|
|
WHERE handles.handle_hash = ?2 AND handles.status = 'pending'
|
|
AND handles.revoked_at IS NULL AND phones.token_hash = ?3
|
|
AND phones.status = 'pending' AND phones.revoked_at IS NULL
|
|
AND phones.tenant_id = phone_handoff_tickets.tenant_id
|
|
AND phones.phone_id = phone_handoff_tickets.completed_phone_id
|
|
AND handles.tenant_id = phone_handoff_tickets.tenant_id
|
|
AND placements.relay_node_id = ?5
|
|
AND placements.state IN ('active', 'draining')
|
|
AND authorizations.status = 'active'
|
|
)
|
|
`;
|
|
|
|
export const ACTIVATE_PHONE_PRINCIPAL_SQL = `
|
|
UPDATE relay_phone_principals
|
|
SET status = 'active'
|
|
WHERE token_hash = ?2 AND status = 'pending' AND revoked_at IS NULL
|
|
AND EXISTS (
|
|
SELECT 1 FROM phone_handoff_tickets AS tickets
|
|
WHERE tickets.activation_nonce = ?1
|
|
AND tickets.completed_phone_id = relay_phone_principals.phone_id
|
|
AND tickets.completed_phone_token_hash = ?2
|
|
AND tickets.tenant_id = relay_phone_principals.tenant_id
|
|
)
|
|
`;
|
|
|
|
export const ACTIVATE_PHONE_ROUTE_SQL = `
|
|
UPDATE phone_route_handles
|
|
SET status = 'active'
|
|
WHERE handle_hash = ?2 AND status = 'pending' AND revoked_at IS NULL
|
|
AND EXISTS (
|
|
SELECT 1 FROM phone_handoff_tickets AS tickets
|
|
WHERE tickets.activation_nonce = ?1
|
|
AND tickets.completed_route_handle_hash = ?2
|
|
AND tickets.completed_phone_token_hash = ?3
|
|
AND tickets.completed_phone_id = phone_route_handles.phone_id
|
|
AND tickets.tenant_id = phone_route_handles.tenant_id
|
|
)
|
|
AND EXISTS (
|
|
SELECT 1 FROM relay_phone_principals AS phones
|
|
WHERE phones.phone_id = phone_route_handles.phone_id
|
|
AND phones.tenant_id = phone_route_handles.tenant_id
|
|
AND phones.token_hash = ?3
|
|
AND phones.status = 'active' AND phones.revoked_at IS NULL
|
|
)
|
|
`;
|
|
|
|
export const ADVANCE_AUTHORIZATION_AFTER_PHONE_ACTIVATION_SQL = `
|
|
UPDATE tenant_authorization_state
|
|
SET revision = revision + 1, updated_at = ?1
|
|
WHERE status = 'active'
|
|
AND tenant_id = (
|
|
SELECT tenant_id FROM phone_handoff_tickets
|
|
WHERE activation_nonce = ?2
|
|
)
|
|
AND EXISTS (
|
|
SELECT 1
|
|
FROM phone_handoff_tickets AS tickets
|
|
INNER JOIN relay_phone_principals AS phones
|
|
ON phones.phone_id = tickets.completed_phone_id
|
|
AND phones.tenant_id = tickets.tenant_id
|
|
INNER JOIN phone_route_handles AS handles
|
|
ON handles.phone_id = tickets.completed_phone_id
|
|
AND handles.tenant_id = tickets.tenant_id
|
|
AND handles.handle_hash = tickets.completed_route_handle_hash
|
|
WHERE tickets.activation_nonce = ?2
|
|
AND phones.status = 'active' AND phones.revoked_at IS NULL
|
|
AND handles.status = 'active' AND handles.revoked_at IS NULL
|
|
AND phones.token_hash = tickets.completed_phone_token_hash
|
|
)
|
|
`;
|
|
|
|
export const FINALIZE_PHONE_HANDOFF_ACTIVATION_SQL = `
|
|
UPDATE phone_handoff_tickets
|
|
SET activated_at = ?1
|
|
WHERE activation_nonce = ?2 AND activated_at IS NULL
|
|
AND EXISTS (
|
|
SELECT 1 FROM relay_phone_principals AS phones
|
|
WHERE phones.phone_id = phone_handoff_tickets.completed_phone_id
|
|
AND phones.tenant_id = phone_handoff_tickets.tenant_id
|
|
AND phones.token_hash = phone_handoff_tickets.completed_phone_token_hash
|
|
AND phones.status = 'active' AND phones.revoked_at IS NULL
|
|
)
|
|
AND EXISTS (
|
|
SELECT 1 FROM phone_route_handles AS handles
|
|
WHERE handles.phone_id = phone_handoff_tickets.completed_phone_id
|
|
AND handles.tenant_id = phone_handoff_tickets.tenant_id
|
|
AND handles.handle_hash = phone_handoff_tickets.completed_route_handle_hash
|
|
AND handles.status = 'active' AND handles.revoked_at IS NULL
|
|
)
|
|
`;
|
|
|
|
export const AUTHORIZE_PHONE_ROUTE_SQL = `
|
|
SELECT handles.tenant_id, regions.code AS home_region,
|
|
placements.relay_node_id, placements.generation,
|
|
phones.phone_id, phones.name, phones.ed25519_public,
|
|
phones.x25519_public, phones.identity_fingerprint
|
|
FROM phone_route_handles AS handles
|
|
INNER JOIN relay_phone_principals AS phones ON phones.phone_id = handles.phone_id
|
|
INNER JOIN tenant_placements AS placements ON placements.tenant_id = handles.tenant_id
|
|
INNER JOIN relay_regions AS regions ON regions.id = placements.home_region_id
|
|
INNER JOIN tenant_authorization_state AS authorizations ON authorizations.tenant_id = handles.tenant_id
|
|
WHERE handles.handle_hash = ?1 AND handles.status = 'active'
|
|
AND handles.revoked_at IS NULL AND phones.token_hash = ?2
|
|
AND phones.status = 'active' AND phones.revoked_at IS NULL
|
|
AND phones.tenant_id = handles.tenant_id
|
|
AND authorizations.status = 'active'
|
|
AND placements.state IN ('active', 'draining')
|
|
`;
|
|
|
|
export const PHONE_FOR_NODE_REVOCATION_SQL = `
|
|
SELECT placements.relay_node_id, phones.status
|
|
FROM tenant_placements AS placements
|
|
INNER JOIN relay_phone_principals AS phones
|
|
ON phones.tenant_id = placements.tenant_id
|
|
WHERE placements.tenant_id = ?1 AND phones.phone_id = ?2`;
|
|
|
|
export const REVOKE_PHONE_PRINCIPAL_SQL = `
|
|
UPDATE relay_phone_principals
|
|
SET status = 'revoked', revoked_at = ?1
|
|
WHERE phone_id = ?2 AND tenant_id = ?3
|
|
AND status = 'active' AND revoked_at IS NULL`;
|
|
|
|
export const REVOKE_PHONE_ROUTES_SQL = `
|
|
UPDATE phone_route_handles
|
|
SET status = 'revoked', revoked_at = ?1
|
|
WHERE phone_id = ?2 AND tenant_id = ?3
|
|
AND status = 'active' AND revoked_at IS NULL`;
|
|
|
|
export const ADVANCE_AUTHORIZATION_AFTER_PHONE_REVOKE_SQL = `
|
|
UPDATE tenant_authorization_state
|
|
SET revision = revision + 1, updated_at = ?1
|
|
WHERE tenant_id = ?2
|
|
AND EXISTS (
|
|
SELECT 1 FROM relay_phone_principals
|
|
WHERE phone_id = ?3 AND tenant_id = ?2
|
|
AND status = 'revoked' AND revoked_at = ?1
|
|
)`;
|