]> SAFE projects GIT repository - jmp/mailleur/commitdiff
Trying to make database trigger simpler
authorJean-Marc Pigeon <jmp@safe.c>
Fri, 14 Nov 2025 16:16:39 +0000 (11:16 -0500)
committerJean-Marc Pigeon <jmp@safe.c>
Fri, 14 Nov 2025 16:16:39 +0000 (11:16 -0500)
sql/mailleur.sql
sql/preset.sql

index 629c1bb9b3bccfc4112d3d508f358b9876ba807e..ac79f0d6d91010754e9404896daed019c986050c 100644 (file)
@@ -175,17 +175,15 @@ CREATE TABLE admins       (
 #ifdef POSTGRESQL
 CREATE FUNCTION updpass()
   RETURNS trigger AS $$
-  DECLARE skip BOOLEAN :=  FALSE;
   BEGIN
-    SELECT skip_password_trigger INTO skip
-       FROM temp_skip_flag limit 1;
-    IF skip = FALSE THEN
-      NEW.hash = md5(HASHING);
-      NEW.password = crypt (NEW.password,gen_salt('md5'));
-    ELSE
-      NEW.password = NEW.password;
-    END if;
-  RETURN NEW;
+    IF NEW.password IS NULL OR length(trim(NEW.password)) = 0 THEN     
+      RETURN NEW;
+    END IF;
+    IF substring(NEW.password,1,1) = '$' THEN
+      RETURN NEW;
+    END IF;
+  NEW.hash = md5(HASHING);
+  NEW.password = crypt (NEW.password,gen_salt('md5'));
   END;
   $$ LANGUAGE 'plpgsql';
 
@@ -201,14 +199,14 @@ DELIMITER $$
 CREATE TRIGGER sethash 
   BEFORE UPDATE ON emails FOR EACH ROW
   BEGIN 
-    DECLARE skip BOOLEAN DEFAULT FALSE;
-    SELECT IFNULL(MAX(skip_password_trigger),FALSE) INTO skip
-       FROM temp_skip_flag;
-    IF skip = FALSE THEN
+    IF NEW.password IS NULL OR 
+       LENGTH(TRIM(NEW.password))=0 OR
+       LEFT(NEW.password,1) != '$' THEN
+       THEN
+      set NEW.password=NEW.password;
+    else 
       set NEW.hash=MD5(HASHING);
       set NEW.password=encrypt(NEW.password,concat('$1$',md5(rand())));
-    ELSE
-      set NEW.password=NEW.password;
     END IF;
   END$$
     
@@ -216,14 +214,14 @@ CREATE TRIGGER sethash
 CREATE TRIGGER updhash
   BEFORE INSERT ON emails FOR EACH ROW
   BEGIN
-    DECLARE skip BOLLEAN DEFAULT FALSE;
-    SELECT IFNULL(MAX(skip_password_trigger),FALSE) INTO skip
-       FROM temp_skip_flag;
-    IF skip = FALSE THEN
+    IF NEW.password IS NULL OR 
+       LENGTH(TRIM(NEW.password))=0 OR
+       LEFT(NEW.password,1) != '$' THEN
+       THEN
+      set NEW.password=NEW.password;
+    else 
       set NEW.hash=MD5(HASHING);
       set NEW.password=encrypt(NEW.password,concat('$1$',md5(rand())));
-    ELSE
-      set NEW.password=NEW.password;
     END IF;
   END$$
 
index 42b2a78152d4f085c60057ba537c8db20e8baf88..7088111129bdeed917eaa208bd1ee509abc95e8a 100644 (file)
@@ -6,11 +6,6 @@
 /*                                                     */
 /********************************************************/
 
-CREATE TEMPORARY TABLE temp_skip_flag (
-       skip_password_trigger BOOLEAN
-       );
-
-INSERT INTO temp_skip_flag VALUES (TRUE);
 /********************************************************/
 /*                                                     */
 /*     Creating the bare minimun user configuration    */
@@ -29,5 +24,4 @@ INSERT INTO emails (email,password)
 /*     Preset value completed                          */
 /*                                                     */
 /********************************************************/
-DELETE FROM temp_skip_flag;