/// <summary> /// Creates streaming user. /// </summary> /// <param name="userName">User name string.</param> /// <param name="password">Password string.</param> /// <returns></returns> public bool CreateUser(string userName, string password) { var userNameValidation = new Regex("[a-z,A-Z,0-9,_!@#$%^&*]{4,32}", RegexOptions.Compiled | RegexOptions.Singleline); if (string.IsNullOrEmpty(userName) || !userNameValidation.IsMatch(userName, 0) || string.IsNullOrEmpty(password) || password.Length < 6) { throw new InvalidOperationException(@"Invalid username, allowed characters are 'a-z,A-Z,0-9,_!@#$%^&*' and length between 4 and 32 !"); } if (string.IsNullOrEmpty(password) || password.Length < 6) { throw new InvalidOperationException(@"Invalid password, minimum 6 characters !"); } var user = (from su in _dataContext.Get <StreamingUser>() where su.UserName == userName select su).FirstOrDefault(); if (user != null) { return(false); } user = new StreamingUser(); user.UserName = userName; user.PasswordHash = CryptographyHelper.ComputeHashSHA1($"{userName}_+_{password}{user.PasswordSalt}"); _dataContext.Add(user); _dataContext.SaveChanges(); return(true); }
/// <summary> /// Authentication of streaming user. /// </summary> /// <param name="userName">User name string</param> /// <param name="password">Password string.</param> /// <param name="hash">Hash string.</param> /// <param name="userId">Authenticated user identifier.</param> /// <returns></returns> public bool Authenticate(string userName, string password, string hash, out Guid userId) { userId = Guid.Empty; var user = (from su in _dataContext.Get <StreamingUser>() where su.UserName == userName select su).FirstOrDefault(); if (user == null || user.IsActive == false) { return(false); } var passwordHash = CryptographyHelper.ComputeHashSHA1($"{userName}_+_{password}{user.PasswordSalt}"); if (user.PasswordHash == passwordHash) { userId = user.Id; return(true); } return(false); }