internal void ChangeName(string oldname, string newname) { newname = newname.FormatUsername(); if (string.IsNullOrWhiteSpace(newname)) { newname = ExternalIp.AnonUsername(); } if (oldname != newname) { name = newname; RaisePropertyChanged(nameof(Name)); server.SendPacket((s) => s != this && s.Vroom == Vroom && s.CanSee(this), new Parted() { Username = oldname }); PerformQuickLogin(); } }
public bool Equals(MarsChannel other) { if (other is null) { return(false); } return(ExternalIp.ToString() == other.ExternalIP && Name == other.Name); }
public bool Equals(AresChannel other) { if (other is null) { return(false); } return(ExternalIp.Equals(other.ExternalIp) && Name == other.Name); }
public bool Equals(AresChannel other) { if (other == null) { return(false); } return(ExternalIp.Equals(other.ExternalIp) && Port == other.Port); }
internal void HandleJoin(PacketEventArgs e) { Login login = (Login)e.Packet; Guid = login.Guid; Encryption = login.Encryption == 250; ListenPort = login.ListenPort; NodeIp = login.NodeIp; NodePort = login.NodePort; name = login.Username.FormatUsername(); if (string.IsNullOrWhiteSpace(name)) { name = ExternalIp.AnonUsername(); } orgname = name; Version = login.Version; LocalIp = login.LocalIp; Browsable = (login.SupportFlag & 2) == 2; Compression = (login.SupportFlag & 4) == 4; Age = login.Age; Gender = login.Gender; Country = login.Country; Region = login.Region; Features = login.Features; if ((Features & ClientFeatures.OPUS_VOICE) == ClientFeatures.OPUS_VOICE) { Features |= ClientFeatures.VOICE; } if ((Features & ClientFeatures.PRIVATE_OPUS_VOICE) == ClientFeatures.PRIVATE_OPUS_VOICE) { Features |= ClientFeatures.PRIVATE_VOICE; } var record = server.History.Add(this); var autologin = server.History.Admin.Passwords.Find((s) => s.ClientId.Equals(record)); admin = (autologin != null) ? autologin.Level : admin; admin = (LocalHost) ? AdminLevel.Host : admin; if (admin != AdminLevel.User) { RaisePropertyChanged("Admin"); } if (!LocalHost) { DnsHelper.Resolve(record, FinishResolve); } else if (AllowedJoin(record)) { FinishJoin(); } }
internal void HandleJoin(PacketEventArgs e) { Login login = (Login)e.Packet; Guid = login.Guid; ClientId = new ClientId(Guid, ExternalIp); Encryption = login.Encryption == 250; ListenPort = login.ListenPort; NodeIp = login.NodeIp; NodePort = login.NodePort; name = login.Username.FormatUsername(); if (string.IsNullOrWhiteSpace(name)) { name = ExternalIp.AnonUsername(); } OrgName = name; Version = login.Version; LocalIp = login.LocalIp; Age = login.Age; Gender = login.Gender; Country = login.Country; Region = login.Region; HandleFeatures(login); var record = server.History.Add(this); var autologin = server.History.Admin.Passwords.Find((s) => s.ClientId.Equals(record.ClientId)); admin = (autologin != null) ? autologin.Level : admin; admin = (LocalHost) ? AdminLevel.Host : admin; if (AllowedJoin(record)) { if (server.Config.BotProtection) { if (!record.Trusted) { IsCaptcha = true; return; } } FinishJoin(); } else { server.Stats.Rejected++; } }
public string ToPlainText() { return(string.Format("Chatroom:{0}:{1}|{2}", ExternalIp.ToString(), Port, Name)); //future? //return string.Format("Chatroom:{0}:{1}|{2}", string.IsNullOrEmpty(Domain) ? ExternalIp.ToString() : Domain, Port, Name); }
public bool Equals(MarsChannel other) { return(ExternalIp.ToString() == other.ExternalIP && Port == (ushort)other.Port); }
/* * NOTICE -- Occurs before "LoggedIn" is set to true. "AresServer.SendPacket" will fail */ private bool AllowedJoin(Record record) { if (this.Guid.Equals(Guid.Empty)) { return(Rejected(new Announce(Errors.InvalidLogin), RejectReason.InvalidLogin)); } //let onjoincheck run for host but ignore its return if (!server.PluginHost.OnJoinCheck(this) && !LocalHost) { return(Rejected(new Error(Errors.Rejected), RejectReason.Plugins)); } // check bans if (!LocalHost) { if (server.History.Bans.Contains((s) => s.Equals(record))) { return(Rejected(new Error(Errors.Banned), RejectReason.Banned)); } if (server.History.RangeBans.Contains((s) => s.IsMatch(ExternalIp.ToString()))) { return(Rejected(new Error(Errors.RangeBanned), RejectReason.RangeBanned)); } } //check name hijacking int count = 1; foreach (var user in server.Users) { if (user != this) { if (user.Name == Name) { return(Rejected(new Announce(Errors.NameTaken), RejectReason.NameTaken)); } else if (user.ExternalIp.Equals(Socket.RemoteEndPoint.Address)) { count++; } } if (count > server.Config.MaxClones) { return(Rejected(new Error(String.Format(Errors.Clones, Socket.RemoteEndPoint.Address)), RejectReason.TooManyBots)); } } //Disconnect ghosts after the Name hijack check //this prevents an infinite loop in case you open 2 tabs to the same room with the same name //the second join will not boot the first one, this can cause a delay in ghost detection but it's minimal foreach (var user in server.Users) { if (user != this && user.Guid.Equals(this.Guid)) { user.Disconnect(); } } return(true); }
/* * NOTICE -- Occurs before "LoggedIn" is set to true. "AresServer.SendPacket" will fail */ private bool AllowedJoin(IRecord record) { if (this.Guid.Equals(Guid.Empty)) { socket.SendAsync(new Announce(Errors.InvalidLogin)); server.PluginManager.OnJoinRejected(this, RejectReason.InvalidLogin); Disconnect(); return(false); } //let onjoincheck run for host but ignore its return if (!server.PluginManager.OnJoinCheck(this) && !LocalHost) { socket.SendAsync(new Announce(Errors.Rejected)); server.PluginManager.OnJoinRejected(this, RejectReason.Plugins); Disconnect(); return(false); } // check bans if (!LocalHost) { if (server.History.Bans.Contains((s) => s.Equals(record))) { socket.SendAsync(new Error(Errors.Banned)); server.PluginManager.OnJoinRejected(this, RejectReason.Banned); Disconnect(); return(false); } if (server.History.RangeBans.Contains((s) => s.IsMatch(ExternalIp.ToString()))) { socket.SendAsync(new Error(Errors.RangeBanned)); server.PluginManager.OnJoinRejected(this, RejectReason.RangeBanned); Disconnect(); return(false); } if (DnsEntry != null && server.History.DnsBans.Contains((s) => s.IsMatch(DnsEntry.HostName))) { socket.SendAsync(new Error(Errors.DnsBanned)); server.PluginManager.OnJoinRejected(this, RejectReason.DnsBanned); Disconnect(); return(false); } } //check name hijacking int count = 1; foreach (var user in server.Users) { if (user != this) { if (user.Name == Name) { socket.SendAsync(new Announce(Errors.NameTaken)); server.PluginManager.OnJoinRejected(this, RejectReason.NameTaken); Disconnect(); return(false); } else if (user.ExternalIp.Equals(socket.RemoteEndPoint.Address)) { count++; } } if (count > server.Config.MaxClones) { socket.SendAsync(new Error(String.Format(Errors.Clones, socket.RemoteEndPoint.Address))); server.PluginManager.OnJoinRejected(this, RejectReason.TooManyBots); Disconnect(); return(false); } } //Disconnect ghosts after the Name hijack check foreach (var user in server.Users) { if (user != this && user.Guid.Equals(this.Guid)) { user.Disconnect(); } } return(true); }