Beispiel #1
0
        public void OnAuthorization(AuthorizationFilterContext context)
        {
            var usingToken = context.HttpContext.Request.Headers.TryGetValue("Authorization", out StringValues token);

            if (usingToken && !ValidTokens.IsValid(token))
            {
                context.Result = new UnauthorizedResult();
            }

            if (usingToken)
            {
                context.HttpContext.Items["userId"] = ValidTokens.GetUserId(token);
            }
        }
Beispiel #2
0
        public void Logout()
        {
            _signInManager.SignOutAsync().Wait();

            // Clear the existing external cookie to ensure a clean login process
            HttpContext.SignOutAsync(IdentityConstants.ExternalScheme).Wait();

            var isAuthorized = HttpContext.Request.Headers.TryGetValue("Authorization", out StringValues token);

            if (!isAuthorized)
            {
                throw new ApplicationException(ExceptionMessages.InternalServerError);
            }

            ValidTokens.Remove(token);
        }
Beispiel #3
0
        public LogOnDto Login([FromBody] LoginAccountDto model)
        {
            var result = _signInManager.PasswordSignInAsync(model.Email, model.Password, false, false).Result;

            if (!result.Succeeded)
            {
                throw new ApplicationException(ExceptionMessages.LoginFailed);
            }

            var    appUser = _userManager.Users.SingleOrDefault(user => user.Email == model.Email);
            string token   = GenerateJwtToken(model.Email, appUser);
            int    userId  = appUser.Id;
            string logo    = string.Empty;

            using (var dbContext = new ApplicationDbContext())
            {
                if (!_userManager.IsInRoleAsync(appUser, Roles.Client).Result)
                {
                    // Es una clinica o un empleado de la clinica
                    if (_userManager.IsInRoleAsync(appUser, Roles.Employee).Result)
                    {
                        var employee = dbContext.Clinic_Employees.FirstOrDefault(e => e.UserId == appUser.Id);
                        userId = employee.OwnerUserId;
                    }

                    var clinic = dbContext.Clinics.FirstOrDefault(c => c.UserId == userId);
                    logo = clinic.Logo;
                }
                if (_userManager.IsInRoleAsync(appUser, Roles.Client).Result)
                {
                    var client = dbContext.Clinic_Clients.FirstOrDefault(c => c.UserId == userId);
                    logo = client.Logo;
                }
            }

            ValidTokens.Add($"{JwtBearerDefaults.AuthenticationScheme} {token}", userId);

            return(new LogOnDto
            {
                Token = token,
                Logo = logo
            });
        }
Beispiel #4
0
        public LogOnDto LoginFacebook([FromBody] LoginFacebookDto model)
        {
            using (var dbContext = new ApplicationDbContext())
            {
                var client = dbContext.Clinic_Clients.FirstOrDefault(c => c.User.Email == model.Email);

                // Si client es null, el usuario no esta registrado. Si es distinto de null, ya esta registrado.
                if (client == null)
                {
                    // Registrar cliente
                    if (!_roleManager.RoleExistsAsync(Roles.Client).Result)
                    {
                        throw new ApplicationException(ExceptionMessages.RolesHaveNotBeenCreated);
                    }

                    var user = new ApplicationUser
                    {
                        UserName = model.Email,
                        Email    = model.Email
                    };

                    var result = _userManager.CreateAsync(user, Guid.NewGuid().ToString()).Result;

                    if (!result.Succeeded)
                    {
                        throw new ApplicationException(ExceptionMessages.UsernameAlreadyExists);
                    }

                    var applicationUser = _userManager.Users.SingleOrDefault(au => au.Email == model.Email);

                    result = _userManager.AddToRoleAsync(applicationUser, Roles.Client).Result;

                    if (!result.Succeeded)
                    {
                        throw new ApplicationException(ExceptionMessages.InternalServerError);
                    }

                    client = new Clinic_Client
                    {
                        UserId         = applicationUser.Id,
                        Logo           = "",
                        FacebookUserId = model.UserId
                    };

                    dbContext.Clinic_Clients.Add(client);
                    dbContext.SaveChanges();
                }

                // Chequeo que el FacebookUserId sea correcto
                if (client.FacebookUserId != model.UserId)
                {
                    throw new ApplicationException(ExceptionMessages.BadRequest);
                }

                // Logueo al usuario
                var    appUser = _userManager.Users.SingleOrDefault(user => user.Email == model.Email);
                string token   = GenerateJwtToken(model.Email, appUser);
                int    userId  = appUser.Id;

                if (!_userManager.IsInRoleAsync(appUser, Roles.Client).Result)
                {
                    throw new ApplicationException(ExceptionMessages.BadRequest);
                }

                ValidTokens.Add($"{JwtBearerDefaults.AuthenticationScheme} {token}", userId);

                return(new LogOnDto
                {
                    Token = token,
                    Logo = client.Logo
                });
            }
        }