0
0
Fork 0
mirror of https://github.com/dani-garcia/vaultwarden synced 2024-11-12 13:01:51 +01:00

Add bulk move and bulk delete

This commit is contained in:
Miroslav Prasil 2018-04-19 15:32:11 +01:00
parent 8a0eac8030
commit a7eb77ac90
2 changed files with 75 additions and 2 deletions

View file

@ -388,8 +388,80 @@ fn delete_cipher(uuid: String, headers: Headers, conn: DbConn) -> EmptyResult {
fn delete_cipher_selected(data: Json<Value>, headers: Headers, conn: DbConn) -> EmptyResult { fn delete_cipher_selected(data: Json<Value>, headers: Headers, conn: DbConn) -> EmptyResult {
let data: Value = data.into_inner(); let data: Value = data.into_inner();
println!("{:#?}", data); let uuids = match data.get("ids") {
unimplemented!() 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 cipher = match Cipher::find_by_uuid(uuid, &conn) {
Some(cipher) => cipher,
None => err!("Cipher doesn't exist")
};
if cipher.user_uuid != headers.user.uuid {
err!("Cipher is not owned by user")
}
// Delete attachments
for a in Attachment::find_by_cipher(&cipher.uuid, &conn) { a.delete(&conn); }
// Delete cipher
cipher.delete(&conn);
}
Ok(())
}
#[post("/ciphers/move", data = "<data>")]
fn move_cipher_selected(data: Json<Value>, headers: Headers, conn: DbConn) -> EmptyResult {
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_id.to_string())
}
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.user_uuid != headers.user.uuid {
err!("Cipher is not owned by user")
}
// Move cipher
cipher.folder_uuid = folder_id.clone();
cipher.save(&conn);
}
Ok(())
} }
#[post("/ciphers/purge", data = "<data>")] #[post("/ciphers/purge", data = "<data>")]

View file

@ -36,6 +36,7 @@ pub fn routes() -> Vec<Route> {
delete_cipher, delete_cipher,
delete_cipher_selected, delete_cipher_selected,
delete_all, delete_all,
move_cipher_selected,
get_folders, get_folders,
get_folder, get_folder,