mirror of
https://github.com/dani-garcia/vaultwarden
synced 2024-12-14 17:43:46 +01:00
Reverting removal of 'api/ciphers/move' POST as it is required for backward compatibility
This commit is contained in:
parent
fcc485384f
commit
2f6aa3c363
2 changed files with 54 additions and 1 deletions
|
@ -483,7 +483,7 @@ fn delete_cipher_selected(data: JsonUpcase<Value>, headers: Headers, conn: DbCon
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[put("/ciphers/move", data = "<data>")]
|
#[post("/ciphers/move", data = "<data>")]
|
||||||
fn move_cipher_selected(data: JsonUpcase<Value>, headers: Headers, conn: DbConn) -> EmptyResult {
|
fn move_cipher_selected(data: JsonUpcase<Value>, headers: Headers, conn: DbConn) -> EmptyResult {
|
||||||
let data = data.into_inner().data;
|
let data = data.into_inner().data;
|
||||||
|
|
||||||
|
@ -535,6 +535,58 @@ fn move_cipher_selected(data: JsonUpcase<Value>, headers: Headers, conn: DbConn)
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[put("/ciphers/move", data = "<data>")]
|
||||||
|
fn move_cipher_selected_put(data: JsonUpcase<Value>, headers: Headers, conn: DbConn) -> EmptyResult {
|
||||||
|
let data = data.into_inner().data;
|
||||||
|
|
||||||
|
let folder_id = match data.get("FolderId") {
|
||||||
|
Some(folder_id) => {
|
||||||
|
match folder_id.as_str() {
|
||||||
|
Some(folder_id) => {
|
||||||
|
match Folder::find_by_uuid(folder_id, &conn) {
|
||||||
|
Some(folder) => {
|
||||||
|
if folder.user_uuid != headers.user.uuid {
|
||||||
|
err!("Folder is not owned by user")
|
||||||
|
}
|
||||||
|
Some(folder.uuid)
|
||||||
|
}
|
||||||
|
None => err!("Folder doesn't exist")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
None => err!("Folder id provided in wrong format")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
None => None
|
||||||
|
};
|
||||||
|
|
||||||
|
let uuids = match data.get("Ids") {
|
||||||
|
Some(ids) => match ids.as_array() {
|
||||||
|
Some(ids) => ids.iter().filter_map(|uuid| { uuid.as_str() }),
|
||||||
|
None => err!("Posted ids field is not an array")
|
||||||
|
},
|
||||||
|
None => err!("Request missing ids field")
|
||||||
|
};
|
||||||
|
|
||||||
|
for uuid in uuids {
|
||||||
|
let mut cipher = match Cipher::find_by_uuid(uuid, &conn) {
|
||||||
|
Some(cipher) => cipher,
|
||||||
|
None => err!("Cipher doesn't exist")
|
||||||
|
};
|
||||||
|
|
||||||
|
if !cipher.is_accessible_to_user(&headers.user.uuid, &conn) {
|
||||||
|
err!("Cipher is not accessible by user")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Move cipher
|
||||||
|
if cipher.move_to_folder(folder_id.clone(), &headers.user.uuid, &conn).is_err() {
|
||||||
|
err!("Error saving the folder information")
|
||||||
|
}
|
||||||
|
cipher.save(&conn);
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
#[post("/ciphers/purge", data = "<data>")]
|
#[post("/ciphers/purge", data = "<data>")]
|
||||||
fn delete_all(data: JsonUpcase<PasswordData>, headers: Headers, conn: DbConn) -> EmptyResult {
|
fn delete_all(data: JsonUpcase<PasswordData>, headers: Headers, conn: DbConn) -> EmptyResult {
|
||||||
let data: PasswordData = data.into_inner().data;
|
let data: PasswordData = data.into_inner().data;
|
||||||
|
|
|
@ -46,6 +46,7 @@ pub fn routes() -> Vec<Route> {
|
||||||
delete_cipher_selected,
|
delete_cipher_selected,
|
||||||
delete_all,
|
delete_all,
|
||||||
move_cipher_selected,
|
move_cipher_selected,
|
||||||
|
move_cipher_selected_put,
|
||||||
|
|
||||||
get_folders,
|
get_folders,
|
||||||
get_folder,
|
get_folder,
|
||||||
|
|
Loading…
Reference in a new issue