private void ValidateNewUser(SSAuthInterfaces.UserAuth user, string password) { user.ThrowIfNull("newUser"); password.ThrowIfNullOrEmpty("password"); if (user.UserName.IsNullOrEmpty() && user.Email.IsNullOrEmpty()) throw new ArgumentNullException("UserName or Email is required"); if (!user.UserName.IsNullOrEmpty()) { if (!ValidUserNameRegEx.IsMatch(user.UserName)) throw new ArgumentException("UserName contains invalid characters", "UserName"); } }
public void SaveUserAuth(SSAuthInterfaces.IAuthSession authSession) { //var userAuth = !authSession.UserAuthId.IsNullOrEmpty() // ? GetUserAuth(authSession.UserAuthId) // : authSession.TranslateTo<SSAuthInterfaces.UserAuth>(); //if (userAuth.Id == default(int) && !authSession.UserAuthId.IsNullOrEmpty()) // userAuth.Id = int.Parse(authSession.UserAuthId); //userAuth.ModifiedDate = DateTime.UtcNow; //if (userAuth.CreatedDate == default(DateTime)) // userAuth.CreatedDate = userAuth.ModifiedDate; //var collection = _mongoDatabase.GetCollection<SSAuthInterfaces.UserAuth>(UserAuth_Col); //SaveUser(userAuth); throw new NotImplementedException(); }
public SSAuthInterfaces.UserAuth CreateUserAuth(SSAuthInterfaces.UserAuth user, string password) { throw new NotImplementedException(); }
private void LoadUserAuth(SSAuthInterfaces.IAuthSession session, SSAuthInterfaces.UserAuth userAuth) { if (userAuth == null) return; session.PopulateWith(userAuth); session.UserAuthId = userAuth.Id.ToString(CultureInfo.InvariantCulture); session.ProviderOAuthAccess = GetUserOAuthProviders(session.UserAuthId) .ConvertAll(x => (SSAuthInterfaces.IOAuthTokens)x); }
private void SaveUser(SSAuthInterfaces.UserAuth userAuth) { //if (userAuth.Id == default(int)) // userAuth.Id = IncUserAuthCounter(); //var usersCollection = _mongoDatabase.GetCollection<SSAuthInterfaces.UserAuth>(UserAuth_Col); //usersCollection.Save(userAuth); }
private static void AssertNoExistingUser(MongoDatabase mongoDatabase, SSAuthInterfaces.UserAuth newUser, SSAuthInterfaces.UserAuth exceptForExistingUser = null) { if (newUser.UserName != null) { var existingUser = GetUserAuthByUserName(mongoDatabase, newUser.UserName); if (existingUser != null && (exceptForExistingUser == null || existingUser.Id != exceptForExistingUser.Id)) throw new ArgumentException("User {0} already exists".Fmt(newUser.UserName)); } if (newUser.Email != null) { var existingUser = GetUserAuthByUserName(mongoDatabase, newUser.Email); if (existingUser != null && (exceptForExistingUser == null || existingUser.Id != exceptForExistingUser.Id)) throw new ArgumentException("Email {0} already exists".Fmt(newUser.Email)); } }
public void LoadUserAuth(SSAuthInterfaces.IAuthSession session, SSAuthInterfaces.IOAuthTokens tokens) { session.ThrowIfNull("session"); var userAuth = GetUserAuth(session, tokens); LoadUserAuth(session, userAuth); }
public SSAuthInterfaces.UserAuth UpdateUserAuth(SSAuthInterfaces.UserAuth existingUser, SSAuthInterfaces.UserAuth newUser, string password) { ValidateNewUser(newUser, password); AssertNoExistingUser(_mongoDatabase, newUser, existingUser); var hash = existingUser.PasswordHash; var salt = existingUser.Salt; if (password != null) { var saltedHash = new SSAuthInterfaces.SaltedHash(); saltedHash.GetHashAndSaltString(password, out hash, out salt); } // If either one changes the digest hash has to be recalculated var digestHash = existingUser.DigestHA1Hash; if (password != null || existingUser.UserName != newUser.UserName) { var digestHelper = new SSAuthInterfaces.DigestAuthFunctions(); digestHash = digestHelper.CreateHa1(newUser.UserName, SSAuthInterfaces.DigestAuthProvider.Realm, password); } newUser.Id = existingUser.Id; newUser.PasswordHash = hash; newUser.Salt = salt; newUser.DigestHA1Hash = digestHash; newUser.CreatedDate = existingUser.CreatedDate; newUser.ModifiedDate = DateTime.UtcNow; SaveUser(newUser); return newUser; }
public bool TryAuthenticate(Dictionary<string, string> digestHeaders, string PrivateKey, int NonceTimeOut, string sequence, out SSAuthInterfaces.UserAuth userAuth) { //userId = null; userAuth = GetUserAuthByUserName(digestHeaders["username"]); if (userAuth == null) return false; var digestHelper = new SSAuthInterfaces.DigestAuthFunctions(); if (digestHelper.ValidateResponse(digestHeaders, PrivateKey, NonceTimeOut, userAuth.DigestHA1Hash, sequence)) { //userId = userAuth.Id.ToString(CultureInfo.InvariantCulture); return true; } userAuth = null; return false; }
public bool TryAuthenticate(string userName, string password, out SSAuthInterfaces.UserAuth userAuth) { //userId = null; userAuth = GetUserAuthByUserName(userName); if (userAuth == null) return false; var saltedHash = new SSAuthInterfaces.SaltedHash(); if (saltedHash.VerifyHashString(password, userAuth.PasswordHash, userAuth.Salt)) { //userId = userAuth.Id.ToString(CultureInfo.InvariantCulture); return true; } userAuth = null; return false; }
public string CreateOrMergeAuthSession(SSAuthInterfaces.IAuthSession authSession, SSAuthInterfaces.IOAuthTokens tokens) { var userAuth = GetUserAuth(authSession, tokens) ?? new SSAuthInterfaces.UserAuth(); var query = Query.And( Query.EQ("Provider", tokens.Provider), Query.EQ("UserId", tokens.UserId) ); var providerCollection = _mongoDatabase.GetCollection<SSAuthInterfaces.UserOAuthProvider>(UserOAuthProvider_Col); var oAuthProvider = providerCollection.FindOne(query); if (oAuthProvider == null) { oAuthProvider = new SSAuthInterfaces.UserOAuthProvider { Provider = tokens.Provider, UserId = tokens.UserId, }; } oAuthProvider.PopulateMissing(tokens); userAuth.PopulateMissing(oAuthProvider); userAuth.ModifiedDate = DateTime.UtcNow; if (userAuth.CreatedDate == default(DateTime)) userAuth.CreatedDate = userAuth.ModifiedDate; SaveUser(userAuth); if (oAuthProvider.Id == default(int)) oAuthProvider.Id = IncUserOAuthProviderCounter(); oAuthProvider.UserAuthId = userAuth.Id; if (oAuthProvider.CreatedDate == default(DateTime)) oAuthProvider.CreatedDate = userAuth.ModifiedDate; oAuthProvider.ModifiedDate = userAuth.ModifiedDate; providerCollection.Save(oAuthProvider); return oAuthProvider.UserAuthId.ToString(CultureInfo.InvariantCulture); }
public SSAuthInterfaces.UserAuth GetUserAuth(SSAuthInterfaces.IAuthSession authSession, SSAuthInterfaces.IOAuthTokens tokens) { //if (!authSession.UserAuthId.IsNullOrEmpty()) //{ // var userAuth = GetUserAuth(authSession.UserName); // if (userAuth != null) return userAuth; //} if (!authSession.UserName.IsNullOrEmpty()) { var userAuth = GetUserAuthByUserName(authSession.UserName); if (userAuth != null) return userAuth; } if (!authSession.UserAuthName.IsNullOrEmpty()) { var userAuth = GetUserAuthByUserName(authSession.UserAuthName); if (userAuth != null) return userAuth; } if (tokens == null || tokens.Provider.IsNullOrEmpty() || tokens.UserId.IsNullOrEmpty()) return null; var query = Query.And( Query.EQ("Provider", tokens.Provider), Query.EQ("UserId", tokens.UserId) ); var providerCollection = _mongoDatabase.GetCollection<SSAuthInterfaces.UserOAuthProvider>(UserOAuthProvider_Col); var oAuthProvider = providerCollection.FindOne(query); if (oAuthProvider != null) { //var userAuthCollection = _mongoDatabase.GetCollection<SSAuthInterfaces.UserAuth>(UserAuth_Col); //var userAuth = userAuthCollection.FindOneById(oAuthProvider.UserAuthId); //return userAuth; return GetUserAuthByUserName(oAuthProvider.UserName); } return null; }
public void SaveUserAuth(SSAuthInterfaces.UserAuth userAuth) { userAuth.ModifiedDate = DateTime.UtcNow; if (userAuth.CreatedDate == default(DateTime)) userAuth.CreatedDate = userAuth.ModifiedDate; SaveUser(userAuth); }