Пример #1
0
        /// <summary>
        /// Legt einen Benutzer mit den angebenen Daten an.
        /// </summary>
        /// <param name="login">Login des Benutzers.</param>
        /// <param name="password">Passwort des Benutzers.</param>
        /// <param name="name">Nachname des Benutzers.</param>
        /// <param name="firstname">Vorname des Benutzers.</param>
        /// <param name="title">Anrede des Benutzers.</param>
        /// <param name="dbContext">Datenbankkontext, mit dem die Transaktion durchgefuehrt werden soll.</param>
        /// <returns>Den neu erstellten Benutzer.</returns>
        /// <exception cref="ArgumentNullException"></exception>
        /// <exception cref="ArgumentException"></exception>
        public static User CreateUser(string login, string password, string name, string firstname, string title, DataClasses1DataContext dbContext)
        {
            if (string.IsNullOrEmpty(login))
            {
                throw new ArgumentNullException("Der Benutzername darf nicht leer sein.");
            }

            if (login.Length < 3)
            {
                throw new ArgumentException("Der Benutzername muss mindestens 3 Zeichen lang sein.");
            }

            CheckPassword(password);

            if (string.IsNullOrEmpty(name))
            {
                throw new ArgumentNullException("Der Name darf nicht leer sein.");
            }

            // Salt und Passwort-Hash berechnen.
            SaltedHash sh = new SaltedHash();
            string passwordHash = string.Empty;
            string salt = string.Empty;
            sh.GetHashAndSaltString(password, out passwordHash, out salt);
            var user = new User()
            {
                LogDBContext = dbContext,
                Login = login,
                Password = passwordHash,
                Salt = salt,
                IsLocked = false,
                Person = new Person()
                {
                    LogDBContext = dbContext,
                    FirstName = firstname,
                    Name = name,
                    Title = title
                }
            };

            dbContext.User.InsertOnSubmit(user);
            dbContext.SubmitChanges();
            dbContext.WriteLogItem("Benutzer " + login + " wurde angelegt.", LogTypes.INSERT, user.Id, "User", user.PersonId);
            return user;
        }
Пример #2
0
        /// <summary>
        /// Aendert das Passwort des Benutzers.
        /// </summary>
        /// <param name="newPassword">Neues Passwort.</param>
        /// <param name="oldPassword">Altes Passwort.</param>
        /// <param name="dbContext">Datenbankkontext für die Transaktion.</param>
        public void ChangePassword(string newPassword, string oldPassword, DataClasses1DataContext dbContext)
        {
            CheckPassword(newPassword);

            SaltedHash sh = new SaltedHash();
            if (sh.VerifyHashString(oldPassword, this.Password, this.Salt))
            {
                if (this.LogDBContext == null)
                {
                    this.LogDBContext = dbContext;
                }

                string passwordHash = string.Empty;
                string salt = string.Empty;
                sh.GetHashAndSaltString(newPassword, out passwordHash, out salt);
                this.Password = passwordHash;
                this.Salt = salt;
            }
            else
            {
                throw new Exception("Das alte Passwort konnte nicht verifiziert werden.");
            }
        }
Пример #3
0
        /// <summary>
        /// Ermoeglicht es, das Passwort eines Benutzers zu setzen. Der im dbContext uebergebene Benutzer muss dafür das Administratorrecht "ADMIN_PASSWORT_AENDERN" besitzen.
        /// </summary>
        /// <param name="newPassword">Das neue Passwort.</param>
        /// <param name="dbContext">Datenbankkontext für die Transaktion.</param>
        public void ChangePassword(string newPassword, DataClasses1DataContext dbContext)
        {
            CheckPassword(Password);

            var adminUser = dbContext.User.SingleOrDefault(q => q.Id == dbContext.LogUserId);
            if (adminUser == null)
            {
                throw new Exception("Der Administrator-Benutzer konnte nicht gefunden werden.");
            }

            if (!adminUser.HasPermission("ADMIN_PASSWORT_AENDERN"))
            {
                throw new Exception("Sie besitzen nicht die Berechtigung, Passwörter von anderen Benutzern zu ändern.");
            }

            SaltedHash sh = new SaltedHash();
            string passwordHash = string.Empty;
            string salt = string.Empty;
            sh.GetHashAndSaltString(newPassword, out passwordHash, out salt);
            if (this.LogDBContext == null)
            {
                this.LogDBContext = dbContext;
            }

            this.Password = passwordHash;
            this.Salt = salt;
        }
Пример #4
0
        /// <summary>
        /// Versucht, sich mit den gegebenen Login-Daten im System einuzloggen.
        /// </summary>
        /// <param name="login">Benutzername des Benutzers.</param>
        /// <param name="password">Passwort des Benutzers.</param>
        /// <returns>Datenbank-Id des Benutzers, falls Logon erfolgreich.</returns>
        public static int Logon(string login, string password)
        {
            using (DataClasses1DataContext dbContext = new DataClasses1DataContext())
            {

                var user = dbContext.User.SingleOrDefault(q => q.Login == login);
                if (user == null)
                {

                    throw new Exception("Benutzer / Passwort konnte nicht verifiziert werden.");
                }

                if (user.IsLocked)
                {
                    throw new Exception("Der Benutzerzugang ist gesperrt.");
                }

                SaltedHash sh = new SaltedHash();
                if (sh.VerifyHashString(password, user.Password, user.Salt))
                {
                    dbContext.LogUserId = user.Id;
                    user.LastLogin = DateTime.Now;
                    dbContext.WriteLogItem("Benutzer " + login + " eingeloggt.", LogTypes.INFO, user.Id, "User");
                    dbContext.SubmitChanges();
                    return user.Id;
                }
                else
                {
                    throw new Exception("Benutzer / Passwort konnte nicht verifiziert werden.");
                }
            }
        }