public async Task <IActionResult> LoginByEmail( [FromBody] AuthEmailBinding binding, [FromServices] UserSecurityService gamerSecurityService, CancellationToken cancellationToken) { var gamer = await _authorizationRepository.GetUserByEmail(binding.Email, binding.GuildId, cancellationToken); if (gamer == null) { throw new ApiException(HttpStatusCode.Forbidden, ErrorCodes.Forbidden, ""); } if (!gamer.IsActive) { throw new ApiException(HttpStatusCode.Forbidden, ErrorCodes.Forbidden, ""); } if (!gamerSecurityService.TestPassword(gamer, binding.Password)) { throw new ApiException(HttpStatusCode.Unauthorized, ErrorCodes.Forbidden, ""); } var sessionId = Guid.NewGuid(); await _authorizationRepository.SaveSession(new Session(sessionId, gamer.Id, 60 * 26, HttpContext.GetIp())); var roles = new List <String>(); if (gamer.Roles != null) { roles.AddRange(gamer.Roles); } // костыль для демо интрефейса :D, надо будет отрефакторить... if (binding.GuildId == Guid.Parse("00000000-0000-4000-0000-000000000003")) { roles.Add("Demo"); } roles.Add(gamer.Rank.ToString().ToLower()); return(Ok(new TokenView { Token = sessionId, GuildId = gamer.GuildId, Roles = roles.Distinct(StringComparer.InvariantCultureIgnoreCase).ToArray() })); }