use crate::db_context::DbContext; use crate::error::Result; use crate::models::{ EnvironmentIden, FolderIden, GrpcRequestIden, HttpRequestHeader, HttpRequestIden, WebsocketRequestIden, Workspace, WorkspaceIden, }; use crate::util::UpdateSource; use serde_json::Value; use std::collections::BTreeMap; impl<'a> DbContext<'a> { pub fn get_workspace(&self, id: &str) -> Result { self.find_one(WorkspaceIden::Id, id) } pub fn list_workspaces(&self) -> Result> { let mut workspaces = self.find_all()?; if workspaces.is_empty() { workspaces.push(self.upsert_workspace( &Workspace { name: "Yaak".to_string(), setting_follow_redirects: true, setting_validate_certificates: true, ..Default::default() }, &UpdateSource::Background, )?) } Ok(workspaces) } pub fn delete_workspace( &self, workspace: &Workspace, source: &UpdateSource, ) -> Result { for m in self.find_many(HttpRequestIden::WorkspaceId, &workspace.id, None)? { self.delete_http_request(&m, source)?; } for m in self.find_many(GrpcRequestIden::WorkspaceId, &workspace.id, None)? { self.delete_grpc_request(&m, source)?; } for m in self.find_many(WebsocketRequestIden::FolderId, &workspace.id, None)? { self.delete_websocket_request(&m, source)?; } for m in self.find_many(FolderIden::WorkspaceId, &workspace.id, None)? { self.delete_folder(&m, source)?; } for m in self.find_many(EnvironmentIden::WorkspaceId, &workspace.id, None)? { self.delete_environment(&m, source)?; } self.delete(workspace, source) } pub fn delete_workspace_by_id(&self, id: &str, source: &UpdateSource) -> Result { let workspace = self.get_workspace(id)?; self.delete_workspace(&workspace, source) } pub fn upsert_workspace(&self, w: &Workspace, source: &UpdateSource) -> Result { self.upsert(w, source) } pub fn resolve_auth_for_workspace( &self, workspace: &Workspace, ) -> (Option, BTreeMap, String) { ( workspace.authentication_type.clone(), workspace.authentication.clone(), workspace.id.clone(), ) } pub fn resolve_headers_for_workspace(&self, workspace: &Workspace) -> Vec { let mut headers = default_headers(); headers.extend(workspace.headers.clone()); headers } } /// Global default headers that are always sent with requests unless overridden. /// These are prepended to the inheritance chain so workspace/folder/request headers /// can override or disable them. pub fn default_headers() -> Vec { vec![ HttpRequestHeader { enabled: true, name: "User-Agent".to_string(), value: "yaak".to_string(), id: None, }, HttpRequestHeader { enabled: true, name: "Accept".to_string(), value: "*/*".to_string(), id: None, }, ] }