Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
        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);
                    }
                }
            }
        }