Browse Source

Auto delete users who are not in ldap

pull/677/head
unknown 6 years ago
parent
commit
bef275979a
  1. 9
      Cargo.lock
  2. 13
      src/ldap.rs

9
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"

13
src/ldap.rs

@ -28,9 +28,11 @@ pub fn launch_ldap_connector() {
fn sync_from_ldap(conn: &DbConn) -> Result<(), Box<Error>> {
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<Error>> {
}
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<Error>> {
}
}
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);

Loading…
Cancel
Save