public async Task <IActionResult> Register([FromBody] RegisterDto registerDto)
        {
            try
            {
                // validation
                if (registerDto == null)
                {
                    return(BadRequest());
                }
                if (!await _roleMgr.RoleExistsAsync(registerDto.Role))
                {
                    String[] acceptedRoles = new String[_roleMgr.Roles.Count()];
                    int      counter       = 0;
                    foreach (IdentityRole role in _roleMgr.Roles.Where(role => !role.ToString().Equals("Admin")))
                    {
                        acceptedRoles[counter] = role.ToString();
                        counter++;
                    }
                    return(BadRequest(String.Join(",", acceptedRoles)));
                }
                if (registerDto.Role.Equals("Admin", StringComparison.CurrentCultureIgnoreCase))
                {
                    return(BadRequest());
                }
                if (await _userManager.FindByEmailAsync(registerDto.Email) != null)
                {
                    return(BadRequest("Email already exists"));
                }


                // register user
                var user = new PracticaUser
                {
                    UserName = registerDto.Email,
                    Email    = registerDto.Email
                };

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

                var roleResult = await _userManager.AddToRoleAsync(user, registerDto.Role);

                if (result.Succeeded && roleResult.Succeeded)
                {
                    return(Ok(await CreateToken(user)));
                }
            }
            catch (Exception ex)
            {
                _logger.LogError($"Exception thorwn while registering : {ex}");
            }

            return(BadRequest("Failed to register"));
        }
        public async Task <Object> CreateToken(PracticaUser user)
        {
            try
            {
                if (user != null)
                {
                    var claims = new List <Claim>
                    {
                        new Claim(JwtRegisteredClaimNames.Sub, user.UserName),
                        new Claim(JwtRegisteredClaimNames.Sid, user.Id),
                        new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
                    };

                    // add roles to claims for autorization
                    var userRoles = await _userManager.GetRolesAsync(user);

                    foreach (var userRole in userRoles)
                    {
                        claims.Add(new Claim(ClaimTypes.Role, userRole));
                    }

                    var key   = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["Token:Key"]));
                    var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

                    var token = new JwtSecurityToken(
                        issuer: _config["Token:Issuer"],
                        audience: _config["Token:Audience"],
                        claims: claims,
                        expires: DateTime.UtcNow.AddMinutes(600),
                        signingCredentials: creds
                        );

                    return(new
                    {
                        token = new JwtSecurityTokenHandler().WriteToken(token)
                    });
                }
            }catch (Exception ex)
            {
                _logger.LogError($"Exception thrown while creating JWT : {ex}");
                throw ex;
            }
            throw new ApplicationException("UNKNOWN_ERROR");
        }
Esempio n. 3
0
        public async Task Seed()
        {
            var user = await _userMgr.FindByNameAsync("testadmin");

            // Add Users
            if (user == null)
            {
                if (!(await _roleMgr.RoleExistsAsync("Admin")))
                {
                    var role = new IdentityRole("Admin");
                    await _roleMgr.CreateAsync(role);
                }
                if (!(await _roleMgr.RoleExistsAsync("Student")))
                {
                    var role = new IdentityRole("Student");
                    await _roleMgr.CreateAsync(role);
                }
                if (!(await _roleMgr.RoleExistsAsync("Teacher")))
                {
                    var role = new IdentityRole("Teacher");
                    await _roleMgr.CreateAsync(role);
                }
                if (!(await _roleMgr.RoleExistsAsync("Company")))
                {
                    var role = new IdentityRole("Company");
                    await _roleMgr.CreateAsync(role);
                }

                // Add admin
                user = new PracticaUser()
                {
                    UserName = "******",
                    Email    = "*****@*****.**"
                };

                var userResult = await _userMgr.CreateAsync(user, "Pp123456#");

                var roleResult = await _userMgr.AddToRoleAsync(user, "Admin");

                //var claimResult = await _userMgr.AddClaimAsync(user, new Claim("SuperUser", "True"));
                if (!userResult.Succeeded || !roleResult.Succeeded)
                {
                    throw new InvalidOperationException("Failed to build admin users and role");
                }

                // Add student
                user = new PracticaUser()
                {
                    UserName = "******",
                    Email    = "*****@*****.**"
                };
                userResult = await _userMgr.CreateAsync(user, "Pp123456#");

                roleResult = await _userMgr.AddToRoleAsync(user, "Student");

                if (!userResult.Succeeded || !roleResult.Succeeded)
                {
                    throw new InvalidOperationException("Failed to build student users and role");
                }

                // Add teacher
                user = new PracticaUser()
                {
                    UserName = "******",
                    Email    = "*****@*****.**"
                };
                userResult = await _userMgr.CreateAsync(user, "Pp123456#");

                roleResult = await _userMgr.AddToRoleAsync(user, "Teacher");

                if (!userResult.Succeeded || !roleResult.Succeeded)
                {
                    throw new InvalidOperationException("Failed to build teacher users and role");
                }

                // Add company
                user = new PracticaUser()
                {
                    UserName = "******",
                    Email    = "*****@*****.**"
                };
                userResult = await _userMgr.CreateAsync(user, "Pp123456#");

                roleResult = await _userMgr.AddToRoleAsync(user, "Company");

                if (!userResult.Succeeded || !roleResult.Succeeded)
                {
                    throw new InvalidOperationException("Failed to build company users and role");
                }
            }

            // Add Activity type
            var activityType = _context.ActivityTypes.FirstOrDefault();

            if (activityType == null)
            {
                ICollection <ActivityType> activityTypes = new List <ActivityType>();
                activityTypes.Add(
                    new ActivityType()
                {
                    Code        = "practica",
                    Description = "practica"
                }
                    );

                activityTypes.Add(
                    new ActivityType()
                {
                    Code        = "curs",
                    Description = "curs"
                }
                    );

                activityTypes.Add(
                    new ActivityType()
                {
                    Code        = "eveniment",
                    Description = "eveniment"
                }
                    );

                _context.ActivityTypes.AddRange(activityTypes);
                _context.SaveChanges();
            }
        }