Changes between Version 1 and Version 2 of failedAttemptsLog


Ignore:
Timestamp:
08/18/26 14:27:48 (2 days ago)
Author:
192063
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • failedAttemptsLog

    v1 v2  
    22
    33==== Опис ====
     4Овој тригер ќе се тригерува откако ќе се случат 3 последователни failed login attempts.
     5За да го реализираме ова, т.е. да водиме евиденција дека се случиле 3 последователни обиди, на бројот за failed login attempts ќе му направиме модул со 3.
     6
     7
    48
    59== Тригер ==
    610==== SQL код ====
     11{{{
     12#!sql
     13CREATE TRIGGER trg_failed_login_threshold
     14AFTER INSERT ON Login_Attempt
     15FOR EACH ROW
     16EXECUTE FUNCTION trg_failed_login_threshold();
     17}}}
     18
     19== Функција ==
     20==== SQL код ====
     21{{{
     22#!sql
     23CREATE OR REPLACE FUNCTION trg_failed_login_threshold()
     24RETURNS TRIGGER
     25LANGUAGE plpgsql
     26AS $$
     27DECLARE
     28    failed_count INTEGER; --declarirame promenliva so tip int za broenje na 3 neuspesni obidi
     29BEGIN
     30    IF NEW.successful = FALSE THEN --dokolku loginot e neuspesen
     31        SELECT COUNT(*)
     32        INTO failed_count --zapisi vo failed_count promenlivata
     33        FROM Login_Attempt la --od Login_Attempt tabelata
     34        WHERE la.user_id = NEW.user_id  -- kade sto e ist user id
     35          AND la.successful = FALSE --neuspesen obid
     36          AND la.attempt_date >= COALESCE(
     37              (
     38                  SELECT MAX(successful_login.attempt_date)
     39                  FROM Login_Attempt successful_login
     40                  WHERE successful_login.user_id = NEW.user_id
     41                    AND successful_login.successful = TRUE
     42                    AND successful_login.attempt_date < NEW.attempt_date
     43              ),
     44              '-infinity'::timestamptz
     45          );
     46
     47        IF failed_count > 0 AND MOD(failed_count, 3) = 0 THEN --failed count mora da bide > 0 i failed count modul 3 mora da bide 0
     48
     49            INSERT INTO System_Event (
     50                user_id,
     51                user_email,
     52                event_type,
     53                description
     54            )
     55            VALUES (
     56                NEW.user_id,
     57                NEW.email,
     58                'THREE_UNSUCCESSFUL_LOGINS',
     59                'The user failed to login 3 times in a row'
     60            );
     61        END IF;
     62    END IF;
     63    RETURN NEW;
     64END;
     65$$;
     66}}}
    767
    868
    969=== View ===
    1070==== SQL код ====
     71{{{
     72#!sql
     73CREATE OR REPLACE VIEW Failed_Login_View AS
     74SELECT
     75    user_id,
     76    user_email AS email,
     77    event_type,
     78    description,
     79    event_date
     80FROM System_Event
     81WHERE event_type = 'THREE_UNSUCCESSFUL_LOGINS';
     82}}}