From bef275979a5a6e44fdf1ef587960494412dd7670 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 25 Oct 2019 01:23:29 +0200 Subject: [PATCH] Auto delete users who are not in ldap --- Cargo.lock | 9 +++++---- src/ldap.rs | 13 +++++++++++-- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 97374b98..05396e14 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1242,7 +1242,7 @@ version = "0.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.64 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1698,7 +1698,7 @@ name = "rand" version = "0.3.23" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "libc 0.2.64 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2629,7 +2629,7 @@ dependencies = [ "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.64 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", "mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2645,7 +2645,7 @@ dependencies = [ "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.64 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)", "mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3165,6 +3165,7 @@ dependencies = [ "checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe" "checksum quoted_printable 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "86cedf331228892e747bb85beb130b6bb23fc628c40dde9ea01eb6becea3c798" "checksum r2d2 0.8.6 (registry+https://github.com/rust-lang/crates.io-index)" = "e48fa64898ef0286b6ee4b4d8f61483f9182acf5e44e62a398b1c7f56f2f861d" +"checksum rand 0.3.23 (registry+https://github.com/rust-lang/crates.io-index)" = "64ac302d8f83c0c1974bf758f6b041c6c8ada916fbb44a609158ca8b064cc76c" "checksum rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" "checksum rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" "checksum rand 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3ae1b169243eaf61759b8475a998f0a385e42042370f3a7dbaf35246eacc8412" diff --git a/src/ldap.rs b/src/ldap.rs index e10d64c4..7f22bff5 100644 --- a/src/ldap.rs +++ b/src/ldap.rs @@ -28,9 +28,11 @@ pub fn launch_ldap_connector() { fn sync_from_ldap(conn: &DbConn) -> Result<(), Box> { let existing_users = get_existing_users(&conn).expect("Error: Failed to get existing users from Bitwarden"); let mut num_users = 0; + let mut ldap_emails = HashSet::new(); for ldap_user in search_entries()? { // Safely get first email from list of emails in field if let Some(user_email) = ldap_user.attrs.get("mail").and_then(|l| (l.first())) { + ldap_emails.insert(user_email.to_string()); if !existing_users.contains(user_email) { println!("Try to add user: {}", user_email); // Invite user @@ -39,14 +41,14 @@ fn sync_from_ldap(conn: &DbConn) -> Result<(), Box> { } let mut user = User::new(user_email.to_string()); - user.save(&conn)?; + user.save(conn)?; if CONFIG.mail_enabled() { let org_name = "bitwarden_rs"; mail::send_invite(&user.email, &user.uuid, None, None, &org_name, None)?; } else { let invitation = Invitation::new(user_email.to_string()); - invitation.save(&conn)?; + invitation.save(conn)?; } num_users = num_users + 1; } @@ -55,6 +57,13 @@ fn sync_from_ldap(conn: &DbConn) -> Result<(), Box> { } } + for bw_email in existing_users { + if !ldap_emails.contains(&bw_email) { + // Delete user + User::find_by_mail(bw_email.as_ref(), conn).unwrap().delete(conn)?; + } + } + // Maybe think about returning this value for some other use println!("Added {} user(s).", num_users);