Implement stored procedure for the first time
This commit is contained in:
		
							parent
							
								
									9b414339ca
								
							
						
					
					
						commit
						356d88f73a
					
				@ -36,6 +36,7 @@ class auth:
 | 
				
			|||||||
            self.cursor.execute(f"SELECT `id` FROM `auth_roles` WHERE `name` = %s ;", (roles,) )
 | 
					            self.cursor.execute(f"SELECT `id` FROM `auth_roles` WHERE `name` = %s ;", (roles,) )
 | 
				
			||||||
            result_roles = self.cursor.fetchone()
 | 
					            result_roles = self.cursor.fetchone()
 | 
				
			||||||
            loggorilla.prcss(APIADDR, "Process parameters")
 | 
					            loggorilla.prcss(APIADDR, "Process parameters")
 | 
				
			||||||
 | 
					            ls_roles	= [ result_roles["id"] ]
 | 
				
			||||||
            hashed	= bcrypt.hashpw(password.encode(), bcrypt.gensalt()).decode()
 | 
					            hashed	= bcrypt.hashpw(password.encode(), bcrypt.gensalt()).decode()
 | 
				
			||||||
            token	= saltedkey.token(username, hashed)
 | 
					            token	= saltedkey.token(username, hashed)
 | 
				
			||||||
            if globalvar.production == True:
 | 
					            if globalvar.production == True:
 | 
				
			||||||
@ -51,11 +52,7 @@ class auth:
 | 
				
			|||||||
            result_validation = procedure_validation.validation().register(APIADDR, captcha, score, roles, username, password, email)
 | 
					            result_validation = procedure_validation.validation().register(APIADDR, captcha, score, roles, username, password, email)
 | 
				
			||||||
            if result_validation['status'] == "valid":
 | 
					            if result_validation['status'] == "valid":
 | 
				
			||||||
                loggorilla.prcss(APIADDR, "Inserting")
 | 
					                loggorilla.prcss(APIADDR, "Inserting")
 | 
				
			||||||
                self.cursor.execute("INSERT INTO `auth` VALUES (%s, %s);", (token, hashed) )
 | 
					                self.cursor.execute("CALL sp_auth_add(%s, %s, %s, %s, %s, %s);", (token, hashed, username, email, 0, str(ls_roles)) )
 | 
				
			||||||
                self.cursor.execute("INSERT INTO `auth_profile` VALUES (DEFAULT, %s, %s, %s, NULL);", (token, username, email) )
 | 
					 | 
				
			||||||
                auth_profile_lastrowid = self.cursor.lastrowid
 | 
					 | 
				
			||||||
                self.cursor.execute("INSERT INTO `auth_profile_verification` VALUES (DEFAULT, %s, 'email', 0);", (auth_profile_lastrowid,) )
 | 
					 | 
				
			||||||
                self.cursor.execute("INSERT INTO `auth_profile_roles` VALUES (DEFAULT, %s, %s);", (auth_profile_lastrowid, result_roles['id']) )
 | 
					 | 
				
			||||||
                loggorilla.prcss(APIADDR, "Set expired datetime")
 | 
					                loggorilla.prcss(APIADDR, "Set expired datetime")
 | 
				
			||||||
                expired = globalvar.verification_link_expiration
 | 
					                expired = globalvar.verification_link_expiration
 | 
				
			||||||
                expired_isoformat = expired.isoformat()
 | 
					                expired_isoformat = expired.isoformat()
 | 
				
			||||||
@ -378,12 +375,7 @@ class auth:
 | 
				
			|||||||
                hashed	= bcrypt.hashpw(password.encode(), bcrypt.gensalt()).decode()
 | 
					                hashed	= bcrypt.hashpw(password.encode(), bcrypt.gensalt()).decode()
 | 
				
			||||||
                token	= saltedkey.token(username, hashed)
 | 
					                token	= saltedkey.token(username, hashed)
 | 
				
			||||||
                loggorilla.prcss(APIADDR, "Inserting")
 | 
					                loggorilla.prcss(APIADDR, "Inserting")
 | 
				
			||||||
                self.cursor.execute("INSERT INTO `auth` VALUES (%s, %s);", (token, hashed) )
 | 
					                self.cursor.execute("CALL sp_auth_add(%s, %s, %s, %s, %s, %s);", (token, hashed, username, email, 1, str(roles)) )
 | 
				
			||||||
                self.cursor.execute("INSERT INTO `auth_profile` VALUES (DEFAULT, %s, %s, %s, NULL);", (token, username, email) )
 | 
					 | 
				
			||||||
                auth_profile_lastrowid = self.cursor.lastrowid
 | 
					 | 
				
			||||||
                self.cursor.execute("INSERT INTO `auth_profile_verification` VALUES (DEFAULT, %s, 'email', 1);", (auth_profile_lastrowid,) )
 | 
					 | 
				
			||||||
                for role in roles:
 | 
					 | 
				
			||||||
                    self.cursor.execute("INSERT INTO `auth_profile_roles` VALUES (DEFAULT, %s, %s);", (auth_profile_lastrowid, role) )
 | 
					 | 
				
			||||||
                loggorilla.prcss(APIADDR, "Sending email")
 | 
					                loggorilla.prcss(APIADDR, "Sending email")
 | 
				
			||||||
                webmail_data 	= {
 | 
					                webmail_data 	= {
 | 
				
			||||||
                    "username"	: username,
 | 
					                    "username"	: username,
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										35
									
								
								sql/auth.sql
									
									
									
									
									
								
							
							
						
						
									
										35
									
								
								sql/auth.sql
									
									
									
									
									
								
							@ -1,8 +1,11 @@
 | 
				
			|||||||
-- README
 | 
					-- README
 | 
				
			||||||
-- idx_ = index
 | 
					-- Prefix idx_ = index
 | 
				
			||||||
-- fk_  = foreign
 | 
					-- Prefix fk_  = foreign
 | 
				
			||||||
-- Create an index for fast lookups
 | 
					-- Create an index for fast lookups
 | 
				
			||||||
-- Defining constraints separately for better readability & maintainability
 | 
					-- Defining constraints separately for better readability & maintainability
 | 
				
			||||||
 | 
					-- Prefix sp_  = Stored Procedure
 | 
				
			||||||
 | 
					-- Prefix p_   = Parameter(s)
 | 
				
			||||||
 | 
					-- Prefix v_   = Variable(s)
 | 
				
			||||||
-- NOTE
 | 
					-- NOTE
 | 
				
			||||||
-- Next verification variation should be based from identity and contact
 | 
					-- Next verification variation should be based from identity and contact
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -75,3 +78,31 @@ INSERT INTO `auth_roles` VALUES
 | 
				
			|||||||
(3, 'member'	),
 | 
					(3, 'member'	),
 | 
				
			||||||
(4, 'tester'	);
 | 
					(4, 'tester'	);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DELIMITER //
 | 
				
			||||||
 | 
					CREATE PROCEDURE sp_auth_add(
 | 
				
			||||||
 | 
						IN p_token binary(40),
 | 
				
			||||||
 | 
						IN p_hashed binary(60),
 | 
				
			||||||
 | 
						IN p_username varchar(36),
 | 
				
			||||||
 | 
						IN p_email LONGTEXT,
 | 
				
			||||||
 | 
						IN p_verified int(1), -- register:0, accept:1
 | 
				
			||||||
 | 
						IN p_roles JSON -- example: [1,2,4]. Roles duplication was checked on Back-End side.
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					BEGIN
 | 
				
			||||||
 | 
						DECLARE i INT DEFAULT 0;
 | 
				
			||||||
 | 
					    DECLARE n INT;
 | 
				
			||||||
 | 
						DECLARE v_auth_profile_lastrowid INT(11);
 | 
				
			||||||
 | 
						INSERT INTO `auth` VALUES (p_token, p_hashed);
 | 
				
			||||||
 | 
						INSERT INTO `auth_profile` VALUES (DEFAULT, p_token, p_username, p_email, NULL);
 | 
				
			||||||
 | 
						SET v_auth_profile_lastrowid = LAST_INSERT_ID();
 | 
				
			||||||
 | 
						INSERT INTO `auth_profile_verification` VALUES (DEFAULT, v_auth_profile_lastrowid, 'email', p_verified);
 | 
				
			||||||
 | 
					    SET n = JSON_LENGTH(p_roles);
 | 
				
			||||||
 | 
					    WHILE i < n DO
 | 
				
			||||||
 | 
							INSERT INTO `auth_profile_roles` VALUES (
 | 
				
			||||||
 | 
								DEFAULT,
 | 
				
			||||||
 | 
								v_auth_profile_lastrowid,
 | 
				
			||||||
 | 
								JSON_UNQUOTE(JSON_EXTRACT(p_roles, CONCAT('$[', i, ']')))
 | 
				
			||||||
 | 
							);
 | 
				
			||||||
 | 
					        SET i = i + 1;
 | 
				
			||||||
 | 
					    END WHILE;
 | 
				
			||||||
 | 
					END //
 | 
				
			||||||
 | 
					DELIMITER ;
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user