vw_small

Hardened fork of Vaultwarden (https://github.com/dani-garcia/vaultwarden) with fewer features.
git clone https://git.philomathiclife.com/repos/vw_small
Log | Files | Refs | README

commit 64f6c60bfd278d78ed6ee9f9b458380c996a73de
parent e0614620efdd170a0e9b406695314fb005298597
Author: janost <janost@users.noreply.github.com>
Date:   Sun, 14 Oct 2018 16:04:23 +0200

Organization::save() and UserOrganization::save() should return QueryResult instead of bool

Diffstat:
Msrc/api/core/accounts.rs | 4+++-
Msrc/api/core/organizations.rs | 33++++++++++++++++++++++-----------
Msrc/db/models/organization.rs | 24++++++++----------------
3 files changed, 33 insertions(+), 28 deletions(-)

diff --git a/src/api/core/accounts.rs b/src/api/core/accounts.rs @@ -39,7 +39,9 @@ fn register(data: JsonUpcase<RegisterData>, conn: DbConn) -> EmptyResult { if Invitation::take(&data.Email, &conn) { for mut user_org in UserOrganization::find_invited_by_user(&user.uuid, &conn).iter_mut() { user_org.status = UserOrgStatus::Accepted as i32; - user_org.save(&conn); + if user_org.save(&conn).is_err() { + err!("Failed to accept user to organization") + } }; user } else if CONFIG.signups_allowed { diff --git a/src/api/core/organizations.rs b/src/api/core/organizations.rs @@ -49,8 +49,13 @@ fn create_organization(headers: Headers, data: JsonUpcase<OrgData>, conn: DbConn user_org.type_ = UserOrgType::Owner as i32; user_org.status = UserOrgStatus::Confirmed as i32; - org.save(&conn); - user_org.save(&conn); + if org.save(&conn).is_err() { + err!("Failed creating organization") + } + if user_org.save(&conn).is_err() { + err!("Failed to add user to organization") + } + if collection.save(&conn).is_err() { err!("Failed creating Collection"); } @@ -128,9 +133,11 @@ fn post_organization(org_id: String, _headers: OwnerHeaders, data: JsonUpcase<Or org.name = data.Name; org.billing_email = data.BillingEmail; - org.save(&conn); - Ok(Json(org.to_json())) + match org.save(&conn) { + Ok(()) => Ok(Json(org.to_json())), + Err(_) => err!("Failed to modify organization") + } } // GET /api/collections?writeOnly=false @@ -427,7 +434,9 @@ fn send_invite(org_id: String, data: JsonUpcase<InviteData>, headers: AdminHeade } } - new_user.save(&conn); + if new_user.save(&conn).is_err() { + err!("Failed to add user to organization") + } } } @@ -458,9 +467,10 @@ fn confirm_invite(org_id: String, org_user_id: String, data: JsonUpcase<Value>, None => err!("Invalid key provided") }; - user_to_confirm.save(&conn); - - Ok(()) + match user_to_confirm.save(&conn) { + Ok(()) => Ok(()), + Err(_) => err!("Failed to add user to organization") + } } #[get("/organizations/<org_id>/users/<org_user_id>")] @@ -551,9 +561,10 @@ fn edit_user(org_id: String, org_user_id: String, data: JsonUpcase<EditUserData> } } - user_to_edit.save(&conn); - - Ok(()) + match user_to_edit.save(&conn) { + Ok(()) => Ok(()), + Err(_) => err!("Failed to save user data") + } } #[delete("/organizations/<org_id>/users/<org_user_id>")] diff --git a/src/db/models/organization.rs b/src/db/models/organization.rs @@ -137,9 +137,9 @@ use db::schema::{organizations, users_organizations, users_collections, ciphers_ /// Database methods impl Organization { - pub fn save(&mut self, conn: &DbConn) -> bool { + pub fn save(&mut self, conn: &DbConn) -> QueryResult<()> { if self.uuid == Organization::VIRTUAL_ID { - return false + return Err(diesel::result::Error::NotFound) } UserOrganization::find_by_org(&self.uuid, conn) @@ -148,12 +148,8 @@ impl Organization { User::update_uuid_revision(&user_org.user_uuid, conn); }); - match diesel::replace_into(organizations::table) - .values(&*self) - .execute(&**conn) { - Ok(1) => true, // One row inserted - _ => false, - } + diesel::replace_into(organizations::table) + .values(&*self).execute(&**conn).and(Ok(())) } pub fn delete(self, conn: &DbConn) -> QueryResult<()> { @@ -266,18 +262,14 @@ impl UserOrganization { }) } - pub fn save(&mut self, conn: &DbConn) -> bool { + pub fn save(&mut self, conn: &DbConn) -> QueryResult<()> { if self.org_uuid == Organization::VIRTUAL_ID { - return false + return Err(diesel::result::Error::NotFound) } User::update_uuid_revision(&self.user_uuid, conn); - match diesel::replace_into(users_organizations::table) - .values(&*self) - .execute(&**conn) { - Ok(1) => true, // One row inserted - _ => false, - } + diesel::replace_into(users_organizations::table) + .values(&*self).execute(&**conn).and(Ok(())) } pub fn delete(self, conn: &DbConn) -> QueryResult<()> {