mirror of
				https://github.com/dani-garcia/vaultwarden.git
				synced 2025-10-31 10:18:19 +02:00 
			
		
		
		
	Fix sso_user dropped on User::save (#6262)
				
					
				
			* Admin delete SSO association prompt * User.save don't use replace_into * User.save use upsert with sqlite * User.save use upsert with mysql
This commit is contained in:
		| @@ -283,24 +283,17 @@ impl User { | ||||
|         self.updated_at = Utc::now().naive_utc(); | ||||
|  | ||||
|         db_run! {conn: | ||||
|             sqlite, mysql { | ||||
|                 match diesel::replace_into(users::table) | ||||
|                     .values(UserDb::to_db(self)) | ||||
|             mysql { | ||||
|                 let value = UserDb::to_db(self); | ||||
|                 diesel::insert_into(users::table) | ||||
|                     .values(&value) | ||||
|                     .on_conflict(diesel::dsl::DuplicatedKeys) | ||||
|                     .do_update() | ||||
|                     .set(&value) | ||||
|                     .execute(conn) | ||||
|                 { | ||||
|                     Ok(_) => Ok(()), | ||||
|                     // Record already exists and causes a Foreign Key Violation because replace_into() wants to delete the record first. | ||||
|                     Err(diesel::result::Error::DatabaseError(diesel::result::DatabaseErrorKind::ForeignKeyViolation, _)) => { | ||||
|                         diesel::update(users::table) | ||||
|                             .filter(users::uuid.eq(&self.uuid)) | ||||
|                             .set(UserDb::to_db(self)) | ||||
|                             .execute(conn) | ||||
|                             .map_res("Error saving user") | ||||
|                     } | ||||
|                     Err(e) => Err(e.into()), | ||||
|                 }.map_res("Error saving user") | ||||
|                     .map_res("Error saving user") | ||||
|             } | ||||
|             postgresql { | ||||
|             postgresql, sqlite { | ||||
|                 let value = UserDb::to_db(self); | ||||
|                 diesel::insert_into(users::table) // Insert or update | ||||
|                     .values(&value) | ||||
|   | ||||
							
								
								
									
										4
									
								
								src/static/scripts/admin_users.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								src/static/scripts/admin_users.js
									
									
									
									
										vendored
									
									
								
							| @@ -33,11 +33,11 @@ function deleteSSOUser(event) { | ||||
|         alert("Required parameters not found!"); | ||||
|         return false; | ||||
|     } | ||||
|     const input_email = prompt(`To delete user "${email}", please type the email below`); | ||||
|     const input_email = prompt(`To delete user "${email}" SSO association, please type the email below`); | ||||
|     if (input_email != null) { | ||||
|         if (input_email == email) { | ||||
|             _delete(`${BASE_URL}/admin/users/${id}/sso`, | ||||
|                 "User SSO Associtation deleted correctly", | ||||
|                 "User SSO association deleted correctly", | ||||
|                 "Error deleting user SSO association" | ||||
|             ); | ||||
|         } else { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user