public async Task <AdminUserDetailsVM> Create(RegisterAdminUser10 user)
        {
            try
            {
                var admin = await _userManager.FindByIdAsync(user.AdminId);

                if (admin == null)
                {
                    throw new Exception("Could not find the active user.");
                }

                var adminResult = await _userManager.VerifyUserTokenAsync(admin, "Default", "authentication-backend", user.AdminToken);

                if (!adminResult)
                {
                    throw new Exception("Could not verify the active user.");
                }

                if (_userManager.FindByNameAsync(user.UserName).Result != null)
                {
                    throw new Exception("This username is already in use.");
                }

                if (user.Password != user.ComparePassword)
                {
                    throw new Exception("The passwords does not match.");
                }

                var appUser = new AppUser10
                {
                    UserName      = user.UserName,
                    FirstName     = user.FirstName,
                    LastName      = user.LastName,
                    Age           = user.Age,
                    Email         = user.Email,
                    SecurityStamp = user.SecurityStamp,
                    IsAdmin       = user.IsAdmin
                };

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

                if (result.Succeeded)
                {
                    var roles = await _roleManager.Roles.ToListAsync();

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

                    roles.ForEach(x => roleNames.Add(x.Name));

                    var newUser = await _userManager.FindByNameAsync(user.UserName);

                    _ = user.IsAdmin == true ? await _userManager.AddToRolesAsync(newUser, roleNames)
                        : await _userManager.AddToRoleAsync(newUser, "NormalUser");

                    AdminUserDetailsVM userVM = new AdminUserDetailsVM
                    {
                        AdminId       = admin.Id,
                        FrontEndToken = VerificationToken(),
                        AdminToken    = await UserToken(admin),
                        User          = new DetailsVM
                        {
                            UserId    = newUser.Id,
                            UserName  = newUser.UserName,
                            FirstName = newUser.FirstName,
                            LastName  = newUser.LastName,
                            Age       = newUser.Age,
                            Email     = newUser.Email,
                            Roles     = new List <string>(roleNames),
                            IsAdmin   = newUser.IsAdmin
                        }
                    };

                    return(userVM);
                }
                else
                {
                    throw new Exception("Something went wrong. Please check all inputs and then try again.");
                }
            }
            catch (Exception ex)
            {
                AdminUserDetailsVM userVM = new AdminUserDetailsVM
                {
                    ErrorMessage = ex.Message
                };

                return(userVM);
            }
        }
 /// <summary>
 /// Used for general token-generation for verification on the back-end.
 /// </summary>
 private async Task <string> UserToken(AppUser10 user)
 {
     return(await _userManager.GenerateUserTokenAsync(user, "Default", "authentication-backend"));
 }
Пример #3
0
        internal static void Initializer(AllAssignmentsDbContext context, UserManager <AppUser10> userManager, RoleManager <IdentityRole> roleManager)
        {
            context.Database.EnsureCreated();

            #region Roles

            if (!roleManager.RoleExistsAsync("Administrator").Result)
            {
                var role = new IdentityRole("Administrator");

                roleManager.CreateAsync(role).Wait();
            }

            if (!roleManager.RoleExistsAsync("NormalUser").Result)
            {
                var role = new IdentityRole("NormalUser");

                roleManager.CreateAsync(role).Wait();
            }

            #endregion

            #region Users

            if (userManager.FindByNameAsync("Administrator").Result == null)
            {
                var user = new AppUser10()
                {
                    UserName    = "******",
                    FirstName   = "Admin",
                    LastName    = "Pontifex",
                    Age         = 30,
                    Email       = "*****@*****.**",
                    PhoneNumber = "123456789",
                    IsAdmin     = true
                };
                //user.UserToken = userManager.GenerateUserTokenAsync(user, TokenOptions.DefaultAuthenticatorProvider, "Authentication").Result;

                var result = userManager.CreateAsync(user, "Password!23").Result;

                //userManager.SetAuthenticationTokenAsync(user, TokenOptions.DefaultAuthenticatorProvider, "Authentication", user.UserToken).Wait();

                if (result.Succeeded)
                {
                    userManager.AddToRoleAsync(user, "Administrator").Wait();
                    userManager.AddToRoleAsync(user, "NormalUser").Wait();
                }
            }

            if (userManager.FindByNameAsync("NormalUser").Result == null)
            {
                AppUser10 user = new AppUser10()
                {
                    UserName    = "******",
                    FirstName   = "NormalUser",
                    LastName    = "NormalUser",
                    Email       = "*****@*****.**",
                    Age         = 18,
                    PhoneNumber = "987654321",
                    IsAdmin     = false
                };

                //user.UserToken = userManager.GenerateUserTokenAsync(user, TokenOptions.DefaultAuthenticatorProvider, "Authentication").Result;

                var result = userManager.CreateAsync(user, "Password!23").Result;

                //userManager.SetAuthenticationTokenAsync(user, TokenOptions.DefaultAuthenticatorProvider, "Authentication", user.UserToken).Wait();

                if (result.Succeeded)
                {
                    userManager.AddToRoleAsync(user, "NormalUser").Wait();
                }
            }

            #endregion

            #region Assignment10

            if (!context.Countries.Any())
            {
                var countries = new Country[]
                {
                    new Country()
                    {
                        Name = "Sweden", Population = "10 301 210"
                    },
                    new Country()
                    {
                        Name = "Denmark", Population = "5 512 563"
                    },
                    new Country()
                    {
                        Name = "Norway", Population = "5 123 643"
                    }
                };

                context.Countries.AddRange(countries);

                context.SaveChanges();

                if (!context.Cities.Any())
                {
                    var cities = new City[]
                    {
                        new City()
                        {
                            Name = "Swedish City 1", Population = "1 123 675", Country = countries[0]
                        },
                        new City()
                        {
                            Name = "Swedish City 2", Population = "654 363", Country = countries[0]
                        },
                        new City()
                        {
                            Name = "Swedish City 3", Population = "364 921", Country = countries[0]
                        },

                        new City()
                        {
                            Name = "Danish City 1", Population = "715 741", Country = countries[1]
                        },
                        new City()
                        {
                            Name = "Danish City 2", Population = "235 631", Country = countries[1]
                        },
                        new City()
                        {
                            Name = "Danish City 3", Population = "134 673", Country = countries[1]
                        },

                        new City()
                        {
                            Name = "Norwegian City 1", Population = "543 421", Country = countries[2]
                        },
                        new City()
                        {
                            Name = "Norwegian City 2", Population = "361 752", Country = countries[2]
                        },
                        new City()
                        {
                            Name = "Norwegian City 3", Population = "134 673", Country = countries[2]
                        },
                    };

                    context.Cities.AddRange(cities);

                    context.SaveChanges();

                    if (!context.People.Any())
                    {
                        var people = new Person[]
                        {
                            new Person()
                            {
                                FirstName = "Swedish Person", LastName = "1", Age = 20, Gender = "Male", Email = "*****@*****.**", PhoneNumber = "123456789", City = cities[0]
                            },
                            new Person()
                            {
                                FirstName = "Swedish Person", LastName = "2", Age = 21, Gender = "Male", Email = "*****@*****.**", PhoneNumber = "123456789", City = cities[0]
                            },
                            new Person()
                            {
                                FirstName = "Swedish Person", LastName = "3", Age = 25, Gender = "Female", Email = "*****@*****.**", PhoneNumber = "123456789", City = cities[1]
                            },
                            new Person()
                            {
                                FirstName = "Swedish Person", LastName = "4", Age = 28, Gender = "Male", Email = "*****@*****.**", PhoneNumber = "123456789", City = cities[1]
                            },
                            new Person()
                            {
                                FirstName = "Swedish Person", LastName = "5", Age = 31, Gender = "Male", Email = "*****@*****.**", PhoneNumber = "123456789", City = cities[2]
                            },
                            new Person()
                            {
                                FirstName = "Swedish Person", LastName = "6", Age = 75, Gender = "Female", Email = "*****@*****.**", PhoneNumber = "123456789", City = cities[2]
                            },

                            new Person()
                            {
                                FirstName = "Danish Person", LastName = "1", Age = 51, Gender = "Female", Email = "*****@*****.**", PhoneNumber = "123456789", City = cities[3]
                            },
                            new Person()
                            {
                                FirstName = "Danish Person", LastName = "2", Age = 69, Gender = "Male", Email = "*****@*****.**", PhoneNumber = "123456789", City = cities[3]
                            },
                            new Person()
                            {
                                FirstName = "Danish Person", LastName = "3", Age = 12, Gender = "Female", Email = "*****@*****.**", PhoneNumber = "123456789", City = cities[4]
                            },
                            new Person()
                            {
                                FirstName = "Danish Person", LastName = "4", Age = 75, Gender = "Male", Email = "*****@*****.**", PhoneNumber = "123456789", City = cities[4]
                            },
                            new Person()
                            {
                                FirstName = "Danish Person", LastName = "5", Age = 43, Gender = "Female", Email = "*****@*****.**", PhoneNumber = "123456789", City = cities[5]
                            },
                            new Person()
                            {
                                FirstName = "Danish Person", LastName = "6", Age = 34, Gender = "Male", Email = "*****@*****.**", PhoneNumber = "123456789", City = cities[5]
                            },

                            new Person()
                            {
                                FirstName = "Norwegian Person", LastName = "1", Age = 51, Gender = "Male", Email = "*****@*****.**", PhoneNumber = "123456789", City = cities[6]
                            },
                            new Person()
                            {
                                FirstName = "Norwegian Person", LastName = "2", Age = 69, Gender = "Male", Email = "*****@*****.**", PhoneNumber = "123456789", City = cities[6]
                            },
                            new Person()
                            {
                                FirstName = "Norwegian Person", LastName = "3", Age = 12, Gender = "Female", Email = "*****@*****.**", PhoneNumber = "123456789", City = cities[7]
                            },
                            new Person()
                            {
                                FirstName = "Norwegian Person", LastName = "4", Age = 75, Gender = "Female", Email = "*****@*****.**", PhoneNumber = "123456789", City = cities[7]
                            },
                            new Person()
                            {
                                FirstName = "Norwegian Person", LastName = "5", Age = 43, Gender = "Female", Email = "*****@*****.**", PhoneNumber = "123456789", City = cities[8]
                            },
                            new Person()
                            {
                                FirstName = "Norwegian Person", LastName = "6", Age = 34, Gender = "Male", Email = "*****@*****.**", PhoneNumber = "123456789", City = cities[8]
                            },
                        };

                        context.People.AddRange(people);

                        context.SaveChanges();
                    }
                }
            }

            #endregion
        }