public Task <ICommandResult> Handle(TokenUserCommand command, CancellationToken cancellationToken) { var user = _userManager.FindByNameAsync(command.Email).Result; if (user == null) { return(CanceledTask(_bus.RaiseEvent(new DomainNotification(command.MessageType, "O usuário informado não está cadastrado.")))); } if (user.UserStatus.Equals(EUserStatus.Pending)) { return(CanceledTask(_bus.RaiseEvent(new DomainNotification(command.MessageType, "A conta encontra-se pendente, aguarde a ativação da sua conta!")))); } var resultSignIn = _signInManager .CheckPasswordSignInAsync(user, command.Password, false) .Result.Succeeded; if (!resultSignIn) { return(CanceledTask(_bus.RaiseEvent(new DomainNotification(command.MessageType, "Senha inválida.")))); } var roles = _userManager.GetRolesAsync(user).Result; return(CompletedTask((_tokenService.CreateToken(GenericUserId(user), user, roles, UserName(user))))); }
public async Task <IActionResult> Token([FromBody] TokenUserCommand tokenUserCommand) { var email = tokenUserCommand.Email; var password = tokenUserCommand.Password; try { // Check the password but don't "sign in" (which would set a cookie) var user = await _signInManager.UserManager.FindByEmailAsync(email); if (user == null) { return(Ok("Login failed")); } var result = await _signInManager.CheckPasswordSignInAsync(user, password, lockoutOnFailure : false); if (result.Succeeded) { var principal = await _signInManager.CreateUserPrincipalAsync(user); var token = new JwtSecurityToken( "SignalRAuthenticationSample", "SignalRAuthenticationSample", principal.Claims, expires: DateTime.UtcNow.AddDays(30), signingCredentials: SigningCreds); var writtenToken = _tokenHandler.WriteToken(token); if (HttpContext.Request.Cookies["Token"] == null || HttpContext.Request.Cookies["UserName"] != email) { var cookieOptions = new CookieOptions(); cookieOptions.Expires = DateTime.Now.AddDays(30); HttpContext.Response.Cookies.Append("Token", writtenToken, cookieOptions); HttpContext.Response.Cookies.Append("UserName", email, cookieOptions); } return(Ok(writtenToken)); } else { var error = result.IsLockedOut ? "User is locked out" : "Login failed"; return(Ok(error)); } } catch (Exception ex) { var error = ex.ToString(); return(Ok(error)); } }
private async void ConnectButton_Click(object sender, RoutedEventArgs e) { connectButton.IsEnabled = false; var email = emailTextBox.Text; var password = passwordBox.Password; if (string.IsNullOrWhiteSpace(email) || string.IsNullOrWhiteSpace(password)) { messagesList.Items.Add("Email or Password are blank."); return; } _connection = new HubConnectionBuilder() .WithUrl($"{_settings.BaseAddress}ChatHub?ClientType=PC", options => { options.AccessTokenProvider = async() => { var tokenUserCommand = new TokenUserCommand { Email = emailTextBox.Text, Password = passwordBox.Password }; var token = await RestService.PostAsync <string>("account/token", tokenUserCommand); return(token); }; }) .Build(); _connection.Closed += async(error) => { await Task.Delay(new Random().Next(0, 5) * 1000); await _connection.StartAsync(); }; _ = _connection.On <string>("ReceiveChatMessage", (userAndMessage) => { Dispatcher.Invoke(() => { var newMessage = userAndMessage; messagesList.Items.Add(newMessage); }); }); _connection.On <string>("SendLargeDataAsync", (user) => { _ = Dispatcher.Invoke(async() => { try { // Get large json from https://next.json-generator.com var currentDirectory = Directory.GetCurrentDirectory(); //var jsonData = await File.ReadAllTextAsync(currentDirectory + "\\..\\..\\..\\test25.json"); var jsonData = await File.ReadAllTextAsync(currentDirectory + "\\..\\..\\..\\test100.json"); var numberOfBytes = Encoding.Default.GetByteCount(jsonData); var newMessage = $"Sending large data to User:{user}, Bytes: {numberOfBytes}"; messagesList.Items.Add(newMessage); var submitLargeDataCommand = new SubmitLargeDataCommand { User = user, JsonData = jsonData }; await RestService.PostAsync("LargeData/SubmitLargeData", submitLargeDataCommand); } catch (Exception ex) { var message = ex.Message; throw; } }); }); try { await _connection.StartAsync(); messagesList.Items.Add("Connection started"); sendButton.IsEnabled = true; } catch (Exception ex) { messagesList.Items.Add(ex.Message); connectButton.IsEnabled = true; } }
public IActionResult Token([FromBody] TokenUserCommand command) => Response(bus.SendCommand(command).Result);