refactor part 2

This commit is contained in:
Brandon Thomas committed 2024-04-05 02:39:38 -04:00
1 parent a9f4796774
commit 5876fa3dda
10 files changed
+28 -28

No files matched your search

@@ -21,7 +21,7 @@ use mysql_queries::queries::users::user_sessions::create_user_session::create_us
use password::bcrypt_hash_password::bcrypt_hash_password;
use user_input_common::check_for_slurs::contains_slurs;
use crate::session::http::session_cookie_manager::SessionCookieManager;
use crate::session::http::http_user_session_manager::HttpUserSessionManager;
use crate::utils::email_to_gravatar::email_to_gravatar;
use crate::validations::is_reserved_username::is_reserved_username;
use crate::validations::validate_passwords::validate_passwords;
@@ -93,7 +93,7 @@ pub async fn create_account_handler(
http_request: HttpRequest,
request: web::Json<CreateAccountRequest>,
mysql_pool: web::Data<MySqlPool>,
session_cookie_manager: web::Data<SessionCookieManager>,
session_cookie_manager: web::Data<HttpUserSessionManager>,
firehose_publisher: web::Data<FirehosePublisher>,
) -> Result<HttpResponse, CreateAccountErrorResponse>
{
@@ -21,7 +21,7 @@ use mysql_queries::queries::users::user::lookup_user_for_login_by_username::look
use mysql_queries::queries::users::user_sessions::create_user_session::create_user_session;
use password::bcrypt_confirm_password::bcrypt_confirm_password;
use crate::session::http::session_cookie_manager::SessionCookieManager;
use crate::session::http::http_user_session_manager::HttpUserSessionManager;
#[derive(Deserialize, ToSchema)]
pub struct LoginRequest {
@@ -99,7 +99,7 @@ impl ResponseError for LoginErrorResponse {
pub async fn login_handler(
http_request: HttpRequest,
request: web::Json<LoginRequest>,
session_cookie_manager: web::Data<SessionCookieManager>,
session_cookie_manager: web::Data<HttpUserSessionManager>,
mysql_pool: web::Data<MySqlPool>,
) -> Result<HttpResponse, LoginErrorResponse>
{
@@ -16,7 +16,7 @@ use http_server_common::response::response_error_helpers::to_simple_json_error;
use mysql_queries::queries::users::user_sessions::delete_user_session::delete_user_session;
use user_traits_component::traits::internal_session_cache_purge::InternalSessionCachePurge;
use crate::session::http::session_cookie_manager::SessionCookieManager;
use crate::session::http::http_user_session_manager::HttpUserSessionManager;
#[derive(Serialize, ToSchema)]
pub struct LogoutSuccessResponse {
@@ -61,7 +61,7 @@ impl fmt::Display for LogoutError {
)]
pub async fn logout_handler(
http_request: HttpRequest,
session_cookie_manager: web::Data<SessionCookieManager>,
session_cookie_manager: web::Data<HttpUserSessionManager>,
mysql_pool: web::Data<MySqlPool>,
internal_session_cache_purge: web::Data<dyn InternalSessionCachePurge>,
) -> Result<HttpResponse, LogoutError>
@@ -14,7 +14,7 @@ use mysql_queries::queries::users::user_password_resets::lookup_password_reset_r
use mysql_queries::queries::users::user_sessions::create_user_session::create_user_session;
use password::bcrypt_hash_password::bcrypt_hash_password;
use crate::session::http::session_cookie_manager::SessionCookieManager;
use crate::session::http::http_user_session_manager::HttpUserSessionManager;
#[derive(Deserialize)]
pub struct PasswordResetRedemptionRequest {
@@ -73,7 +73,7 @@ impl ResponseError for PasswordResetRedemptionErrorResponse {
pub async fn password_reset_redeem_handler(
http_request: HttpRequest,
request: web::Json<PasswordResetRedemptionRequest>,
session_cookie_manager: web::Data<SessionCookieManager>,
session_cookie_manager: web::Data<HttpUserSessionManager>,
mysql_pool: web::Data<MySqlPool>,
) -> Result<HttpResponse, PasswordResetRedemptionErrorResponse> {
@@ -14,7 +14,7 @@ use log::warn;
use cookies::jwt_signer::JwtSigner;
use errors::AnyhowResult;
use crate::session::http::session_cookie_payload::SessionCookiePayload;
use crate::session::http::http_user_session_payload::HttpUserSessionPayload;
/**
* Cookie version history
@@ -30,12 +30,12 @@ const SESSION_COOKIE_NAME : &str = "session";
// TODO(echelon,2022-08-29): Fix how domains and "secure" cookies are handled
#[derive(Clone)]
pub struct SessionCookieManager {
pub struct HttpUserSessionManager {
cookie_domain: String,
jwt_signer: JwtSigner,
}
impl SessionCookieManager {
impl HttpUserSessionManager {
pub fn new(cookie_domain: &str, hmac_secret: &str) -> AnyhowResult<Self> {
Ok(Self {
cookie_domain: cookie_domain.to_string(),
@@ -83,7 +83,7 @@ impl SessionCookieManager {
}
fn decode_session_cookie_payload(&self, session_cookie: &Cookie)
-> AnyhowResult<SessionCookiePayload>
-> AnyhowResult<HttpUserSessionPayload>
{
let cookie_contents = session_cookie.value().to_string();
@@ -93,14 +93,14 @@ impl SessionCookieManager {
let maybe_user_token = claims.get("user_token")
.map(|t| t.to_string());
Ok(SessionCookiePayload {
Ok(HttpUserSessionPayload {
session_token,
maybe_user_token,
})
}
pub fn decode_session_payload_from_request(&self, request: &HttpRequest)
-> AnyhowResult<Option<SessionCookiePayload>>
-> AnyhowResult<Option<HttpUserSessionPayload>>
{
let cookie = match request.cookie(SESSION_COOKIE_NAME) {
None => return Ok(None),
@@ -142,13 +142,13 @@ impl SessionCookieManager {
#[cfg(test)]
mod tests {
use crate::session::http::session_cookie_manager::SessionCookieManager;
use crate::session::http::http_user_session_manager::HttpUserSessionManager;
#[test]
fn test_cookie_payload() {
// NB: Let's make extra sure this always works when migrating cookies, else we'll accidentally log out logged-in users.
// (These are version 2 cookies.)
let manager = SessionCookieManager::new("fakeyou.com", "secret").unwrap();
let manager = HttpUserSessionManager::new("fakeyou.com", "secret").unwrap();
let cookie = manager.create_cookie("ex_session_token", "ex_user_token").unwrap();
assert_eq!(cookie.value(), "eyJhbGciOiJIUzI1NiJ9.eyJjb29raWVfdmVyc2lvbiI6IjIiLCJzZXNzaW9uX3Rva2VuIjoiZXhfc2Vzc2lvbl90b2tlbiIsInVzZXJfdG9rZW4iOiJleF91c2VyX3Rva2VuIn0.94ly2gHhlPVtnANsNy6cJozFVmId4imwW5v-mei7jD8");
@@ -158,7 +158,7 @@ mod tests {
fn test_cookie_round_trip() {
// NB: Let's make extra sure this always works when migrating cookies, else we'll accidentally log out logged-in users.
// (These are version 2 cookies.)
let manager = SessionCookieManager::new("fakeyou.com", "secret").unwrap();
let manager = HttpUserSessionManager::new("fakeyou.com", "secret").unwrap();
let cookie = manager.create_cookie("ex_session_token", "ex_user_token").unwrap();
let decoded = manager.decode_session_cookie_payload(&cookie).unwrap();
@@ -1,6 +1,6 @@
#[derive(Clone)]
pub struct SessionCookiePayload {
pub struct HttpUserSessionPayload {
/// The database primary key for the session instance.
pub session_token: String,
@@ -1,2 +1,2 @@
pub mod session_cookie_manager;
pub mod session_cookie_payload;
pub mod http_user_session_manager;
pub mod http_user_session_payload;
@@ -16,26 +16,26 @@ use redis_caching::redis_ttl_cache::{RedisTtlCache, RedisTtlCacheConnection};
use redis_common::redis_cache_keys::RedisCacheKeys;
use tokens::tokens::users::UserToken;
use crate::session::http::session_cookie_manager::SessionCookieManager;
use crate::session::http::http_user_session_manager::HttpUserSessionManager;
use crate::session::lookup::user_session_extended::{UserSessionExtended, UserSessionPreferences, UserSessionPremiumPlanInfo, UserSessionRoleAndPermissions, UserSessionSubscriptionPlan, UserSessionUserDetails};
use crate::session::lookup::user_session_feature_flags::UserSessionFeatureFlags;
#[derive(Clone)]
pub struct SessionChecker {
cookie_manager: SessionCookieManager,
cookie_manager: HttpUserSessionManager,
maybe_redis_ttl_cache: Option<RedisTtlCache>,
}
impl SessionChecker {
pub fn new(cookie_manager: &SessionCookieManager) -> Self {
pub fn new(cookie_manager: &HttpUserSessionManager) -> Self {
Self {
cookie_manager: cookie_manager.clone(),
maybe_redis_ttl_cache: None,
}
}
pub fn new_with_cache(cookie_manager: &SessionCookieManager, redis_ttl_cache: RedisTtlCache) -> Self {
pub fn new_with_cache(cookie_manager: &HttpUserSessionManager, redis_ttl_cache: RedisTtlCache) -> Self {
Self {
cookie_manager: cookie_manager.clone(),
maybe_redis_ttl_cache: Some(redis_ttl_cache),
@@ -66,7 +66,7 @@ use twitch_common::twitch_secrets::TwitchSecrets;
use url_config::third_party_url_redirector::ThirdPartyUrlRedirector;
use user_traits_component::traits::internal_session_cache_purge::InternalSessionCachePurge;
use users_component::cookies::anonymous_visitor_tracking::avt_cookie_manager::AvtCookieManager;
use users_component::session::http::session_cookie_manager::SessionCookieManager;
use users_component::session::http::http_user_session_manager::HttpUserSessionManager;
use users_component::session::session_checker::SessionChecker;
use crate::billing::internal_product_to_stripe_lookup_impl::InternalProductToStripeLookupImpl;
@@ -190,7 +190,7 @@ async fn main() -> AnyhowResult<()> {
let website_homepage_redirect =
easyenv::get_env_string_or_default("WEBSITE_HOMEPAGE_REDIRECT", "https://vo.codes/");
let session_cookie_manager = SessionCookieManager::new(&cookie_domain, &hmac_secret)?;
let session_cookie_manager = HttpUserSessionManager::new(&cookie_domain, &hmac_secret)?;
let avt_cookie_manager = AvtCookieManager::new(&cookie_domain, &hmac_secret)?;
let session_checker = SessionChecker::new_with_cache(
@@ -18,7 +18,7 @@ use redis_caching::redis_ttl_cache::RedisTtlCache;
use reusable_types::server_environment::ServerEnvironment;
use url_config::third_party_url_redirector::ThirdPartyUrlRedirector;
use users_component::cookies::anonymous_visitor_tracking::avt_cookie_manager::AvtCookieManager;
use users_component::session::http::session_cookie_manager::SessionCookieManager;
use users_component::session::http::http_user_session_manager::HttpUserSessionManager;
use users_component::session::session_checker::SessionChecker;
use crate::configs::app_startup::username_set::UsernameSet;
@@ -64,7 +64,7 @@ pub struct ServerState {
pub redis_rate_limiters: RedisRateLimiters,
pub session_cookie_manager: SessionCookieManager,
pub session_cookie_manager: HttpUserSessionManager,
pub avt_cookie_manager: AvtCookieManager,
pub session_checker: SessionChecker,