// SPDX-FileCopyrightText: 2024 Simon Bruder // // SPDX-License-Identifier: AGPL-3.0-or-later use std::env; use actix_http::header; use actix_web::{cookie::Cookie, dev::ServiceResponse, test}; use clap::Parser; use serde::Serialize; use li7y::Config; pub const SUPERUSER_PASSWORD: &str = "correct horse battery staple"; #[derive(Serialize)] pub struct LoginForm { password: String, } impl Default for LoginForm { fn default() -> Self { Self { password: SUPERUSER_PASSWORD.to_string(), } } } pub fn config() -> Config { env::set_var("SUPERUSER_PASSWORD", SUPERUSER_PASSWORD); Config::parse_from(Vec::::new().iter()) } #[allow(dead_code)] // for some reason rustc detects this as unused pub fn assert_redirect(res: ServiceResponse) -> String { assert!(res.status().is_redirection()); res.headers() .get(header::LOCATION) .expect("No location header set when expected") .to_str() .expect("Location header is not valid UTF-8") .to_string() } pub async fn session_cookie<'a>( srv: &impl actix_web::dev::Service< actix_http::Request, Response = ServiceResponse>, Error = actix_web::Error, >, ) -> Cookie<'a> { let req = test::TestRequest::post() .uri("/login") .set_form(LoginForm::default()) .to_request(); Cookie::parse_encoded( test::call_service(&srv, req) .await .headers() .get(header::SET_COOKIE) .unwrap() .to_str() .unwrap() .to_string(), ) .unwrap() }