Skip to content
Snippets Groups Projects
Commit d8fb1d69 authored by PavelBegunkov's avatar PavelBegunkov Committed by Artem Konenko
Browse files

Fix authentication token generation #176

parent 56ae0abe
Branches
Tags
No related merge requests found
...@@ -2240,6 +2240,7 @@ BEGIN ...@@ -2240,6 +2240,7 @@ BEGIN
RETURN ROW_COUNT()-1; RETURN ROW_COUNT()-1;
END// END//
-- returns NULL if failed, token otherwise
DROP FUNCTION IF EXISTS CreateAuthToken// DROP FUNCTION IF EXISTS CreateAuthToken//
CREATE FUNCTION CreateAuthToken( CREATE FUNCTION CreateAuthToken(
pAccountID int(11), pAccountID int(11),
...@@ -2247,21 +2248,21 @@ CREATE FUNCTION CreateAuthToken( ...@@ -2247,21 +2248,21 @@ CREATE FUNCTION CreateAuthToken(
) RETURNS char(40) charset ascii ) RETURNS char(40) charset ascii
NO SQL NO SQL
BEGIN BEGIN
DECLARE vCounter int(11) DEFAULT 666; DECLARE vTries int(11) DEFAULT 13; -- number of tries to generate unique token
DECLARE vCreated boolean DEFAULT FALSE; DECLARE vCreated boolean DEFAULT FALSE;
DECLARE vSeed int(11) DEFAULT FLOOR(4294967296 * RAND(CURRENT_TIMESTAMP ^ LAST_INSERT_ID() ^ (pAccountID << 10))); DECLARE vSeed int(11) DEFAULT FLOOR(4294967296 * RAND(CURRENT_TIMESTAMP ^ LAST_INSERT_ID() ^ (pAccountID << 10)));
DECLARE vToken char(40) charset ascii DEFAULT SHA1(vSeed); DECLARE vToken char(40) charset ascii DEFAULT SHA1(vSeed);
WHILE NOT vCreated AND vCounter > 0 DO BEGIN WHILE NOT vCreated AND vTries > 0 DO BEGIN
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET vCreated = FALSE; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET vCreated = FALSE;
SET vToken = SHA1(RAND()); SET vToken = SHA1(RAND());
INSERT INTO auth_tokens(Token, AccountID, Mask) VALUES (vToken, pAccountID, pRightMask); SET vTries = vTries - 1;
SET vCreated = TRUE; SET vCreated = TRUE;
SET vCounter = vCounter - 1;
INSERT INTO auth_tokens(Token, AccountID, Mask) VALUES (vToken, pAccountID, pRightMask);
END; END WHILE; END; END WHILE;
RETURN IF(vCreated, vToken, ''); RETURN IF(vCreated, vToken, NULL);
END// END//
# ------------------------------------------------------------------------------------------- # -------------------------------------------------------------------------------------------
......
...@@ -2338,6 +2338,7 @@ BEGIN ...@@ -2338,6 +2338,7 @@ BEGIN
RETURN ROW_COUNT()-1; RETURN ROW_COUNT()-1;
END// END//
-- returns NULL if failed, token otherwise
DROP FUNCTION IF EXISTS CreateAuthToken// DROP FUNCTION IF EXISTS CreateAuthToken//
CREATE FUNCTION CreateAuthToken( CREATE FUNCTION CreateAuthToken(
pAccountID int(11), pAccountID int(11),
...@@ -2345,21 +2346,21 @@ CREATE FUNCTION CreateAuthToken( ...@@ -2345,21 +2346,21 @@ CREATE FUNCTION CreateAuthToken(
) RETURNS char(40) charset ascii ) RETURNS char(40) charset ascii
NO SQL NO SQL
BEGIN BEGIN
DECLARE vCounter int(11) DEFAULT 666; DECLARE vTries int(11) DEFAULT 13; -- number of tries to generate unique token
DECLARE vCreated boolean DEFAULT FALSE; DECLARE vCreated boolean DEFAULT FALSE;
DECLARE vSeed int(11) DEFAULT FLOOR(4294967296 * RAND(CURRENT_TIMESTAMP ^ LAST_INSERT_ID() ^ (pAccountID << 10))); DECLARE vSeed int(11) DEFAULT FLOOR(4294967296 * RAND(CURRENT_TIMESTAMP ^ LAST_INSERT_ID() ^ (pAccountID << 10)));
DECLARE vToken char(40) charset ascii DEFAULT SHA1(vSeed); DECLARE vToken char(40) charset ascii DEFAULT SHA1(vSeed);
WHILE NOT vCreated AND vCounter > 0 DO BEGIN WHILE NOT vCreated AND vTries > 0 DO BEGIN
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET vCreated = FALSE; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET vCreated = FALSE;
SET vToken = SHA1(RAND()); SET vToken = SHA1(RAND());
INSERT INTO auth_tokens(Token, AccountID, Mask) VALUES (vToken, pAccountID, pRightMask); SET vTries = vTries - 1;
SET vCreated = TRUE; SET vCreated = TRUE;
SET vCounter = vCounter - 1;
INSERT INTO auth_tokens(Token, AccountID, Mask) VALUES (vToken, pAccountID, pRightMask);
END; END WHILE; END; END WHILE;
RETURN IF(vCreated, vToken, ''); RETURN IF(vCreated, vToken, NULL);
END// END//
DELIMITER ; DELIMITER ;
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment