mirror of
https://github.com/storytold/artcraft.git
synced 2026-11-03 00:47:53 +00:00
refactor part 2
This commit is contained in:
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> {
|
||||
|
||||
|
||||
+9
-9
@@ -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
-1
@@ -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,
|
||||
|
||||
Reference in new issue
Block a user