Files
2026-09-27 14:21:31 +00:00

106 lines
5.3 KiB
SQL

-- MijnBesluit - kijklink voor een moment aan iemand zonder account
--
-- Zet je een moment klaar voor iemand die (nog) geen MijnBesluit-account heeft, dan krijgt hij
-- voortaan een e-mail met een link naar een landingspagina: daar is het bericht - tekst en een
-- eventuele foto, video of document - te zien zonder in te loggen. Zelfde opzet als de
-- uitnodigings- en bezwaarlink: alleen de hash van het token staat in de database, het token
-- zelf staat uitsluitend in de e-mail.
--
-- view_token_hash : SHA-256 van het token uit de link
-- view_token_expires : tot wanneer die link werkt (30 dagen na het versturen)
-- view_token_sent_at : wanneer de linkmail voor het eerst is verstuurd
-- viewed_at : wanneer de landingspagina daadwerkelijk is geopend
-- view_reminder_sent_at : wanneer de herinnering is verstuurd (nooit meer dan één keer)
-- wrapped_content_key_for_token: de contentsleutel, ingepakt met een sleutel uit het token zelf
-- wrapped_vault_key_for_token : dezelfde inpakslag, voor de bijlage bij dit bericht
--
-- Draaien met:
-- mysql -u root -p mijnbesluit < db\18_kijklink.sql
--
-- Opnieuw draaien mag: er gebeurt dan niets.
USE `mijnbesluit`;
-- ---------------------------------------------------------------- view_token_hash
SET @bestaat := (
SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'messages' AND COLUMN_NAME = 'view_token_hash');
SET @sql := IF(@bestaat = 0,
'ALTER TABLE `messages` ADD COLUMN `view_token_hash` VARBINARY(32) NULL',
'SELECT "view_token_hash bestaat al" AS melding');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- ---------------------------------------------------------------- view_token_expires
SET @bestaat := (
SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'messages' AND COLUMN_NAME = 'view_token_expires');
SET @sql := IF(@bestaat = 0,
'ALTER TABLE `messages` ADD COLUMN `view_token_expires` DATETIME(3) NULL',
'SELECT "view_token_expires bestaat al" AS melding');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- ---------------------------------------------------------------- view_token_sent_at
SET @bestaat := (
SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'messages' AND COLUMN_NAME = 'view_token_sent_at');
SET @sql := IF(@bestaat = 0,
'ALTER TABLE `messages` ADD COLUMN `view_token_sent_at` DATETIME(3) NULL',
'SELECT "view_token_sent_at bestaat al" AS melding');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- ---------------------------------------------------------------- viewed_at
SET @bestaat := (
SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'messages' AND COLUMN_NAME = 'viewed_at');
SET @sql := IF(@bestaat = 0,
'ALTER TABLE `messages` ADD COLUMN `viewed_at` DATETIME(3) NULL',
'SELECT "viewed_at bestaat al" AS melding');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- ---------------------------------------------------------------- view_reminder_sent_at
SET @bestaat := (
SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'messages' AND COLUMN_NAME = 'view_reminder_sent_at');
SET @sql := IF(@bestaat = 0,
'ALTER TABLE `messages` ADD COLUMN `view_reminder_sent_at` DATETIME(3) NULL',
'SELECT "view_reminder_sent_at bestaat al" AS melding');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- ---------------------------------------------------------------- wrapped_content_key_for_token
SET @bestaat := (
SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'messages' AND COLUMN_NAME = 'wrapped_content_key_for_token');
SET @sql := IF(@bestaat = 0,
'ALTER TABLE `messages` ADD COLUMN `wrapped_content_key_for_token` VARBINARY(96) NULL',
'SELECT "wrapped_content_key_for_token bestaat al" AS melding');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- ---------------------------------------------------------------- wrapped_vault_key_for_token
SET @bestaat := (
SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'messages' AND COLUMN_NAME = 'wrapped_vault_key_for_token');
SET @sql := IF(@bestaat = 0,
'ALTER TABLE `messages` ADD COLUMN `wrapped_vault_key_for_token` VARBINARY(96) NULL',
'SELECT "wrapped_vault_key_for_token bestaat al" AS melding');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
-- ---------------------------------------------------------------- index
-- De landingspagina zoekt het bericht op dit kenmerk op, dus zonder index is dat een tabelscan.
SET @bestaat := (
SELECT COUNT(*) FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'messages' AND INDEX_NAME = 'ix_messages_view_token');
SET @sql := IF(@bestaat = 0,
'CREATE INDEX `ix_messages_view_token` ON `messages` (`view_token_hash`)',
'SELECT "ix_messages_view_token bestaat al" AS melding');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SELECT 'Klaar. Momenten voor iemand zonder account krijgen vanaf nu een kijklink per e-mail.' AS melding;