0
0
Fork 0
mirror of https://github.com/dani-garcia/vaultwarden synced 2024-11-05 15:18:57 +01:00
bitwarden_rs/src/api/core/folders.rs

100 lines
2.6 KiB
Rust
Raw Normal View History

2018-02-10 01:00:55 +01:00
use rocket_contrib::{Json, Value};
use db::DbConn;
use db::models::*;
use api::{JsonResult, EmptyResult};
2018-02-10 01:00:55 +01:00
use auth::Headers;
#[get("/folders")]
fn get_folders(headers: Headers, conn: DbConn) -> JsonResult {
2018-02-10 01:00:55 +01:00
let folders = Folder::find_by_user(&headers.user.uuid, &conn);
let folders_json: Vec<Value> = folders.iter().map(|c| c.to_json()).collect();
Ok(Json(json!({
"Data": folders_json,
"Object": "list",
})))
}
#[get("/folders/<uuid>")]
fn get_folder(uuid: String, headers: Headers, conn: DbConn) -> JsonResult {
2018-02-15 00:53:11 +01:00
let folder = match Folder::find_by_uuid(&uuid, &conn) {
2018-02-10 01:00:55 +01:00
Some(folder) => folder,
_ => err!("Invalid folder")
};
if folder.user_uuid != headers.user.uuid {
err!("Folder belongs to another user")
}
Ok(Json(folder.to_json()))
}
#[derive(Deserialize)]
pub struct FolderData {
pub name: String
}
2018-02-10 01:00:55 +01:00
#[post("/folders", data = "<data>")]
fn post_folders(data: Json<FolderData>, headers: Headers, conn: DbConn) -> JsonResult {
let data: FolderData = data.into_inner();
2018-02-10 01:00:55 +01:00
let mut folder = Folder::new(headers.user.uuid.clone(), data.name);
2018-02-10 01:00:55 +01:00
folder.save(&conn);
Ok(Json(folder.to_json()))
}
#[post("/folders/<uuid>", data = "<data>")]
fn post_folder(uuid: String, data: Json<FolderData>, headers: Headers, conn: DbConn) -> JsonResult {
2018-02-10 01:00:55 +01:00
put_folder(uuid, data, headers, conn)
}
#[put("/folders/<uuid>", data = "<data>")]
fn put_folder(uuid: String, data: Json<FolderData>, headers: Headers, conn: DbConn) -> JsonResult {
let data: FolderData = data.into_inner();
2018-02-10 01:00:55 +01:00
let mut folder = match Folder::find_by_uuid(&uuid, &conn) {
Some(folder) => folder,
_ => err!("Invalid folder")
};
if folder.user_uuid != headers.user.uuid {
err!("Folder belongs to another user")
}
folder.name = data.name;
2018-02-10 01:00:55 +01:00
folder.save(&conn);
Ok(Json(folder.to_json()))
}
2018-02-17 23:38:55 +01:00
#[post("/folders/<uuid>/delete")]
fn delete_folder_post(uuid: String, headers: Headers, conn: DbConn) -> EmptyResult {
2018-02-10 01:00:55 +01:00
delete_folder(uuid, headers, conn)
}
#[delete("/folders/<uuid>")]
fn delete_folder(uuid: String, headers: Headers, conn: DbConn) -> EmptyResult {
2018-02-10 01:00:55 +01:00
let folder = match Folder::find_by_uuid(&uuid, &conn) {
Some(folder) => folder,
_ => err!("Invalid folder")
};
if folder.user_uuid != headers.user.uuid {
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
2018-02-10 01:00:55 +01:00
folder.delete(&conn);
Ok(())
}