diff options
author | Daniel GarcĂa <[email protected]> | 2023-07-04 20:54:36 +0200 |
---|---|---|
committer | GitHub <[email protected]> | 2023-07-04 20:54:36 +0200 |
commit | 1bee46f64b42e7f550293dc74b31608207b74a6a (patch) | |
tree | bcc29796955fd28c52744e624f7b7d6662d4af0a | |
parent | 556d9453960c7cbfc89088a073216996fd38cc9e (diff) | |
parent | 839b2bc950837999fbcb21c4dda0afc84d68d295 (diff) | |
download | vaultwarden-1bee46f64b42e7f550293dc74b31608207b74a6a.tar.gz vaultwarden-1bee46f64b42e7f550293dc74b31608207b74a6a.zip |
Merge pull request #3623 from fashberg/main
Added-External_id for Collections
11 files changed, 36 insertions, 8 deletions
diff --git a/migrations/mysql/2023-06-28-133700_add_collection_external_id/down.sql b/migrations/mysql/2023-06-28-133700_add_collection_external_id/down.sql new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/migrations/mysql/2023-06-28-133700_add_collection_external_id/down.sql diff --git a/migrations/mysql/2023-06-28-133700_add_collection_external_id/up.sql b/migrations/mysql/2023-06-28-133700_add_collection_external_id/up.sql new file mode 100644 index 00000000..7f44709b --- /dev/null +++ b/migrations/mysql/2023-06-28-133700_add_collection_external_id/up.sql @@ -0,0 +1 @@ +ALTER TABLE collections ADD COLUMN external_id TEXT; diff --git a/migrations/postgresql/2023-06-28-133700_add_collection_external_id/down.sql b/migrations/postgresql/2023-06-28-133700_add_collection_external_id/down.sql new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/migrations/postgresql/2023-06-28-133700_add_collection_external_id/down.sql diff --git a/migrations/postgresql/2023-06-28-133700_add_collection_external_id/up.sql b/migrations/postgresql/2023-06-28-133700_add_collection_external_id/up.sql new file mode 100644 index 00000000..7f44709b --- /dev/null +++ b/migrations/postgresql/2023-06-28-133700_add_collection_external_id/up.sql @@ -0,0 +1 @@ +ALTER TABLE collections ADD COLUMN external_id TEXT; diff --git a/migrations/sqlite/2023-06-28-133700_add_collection_external_id/down.sql b/migrations/sqlite/2023-06-28-133700_add_collection_external_id/down.sql new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/migrations/sqlite/2023-06-28-133700_add_collection_external_id/down.sql diff --git a/migrations/sqlite/2023-06-28-133700_add_collection_external_id/up.sql b/migrations/sqlite/2023-06-28-133700_add_collection_external_id/up.sql new file mode 100644 index 00000000..7f44709b --- /dev/null +++ b/migrations/sqlite/2023-06-28-133700_add_collection_external_id/up.sql @@ -0,0 +1 @@ +ALTER TABLE collections ADD COLUMN external_id TEXT; diff --git a/src/api/core/organizations.rs b/src/api/core/organizations.rs index 40901d31..bd08080c 100644 --- a/src/api/core/organizations.rs +++ b/src/api/core/organizations.rs @@ -106,6 +106,7 @@ struct OrgData { CollectionName: String, Key: String, Name: String, + ExternalId: String, Keys: Option<OrgKeyData>, #[serde(rename = "PlanType")] _PlanType: NumberOrString, // Ignored, always use the same plan @@ -124,6 +125,7 @@ struct NewCollectionData { Name: String, Groups: Vec<NewCollectionObjectData>, Users: Vec<NewCollectionObjectData>, + ExternalId: Option<String>, } #[derive(Deserialize)] @@ -168,7 +170,7 @@ async fn create_organization(headers: Headers, data: JsonUpcase<OrgData>, mut co let org = Organization::new(data.Name, data.BillingEmail, private_key, public_key); let mut user_org = UserOrganization::new(headers.user.uuid, org.uuid.clone()); - let collection = Collection::new(org.uuid.clone(), data.CollectionName); + let collection = Collection::new(org.uuid.clone(), data.CollectionName, Some(data.ExternalId)); user_org.akey = data.Key; user_org.access_all = true; @@ -390,7 +392,7 @@ async fn post_organization_collections( None => err!("Can't find organization details"), }; - let collection = Collection::new(org.uuid, data.Name); + let collection = Collection::new(org.uuid, data.Name, data.ExternalId); collection.save(&mut conn).await?; log_event( @@ -467,6 +469,7 @@ async fn post_organization_collection_update( } collection.name = data.Name; + collection.external_id = data.ExternalId; collection.save(&mut conn).await?; log_event( @@ -1580,7 +1583,7 @@ async fn post_org_import( let mut collections = Vec::new(); for coll in data.Collections { - let collection = Collection::new(org_id.clone(), coll.Name); + let collection = Collection::new(org_id.clone(), coll.Name, coll.ExternalId); if collection.save(&mut conn).await.is_err() { collections.push(Err(Error::new("Failed to create Collection", "Failed to create Collection"))); } else { diff --git a/src/db/models/collection.rs b/src/db/models/collection.rs index 6a9acab8..f2b04ce5 100644 --- a/src/db/models/collection.rs +++ b/src/db/models/collection.rs @@ -10,6 +10,7 @@ db_object! { pub uuid: String, pub org_uuid: String, pub name: String, + pub external_id: Option<String>, } #[derive(Identifiable, Queryable, Insertable)] @@ -33,18 +34,21 @@ db_object! { /// Local methods impl Collection { - pub fn new(org_uuid: String, name: String) -> Self { - Self { + pub fn new(org_uuid: String, name: String, external_id: Option<String>) -> Self { + let mut new_model = Self { uuid: crate::util::get_uuid(), - org_uuid, name, - } + external_id: None, + }; + + new_model.set_external_id(external_id); + new_model } pub fn to_json(&self) -> Value { json!({ - "ExternalId": null, // Not support by us + "ExternalId": self.external_id, "Id": self.uuid, "OrganizationId": self.org_uuid, "Name": self.name, @@ -52,6 +56,21 @@ impl Collection { }) } + pub fn set_external_id(&mut self, external_id: Option<String>) { + //Check if external id is empty. We don't want to have + //empty strings in the database + match external_id { + Some(external_id) => { + if external_id.is_empty() { + self.external_id = None; + } else { + self.external_id = Some(external_id) + } + } + None => self.external_id = None, + } + } + pub async fn to_json_details( &self, user_uuid: &str, diff --git a/src/db/schemas/mysql/schema.rs b/src/db/schemas/mysql/schema.rs index 37803275..695d5bd7 100644 --- a/src/db/schemas/mysql/schema.rs +++ b/src/db/schemas/mysql/schema.rs @@ -38,6 +38,7 @@ table! { uuid -> Text, org_uuid -> Text, name -> Text, + external_id -> Nullable<Text>, } } diff --git a/src/db/schemas/postgresql/schema.rs b/src/db/schemas/postgresql/schema.rs index 0b69bbc4..766c03e7 100644 --- a/src/db/schemas/postgresql/schema.rs +++ b/src/db/schemas/postgresql/schema.rs @@ -38,6 +38,7 @@ table! { uuid -> Text, org_uuid -> Text, name -> Text, + external_id -> Nullable<Text>, } } diff --git a/src/db/schemas/sqlite/schema.rs b/src/db/schemas/sqlite/schema.rs index 10dd3fe8..031ec7aa 100644 --- a/src/db/schemas/sqlite/schema.rs +++ b/src/db/schemas/sqlite/schema.rs @@ -38,6 +38,7 @@ table! { uuid -> Text, org_uuid -> Text, name -> Text, + external_id -> Nullable<Text>, } } |