Browse Source
Merge pull request #20 from mprasil/folder_delete
Improve Folder::delete() to handle FolderCipher
pull/22/head
Daniel García
7 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with
30 additions and
15 deletions
-
src/api/core/accounts.rs
-
src/api/core/ciphers.rs
-
src/api/core/folders.rs
-
src/db/models/folder.rs
|
|
@ -176,7 +176,12 @@ fn delete_account(data: Json<PasswordData>, headers: Headers, conn: DbConn) -> E |
|
|
|
} |
|
|
|
|
|
|
|
// Delete folders
|
|
|
|
for f in Folder::find_by_user(&user.uuid, &conn) { f.delete(&conn); } |
|
|
|
for f in Folder::find_by_user(&user.uuid, &conn) { |
|
|
|
match f.delete(&conn) { |
|
|
|
Ok(()) => (), |
|
|
|
Err(_) => err!("Failed deleting folder") |
|
|
|
}
|
|
|
|
} |
|
|
|
|
|
|
|
// Delete devices
|
|
|
|
for d in Device::find_by_user(&user.uuid, &conn) { d.delete(&conn); } |
|
|
|
|
|
@ -557,7 +557,12 @@ fn delete_all(data: Json<PasswordData>, headers: Headers, conn: DbConn) -> Empty |
|
|
|
} |
|
|
|
|
|
|
|
// Delete folders
|
|
|
|
for f in Folder::find_by_user(&user.uuid, &conn) { f.delete(&conn); } |
|
|
|
for f in Folder::find_by_user(&user.uuid, &conn) { |
|
|
|
match f.delete(&conn) { |
|
|
|
Ok(()) => (), |
|
|
|
Err(_) => err!("Failed deleting folder") |
|
|
|
}
|
|
|
|
} |
|
|
|
|
|
|
|
Ok(()) |
|
|
|
} |
|
|
|
|
|
@ -89,11 +89,9 @@ fn delete_folder(uuid: String, headers: Headers, conn: DbConn) -> EmptyResult { |
|
|
|
err!("Folder belongs to another user") |
|
|
|
} |
|
|
|
|
|
|
|
// Delete FolderCipher mappings
|
|
|
|
for fc in FolderCipher::find_by_folder(&uuid, &conn) { fc.delete(&conn).expect("Error deleting mapping"); } |
|
|
|
|
|
|
|
// Delete the actual folder entry
|
|
|
|
folder.delete(&conn); |
|
|
|
|
|
|
|
Ok(()) |
|
|
|
match folder.delete(&conn) { |
|
|
|
Ok(()) => Ok(()), |
|
|
|
Err(_) => err!("Failed deleting folder") |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
@ -81,13 +81,14 @@ impl Folder { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
pub fn delete(self, conn: &DbConn) -> bool { |
|
|
|
match diesel::delete(folders::table.filter( |
|
|
|
folders::uuid.eq(self.uuid))) |
|
|
|
.execute(&**conn) { |
|
|
|
Ok(1) => true, // One row deleted
|
|
|
|
_ => false, |
|
|
|
} |
|
|
|
pub fn delete(self, conn: &DbConn) -> QueryResult<()> { |
|
|
|
FolderCipher::delete_all_by_folder(&self.uuid, &conn)?; |
|
|
|
|
|
|
|
diesel::delete( |
|
|
|
folders::table.filter( |
|
|
|
folders::uuid.eq(self.uuid) |
|
|
|
) |
|
|
|
).execute(&**conn).and(Ok(())) |
|
|
|
} |
|
|
|
|
|
|
|
pub fn find_by_uuid(uuid: &str, conn: &DbConn) -> Option<Self> { |
|
|
@ -123,6 +124,12 @@ impl FolderCipher { |
|
|
|
).execute(&**conn).and(Ok(())) |
|
|
|
} |
|
|
|
|
|
|
|
pub fn delete_all_by_folder(folder_uuid: &str, conn: &DbConn) -> QueryResult<()> { |
|
|
|
diesel::delete(folders_ciphers::table |
|
|
|
.filter(folders_ciphers::folder_uuid.eq(folder_uuid)) |
|
|
|
).execute(&**conn).and(Ok(())) |
|
|
|
} |
|
|
|
|
|
|
|
pub fn find_by_folder_and_cipher(folder_uuid: &str, cipher_uuid: &str, conn: &DbConn) -> Option<Self> { |
|
|
|
folders_ciphers::table |
|
|
|
.filter(folders_ciphers::folder_uuid.eq(folder_uuid)) |
|
|
|