|
|
|
@ -20,7 +20,8 @@ use crate::{ |
|
|
|
DbConn, |
|
|
|
}, |
|
|
|
mail, |
|
|
|
util::{convert_json_key_lcase_first, get_uuid, NumberOrString}, |
|
|
|
sso::FAKE_SSO_IDENTIFIER, |
|
|
|
util::{convert_json_key_lcase_first, NumberOrString}, |
|
|
|
CONFIG, |
|
|
|
}; |
|
|
|
|
|
|
|
@ -64,6 +65,7 @@ pub fn routes() -> Vec<Route> { |
|
|
|
post_org_import, |
|
|
|
list_policies, |
|
|
|
list_policies_token, |
|
|
|
get_dummy_master_password_policy, |
|
|
|
get_master_password_policy, |
|
|
|
get_policy, |
|
|
|
put_policy, |
|
|
|
@ -353,7 +355,7 @@ async fn get_user_collections(headers: Headers, conn: DbConn) -> Json<Value> { |
|
|
|
// The returned `Id` will then be passed to `get_master_password_policy` which will mainly ignore it
|
|
|
|
#[get("/organizations/<identifier>/auto-enroll-status")] |
|
|
|
async fn get_auto_enroll_status(identifier: &str, headers: Headers, conn: DbConn) -> JsonResult { |
|
|
|
let org = if identifier == crate::sso::FAKE_IDENTIFIER { |
|
|
|
let org = if identifier == FAKE_SSO_IDENTIFIER { |
|
|
|
match Membership::find_main_user_org(&headers.user.uuid, &conn).await { |
|
|
|
Some(member) => Organization::find_by_uuid(&member.org_uuid, &conn).await, |
|
|
|
None => None, |
|
|
|
@ -363,7 +365,7 @@ async fn get_auto_enroll_status(identifier: &str, headers: Headers, conn: DbConn |
|
|
|
}; |
|
|
|
|
|
|
|
let (id, identifier, rp_auto_enroll) = match org { |
|
|
|
None => (get_uuid(), identifier.to_string(), false), |
|
|
|
None => (identifier.to_string(), identifier.to_string(), false), |
|
|
|
Some(org) => ( |
|
|
|
org.uuid.to_string(), |
|
|
|
org.uuid.to_string(), |
|
|
|
@ -924,7 +926,7 @@ async fn get_org_domain_sso_verified(data: Json<OrgDomainDetails>, conn: DbConn) |
|
|
|
.collect::<Vec<(String, String)>>() |
|
|
|
{ |
|
|
|
v if !v.is_empty() => v, |
|
|
|
_ => vec![(crate::sso::FAKE_IDENTIFIER.to_string(), crate::sso::FAKE_IDENTIFIER.to_string())], |
|
|
|
_ => vec![(FAKE_SSO_IDENTIFIER.to_string(), FAKE_SSO_IDENTIFIER.to_string())], |
|
|
|
}; |
|
|
|
|
|
|
|
Ok(Json(json!({ |
|
|
|
@ -1975,9 +1977,19 @@ async fn list_policies_token(org_id: OrganizationId, token: &str, conn: DbConn) |
|
|
|
}))) |
|
|
|
} |
|
|
|
|
|
|
|
// Called during the SSO enrollment.
|
|
|
|
// Return the org policy if it exists, otherwise use the default one.
|
|
|
|
#[get("/organizations/<org_id>/policies/master-password", rank = 1)] |
|
|
|
// Called during the SSO enrollment return the default policy
|
|
|
|
#[get("/organizations/vaultwarden-dummy-oidc-identifier/policies/master-password", rank = 1)] |
|
|
|
fn get_dummy_master_password_policy() -> JsonResult { |
|
|
|
let (enabled, data) = match CONFIG.sso_master_password_policy_value() { |
|
|
|
Some(policy) if CONFIG.sso_enabled() => (true, policy.to_string()), |
|
|
|
_ => (false, "null".to_string()), |
|
|
|
}; |
|
|
|
let policy = OrgPolicy::new(FAKE_SSO_IDENTIFIER.into(), OrgPolicyType::MasterPassword, enabled, data); |
|
|
|
Ok(Json(policy.to_json())) |
|
|
|
} |
|
|
|
|
|
|
|
// Called during the SSO enrollment return the org policy if it exists
|
|
|
|
#[get("/organizations/<org_id>/policies/master-password", rank = 2)] |
|
|
|
async fn get_master_password_policy(org_id: OrganizationId, _headers: OrgMemberHeaders, conn: DbConn) -> JsonResult { |
|
|
|
let policy = |
|
|
|
OrgPolicy::find_by_org_and_type(&org_id, OrgPolicyType::MasterPassword, &conn).await.unwrap_or_else(|| { |
|
|
|
@ -1992,7 +2004,7 @@ async fn get_master_password_policy(org_id: OrganizationId, _headers: OrgMemberH |
|
|
|
Ok(Json(policy.to_json())) |
|
|
|
} |
|
|
|
|
|
|
|
#[get("/organizations/<org_id>/policies/<pol_type>", rank = 2)] |
|
|
|
#[get("/organizations/<org_id>/policies/<pol_type>", rank = 3)] |
|
|
|
async fn get_policy(org_id: OrganizationId, pol_type: i32, headers: AdminHeaders, conn: DbConn) -> JsonResult { |
|
|
|
if org_id != headers.org_id { |
|
|
|
err!("Organization not found", "Organization id's do not match"); |
|
|
|
|