public void CreateAdminUser(AdminSetupModel adminSetupModel)
        {
            if (_connectionString == null)
            {
                _connectionString = ConfigurationManager.ConnectionStrings["eFormMainConnection"].ConnectionString;
            }
            // Seed admin and demo users
            var manager   = new EformUserManager(new EformUserStore(new BaseDbContext(_connectionString)));
            var adminUser = new EformUser()
            {
                UserName                     = adminSetupModel.UserName,
                Email                        = adminSetupModel.Email,
                FirstName                    = adminSetupModel.FirstName,
                LastName                     = adminSetupModel.LastName,
                EmailConfirmed               = true,
                TwoFactorEnabled             = false,
                IsGoogleAuthenticatorEnabled = false
            };

            if (!manager.Users.Any(x => x.Email.Equals(adminUser.Email)))
            {
                IdentityResult ir = manager.Create(adminUser, adminSetupModel.Password);
                if (ir != null)
                {
                    manager.AddToRole(adminUser.Id, "admin");
                }
                else
                {
                    throw new Exception("Could not create the user");
                }
            }
        }
Example #2
0
 public async Task AddToRoleAsync(EformUser user, string role)
 {
     if (!await _userManager.IsInRoleAsync(user, role))
     {
         await _userManager.AddToRoleAsync(user, role);
     }
 }
Example #3
0
        public static AuthenticationProperties CreateProperties(EformUser user, string role)
        {
            IDictionary <string, string> data = new Dictionary <string, string>
            {
                { "userId", user.Id.ToString() },
                { "userName", user.UserName },
                { "role", role },
            };

            return(new AuthenticationProperties(data));
        }
        public static AuthenticationProperties CreateProperties(EformUser user, string role)
        {
            IDictionary <string, string> data = new Dictionary <string, string>
            {
                { "userId", user.Id.ToString() },
                { "userName", user.UserName },
                { "role", role },
            };

            if (!user.Locale.IsNullOrEmpty())
            {
                data.Add("locale", user.Locale);
            }
            return(new AuthenticationProperties(data));
        }
Example #5
0
        public void EformInGroupTest_CreateEformInGroup_ShouldCreatEformInGroup()
        {
            // Arrange
            EformUser eformUser = new EformUser();

            eformUser.Email     = Guid.NewGuid().ToString();
            eformUser.FirstName = Guid.NewGuid().ToString();
            eformUser.LastName  = Guid.NewGuid().ToString();

            DbContext.Users.Add(eformUser);
            DbContext.SaveChanges();

            // Act

            EformUser foundeformUser = DbContext.Users.Find(eformUser.Id);

            // Assert
            Assert.NotNull(foundeformUser);
            Assert.AreEqual(eformUser.FirstName, foundeformUser.FirstName);
        }
Example #6
0
        public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
        {
            var       userManager = context.OwinContext.GetUserManager <EformUserManager>();
            EformUser user        = await userManager.FindAsync(context.UserName, context.Password);

            if (user == null)
            {
                context.SetError("The user name or password is incorrect.", "The user name or password is incorrect.");
                return;
            }

            ClaimsIdentity oAuthIdentity = await user.GenerateUserIdentityAsync(userManager,
                                                                                OAuthDefaults.AuthenticationType);

            ClaimsIdentity cookiesIdentity = await user.GenerateUserIdentityAsync(userManager,
                                                                                  CookieAuthenticationDefaults.AuthenticationType);

            AuthenticationProperties properties = CreateProperties(user.UserName);
            AuthenticationTicket     ticket     = new AuthenticationTicket(oAuthIdentity, properties);

            context.Validated(ticket);
            context.Request.Context.Authentication.SignIn(cookiesIdentity);
        }
        public void CreateAdminUser(AdminSetupModel adminSetupModel)
        {
            if (_connectionString == null)
            {
                _connectionString = ConfigurationManager.ConnectionStrings["eFormMainConnection"].ConnectionString;
            }
            // Seed admin and demo users
            var manager   = new EformUserManager(new EformUserStore(new BaseDbContext(_connectionString)));
            var adminUser = new EformUser()
            {
                UserName       = adminSetupModel.UserName,
                Email          = adminSetupModel.Email,
                FirstName      = adminSetupModel.FirstName,
                LastName       = adminSetupModel.LastName,
                EmailConfirmed = true,
            };

            if (!manager.Users.Any(x => x.Email.Equals(adminUser.Email)))
            {
                manager.Create(adminUser, adminSetupModel.Password);
                manager.AddToRole(adminUser.Id, "admin");
            }
        }
        public async Task <string> GenerateToken(EformUser user)
        {
            if (user != null)
            {
                var timeStamp = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds();
                var claims    = new List <Claim>
                {
                    new Claim(JwtRegisteredClaimNames.Sub, user.Id.ToString()),
                    new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
                    new Claim(AuthConsts.ClaimLastUpdateKey, timeStamp.ToString()),
                };

                if (!string.IsNullOrEmpty(user.Locale))
                {
                    claims.Add(new Claim("locale", user.Locale));
                }

                // Add user and roles claims
                var userClaims = _userManager.GetClaimsAsync(user).Result;
                var userRoles  = _userManager.GetRolesAsync(user).Result;
                claims.AddRange(userClaims);
                foreach (var userRole in userRoles)
                {
                    claims.Add(new Claim(ClaimTypes.Role, userRole));
                    var role = _roleManager.FindByNameAsync(userRole).Result;
                    if (role != null)
                    {
                        var roleClaims = _roleManager.GetClaimsAsync(role).Result;
                        foreach (var roleClaim in roleClaims)
                        {
                            claims.Add(roleClaim);
                        }
                    }
                }

                var userInMemoryClaims = await _claimsService.GetUserPermissions(
                    user.Id,
                    userRoles.Contains(EformRole.Admin));

                // Add to memory
                var authItem = new AuthItem
                {
                    TimeStamp = timeStamp,
                    Claims    = userInMemoryClaims,
                };

                _authCacheService.Set(authItem, user.Id);

                var key         = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_tokenOptions.Value.SigningKey));
                var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
                var token       = new JwtSecurityToken(_tokenOptions.Value.Issuer,
                                                       _tokenOptions.Value.Issuer,
                                                       claims.ToArray(),
                                                       expires: DateTime.Now.AddHours(24),
                                                       signingCredentials: credentials);

                return(new JwtSecurityTokenHandler().WriteToken(token));
            }

            return(null);
        }
Example #9
0
        public async Task <OperationResult> Create(UserRegisterModel userRegisterModel)
        {
            try
            {
                var core = await _coreHelper.GetCore();

                var sdkDbContext = core.DbContextHelper.GetDbContext();
                if (userRegisterModel.Role != EformRole.Admin && userRegisterModel.Role != EformRole.User)
                {
                    return(new OperationResult(false,
                                               _localizationService.GetString("RoleNotFound")));
                }

                var userResult = await _userManager.FindByNameAsync(userRegisterModel.Email);

                if (userResult != null)
                {
                    return(new OperationResult(false,
                                               _localizationService.GetStringWithFormat("UserUserNameAlreadyExist", userRegisterModel.Email)));
                }

                if (userRegisterModel.Role != EformRole.Admin && !_dbContext.SecurityGroups.Any(x => x.Id == userRegisterModel.GroupId))
                {
                    return(new OperationResult(false,
                                               _localizationService.GetString("SecurityGroupNotFound")));
                }

                var user = new EformUser
                {
                    Email                        = userRegisterModel.Email,
                    UserName                     = userRegisterModel.Email,
                    FirstName                    = userRegisterModel.FirstName,
                    LastName                     = userRegisterModel.LastName,
                    Locale                       = "da",
                    EmailConfirmed               = true,
                    TwoFactorEnabled             = false,
                    IsGoogleAuthenticatorEnabled = false
                };

                var result = await _userManager.CreateAsync(user, userRegisterModel.Password);

                if (!result.Succeeded)
                {
                    return(new OperationResult(false, string.Join(" ", result.Errors.Select(x => x.Description).ToArray())));
                }

                // change role
                await _userManager.AddToRoleAsync(user, userRegisterModel.Role);

                // add to group
                if (userRegisterModel.GroupId > 0 && user.Id > 0 && userRegisterModel.Role != EformRole.Admin)
                {
                    var securityGroupUser = new SecurityGroupUser()
                    {
                        SecurityGroupId = (int)userRegisterModel.GroupId,
                        EformUserId     = user.Id
                    };
                    _dbContext.SecurityGroupUsers.Add(securityGroupUser);
                    await _dbContext.SaveChangesAsync();
                }

                var site = await sdkDbContext.Sites.SingleOrDefaultAsync(x => x.Name == userRegisterModel.FirstName + " " + userRegisterModel.LastName &&
                                                                         x.WorkflowState != Constants.WorkflowStates.Removed);

                if (site == null)
                {
                    await core.SiteCreate($"{userRegisterModel.FirstName} {userRegisterModel.LastName}", userRegisterModel.FirstName, userRegisterModel.LastName,
                                          null, "da");
                }
                if (site != null)
                {
                    site.IsLocked = true;
                    await site.Update(sdkDbContext);

                    var units = await sdkDbContext.Units.Where(x => x.SiteId == site.Id).ToListAsync();

                    foreach (Unit unit in units)
                    {
                        unit.IsLocked = true;
                        await unit.Update(sdkDbContext);
                    }
                    var worker = await sdkDbContext.Workers.SingleOrDefaultAsync(x => x.FirstName == userRegisterModel.FirstName &&
                                                                                 x.LastName == userRegisterModel.LastName &&
                                                                                 x.WorkflowState != Constants.WorkflowStates.Removed);

                    if (worker != null)
                    {
                        worker.IsLocked = true;
                        await worker.Update(sdkDbContext);
                    }
                }

                return(new OperationResult(true,
                                           _localizationService.GetStringWithFormat("UserUserNameWasCreated", user.UserName)));
            }
            catch (Exception exception)
            {
                _logger.LogError(exception.Message);
                return(new OperationResult(false, _localizationService.GetString("ErrorWhileCreatingUser")));
            }
        }
Example #10
0
        public static async Task SeedAdmin(AdminSetupModel adminSetupModel, string defaultLocale, BaseDbContext dbContext)
        {
            var userStore = new UserStore <EformUser,
                                           EformRole,
                                           BaseDbContext,
                                           int,
                                           IdentityUserClaim <int>,
                                           EformUserRole,
                                           IdentityUserLogin <int>,
                                           IdentityUserToken <int>,
                                           IdentityRoleClaim <int> >(dbContext);

            IPasswordHasher <EformUser> hasher = new PasswordHasher <EformUser>();
            var validator  = new UserValidator <EformUser>();
            var validators = new List <UserValidator <EformUser> > {
                validator
            };
            var userManager = new UserManager <EformUser>(userStore, null, hasher, validators, null, null, null,
                                                          null, null);

            // Set-up token providers.
            IUserTwoFactorTokenProvider <EformUser> tokenProvider = new EmailTokenProvider <EformUser>();

            userManager.RegisterTokenProvider("Default", tokenProvider);
            IUserTwoFactorTokenProvider <EformUser> phoneTokenProvider =
                new PhoneNumberTokenProvider <EformUser>();

            userManager.RegisterTokenProvider("PhoneTokenProvider", phoneTokenProvider);

            // Roles
            var roleStore   = new RoleStore <EformRole, BaseDbContext, int>(dbContext);
            var roleManager = new RoleManager <EformRole>(roleStore, null, null, null, null);

            if (!await roleManager.RoleExistsAsync(EformRole.Admin))
            {
                await roleManager.CreateAsync(new EformRole { Name = EformRole.Admin });
            }
            if (!await roleManager.RoleExistsAsync(EformRole.User))
            {
                await roleManager.CreateAsync(new EformRole { Name = EformRole.User });
            }

            // Seed admin and demo users
            var timeZoneString = "Europe/Copenhagen";

            try
            {
                TimeZoneInfo.FindSystemTimeZoneById(timeZoneString);
            }
            catch
            {
                timeZoneString = "E. Europe Standard Time";
            }
            var adminUser = new EformUser
            {
                UserName                     = adminSetupModel.Email,
                Email                        = adminSetupModel.Email,
                FirstName                    = adminSetupModel.FirstName,
                LastName                     = adminSetupModel.LastName,
                Locale                       = string.IsNullOrEmpty(defaultLocale) ? LocaleNames.English : defaultLocale,
                TimeZone                     = timeZoneString,
                DarkTheme                    = true,
                Formats                      = LocaleNames.German,
                EmailConfirmed               = true,
                TwoFactorEnabled             = false,
                IsGoogleAuthenticatorEnabled = false
            };

            if (!userManager.Users.Any(x => x.Email.Equals(adminUser.Email)))
            {
                var createResult = await userManager.CreateAsync(adminUser,
                                                                 adminSetupModel.Password);

                if (!createResult.Succeeded)
                {
                    throw new Exception("Could not create the user");
                }
            }

            var user = userManager.Users.FirstOrDefault(x => x.Email.Equals(adminUser.Email));

            if (!await userManager.IsInRoleAsync(user, EformRole.Admin))
            {
                await userManager.AddToRoleAsync(user, EformRole.Admin);
            }
        }
Example #11
0
 public Task AddPasswordAsync(EformUser user, string password)
 {
     return(_userManager.AddPasswordAsync(user, password));
 }
        public async Task <OperationResult> Create(UserRegisterModel userRegisterModel)
        {
            try
            {
                if (userRegisterModel.Role != EformRole.Admin && userRegisterModel.Role != EformRole.User)
                {
                    return(new OperationResult(false,
                                               _localizationService.GetString("RoleNotFound")));
                }

                var userResult = await _userManager.FindByNameAsync(userRegisterModel.Email);

                if (userResult != null)
                {
                    return(new OperationResult(false,
                                               _localizationService.GetStringWithFormat("UserUserNameAlreadyExist", userRegisterModel.Email)));
                }

                if (userRegisterModel.Role != EformRole.Admin && !_dbContext.SecurityGroups.Any(x => x.Id == userRegisterModel.GroupId))
                {
                    return(new OperationResult(false,
                                               _localizationService.GetString("SecurityGroupNotFound")));
                }

                var user = new EformUser
                {
                    Email                        = userRegisterModel.Email,
                    UserName                     = userRegisterModel.Email,
                    FirstName                    = userRegisterModel.FirstName,
                    LastName                     = userRegisterModel.LastName,
                    EmailConfirmed               = true,
                    TwoFactorEnabled             = false,
                    IsGoogleAuthenticatorEnabled = false
                };

                var result = await _userManager.CreateAsync(user, userRegisterModel.Password);

                if (!result.Succeeded)
                {
                    return(new OperationResult(false, string.Join(" ", result.Errors.Select(x => x.Description).ToArray())));
                }

                // change role
                await _userManager.AddToRoleAsync(user, userRegisterModel.Role);

                // add to group
                if (userRegisterModel.GroupId > 0 && user.Id > 0 && userRegisterModel.Role != EformRole.Admin)
                {
                    var securityGroupUser = new SecurityGroupUser()
                    {
                        SecurityGroupId = (int)userRegisterModel.GroupId,
                        EformUserId     = user.Id
                    };
                    _dbContext.SecurityGroupUsers.Add(securityGroupUser);
                    await _dbContext.SaveChangesAsync();
                }

                return(new OperationResult(true,
                                           _localizationService.GetStringWithFormat("UserUserNameWasCreated", user.UserName)));
            }
            catch (Exception exception)
            {
                _logger.LogError(exception.Message);
                return(new OperationResult(false, _localizationService.GetString("ErrorWhileCreatingUser")));
            }
        }