mirror of
https://github.com/storytold/artcraft.git
synced 2026-11-09 11:31:27 +00:00
feature flag more endpoints; don't return certain results in user list
This commit is contained in:
1 parent
a64990230e
commit
c9060d973f
4 files changed
+53
-3
No files matched your search
+11
@@ -30,8 +30,10 @@ use tokens::tokens::media_files::MediaFileToken;
|
||||
use tokens::tokens::users::UserToken;
|
||||
|
||||
use crate::configs::plans::get_correct_plan_for_session::get_correct_plan_for_session;
|
||||
use crate::http_server::endpoints::conversion::enqueue_fbx_to_gltf_handler::EnqueueFbxToGltfRequestError;
|
||||
use crate::http_server::web_utils::response_error_helpers::to_simple_json_error;
|
||||
use crate::server_state::ServerState;
|
||||
use crate::util::allowed_studio_access::allowed_studio_access;
|
||||
|
||||
/// Debug requests can get routed to special "debug-only" workers, which can
|
||||
/// be used to trial new code, run debugging, etc.
|
||||
@@ -132,6 +134,15 @@ pub async fn enqueue_bvh_to_workflow_handler(
|
||||
maybe_user_token = Some(UserToken::new_from_str(&user_session.user_token));
|
||||
}
|
||||
|
||||
// ==================== FEATURE FLAG CHECK ==================== //
|
||||
|
||||
if !allowed_studio_access(maybe_user_session.as_ref(), &server_state.flags) {
|
||||
warn!("Storyteller Studio access is not permitted for user");
|
||||
return Err(EnqueueBvhToWorkflowRequestError::NotAuthorized);
|
||||
}
|
||||
|
||||
// ==================== PAID PLAN + PRIORITY ==================== //
|
||||
|
||||
// Plan should handle "first anonymous use" and "investor" cases.
|
||||
let plan = get_correct_plan_for_session(
|
||||
server_state.server_environment,
|
||||
|
||||
+11
@@ -30,8 +30,10 @@ use tokens::tokens::media_files::MediaFileToken;
|
||||
use tokens::tokens::users::UserToken;
|
||||
|
||||
use crate::configs::plans::get_correct_plan_for_session::get_correct_plan_for_session;
|
||||
use crate::http_server::endpoints::workflows::enqueue_comfy_ui::EnqueueComfyError;
|
||||
use crate::http_server::web_utils::response_error_helpers::to_simple_json_error;
|
||||
use crate::server_state::ServerState;
|
||||
use crate::util::allowed_studio_access::allowed_studio_access;
|
||||
|
||||
/// Debug requests can get routed to special "debug-only" workers, which can
|
||||
/// be used to trial new code, run debugging, etc.
|
||||
@@ -132,6 +134,15 @@ pub async fn enqueue_fbx_to_gltf_handler(
|
||||
maybe_user_token = Some(UserToken::new_from_str(&user_session.user_token));
|
||||
}
|
||||
|
||||
// ==================== FEATURE FLAG CHECK ==================== //
|
||||
|
||||
if !allowed_studio_access(maybe_user_session.as_ref(), &server_state.flags) {
|
||||
warn!("Storyteller Studio access is not permitted for user");
|
||||
return Err(EnqueueFbxToGltfRequestError::NotAuthorized);
|
||||
}
|
||||
|
||||
// ==================== PAID PLAN + PRIORITY ==================== //
|
||||
|
||||
// Plan should handle "first anonymous use" and "investor" cases.
|
||||
let plan = get_correct_plan_for_session(
|
||||
server_state.server_environment,
|
||||
|
||||
+29
-3
@@ -23,6 +23,7 @@ use crate::http_server::common_responses::pagination_page::PaginationPage;
|
||||
use crate::http_server::common_responses::simple_entity_stats::SimpleEntityStats;
|
||||
use crate::http_server::web_utils::response_error_helpers::to_simple_json_error;
|
||||
use crate::server_state::ServerState;
|
||||
use crate::util::allowed_studio_access::allowed_studio_access;
|
||||
|
||||
#[derive(Deserialize, ToSchema)]
|
||||
pub struct ListMediaFilesForUserPathInfo {
|
||||
@@ -134,6 +135,12 @@ pub async fn list_media_files_for_user_handler(
|
||||
let mut is_author = false;
|
||||
let mut is_mod = false;
|
||||
|
||||
// NB: Temporary rollout flag.
|
||||
let mut is_allowed_studio_access = allowed_studio_access(
|
||||
maybe_user_session.as_ref(),
|
||||
&server_state.flags
|
||||
);
|
||||
|
||||
match maybe_user_session {
|
||||
None => {},
|
||||
Some(session) => {
|
||||
@@ -155,7 +162,6 @@ pub async fn list_media_files_for_user_handler(
|
||||
ViewAs::AnotherUser
|
||||
};
|
||||
|
||||
|
||||
let query_results = list_media_files_for_user(ListMediaFileForUserArgs {
|
||||
username: &path.username,
|
||||
maybe_filter_media_type: query.filter_media_type,
|
||||
@@ -166,7 +172,6 @@ pub async fn list_media_files_for_user_handler(
|
||||
mysql_pool: &server_state.mysql_pool,
|
||||
}).await;
|
||||
|
||||
|
||||
let results_page = match query_results {
|
||||
Ok(results) => results,
|
||||
Err(e) => {
|
||||
@@ -175,8 +180,29 @@ pub async fn list_media_files_for_user_handler(
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
let results = results_page.records.into_iter()
|
||||
.filter(|record| {
|
||||
if is_allowed_studio_access {
|
||||
return true;
|
||||
}
|
||||
// Don't allow access to certain media types.
|
||||
match record.media_type {
|
||||
MediaFileType::Mocap |
|
||||
MediaFileType::Bvh |
|
||||
MediaFileType::Fbx |
|
||||
MediaFileType::Glb |
|
||||
MediaFileType::Gltf => return false,
|
||||
_ => {},
|
||||
}
|
||||
// Don't allow access to certain products.
|
||||
match record.origin_product_category {
|
||||
MediaFileOriginProductCategory::VideoFilter |
|
||||
MediaFileOriginProductCategory::Mocap |
|
||||
MediaFileOriginProductCategory::Workflow => return false,
|
||||
_ => {},
|
||||
}
|
||||
true
|
||||
})
|
||||
.map(|record| MediaFileForUserListItem {
|
||||
token: record.token,
|
||||
media_type: record.media_type,
|
||||
|
||||
+2
@@ -141,6 +141,8 @@ pub async fn enqueue_comfy_ui_handler(
|
||||
return Err(EnqueueComfyError::NotAuthorized);
|
||||
}
|
||||
|
||||
// ==================== PAID PLAN + PRIORITY ==================== //
|
||||
|
||||
// TODO: Plan should handle "first anonymous use" and "investor" cases.
|
||||
let plan = get_correct_plan_for_session(
|
||||
server_state.server_environment,
|
||||
|
||||
Reference in new issue
Block a user