aquatic/aquatic_http_private
2022-04-03 20:31:57 +02:00
..
src http_protocol: implement axum IntoResponse, use in http_private 2022-04-03 20:20:51 +02:00
.gitignore WIP: start work on aquatic_http_private 2022-04-02 12:31:06 +02:00
Cargo.lock WIP: start work on aquatic_http_private 2022-04-02 12:31:06 +02:00
Cargo.toml http_protocol: implement axum IntoResponse, use in http_private 2022-04-03 20:20:51 +02:00
README.md Update aquatic_http_private/README.md 2022-04-03 20:31:57 +02:00

aquatic_http_private

Work in progress.

Setup

Create user:

CREATE DATABASE aquatic;
CREATE USER 'aquatic'@localhost IDENTIFIED BY 'aquatic';
GRANT EXECUTE ON PROCEDURE aquatic.aquatic_announce_v1 TO 'aquatic'@localhost;
FLUSH PRIVILEGES;

Create stored procedure (OR REPLACE keeps privileges in place and is supported by MariaDB since 10.1.3):

CREATE OR REPLACE PROCEDURE aquatic_announce_v1 (
    IN p_source_ip VARBINARY(16),
    IN p_source_port SMALLINT UNSIGNED,
    IN p_user_agent TEXT, -- Can be NULL
    IN p_user_token VARCHAR(255),
    IN p_info_hash CHAR(40),
    IN p_peer_id CHAR(40),
    IN p_event VARCHAR(9),
    IN p_uploaded BIGINT UNSIGNED,
    IN p_downloaded BIGINT UNSIGNED,
    IN p_left BIGINT UNSIGNED,
    OUT p_announce_allowed BOOLEAN, -- false if not set
    OUT p_failure_reason TEXT, -- NULL if not set
    OUT p_warning_message TEXT -- NULL if not set
)
MODIFIES SQL DATA
BEGIN
    SELECT true INTO p_announce_allowed;
END

Create .env file:

DATABASE_URL="mysql://aquatic:aquatic@localhost/aquatic"

Run application:

cargo run --release -p aquatic_http_private