Web Connections

Invoker Procedures

DROP   PROCEDURE _Base_Web_Connections_Create_Out;
DELIMITER //
CREATE PROCEDURE _Base_Web_Connections_Create_Out
(
    $connection_server_name  CHAR(99),
    $connection_ip_remote    CHAR(45),
OUT $connection_csrf_token   CHAR(64)
)
SQL SECURITY INVOKER
BEGIN

    DECLARE $CONNECTION_ID           INT       DEFAULT 0;
    DECLARE $connection_csrf_expiry  DATETIME  DEFAULT 0;

    SELECT   CONNECTION_ID,  connection_csrf_token
    INTO    $CONNECTION_ID, $connection_csrf_token
    FROM     base_web_connections
    WHERE    connection_server_name = $connection_server_name
    AND      connection_ip_remote   = $connection_ip_remote
    AND      NOW()                  < DATE_SUB( connection_csrf_expiry, INTERVAL 10 MINUTE )
    ORDER BY connection_csrf_expiry DESC
    LIMIT    1;

    IF NOT $CONNECTION_ID THEN

        SET $connection_csrf_token  = GenerateSalt();
        SET $connection_csrf_expiry = DATE_ADD( NOW(), INTERVAL 1 HOUR );

        REPLACE INTO base_web_connections
        (  CONNECTION_ID,  connection_server_name,  connection_ip_remote )
        VALUES
        (              0, $connection_server_name, $connection_ip_remote );
        SET $CONNECTION_ID = LAST_INSERT_ID();

        UPDATE base_web_connections
        SET
            connection_csrf_token  = $connection_csrf_token,
            connection_csrf_expiry = $connection_csrf_expiry

        WHERE CONNECTION_ID = $CONNECTION_ID;

    END IF;

    DELETE FROM base_web_connections WHERE connection_csrf_expiry < NOW();

END
//
DELIMITER ;