public void CreateRegistration(
            RegistrationId i, 
            RegistrationInfo info, 
            IDomainIdentityService ids,
            IUserIndexService uniqueness, 
            PasswordGenerator generator)
        {
            var problems = new List<string>();
            // we do all the checks at registration phase 
            if (uniqueness.IsLoginRegistered(info.ContactEmail))
            {
                problems.Add(string.Format("Email '{0}' is already taken.", info.ContactEmail));
            }

            if (!string.IsNullOrEmpty(info.OptionalUserIdentity))
            {
                if (uniqueness.IsIdentityRegistered(info.OptionalUserIdentity))
                {
                    problems.Add(string.Format("Identity '{0}' is already taken.", info.OptionalUserIdentity));
                }
            }

            var userDisplay = info.OptionalUserDisplay;
            if (string.IsNullOrEmpty(userDisplay))
            {
                userDisplay = string.Format("{0}", info.CustomerName);
            }

            var password = info.OptionalUserPassword;
            if (string.IsNullOrEmpty(password))
            {
                password = generator.CreatePassword(6);
            }
            // TODO: we are checking contact uniqueness, but can use user name
            var login = info.ContactEmail;
            if (string.IsNullOrEmpty(login))
            {
                login = info.ContactEmail;
            }


            
            if (problems.Any())
            {
                Apply(new RegistrationFailed(i, info, problems.ToArray()));
                return;
            }
            var id = ids.GetId();

            var host = info.Headers.FirstOrDefault(h => h.Key == "UserHostAddress");
            

            var security = new SecurityInfo(new SecurityId(id), login, password, userDisplay, info.OptionalUserIdentity);
            var customer = new CustomerInfo(new CustomerId(id), info.CustomerName, userDisplay, info.ContactEmail,
                info.OptionalCompanyPhone, info.OptionalCompanyUrl);

            Apply(new RegistrationCreated(i, info.CreatedUtc, customer, security));
            // if no problems
        }
Esempio n. 2
0
        public void When(AddSecurityKey c)
        {
            var key   = _generator.CreatePassword(32);
            var user  = new UserId(_identityGenerator.GetId());
            var token = _generator.CreateToken();

            Apply(new SecurityKeyAdded(c.Id, user, c.DisplayName, key, token));
        }
Esempio n. 3
0
        public IActionResult Add([FromBody] User user)
        {
            if (user == null)
            {
                return(BadRequest(new { message = "Invalid Customer Data" }));
            }

            // Admins will not have access to passwords & cant add one.
            //This is for exercise purpose. In reality the password generation
            //needs to be more robust.
            user.Password = PasswordGenerator.CreatePassword(5);

            _userService.AddUser(user);
            return(Ok(user));
        }
Esempio n. 4
0
        public static List <string> GeneratePassword(int passwordLength, string charSet, List <ConstantChar> constantChars, int totalCount)
        {
            PasswordGenerator passwordGenerator = new PasswordGenerator();

            passwordGenerator.CharSet        = charSet;
            passwordGenerator.ConstantChars  = constantChars;
            passwordGenerator.PasswordLength = passwordLength;
            passwordGenerator.TotalCount     = totalCount;

            List <string> passwordList = new List <string>();

            while (passwordList.Count < totalCount)
            {
                string password = passwordGenerator.CreatePassword();

                if (!passwordList.Contains(password))
                {
                    passwordList.Add(password);
                }
            }

            return(passwordList);
        }
Esempio n. 5
0
        public void CreateRegistration(
            RegistrationId i,
            RegistrationInfo info,
            IDomainIdentityService ids,
            IUserIndexService uniqueness,
            PasswordGenerator generator)
        {
            var problems = new List <string>();

            // we do all the checks at registration phase
            if (uniqueness.IsLoginRegistered(info.ContactEmail))
            {
                problems.Add(string.Format("Email '{0}' is already taken.", info.ContactEmail));
            }

            if (!string.IsNullOrEmpty(info.OptionalUserIdentity))
            {
                if (uniqueness.IsIdentityRegistered(info.OptionalUserIdentity))
                {
                    problems.Add(string.Format("Identity '{0}' is already taken.", info.OptionalUserIdentity));
                }
            }

            var userDisplay = info.OptionalUserDisplay;

            if (string.IsNullOrEmpty(userDisplay))
            {
                userDisplay = string.Format("{0}", info.CustomerName);
            }

            var password = info.OptionalUserPassword;

            if (string.IsNullOrEmpty(password))
            {
                password = generator.CreatePassword(6);
            }
            // TODO: we are checking contact uniqueness, but can use user name
            var login = info.ContactEmail;

            if (string.IsNullOrEmpty(login))
            {
                login = info.ContactEmail;
            }



            if (problems.Any())
            {
                Apply(new RegistrationFailed(i, info, problems.ToArray()));
                return;
            }
            var id = ids.GetId();

            var host = info.Headers.FirstOrDefault(h => h.Key == "UserHostAddress");


            var security = new SecurityInfo(new SecurityId(id), login, password, userDisplay, info.OptionalUserIdentity);
            var customer = new CustomerInfo(new CustomerId(id), info.CustomerName, userDisplay, info.ContactEmail,
                                            info.OptionalCompanyPhone, info.OptionalCompanyUrl);

            Apply(new RegistrationCreated(i, info.CreatedUtc, customer, security));
            // if no problems
        }