コード例 #1
0
		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");
			}
		}
コード例 #2
0
		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();
		}
コード例 #3
0
		public SSAuthInterfaces.UserAuth CreateUserAuth(SSAuthInterfaces.UserAuth user, string password)
		{
			throw new NotImplementedException();
		}
コード例 #4
0
		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);
		}
コード例 #5
0
		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);
		}
コード例 #6
0
		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));
			}
		}
コード例 #7
0
		public void LoadUserAuth(SSAuthInterfaces.IAuthSession session, SSAuthInterfaces.IOAuthTokens tokens)
		{
			session.ThrowIfNull("session");

			var userAuth = GetUserAuth(session, tokens);
			LoadUserAuth(session, userAuth);
		}
コード例 #8
0
		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;
		}
コード例 #9
0
		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;
		}
コード例 #10
0
		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;
		}
コード例 #11
0
		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);
		}
コード例 #12
0
		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;
		}
コード例 #13
0
		public void SaveUserAuth(SSAuthInterfaces.UserAuth userAuth)
		{
			userAuth.ModifiedDate = DateTime.UtcNow;
			if (userAuth.CreatedDate == default(DateTime))
				userAuth.CreatedDate = userAuth.ModifiedDate;

			SaveUser(userAuth);
		}