106 lines
5.3 KiB
SQL
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;
|