public void ByteConversion()
        {
            var value    = Passhash.PasswordToPasshash("Str0ngPassw0rd123");
            var bytes    = new byte[Passhash.ByteSize];
            var newValue = value;

            using (var memoryStream = new MemoryStream(bytes))
            {
                using (var binaryWriter = new BinaryWriter(memoryStream))
                {
                    value.ToBytes(binaryWriter);
                    Assert.AreEqual(Passhash.ByteSize, memoryStream.Position);

                    binaryWriter.Seek(0, SeekOrigin.Begin);

                    using (var binaryReader = new BinaryReader(memoryStream))
                    {
                        newValue = new Passhash(binaryReader);
                        Assert.AreEqual(Passhash.ByteSize, memoryStream.Position);
                    }
                }
            }

            Assert.AreEqual(value, newValue);
        }
        public void PasswordIteration()
        {
            var firstValue  = Passhash.PasswordToPasshash("Str0ngPassw0rd123");
            var secondValue = Passhash.PasswordToPasshash("Str0ngPassw0rd123", 12345);

            Assert.AreNotEqual(firstValue, secondValue);
        }
        public void NotEquality()
        {
            var firstValue  = Passhash.PasswordToPasshash("Str0ngPassw0rd123");
            var secondValue = Passhash.PasswordToPasshash("OtherStr0ngPassw0rd123");

            Assert.AreNotEqual(firstValue, secondValue);
        }
        public void Base64Conversion()
        {
            var value    = Passhash.PasswordToPasshash("Str0ngPassw0rd123");
            var base64   = value.ToBase64();
            var newValue = new Passhash(base64);

            Assert.AreEqual(value, newValue);
        }
        public void LowerBound()
        {
            var isThrowed = false;

            try { _ = Passhash.PasswordToPasshash("12345"); }
            catch { isThrowed = true; }
            Assert.IsTrue(isThrowed);
        }
        public async Task <AppUser> CreateAdmin(AppUser AppUser, string password)
        {
            var creater = new Passhash();

            AppUser.PasswordHash = creater.gethash(password);
            await _AppUser.InsertOneAsync(AppUser);

            return(AppUser);
        }
        public void Connect_Incorrect_ID()
        {
            var addAccount     = new Account(0, false, 0, "test_user1", Passhash.PasswordToPasshash("Str0ngPassw0rd123"), new EmailAddress("*****@*****.**"), Token.Create(), IPAddress.Any);
            var connectAccount = new Account(1, false, 0, "test_user1", Passhash.PasswordToPasshash("Str0ngPassw0rd123"), new EmailAddress("*****@*****.**"), Token.Create(), IPAddress.Any);
            var isThrowed      = false;

            try { Connect(addAccount, connectAccount); }
            catch { isThrowed = true; }
            Assert.IsTrue(isThrowed);
        }
        /// <summary>
        /// Creates a new sign in HTTP request class instance
        /// </summary>
        public SignInHttpRequest(NameValueCollection queryString)
        {
            if (queryString.Count != 2)
            {
                throw new ArgumentException();
            }

            name     = new Username(queryString.Get(0));
            passhash = new Passhash(queryString.Get(1));
        }
Beispiel #9
0
 /// <summary>
 /// Creates a new account data container class instance
 /// </summary>
 public Account(BinaryReader binaryReader)
 {
     ID               = binaryReader.ReadInt64();
     IsBlocked        = binaryReader.ReadBoolean();
     Level            = binaryReader.ReadByte();
     Name             = new Username(binaryReader);
     Passhash         = new Passhash(binaryReader);
     EmailAddress     = new EmailAddress(binaryReader);
     AccessToken      = new Token(binaryReader);
     LastUseIpAddress = IPAddressExtension.FromBytes(binaryReader);
 }
Beispiel #10
0
 /// <summary>
 /// Creates a new account data container class instance
 /// </summary>
 public Account(long id, bool isBlocked, byte level, Username name, Passhash passhash, EmailAddress emailAddress, Token accessToken, IPAddress lastUseIpAddress)
 {
     ID               = id;
     IsBlocked        = isBlocked;
     Level            = level;
     Name             = name;
     Passhash         = passhash;
     EmailAddress     = emailAddress;
     AccessToken      = accessToken;
     LastUseIpAddress = lastUseIpAddress;
 }
Beispiel #11
0
 /// <summary>
 /// Converts account data container to the byte array
 /// </summary>
 public void ToBytes(BinaryWriter binaryWriter)
 {
     binaryWriter.Write(ID);
     binaryWriter.Write(IsBlocked);
     binaryWriter.Write(Level);
     Name.ToBytes(binaryWriter);
     Passhash.ToBytes(binaryWriter);
     EmailAddress.ToBytes(binaryWriter);
     AccessToken.ToBytes(binaryWriter);
     LastUseIpAddress.ToBytes(binaryWriter);
 }
        /// <summary>
        /// Creates a new sign up HTTP request class instance
        /// </summary>
        public SignUpHttpRequest(NameValueCollection queryString)
        {
            if (queryString.Count != 3)
            {
                throw new ArgumentException();
            }

            name         = new Username(queryString.Get(0));
            passhash     = new Passhash(queryString.Get(1));
            emailAddress = new EmailAddress(queryString.Get(2));
        }
        public async Task <AppUser> CreateClient(AppUser AppUser, string password)
        {
            var creater = new Passhash();

            AppUser.PasswordHash = creater.gethash(password);
            _AppUser.InsertOne(AppUser);
            var ussr = _AppUser.Find <AppUser>(x => x.UserName == AppUser.UserName).FirstOrDefault();
            var id   = ussr.Id;
            await _accserv.CreateClientAccount(AppUser, id);

            return(AppUser);
        }
        public async Task <AppUser> UpdatePassword(string id, string newpass)
        {
            var creater    = new Passhash();
            var hashedpass = creater.gethash(newpass);

            var filter = Builders <AppUser> .Filter.Eq("Id", id);

            var update = Builders <AppUser> .Update.Set("PasswordHash", hashedpass);

            await _AppUser.UpdateOneAsync(filter, update);

            var result = await Get(id);

            return(result);
        }
        public bool checkPass(string id, string pass)
        {
            var appuser = _AppUser.Find <AppUser>(AppUser => AppUser.Id == id).FirstOrDefault();
            var creater = new Passhash();
            var z       = creater.gethash(pass);

            if (z == appuser.PasswordHash)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
Beispiel #16
0
        public static void SeedUsers(IMongoCollection <AppUser> Appuser)
        {
            var clients = Appuser.CountDocuments(x => x.Roles[0] == "Admin");

            // var clients = Appuser.Find<AppUser>(AppUser => true).ToList();


            if (clients < 1)
            {
                string  pass    = "******";
                var     creater = new Passhash();
                AppUser admin   = new AppUser();
                admin.UserName = "******";
                admin.Email    = "*****@*****.**";
                admin.Roles.Add("Admin");
                admin.PasswordHash = creater.gethash(pass);
                admin.Name         = "Amir";
                admin.LastName     = "Nasser";
                Appuser.InsertOne(admin);
            }
        }
Beispiel #17
0
        public async Task <AuthenticationResult> AuthenticateUser(AuthenticationReqest ar)
        {
            var user = _AppUser.Find <AppUser>(AppUser => AppUser.UserName == ar.Username).FirstOrDefault();

            if (user == null)
            {
                return(new AuthenticationResult
                {
                    Errors = new[] { "User With this username does not exist " }
                });
            }

            var  creater = new Passhash();
            var  Pass    = creater.gethash(ar.Password);
            bool result  = false;

            if (Pass == user.PasswordHash)
            {
                result = true;
            }
            // var f1 = Builders<AppUser>.Filter.Eq("PasswordHash",Pass);
            // var f2 = Builders<AppUser>.Filter.Eq("UserName",ar.Username);
            // var result = _AppUser.Find<AppUser>(AppUser => AppUser.UserName == Pass).FirstOrDefault();

            AuthenticationResult response = new AuthenticationResult();

            if (result == false)
            {
                return(new AuthenticationResult
                {
                    Errors = new[] { "Username/password Combination are wrong" }
                });
            }

            return(await GenerateAuthenticationResultForUserAsync(user));
        }
 /// <summary>
 /// Creates a new sign up HTTP request class instance
 /// </summary>
 public SignUpHttpRequest(Username name, Passhash passhash, EmailAddress emailAddress)
 {
     this.name         = name;
     this.passhash     = passhash;
     this.emailAddress = emailAddress;
 }
Beispiel #19
0
 /// <summary>
 /// Creates a new account instance
 /// </summary>
 public IAccount Create(long id, bool isBlocked, byte level, Username name, Passhash passhash, EmailAddress emailAddress, Token accessToken, IPAddress ipAddress)
 {
     return(new Account(id, isBlocked, level, name, passhash, emailAddress, accessToken, ipAddress));
 }
 /// <summary>
 /// Creates a new sign in HTTP request class instance
 /// </summary>
 public SignInHttpRequest(Username name, Passhash passhash)
 {
     this.name     = name;
     this.passhash = passhash;
 }
        public void Connect_Correct()
        {
            var account = new Account(0, false, 0, "test_user1", Passhash.PasswordToPasshash("Str0ngPassw0rd123"), new EmailAddress("*****@*****.**"), Token.Create(), IPAddress.Any);

            Connect(account, account);
        }
Beispiel #22
0
        private async Task <AuthenticationResult> GenerateAuthenticationResultForUserAsync(AppUser user)
        {
            var tokenHandler = new JwtSecurityTokenHandler();
            var key          = Encoding.ASCII.GetBytes(_jwtSettings.Secret);
            var userR        = _AppUser.Find <AppUser>(x => x.Id == user.Id).FirstOrDefault();
            var userrole     = userR.Roles;

            var claimlist = new List <Claim> {
                new Claim(JwtRegisteredClaimNames.Sub, user.UserName),
                new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
                new Claim("id", userR.Id),
                new Claim("name", userR.UserName),
                new Claim("role", userrole.FirstOrDefault())
            };

            var claims = new List <IdentityUserClaim>();

            for (int i = 0; i < claimlist.Count; i++)
            {
                claims.Add(new IdentityUserClaim(claimlist[i]));
            }



            foreach (var userRole in userrole)
            {
                Claim claim = new Claim(ClaimTypes.Role, userRole);
                claims.Add(new IdentityUserClaim(claim));
            }



            var filter = Builders <AppUser> .Filter.Eq("Id", userR.Id);

            var userClaims    = _AppUser.Find <AppUser>(filter).FirstOrDefault();
            var CurrentClaims = userClaims.Claims;

            CurrentClaims.AddRange(claims);

            var update = Builders <AppUser> .Update.Set("Claims", CurrentClaims);

            await _AppUser.UpdateOneAsync(filter, update);


            var tokenDescriptor = new SecurityTokenDescriptor
            {
                Subject            = new ClaimsIdentity(claimlist),
                Expires            = DateTime.Now.Add(_jwtSettings.TokenLifetime),
                SigningCredentials =
                    new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
            };

            var token   = tokenHandler.CreateToken(tokenDescriptor);
            var creater = new Passhash();

            var refreshToken = new RefreshToken
            {
                Token     = creater.gethash(token.Id),
                JwtId     = token.Id,
                AppUserID = user.Id,
                Created   = DateTime.Now,
                Expires   = DateTime.Now.AddMonths(6)
            };
            await _refresh.InsertOneAsync(refreshToken);


            return(new AuthenticationResult
            {
                Username = user.UserName,
                Success = true,
                Token = tokenHandler.WriteToken(token),
                RefreshToken = refreshToken.Token,
            });
        }