public IActionResult Login([FromBody] LogInAttempt data) { if (data.email != null && data.password != null) { try { var user = _context.Users.FirstOrDefault(a => a.Email == data.email); if (user != null) { string hashedPasswordAttempt = PasswordConverter.Encrypt(data.password); var actualPassword = user.HashedPassword; if (actualPassword == hashedPasswordAttempt) { LoggedInUserVM viewModel = GetUserInfoFromUser(user); return(Ok(viewModel)); } else { return(Unauthorized()); } } else { return(NotFound()); } } catch { throw new System.Web.Http.HttpResponseException(System.Net.HttpStatusCode.InternalServerError); } } else { return(NoContent()); } }
public override async Task ConnectAndLogIn(LogInAttempt request, IServerStreamWriter <Event> responseStream, ServerCallContext context) { { var name = request.Username; var pw = request.Password; if (string.IsNullOrEmpty(name) || string.IsNullOrEmpty(pw)) { await responseStream.WriteAsync(login_failed); return; } Guid permanent_id; if (!await auth.GetPermanentId(name, pw, out permanent_id)) { await responseStream.WriteAsync(login_failed); return; } var out_stream = MTNetOutStream <Event> .Create(context, responseStream); if (!await player_store.AddPlayer(permanent_id, out_stream)) { await responseStream.WriteAsync(login_failed); return; } { var ev = new Event { LoginResult = new EventLoginResult { Success = true, Token = permanent_id.ToString() } }; ev.LoginResult.Servers.AddRange(server_credentials); await responseStream.WriteAsync(ev); } for (; ;) { try { if (!await out_stream.SendCurrentEvents()) { break; } await Task.Delay(100); } catch (InvalidOperationException) { //Happens when cancellation token is set to true break; } catch (RpcException) { break; //This is expected to happen when user logs out } catch (Exception e) { Log.Exception(e); break; } } out_stream.Nullify(); await PlayerStore.RemovePlayerAndTellInstanceServer(player_store, permanent_id, instance_servers); } }