-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathevent_trigger.sql
More file actions
38 lines (32 loc) · 1.04 KB
/
event_trigger.sql
File metadata and controls
38 lines (32 loc) · 1.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
-- Drop the event trigger if present
DROP EVENT TRIGGER IF EXISTS valid_until_warning CASCADE;
-- Add event trigger for valid until warning
CREATE OR REPLACE FUNCTION warning_valid_until()
RETURNS event_trigger AS
$$
DECLARE
warn_days integer;
valid_warning integer;
BEGIN
valid_warning := current_setting('credcheck.password_valid_warning', true)::integer;
IF (valid_warning IS NOT NULL AND valid_warning > 0) THEN
SELECT ((extract(epoch from valuntil) - extract(epoch from current_timestamp))/86400)::integer
INTO warn_days
FROM pg_catalog.pg_shadow
WHERE usename = SESSION_USER
AND valuntil IS NOT NULL
AND valuntil > current_timestamp;
IF (warn_days IS NOT NULL AND warn_days <= valid_warning) THEN
RAISE WARNING 'your password will expire in % days, please renew your password!', warn_days;
END IF;
END IF;
END;
$$
LANGUAGE plpgsql
SECURITY DEFINER
;
-- trigger definition
CREATE EVENT TRIGGER valid_until_warning
ON login
EXECUTE FUNCTION warning_valid_until();
ALTER EVENT TRIGGER valid_until_warning ENABLE ALWAYS;