Users Tokens internal procedures
Definer Procedures
DROP PROCEDURE Base_Users_Tokens_Sent;
DELIMITER //
CREATE PROCEDURE Base_Users_Tokens_Sent
(
$token CHAR(64)
)
SQL SECURITY DEFINER
BEGIN
UPDATE base_users_tokens SET token_sent = NOW() WHERE token = $token AND 0 = token_sent;
END
//
DELIMITER ;
DROP PROCEDURE Base_Users_Tokens_Used;
DELIMITER //
CREATE PROCEDURE Base_Users_Tokens_Used
(
$token CHAR(64)
)
SQL SECURITY DEFINER
BEGIN
UPDATE base_users_tokens SET token_used = NOW() WHERE token = $token AND 0 = token_used AND NOW() <= token_expiry;
END
//
DELIMITER ;
Invoker Procedures
DROP PROCEDURE Base_Users_Tokens_Create;
DELIMITER //
CREATE PROCEDURE Base_Users_Tokens_Create
(
$token_type CHAR(50),
$USER INT,
$token_expiry_days INT,
OUT $token CHAR(64)
)
SQL SECURITY INVOKER
BEGIN
DECLARE $token_expiry DATETIME DEFAULT 0;
IF @@read_only THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'READ_ONLY';
ELSEIF NOT( IsEventScheduler() OR IsRootCaller() ) THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'INVALID_AUTHORISATION IN Base_Users_Tokens_Create';
ELSE
#
# Ensure unique token.
#
SET $token = GenerateSalt();
WHILE EXISTS( SELECT * FROM base_users_tokens WHERE token=$token ) DO
SET $token = GenerateSalt();
END WHILE;
#
# Set 3 day token expiry
#
SET $token_expiry = DATE_ADD( NOW(), INTERVAL $token_expiry_days DAY );
REPLACE INTO base_users_tokens
( TOKEN_ID, USER, token_created, token_expiry_days, token_expiry, token_type, token )
VALUES
( 0, $USER, NOW(), $token_expiry_days, $token_expiry, $token_type, $token );
END IF;
END
//
DELIMITER ;