Eerste commit
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
-- MijnBesluit - onthouden welke inlogcode ECHT is gebruikt
|
||||
--
|
||||
-- Er zit een rem op het aanvragen van codes: niet meer dan vijf per uur voor hetzelfde adres.
|
||||
-- Die rem is er tegen één ding: iemand die het postvak van een ander volgooit door steeds
|
||||
-- opnieuw een code voor dat adres aan te vragen.
|
||||
--
|
||||
-- Die telling keek naar alle codes van het afgelopen uur, ook de codes die gewoon zijn gebruikt
|
||||
-- om in te loggen. Wie vijf keer in een uur inlogde, sloot zichzelf dus een uur buiten - en dat
|
||||
-- gebeurt precies wanneer er íéts anders aan de hand is en je het een paar keer opnieuw
|
||||
-- probeert. Dat is de verkeerde kant om te falen: de rem hoort een vreemde te stoppen, niet de
|
||||
-- eigenaar.
|
||||
--
|
||||
-- Waarom daar een nieuwe kolom voor nodig is: `consumed_at` betekent "deze code werkt niet
|
||||
-- meer", en dat wordt ook gezet als een nieuwe aanvraag de vorige ongeldig maakt, en als een
|
||||
-- code te vaak fout is ingevuld. Precies die twee gevallen MOETEN meetellen - anders kan een
|
||||
-- vreemde de rem leegtrekken door codes aan te vragen of expres fout in te vullen.
|
||||
--
|
||||
-- `signed_in_at` staat alleen gevuld als de code goed is ingevuld en er iemand mee is
|
||||
-- binnengekomen. Alleen dát is het bewijs dat de aanvrager zelf in dat postvak zit, en alleen
|
||||
-- die codes tellen niet mee voor de rem.
|
||||
--
|
||||
-- Draaien met:
|
||||
-- mysql -u root -p mijnbesluit < db\14_inlogcode_gebruikt.sql
|
||||
--
|
||||
-- Opnieuw draaien mag: er gebeurt dan niets.
|
||||
|
||||
USE `mijnbesluit`;
|
||||
|
||||
SET @bestaat := (
|
||||
SELECT COUNT(*) FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'login_codes' AND COLUMN_NAME = 'signed_in_at');
|
||||
|
||||
SET @sql := IF(@bestaat = 0,
|
||||
'ALTER TABLE `login_codes` ADD COLUMN `signed_in_at` DATETIME(3) NULL',
|
||||
'SELECT "signed_in_at bestaat al" AS melding');
|
||||
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
|
||||
|
||||
SELECT 'Klaar.' AS melding;
|
||||
Reference in New Issue
Block a user