diff --git a/crates/service/plugins/users/src/endpoints/session_info_handler.rs b/crates/service/plugins/users/src/endpoints/session_info_handler.rs index 090e969eb5..498705cae4 100644 --- a/crates/service/plugins/users/src/endpoints/session_info_handler.rs +++ b/crates/service/plugins/users/src/endpoints/session_info_handler.rs @@ -3,6 +3,7 @@ #![forbid(unused_mut)] #![forbid(unused_variables)] +use std::collections::HashSet; use std::fmt; use actix_web::{HttpRequest, HttpResponse, web}; @@ -12,11 +13,13 @@ use log::warn; use sqlx::MySqlPool; use utoipa::ToSchema; +use enums::by_table::users::user_feature_flag::UserFeatureFlag; use http_server_common::response::response_error_helpers::to_simple_json_error; use crate::common_responses::user_details_lite::UserDetailsLight; use crate::cookies::anonymous_visitor_tracking::avt_cookie_manager::AvtCookieManager; use crate::utils::session_checker::SessionChecker; +use crate::utils::user_session_feature_flags::UserSessionFeatureFlags; #[derive(Serialize, Copy, Clone, ToSchema)] #[serde(rename_all = "snake_case")] @@ -47,7 +50,7 @@ pub struct SessionUserInfo { // Feature / rollout flags: pub can_access_studio: bool, - pub maybe_feature_flags: Option, + pub maybe_feature_flags: HashSet, // Premium plans: pub fakeyou_plan: FakeYouPlan, @@ -150,6 +153,9 @@ pub async fn session_info_handler( match maybe_user_session { None => {} Some(session_data) => { + let feature_flags = + UserSessionFeatureFlags::new(session_data.maybe_feature_flags.as_deref()); + if !session_data.is_banned { // NB: Banned users can't be logged in logged_in = true; @@ -167,7 +173,7 @@ pub async fn session_info_handler( // Rollout / feature flags: can_access_studio: session_data.can_access_studio, - maybe_feature_flags: session_data.maybe_feature_flags, + maybe_feature_flags: feature_flags.get_flags(), // Premium plans: fakeyou_plan: FakeYouPlan::Free, diff --git a/crates/service/plugins/users/src/utils/user_session_feature_flags.rs b/crates/service/plugins/users/src/utils/user_session_feature_flags.rs index 80298d944e..8ac9ade6a2 100644 --- a/crates/service/plugins/users/src/utils/user_session_feature_flags.rs +++ b/crates/service/plugins/users/src/utils/user_session_feature_flags.rs @@ -9,6 +9,13 @@ pub struct UserSessionFeatureFlags { } impl UserSessionFeatureFlags { + + pub fn new(maybe_feature_flags: Option<&str>) -> Self { + Self { + maybe_feature_flags: maybe_feature_flags.map(|s| s.to_string()), + } + } + pub fn get_flags(&self) -> HashSet { match self.maybe_feature_flags.as_deref() { None => HashSet::new(),