public void SetPassword(string password) { var hash = Md5Util.HashString(password); Plugin.Config.PassHash = Convert.ToBase64String(hash); Plugin.Config.Save(); Context.Respond("Password set, reload the RCON server to apply changes."); }
private void Authenticate(RconClient sender, RconPacket packet) { var hash = Md5Util.HashString(packet.Body); if (_pwHash != null && hash.SequenceEqual(_pwHash)) { Log.Info($"{sender.RemoteEndPoint}: Authorized"); sender.SendPacket(new RconPacket(packet.Id, PacketType.SERVERDATA_AUTHRESPONSE, string.Empty)); sender.IsAuthed = true; } else { Log.Warn($"{sender.RemoteEndPoint}: Incorrect password attempt"); sender.SendPacket(new RconPacket(-1, PacketType.SERVERDATA_AUTHRESPONSE, string.Empty)); sender.IsAuthed = false; } }
private void Authenticate(RconClient sender, RconPacket packet) { var hash = Md5Util.HashString(packet.Body); if (_pwHash != null && hash.SequenceEqual(_pwHash)) { Log.Info($"{sender.RemoteEndPoint}: Authorized"); // Necessary to send an empty RESPONSE_VALUE before sending the AUTHRESPONSE, otherwise most RCON clients don´t realize AUTH has been successfully. // See https://developer.valvesoftware.com/wiki/Source_RCON_Protocol#SERVERDATA_AUTH_RESPONSE // >> When the server receives an auth request, it will respond with an empty SERVERDATA_RESPONSE_VALUE, followed immediately by a SERVERDATA_AUTH_RESPONSE indicating whether authentication succeeded or failed. sender.SendPacket(new RconPacket(packet.Id, PacketType.SERVERDATA_RESPONSE_VALUE, string.Empty)); sender.SendPacket(new RconPacket(packet.Id, PacketType.SERVERDATA_AUTHRESPONSE, string.Empty)); sender.IsAuthed = true; } else { Log.Warn($"{sender.RemoteEndPoint}: Incorrect password attempt"); sender.SendPacket(new RconPacket(packet.Id, PacketType.SERVERDATA_RESPONSE_VALUE, string.Empty)); // same here by definition although most clients realized the wrong AUTH info sender.SendPacket(new RconPacket(-1, PacketType.SERVERDATA_AUTHRESPONSE, string.Empty)); sender.IsAuthed = false; } }
public void SetPassword(string password) { _pwHash = Md5Util.HashString(password); }