atagen

jelq

public

an http based roguelike rpg about jelqing

Star0
Watch0
2026362c76a617af2cdca92573dd85e96c0abfb0
1
ssh://brewery@pls.lobotomise.me:33/atagen/jelq.git

Blame: src/http/shame.rs

8b8e83329a1datagen2026-10-12 12:01 UTC1
use axum::http::HeaderValue;
8b8e83329a1datagen2026-10-12 12:01 UTC2
8b8e83329a1datagen2026-10-12 12:01 UTC3
use super::ctx::Ctx;
8b8e83329a1datagen2026-10-12 12:01 UTC4
use crate::{game::Run, secret::Secret};
8b8e83329a1datagen2026-10-12 12:01 UTC5
8b8e83329a1datagen2026-10-12 12:01 UTC6
pub const COOKIE_ATTRIBUTES: &str = "Max-Age=31536000; Path=/; HttpOnly; SameSite=Strict";
8b8e83329a1datagen2026-10-12 12:01 UTC7
8b8e83329a1datagen2026-10-12 12:01 UTC8
pub fn settle(run: &mut Run, ctx: &Ctx, secret: &Secret) -> (u32, HeaderValue) {
8b8e83329a1datagen2026-10-12 12:01 UTC9
    let presented = ctx
8b8e83329a1datagen2026-10-12 12:01 UTC10
        .cookie("shame")
8b8e83329a1datagen2026-10-12 12:01 UTC11
        .and_then(|signed| secret.verify("shame", signed))
8b8e83329a1datagen2026-10-12 12:01 UTC12
        .and_then(|total| total.parse::<u32>().ok());
8b8e83329a1datagen2026-10-12 12:01 UTC13
    let total = run.settle_shame(presented);
8b8e83329a1datagen2026-10-12 12:01 UTC14
    let cookie = format!(
8b8e83329a1datagen2026-10-12 12:01 UTC15
        "shame={}; {COOKIE_ATTRIBUTES}",
8b8e83329a1datagen2026-10-12 12:01 UTC16
        secret.sign("shame", &total.to_string())
8b8e83329a1datagen2026-10-12 12:01 UTC17
    );
8b8e83329a1datagen2026-10-12 12:01 UTC18
    (
8b8e83329a1datagen2026-10-12 12:01 UTC19
        total,
8b8e83329a1datagen2026-10-12 12:01 UTC20
        HeaderValue::from_str(&cookie).expect("a signed number is a valid header value"),
8b8e83329a1datagen2026-10-12 12:01 UTC21
    )
8b8e83329a1datagen2026-10-12 12:01 UTC22
}
8b8e83329a1datagen2026-10-12 12:01 UTC23
8b8e83329a1datagen2026-10-12 12:01 UTC24
pub fn ruler_cookie(secret: &Secret) -> HeaderValue {
8b8e83329a1datagen2026-10-12 12:01 UTC25
    HeaderValue::from_str(&format!(
8b8e83329a1datagen2026-10-12 12:01 UTC26
        "ruler={}; {COOKIE_ATTRIBUTES}",
8b8e83329a1datagen2026-10-12 12:01 UTC27
        secret.sign("ruler", "1")
8b8e83329a1datagen2026-10-12 12:01 UTC28
    ))
8b8e83329a1datagen2026-10-12 12:01 UTC29
    .expect("a signed constant is a valid header value")
8b8e83329a1datagen2026-10-12 12:01 UTC30
}