|
|
@ -321,7 +321,7 @@ async fn post_ciphers(data: JsonUpcase<CipherData>, headers: Headers, mut conn:
|
|
|
|
data.LastKnownRevisionDate = None;
|
|
|
|
data.LastKnownRevisionDate = None;
|
|
|
|
|
|
|
|
|
|
|
|
let mut cipher = Cipher::new(data.Type, data.Name.clone());
|
|
|
|
let mut cipher = Cipher::new(data.Type, data.Name.clone());
|
|
|
|
update_cipher_from_data(&mut cipher, data, &headers, false, &mut conn, &nt, UpdateType::SyncCipherCreate).await?;
|
|
|
|
update_cipher_from_data(&mut cipher, data, &headers, None, &mut conn, &nt, UpdateType::SyncCipherCreate).await?;
|
|
|
|
|
|
|
|
|
|
|
|
Ok(Json(cipher.to_json(&headers.host, &headers.user.uuid, None, CipherSyncType::User, &mut conn).await))
|
|
|
|
Ok(Json(cipher.to_json(&headers.host, &headers.user.uuid, None, CipherSyncType::User, &mut conn).await))
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -352,7 +352,7 @@ pub async fn update_cipher_from_data(
|
|
|
|
cipher: &mut Cipher,
|
|
|
|
cipher: &mut Cipher,
|
|
|
|
data: CipherData,
|
|
|
|
data: CipherData,
|
|
|
|
headers: &Headers,
|
|
|
|
headers: &Headers,
|
|
|
|
shared_to_collection: bool,
|
|
|
|
shared_to_collections: Option<Vec<String>>,
|
|
|
|
conn: &mut DbConn,
|
|
|
|
conn: &mut DbConn,
|
|
|
|
nt: &Notify<'_>,
|
|
|
|
nt: &Notify<'_>,
|
|
|
|
ut: UpdateType,
|
|
|
|
ut: UpdateType,
|
|
|
@ -391,7 +391,7 @@ pub async fn update_cipher_from_data(
|
|
|
|
match UserOrganization::find_by_user_and_org(&headers.user.uuid, &org_id, conn).await {
|
|
|
|
match UserOrganization::find_by_user_and_org(&headers.user.uuid, &org_id, conn).await {
|
|
|
|
None => err!("You don't have permission to add item to organization"),
|
|
|
|
None => err!("You don't have permission to add item to organization"),
|
|
|
|
Some(org_user) => {
|
|
|
|
Some(org_user) => {
|
|
|
|
if shared_to_collection
|
|
|
|
if shared_to_collections.is_some()
|
|
|
|
|| org_user.has_full_access()
|
|
|
|
|| org_user.has_full_access()
|
|
|
|
|| cipher.is_write_accessible_to_user(&headers.user.uuid, conn).await
|
|
|
|
|| cipher.is_write_accessible_to_user(&headers.user.uuid, conn).await
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -518,7 +518,14 @@ pub async fn update_cipher_from_data(
|
|
|
|
)
|
|
|
|
)
|
|
|
|
.await;
|
|
|
|
.await;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
nt.send_cipher_update(ut, cipher, &cipher.update_users_revision(conn).await, &headers.device.uuid, None, conn)
|
|
|
|
nt.send_cipher_update(
|
|
|
|
|
|
|
|
ut,
|
|
|
|
|
|
|
|
cipher,
|
|
|
|
|
|
|
|
&cipher.update_users_revision(conn).await,
|
|
|
|
|
|
|
|
&headers.device.uuid,
|
|
|
|
|
|
|
|
shared_to_collections,
|
|
|
|
|
|
|
|
conn,
|
|
|
|
|
|
|
|
)
|
|
|
|
.await;
|
|
|
|
.await;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Ok(())
|
|
|
|
Ok(())
|
|
|
@ -580,7 +587,7 @@ async fn post_ciphers_import(
|
|
|
|
cipher_data.FolderId = folder_uuid;
|
|
|
|
cipher_data.FolderId = folder_uuid;
|
|
|
|
|
|
|
|
|
|
|
|
let mut cipher = Cipher::new(cipher_data.Type, cipher_data.Name.clone());
|
|
|
|
let mut cipher = Cipher::new(cipher_data.Type, cipher_data.Name.clone());
|
|
|
|
update_cipher_from_data(&mut cipher, cipher_data, &headers, false, &mut conn, &nt, UpdateType::None).await?;
|
|
|
|
update_cipher_from_data(&mut cipher, cipher_data, &headers, None, &mut conn, &nt, UpdateType::None).await?;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
let mut user = headers.user;
|
|
|
|
let mut user = headers.user;
|
|
|
@ -648,7 +655,7 @@ async fn put_cipher(
|
|
|
|
err!("Cipher is not write accessible")
|
|
|
|
err!("Cipher is not write accessible")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
update_cipher_from_data(&mut cipher, data, &headers, false, &mut conn, &nt, UpdateType::SyncCipherUpdate).await?;
|
|
|
|
update_cipher_from_data(&mut cipher, data, &headers, None, &mut conn, &nt, UpdateType::SyncCipherUpdate).await?;
|
|
|
|
|
|
|
|
|
|
|
|
Ok(Json(cipher.to_json(&headers.host, &headers.user.uuid, None, CipherSyncType::User, &mut conn).await))
|
|
|
|
Ok(Json(cipher.to_json(&headers.host, &headers.user.uuid, None, CipherSyncType::User, &mut conn).await))
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -898,7 +905,7 @@ async fn share_cipher_by_uuid(
|
|
|
|
None => err!("Cipher doesn't exist"),
|
|
|
|
None => err!("Cipher doesn't exist"),
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
let mut shared_to_collection = false;
|
|
|
|
let mut shared_to_collections = vec![];
|
|
|
|
|
|
|
|
|
|
|
|
if let Some(organization_uuid) = &data.Cipher.OrganizationId {
|
|
|
|
if let Some(organization_uuid) = &data.Cipher.OrganizationId {
|
|
|
|
for uuid in &data.CollectionIds {
|
|
|
|
for uuid in &data.CollectionIds {
|
|
|
@ -907,7 +914,7 @@ async fn share_cipher_by_uuid(
|
|
|
|
Some(collection) => {
|
|
|
|
Some(collection) => {
|
|
|
|
if collection.is_writable_by_user(&headers.user.uuid, conn).await {
|
|
|
|
if collection.is_writable_by_user(&headers.user.uuid, conn).await {
|
|
|
|
CollectionCipher::save(&cipher.uuid, &collection.uuid, conn).await?;
|
|
|
|
CollectionCipher::save(&cipher.uuid, &collection.uuid, conn).await?;
|
|
|
|
shared_to_collection = true;
|
|
|
|
shared_to_collections.push(collection.uuid);
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
err!("No rights to modify the collection")
|
|
|
|
err!("No rights to modify the collection")
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -923,7 +930,7 @@ async fn share_cipher_by_uuid(
|
|
|
|
UpdateType::SyncCipherCreate
|
|
|
|
UpdateType::SyncCipherCreate
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
update_cipher_from_data(&mut cipher, data.Cipher, headers, shared_to_collection, conn, nt, ut).await?;
|
|
|
|
update_cipher_from_data(&mut cipher, data.Cipher, headers, Some(shared_to_collections), conn, nt, ut).await?;
|
|
|
|
|
|
|
|
|
|
|
|
Ok(Json(cipher.to_json(&headers.host, &headers.user.uuid, None, CipherSyncType::User, conn).await))
|
|
|
|
Ok(Json(cipher.to_json(&headers.host, &headers.user.uuid, None, CipherSyncType::User, conn).await))
|
|
|
|
}
|
|
|
|
}
|
|
|
|