public override async Task Process(IXFireClient context) { var loginChallenge = new LoginChallenge(); await loginChallenge.Process(context); await context.SendMessage(loginChallenge); }
public void Process(Context context) { var loginChallenge = new LoginChallenge(); loginChallenge.Process(context); context.SendMessage(loginChallenge); }
public override void Process(XFireClient context) { var loginChallenge = new LoginChallenge(); loginChallenge.Process(context); context.SendMessage(loginChallenge); }
static void BeginReceiveWorldNameCallback(IAsyncResult ar) { try { if (_clientSocket == null) { return; } var count = _clientSocket.EndReceive(ar); if (count <= 0) { return; } // The first message the client sends to the game server is the world name without a length. // Read from the socket one byte at a time until the end of the string (\n) is read. while (_clientBuffer[count - 1] != Convert.ToByte('\n')) { var read = _clientSocket.Receive(_clientBuffer, count, 1, SocketFlags.None); if (read <= 0) { throw new Exception("Client connection broken."); } count += read; } // Confirm that the client is trying to connect to us by checking the world name. var worldName = Encoding.UTF8.GetString(_clientBuffer, 0, count - 1); if (!worldName.Equals(OxWorldName, StringComparison.CurrentCultureIgnoreCase)) { throw new Exception($"World name does not match `{OxWorldName}`: {worldName}"); } var loginChallengeMessage = new NetworkMessage(_client) { SequenceNumber = 0 }; var loginChallengePacket = new LoginChallenge(_client) { Timestamp = (uint)DateTime.Now.Subtract(new DateTime(1970, 1, 1, 0, 0, 0)).TotalSeconds, Random = 0xFF }; loginChallengePacket.AppendToNetworkMessage(loginChallengeMessage); SendToClient(loginChallengeMessage); _clientSocket.BeginReceive(_clientBuffer, 0, 2, SocketFlags.None, new AsyncCallback(BeginReceiveClientCallback), null); } catch (Exception ex) { Console.WriteLine(ex); } }
public HttpResponseMessage Post([FromBody] LoginChallenge challenge) { // return error if password is not correct if (!this.IsPasswordValid(challenge.Username, challenge.Password)) { return(this.Request.CreateUnauthorizedResponse()); } JwtSecurityToken token = this.GetAuthenticationTokenForUser(challenge.Username); return(this.Request.CreateResponse(HttpStatusCode.OK, new { Token = token.RawData, Username = challenge.Username })); }
private void protocol(SslStream sslStream) { //sslStream.ReadTimeout = 5000; //sslStream.WriteTimeout = 5000; /* User authentication */ UserData userData = null; object req = null; req = Util.readObject(sslStream); if (req is LoginRequest) { var lr = (LoginRequest)req; log(Util.XmlSerializeToString(lr)); userData = serverData.users.Find(x => x.username == lr.username); if (userData==null) { log("Login failed: unknown user"); return; } LoginChallenge lc = new LoginChallenge() { passwordSalt = userData.passwordSalt }; Util.writeObject(sslStream, lc); log(Util.XmlSerializeToString(lc)); } else { log("Login failed: did not receive loginRequest"); return; } req = Util.readObject(sslStream); if (req is LoginResponse) { var lr = (LoginResponse)req; log(Util.XmlSerializeToString(lr)); if (lr.passwordHash != userData.passwordHash) { log("Login failed: different password hash"); } var lc = new LoginConfirmation() { encryptedPrivateKey = userData.encryptedPrivateKey, privateIV = userData.privateIV, KEKSalt = userData.KEKSalt }; foreach(var x in serverData.users) { lc.permission.Add(new UserPublicKey() { username = x.username, publicKey = x.publicKey}); } Util.writeObject(sslStream, lc); log(Util.XmlSerializeToString(lc)); } else { log("Login failed: did not receive loginRequest"); return; } log("Login successfull"); /* User is now authenticated. */ while (true) { req = Util.readObject(sslStream); if(req is ReadCalendarRequest) { ReadCalendarRequest read = (ReadCalendarRequest)req; var calendarName = read.calendarName; SecureCalendar sc = serverData.calendars.Find(c => c.name == calendarName); if(sc == null) { log("Read calendar invalid"); return; } var efek = sc.keys.Find(x => x.username == userData.username); if(efek == null) { log("Read calendar invlalid"); return; } Util.writeObject(sslStream, sc); log("Read successfull"); }else if(req is SecureCalendar) { SecureCalendar newCalendar = (SecureCalendar)req; SecureCalendar oldCalendar = serverData.calendars.Find(c => c.name == newCalendar.name); if (oldCalendar == null) { log("Write calendar invalid"); return; } var efek = oldCalendar.keys.Find(x => x.username == userData.username); if (efek == null) { log("Read calendar invlalid"); return; } serverData.calendars.Add(newCalendar); serverData.calendars.Remove(oldCalendar); log("Write successfull"); // TODO check if permitions where changed } else { var m = "null"; if (req != null) m = req.GetType().ToString(); logF("Protocol failed: received unexpected message type:{0}", m); } } }