/// <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; }
/// <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."); } }
/// <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; }
/// <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."); } } }