private void OnSettingsClick(object sender, EventArgs e) { OptigemConnector optigem; try { optigem = new OptigemConnector(this.configuration.OptigemDatabasePath); } catch (ArgumentException) { optigem = null; } string connectionString = optigem?.GetLdapConnectionString(); LdapConnectionStringParser ldapSettings = string.IsNullOrWhiteSpace(connectionString) ? null : new LdapConnectionStringParser() { ConnectionString = connectionString }; var settingsForm = new SettingsForm { OptigemPath = this.configuration.OptigemDatabasePath, LdapServer = ldapSettings?.Server, LdapPort = ldapSettings?.Port ?? 636, LdapUser = ldapSettings?.User, LdapPassword = ldapSettings?.Password }; settingsForm.FormClosing += (s, args) => { var form = s as SettingsForm ?? settingsForm; if (form.DialogResult == DialogResult.OK) { ldapSettings = new LdapConnectionStringParser { Server = settingsForm.LdapServer, Port = settingsForm.LdapPort, User = settingsForm.LdapUser, Password = settingsForm.LdapPassword, }; try { optigem = new OptigemConnector(settingsForm.OptigemPath); } catch (ArgumentException exception) { MessageBox.Show("Die Optigem-Datenbank konnte nicht geöffnet werden: " + Environment.NewLine + Environment.NewLine + exception.ToString(), "Fehler...", MessageBoxButtons.OK, MessageBoxIcon.Error); args.Cancel = true; return; } optigem.SetLdapConnectionString(ldapSettings.ToString()); } }; settingsForm.ShowDialog(); }
private void OnPasswordSetClicked(object sender, EventArgs e) { var optigem = new OptigemConnector(this.configuration.OptigemDatabasePath); IList <PersonModel> persons = optigem.GetAllPersons(this.txbAddUsername.Text?.Trim()) .ToList(); if (!persons.Any()) { MessageBox.Show("Es konnte kein Benutzer mit dem angegebenen Benutzernamen gefunden werden.", "Fehler...", MessageBoxButtons.OK, MessageBoxIcon.Error); } else if (persons.Count() > 1) { MessageBox.Show("Es wurde mehr als ein Benutzer mit dem angegebenen Benutzernamen gefunden.", "Fehler...", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { var person = persons.First(); var parser = new LdapConnectionStringParser { ConnectionString = optigem.GetLdapConnectionString() }; var ldap = new LdapConnector(parser.Server, parser.Port, AuthType.Basic, parser.User, parser.Password, 100, this.configuration.WhatIf); SearchResultEntry[] searchResult = ldap .PagedSearch($"(&(objectClass=inetOrgPerson)(syncUserId={person.SyncUserId}))", this.configuration.LdapDirectoryBaseDn, LdapBuilder.AllAttributes) .SelectMany(s => s.OfType <SearchResultEntry>()) .ToArray(); if (searchResult.Length == 0) { MessageBox.Show("Der ausgewählte Benutzer ist in LDAP nicht vorhanden." + Environment.NewLine + "Das Passwort kann nicht gesetzt werden.", "Fehler...", MessageBoxButtons.OK, MessageBoxIcon.Error); } else if (searchResult.Length > 1) { MessageBox.Show("Für den Benutzer ist mehr als ein Eintrag in LDAP vorhanden." + Environment.NewLine + "Das Passwort kann nicht gesetzt werden.", "Fehler...", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { var entry = searchResult.First(); var password = new DirectoryAttribute("userpassword", LdapBuilder.GenerateSaltedSha1(person.Password)); bool result = ldap.ModifyEntry(entry.DistinguishedName, new DirectoryAttributeModification[] { password.CreateModification(DirectoryAttributeOperation.Replace) }); if (result) { MessageBox.Show("Das Passwort für den Benutzer wurde zurück gesetzt (siehe Feld in OPTIGEM).", "Passwort zurückgesetzt...", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { MessageBox.Show("Beim Zurücksetzen des Passworts is ein Fehler aufgetreten.", "Fehler...", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } }