feat(poll api): hash discord user id (#48)

This commit is contained in:
Ax333l 2023-01-04 13:48:27 +01:00 committed by GitHub
parent 403560beb0
commit 99c476df9a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 29 additions and 2 deletions

21
Cargo.lock generated
View File

@ -709,6 +709,15 @@ dependencies = [
"wasm-bindgen", "wasm-bindgen",
] ]
[[package]]
name = "keccak"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3afef3b6eff9ce9d8ff9b3601125eec7f0c8cbac7abd14f355d053fa56c98768"
dependencies = [
"cpufeatures",
]
[[package]] [[package]]
name = "lazy_static" name = "lazy_static"
version = "1.4.0" version = "1.4.0"
@ -1182,6 +1191,7 @@ dependencies = [
"decancer", "decancer",
"dirs", "dirs",
"dotenv", "dotenv",
"hex",
"mongodb", "mongodb",
"poise", "poise",
"regex", "regex",
@ -1190,6 +1200,7 @@ dependencies = [
"serde_json", "serde_json",
"serde_regex", "serde_regex",
"serde_with_macros 2.0.1", "serde_with_macros 2.0.1",
"sha3",
"tokio", "tokio",
"tracing", "tracing",
"tracing-subscriber", "tracing-subscriber",
@ -1463,6 +1474,16 @@ dependencies = [
"digest", "digest",
] ]
[[package]]
name = "sha3"
version = "0.10.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bdf0c33fae925bdc080598b84bc15c55e7b9a4a43b3c704da051f977469691c9"
dependencies = [
"digest",
"keccak",
]
[[package]] [[package]]
name = "sharded-slab" name = "sharded-slab"
version = "0.1.4" version = "0.1.4"

View File

@ -31,4 +31,6 @@ reqwest = { version = "0.11", features= ["rustls-tls"], default-features = false
chrono = "0.4" chrono = "0.4"
dirs = "4.0" dirs = "4.0"
tracing = { version = "0.1", features = ["max_level_debug", "release_max_level_info"] } tracing = { version = "0.1", features = ["max_level_debug", "release_max_level_info"] }
tracing-subscriber = "0.3" tracing-subscriber = "0.3"
sha3 = "0.10"
hex = "0.4"

View File

@ -1,5 +1,6 @@
use poise::serenity_prelude::{ButtonStyle, ReactionType, Timestamp}; use poise::serenity_prelude::{ButtonStyle, ReactionType, Timestamp};
use sha3::{Digest, Sha3_256};
use tracing::log::{error, info, trace}; use tracing::log::{error, info, trace};
use super::bot::get_data_lock; use super::bot::get_data_lock;
@ -22,9 +23,12 @@ pub async fn handle_poll(
let eligible = member.joined_at.unwrap() <= min_join_date; let eligible = member.joined_at.unwrap() <= min_join_date;
let auth_token = if eligible { let auth_token = if eligible {
let mut hasher = Sha3_256::new();
hasher.update(&member.user.id.to_string());
let result = data let result = data
.api .api
.authenticate(&member.user.id.to_string()) // We cannot use the entire hash because Discord rejects URLs with more than 512 characters.
.authenticate(&hex::encode(hasher.finalize())[..2^5])
.await .await
.map(|auth| auth.access_token); .map(|auth| auth.access_token);