public async Task <BanData> GetBanAsync(int ban) { return(BanData.FromBan(await _dbContext.Bans .Include(x => x.JobBans) .Include(x => x.SourceNavigation). FirstOrDefaultAsync(x => x.Id == ban))); }
Dictionary <string, object> GetBanData(string target) { var bandataa = new Dictionary <string, object>(); if (banLogs[target] != null) { bandataa.Add("name", banLogs[target].name); bandataa.Add("steamID", banLogs[target].steamID); bandataa.Add("reason", banLogs[target].reason); bandataa.Add("IPs", banLogs[target].IPs); bandataa.Add("expiration", banLogs[target].expiration); } else { if (bannedIPs[target] != null) { BanData bdata = bannedIPs[target]; bandataa.Add("name", bdata.name); bandataa.Add("steamID", bdata.steamID); bandataa.Add("reason", bdata.reason); bandataa.Add("IPs", bdata.IPs); bandataa.Add("expiration", bdata.expiration); } } return(bandataa); }
bool CanConnect(BanData bandata, PlayerSession session, out string reason) { reason = string.Empty; string ipaddress = session.Player.ipAddress; string userid = session.Identity.SteamId.ToString(); if (bandata.steamID == ipaddress) { string reason2 = bandata.reason; int duration = bandata.expiration == 0 ? 0 : Convert.ToInt32(Time.time) - bandata.expiration; UnbanIP(null, ipaddress); BanID(null, session.Identity.SteamId.m_SteamID, reason2, duration); bandata = banLogs[userid]; } if (bandata.expiration != 0 && Convert.ToInt32(LogTime()) >= bandata.expiration) { Unban(null, userid); } else { if (!bandata.IPs.Contains(ipaddress)) { AddIPToUserBan(userid, ipaddress); } if (banLogs[userid] == null) { BanID(null, session.Identity.SteamId.m_SteamID, bandata.reason, bandata.expiration == 0 ? 0 : Convert.ToInt32(Time.time) - bandata.expiration); } reason = bandata.expiration == 0 ? GetMessage("MessageDenyConnection", userid) : GetMessage("MessageDenyConnectionTemp", userid); return(false); } return(true); }
void ExecuteBan(object sourcePlayer, string targetID, string targetName, string targetIP, string reason, int duration) { BanData bandata = new BanData(targetID, reason, targetName, targetIP, duration); if (banLogs[targetID] != null) { storedData.BanLogs.Remove(banLogs[targetID]); } banLogs[targetID] = bandata; storedData.BanLogs.Add(banLogs[targetID]); SendMessage(sourcePlayer, string.Format("{0} - {1} was banned from the server for {2}", targetID, targetName, reason)); if (BroadcastBans) { ConsoleSystem.Broadcast("chat.add", new object[] { 0, ChatName + " " + string.Format(MessageBanBroadcast, targetName, reason) }); } List <BasePlayer> targetkick = new List <BasePlayer>(); foreach (BasePlayer player in BasePlayer.activePlayerList) { if (player.userID.ToString() == targetID) { targetkick.Add(player); } } for (int i = 0; i < targetkick.Count; i++) { Network.Net.sv.Kick(targetkick[i].net.connection, string.Format(MessageBan, reason)); } UpdateBannedIPs(); SaveData(); }
bool CanConnect(BanData bandata, Network.Connection connection, out string reason) { reason = string.Empty; string ipaddress = connection.ipaddress.Substring(0, connection.ipaddress.IndexOf(":")); string userid = connection.userid.ToString(); if (bandata.steamID == ipaddress) { string reason2 = bandata.reason; int duration = bandata.expiration == 0 ? 0 : Convert.ToInt32(Time.time) - bandata.expiration; UnbanIP(null, ipaddress); BanID(null, connection.userid, reason2, duration); bandata = banLogs[userid]; } if (bandata.expiration != 0 && Convert.ToInt32(LogTime()) >= bandata.expiration) { Unban(null, userid); } else { if (!bandata.IPs.Contains(ipaddress)) { AddIPToUserBan(userid, ipaddress); } if (banLogs[userid] == null) { BanID(null, connection.userid, bandata.reason, bandata.expiration == 0 ? 0 : Convert.ToInt32(Time.time) - bandata.expiration); } reason = bandata.expiration == 0 ? MessageDenyConnection : MessageDenyConnectionTemp; return(false); } return(true); }
public static bool IsIPBanned(string ip, DbConnection connection) { BanData data = get_ban_data(ip); if (data != null) { if (data.Permanant) { return(true); } else { if (data.ExpirationDate < DateTime.Now) { //drop ban return(false); } else { return(true); } } } else { return(false); } }
protected void Page_Load(object sender, EventArgs e) { id = Fn.IsInt(Req.GetQueryString("id"), 0); banH = new BanCache("qu_msg_" + id, new TimeSpan(0, 0, 10), 1); t = Req.GetID("t"); if (!LoginInfo.IsLogin()) { userID = LoginInfo.UserID; } banD = new BanData(userID, "qu_msg_" + id, new TimeSpan(1, 0, 0, 0), 1); switch (t) { case 0: //投票 TouPiao(); break; case 1: //评论 Comment(); break; default: msgAjax.Error("非法操作"); break; } Response.Write(msgAjax.ReturnMessage); Response.End(); }
public static bool IsAuthorizedDefuser(string userNickName, bool isWhisper, bool silent = false) { if (userNickName.EqualsAny("Bomb Factory", TwitchPlaySettings.data.TwitchPlaysDebugUsername) || TwitchGame.Instance.Bombs.Any(x => x.BombName == userNickName)) { return(true); } BanData ban = UserAccess.IsBanned(userNickName); if (ban != null) { if (silent) { return(false); } if (double.IsPositiveInfinity(ban.BanExpiry)) { IRCConnection.SendMessage($"Sorry @{userNickName}, You were banned permanently from Twitch Plays by {ban.BannedBy}{(string.IsNullOrEmpty(ban.BannedReason) ? "." : $", for the following reason: {ban.BannedReason}")}", userNickName, !isWhisper); } else { int secondsRemaining = (int)(ban.BanExpiry - DateTime.Now.TotalSeconds()); int daysRemaining = secondsRemaining / 86400; secondsRemaining %= 86400; int hoursRemaining = secondsRemaining / 3600; secondsRemaining %= 3600; int minutesRemaining = secondsRemaining / 60; secondsRemaining %= 60; string timeRemaining = $"{secondsRemaining} seconds."; if (daysRemaining > 0) { timeRemaining = $"{daysRemaining} days, {hoursRemaining} hours, {minutesRemaining} minutes, {secondsRemaining} seconds."; } else if (hoursRemaining > 0) { timeRemaining = $"{hoursRemaining} hours, {minutesRemaining} minutes, {secondsRemaining} seconds."; } else if (minutesRemaining > 0) { timeRemaining = $"{minutesRemaining} minutes, {secondsRemaining} seconds."; } IRCConnection.SendMessage($"Sorry @{userNickName}, You were timed out from Twitch Plays by {ban.BannedBy}{(string.IsNullOrEmpty(ban.BannedReason) ? "." : $", For the following reason: {ban.BannedReason}")} You can participate again in {timeRemaining}", userNickName, !isWhisper); } return(false); } bool result = (TwitchPlaySettings.data.EnableTwitchPlaysMode || UserAccess.HasAccess(userNickName, AccessLevel.Defuser, true)); if (!result && !silent) { IRCConnection.SendMessage(string.Format(TwitchPlaySettings.data.TwitchPlaysDisabled, userNickName), userNickName, !isWhisper); } return(result); }
public void IsExpired_Test(int duration, bool expected) { var ban = new BanData { Id = 1, Type = BanTypes.Site, BannedOn = DateTime.Now.Subtract(new TimeSpan(1, 0, 0, 0)), Duration = duration }; Assert.That(ban.IsExpired(), Is.EqualTo(expected)); }
public void UnbanDate_Never_Test() { var ban = new BanData { Id = 1, Type = BanTypes.Site, BannedOn = DateTime.Now.Subtract(new TimeSpan(1, 0, 0, 0)), Duration = 0 }; Assert.That(ban.UnbanDate, Is.EqualTo(DateTime.MaxValue)); Assert.That(ban.IsExpired(), Is.False); }
public async Task <ActionResult> BanUser(BanData data) { var(userId, days) = data; // Check if user is logged in if (_uid is null) { return(Unauthorized()); } var uid = (long)_uid; // Get user to be banned var user = await _context.Users .Where(u => u.Id == userId) .FirstOrDefaultAsync(); if (user is null) { return(NotFound()); } // Ban/unban user if (days.HasValue) { user.BannedUntil = DateTime.Now.AddDays((double)days); await _userManager.UpdateSecurityStampAsync(user); _context.ModeratorActions.Add(new ModeratorAction { StaffMemberId = uid, Description = ModeratorActionTemplates.UserBan(user, User.GetUsername(), (DateTime)user.BannedUntil) }); } else if (user.BannedUntil.HasValue) { _context.ModeratorActions.Add(new ModeratorAction { StaffMemberId = uid, Description = ModeratorActionTemplates.UserUnban(user, User.GetUsername(), (DateTime)user.BannedUntil) }); user.BannedUntil = null; } else { return(BadRequest()); } await _context.SaveChangesAsync(); return(Ok()); }
void RawBanIP(object source, string ipaddress, string reason, int duration) { BanData bandata = new BanData(ipaddress, reason, "Unknown", ipaddress, duration); if (banLogs[ipaddress] != null) { storedData.BanLogs.Remove(banLogs[ipaddress]); } banLogs[ipaddress] = bandata; storedData.BanLogs.Add(banLogs[ipaddress]); SendMessage(source, string.Format("{0} was banned from the server for {1}", ipaddress.ToString(), reason)); UpdateBannedIPs(); SaveData(); }
public async Task <IEnumerable <BanData> > GetBansForSourceAsync(int source, bool onlyActive = false) { var query = _dbContext.Bans .Include(x => x.JobBans) .Include(x => x.SourceNavigation) .Where(x => x.Source == source); if (onlyActive) { query = query.Where(x => x.UnbannedBy == null && (x.Expires == null || x.Expires > DateTime.UtcNow)); } return(await query.OrderByDescending(x => x.BannedOn) .Select(x => BanData.FromBan(x)) .ToListAsync()); }
public List <Ban> ListBans(AuthenticatedData data, string alias) { try { if (!data.Authenticate(RoleType.Moderator, RoleType.ZoneLeader, RoleType.Administrator, RoleType.SuperAdministrator)) { throw new AuthenticationException(); } return(BanData.ListBans(alias)); } catch (Exception error) { Error.Write(error); throw; } }
public bool SetBan(BanData data) { try { if (!data.Authenticate(RoleType.Moderator, RoleType.ZoneLeader, RoleType.Administrator, RoleType.SuperAdministrator)) { throw new AuthenticationException(); } return(data.SetBan()); } catch (Exception error) { Error.Write(error); throw; } }
public void RemoveBan(BanData data) { try { if (!data.Authenticate(RoleType.ZoneLeader, RoleType.Administrator, RoleType.SuperAdministrator)) { throw new AuthenticationException(); } data.RemoveBan(); } catch (Exception error) { Error.Write(error); throw; } }
public async Task <IEnumerable <BanData> > GetBansForKeyAsync(string key, int?source, bool onlyActive = false) { var ckey = KeyUtilities.GetCanonicalKey(key); var query = _dbContext.Bans .Include(x => x.JobBans) .Include(x => x.SourceNavigation) .Where(x => x.CKey == ckey); if (source.HasValue) { query = query.Where(x => x.Source == source); } if (onlyActive) { query = query.Where(x => x.UnbannedBy == null && (x.Expires == null || x.Expires > DateTime.UtcNow)); } return(await query.OrderByDescending(x => x.BannedOn) .Select(x => BanData.FromBan(x)) .ToListAsync()); }
/// <summary> /// Writes bans to stream /// </summary> /// <param name="stream">Stream</param> public void WriteToStream(Stream stream) { if (stream == null) { throw new ArgumentNullException(nameof(stream)); } if (stream.CanWrite) { using (StreamWriter stream_writer = new StreamWriter(stream)) { BanData[] bans = new BanData[banLookup.Count]; uint index = 0U; foreach (IBan ban in banLookup.Values) { bans[index] = new BanData(ban.Pattern.ToString(), ban.Reason); } stream_writer.Write(JsonConvert.SerializeObject(bans)); } } }
public async Task<ActionResult> MuteUser(BanData data) { var (userId, days) = data; // Check if user is logged in if (_uid is null) return Unauthorized(); var uid = (long)_uid; // Get user to be muted var user = await _context.Users .Where(u => u.Id == userId) .FirstOrDefaultAsync(); if (user == null) return NotFound(); // Mute/unmute user if (days.HasValue && !user.MutedUntil.HasValue) { user.MutedUntil = DateTime.Now.AddDays((double) days); await _context.ModeratorActions.AddAsync(new ModeratorAction { StaffMemberId = uid, Description = ModeratorActionTemplates.UserMute(user, User.GetUsername(), (DateTime) user.MutedUntil) }); } else if (user.MutedUntil.HasValue) { await _context.ModeratorActions.AddAsync(new ModeratorAction { StaffMemberId = uid, Description = ModeratorActionTemplates.UserUnmute(user, User.GetUsername(), (DateTime) user.MutedUntil) }); user.MutedUntil = null; } else { return BadRequest(); } await _context.SaveChangesAsync(); return Ok(); }
public async Task IsBanned(string uplayNickname) { (bool matched, bool ban) = Bot.Instance.bt.QueryBanByNick(uplayNickname); if (!matched) { await ReplyAsync($"Tracker podezrelych hracu nezna nikoho s nickem/uplay identifikatorem {uplayNickname}. Jestli ucet existuje, muzete ho trackovat prikazem !sus {uplayNickname}"); } else { if (ban) { BanData bd = Bot.Instance.bt.QueryBanData(uplayNickname); string statsDBURL = StatsDB.BuildURL(uplayNickname, bd.UplayId); await ReplyAsync($"Hrac {uplayNickname} ma skutecne od Ubisoftu ban. Ostuda! Vice najdete zde: {statsDBURL} ."); } else { await ReplyAsync($"Uzivatel s uplay ID {uplayNickname} je nami trackovany, ale ban zatim nema."); } } }
void ExecuteBan(object sourcePlayer, string targetID, string targetName, string targetIP, string reason, int duration) { BanData bandata = new BanData(targetID, reason, targetName, targetIP, duration); if (banLogs[targetID] != null) { storedData.BanLogs.Remove(banLogs[targetID]); } banLogs[targetID] = bandata; storedData.BanLogs.Add(banLogs[targetID]); SendMessage(sourcePlayer, string.Format("{0} - {1} was banned from the server for {2}", targetID, targetName, reason)); if (BroadcastBans) { hurt.BroadcastChat(ChatName, string.Format(GetMessage("MessageBanBroadcast", null), targetName, reason)); } List <PlayerSession> targetkick = new List <PlayerSession>(); foreach (var pair in GameManager.Instance.GetSessions()) { var player = pair.Value; if (player.Player == null) { continue; } if (player.SteamId.ToString() == targetID) { targetkick.Add(player); } } for (int i = 0; i < targetkick.Count; i++) { GameManager.Instance.StartCoroutine(GameManager.Instance.DisconnectPlayerSync(targetkick[i].Player, string.Format(GetMessage("MessageBan", targetkick[i].SteamId.ToString()), reason))); } UpdateBannedIPs(); SaveData(); }
private bool AttemptInvokeCommand <TObj>(StaticCommand command, IRCMessage msg, string cmdStr, Match m, TObj extraObject) { if (command.HasAttribute <DebuggingOnlyAttribute>() && !TwitchPlaySettings.data.EnableDebuggingCommands) { return(false); } if (command.HasAttribute <ElevatorOnlyAttribute>() && !(GameRoom.Instance is ElevatorGameRoom)) { return(false); } if (command.HasAttribute <ElevatorDisallowedAttribute>() && GameRoom.Instance is ElevatorGameRoom) { return(false); } if (!UserAccess.HasAccess(msg.UserNickName, TwitchPlaySettings.data.AnarchyMode ? command.Attr.AccessLevelAnarchy : command.Attr.AccessLevel, orHigher: true)) { IRCConnection.SendMessageFormat("@{0}, you need {1} access to use that command{2}.", msg.UserNickName, UserAccess.LevelToString(TwitchPlaySettings.data.AnarchyMode ? command.Attr.AccessLevelAnarchy : command.Attr.AccessLevel), TwitchPlaySettings.data.AnarchyMode ? " in anarchy mode" : ""); // Return true so that the command counts as processed return(true); } if (extraObject is TwitchModule mdl && mdl.Solved && !command.HasAttribute <SolvedAllowedAttribute>() && !TwitchPlaySettings.data.AnarchyMode) { IRCConnection.SendMessageFormat(TwitchPlaySettings.data.AlreadySolved, mdl.Code, mdl.PlayerName, msg.UserNickName, mdl.BombComponent.GetModuleDisplayName()); // Return true so that the command counts as processed (otherwise you get the above message multiple times) return(true); } Leaderboard.Instance.GetRank(msg.UserNickName, out Leaderboard.LeaderboardEntry entry); if (entry?.Team == null && extraObject is TwitchModule && OtherModes.VSModeOn) { IRCConnection.SendMessage($@"{msg.UserNickName}, you have not joined a team, and cannot solve modules in this mode until you do, please use !join evil or !join good."); // Return true so that the command counts as processed (otherwise you get the above message multiple times) return(true); } if (!TwitchGame.IsAuthorizedDefuser(msg.UserNickName, msg.IsWhisper)) { return(true); } BanData ban = UserAccess.IsBanned(msg.UserNickName); if (ban != null) { if (double.IsPositiveInfinity(ban.BanExpiry)) { IRCConnection.SendMessage($"Sorry @{msg.UserNickName}, You were banned permanently from Twitch Plays by {ban.BannedBy}{(string.IsNullOrEmpty(ban.BannedReason) ? "." : $", for the following reason: {ban.BannedReason}")}", msg.UserNickName, !msg.IsWhisper); } else { int secondsRemaining = (int)(ban.BanExpiry - DateTime.Now.TotalSeconds()); int daysRemaining = secondsRemaining / 86400; secondsRemaining %= 86400; int hoursRemaining = secondsRemaining / 3600; secondsRemaining %= 3600; int minutesRemaining = secondsRemaining / 60; secondsRemaining %= 60; string timeRemaining = $"{secondsRemaining} seconds."; if (daysRemaining > 0) { timeRemaining = $"{daysRemaining} days, {hoursRemaining} hours, {minutesRemaining} minutes, {secondsRemaining} seconds."; } else if (hoursRemaining > 0) { timeRemaining = $"{hoursRemaining} hours, {minutesRemaining} minutes, {secondsRemaining} seconds."; } else if (minutesRemaining > 0) { timeRemaining = $"{minutesRemaining} minutes, {secondsRemaining} seconds."; } IRCConnection.SendMessage($"Sorry @{msg.UserNickName}, You were timed out from Twitch Plays by {ban.BannedBy}{(string.IsNullOrEmpty(ban.BannedReason) ? "." : $", For the following reason: {ban.BannedReason}")} You can participate again in {timeRemaining}", msg.UserNickName, !msg.IsWhisper); } return(true); } var parameters = command.Method.GetParameters(); var groupAttrs = parameters.Select(p => (GroupAttribute)p.GetCustomAttributes(typeof(GroupAttribute), false).FirstOrDefault()).ToArray(); var arguments = new object[parameters.Length]; for (int i = 0; i < parameters.Length; i++) { // Capturing groups from the regular expression if (groupAttrs[i] != null && m != null) { var group = m.Groups[groupAttrs[i].GroupIndex]; NumberParseResult result; // Helper function to parse numbers (ints, floats, doubles) NumberParseResult IsNumber <TNum>(TryParse <TNum> tryParse) { var isNullable = parameters[i].ParameterType == typeof(Nullable <>).MakeGenericType(typeof(TNum)); if (parameters[i].ParameterType != typeof(TNum) && !isNullable) { return(NumberParseResult.NotOfDesiredType); } if (group.Success && tryParse(group.Value, out TNum rslt)) { arguments[i] = rslt; return(NumberParseResult.Success); } if (isNullable) { return(NumberParseResult.Success); } IRCConnection.SendMessage(group.Success ? "@{0}, “{1}” is not a valid number." : "@{0}, the command could not be parsed.", msg.UserNickName, !msg.IsWhisper, msg.UserNickName, group.Success ? group.Value : null); return(NumberParseResult.Error); } // Strings if (parameters[i].ParameterType == typeof(string)) { arguments[i] = m.Success ? group.Value : null; } // Booleans — only specifies whether the group matched or not else if (parameters[i].ParameterType == typeof(bool)) { arguments[i] = group.Success; } // Numbers (int, float, double); includes nullables else if ( (result = IsNumber <int>(int.TryParse)) != NumberParseResult.NotOfDesiredType || (result = IsNumber <float>(float.TryParse)) != NumberParseResult.NotOfDesiredType || (result = IsNumber <double>(double.TryParse)) != NumberParseResult.NotOfDesiredType) { if (result == NumberParseResult.Error) { return(true); } } } // Built-in parameter names else if (parameters[i].ParameterType == typeof(string) && parameters[i].Name == "user") { arguments[i] = msg.UserNickName; } else if (parameters[i].ParameterType == typeof(string) && parameters[i].Name == "cmd") { arguments[i] = cmdStr; } else if (parameters[i].ParameterType == typeof(bool) && parameters[i].Name == "isWhisper") { arguments[i] = msg.IsWhisper; } else if (parameters[i].ParameterType == typeof(IRCMessage)) { arguments[i] = msg; } else if (parameters[i].ParameterType == typeof(KMGameInfo)) { arguments[i] = GetComponent <KMGameInfo>(); } else if (parameters[i].ParameterType == typeof(KMGameInfo.State)) { arguments[i] = CurrentState; } else if (parameters[i].ParameterType == typeof(FloatingHoldable) && extraObject is TwitchHoldable twitchHoldable) { arguments[i] = twitchHoldable.Holdable; } // Object we passed in (module, bomb, holdable) else if (parameters[i].ParameterType.IsAssignableFrom(typeof(TObj))) { arguments[i] = extraObject; } else if (parameters[i].IsOptional) { arguments[i] = parameters[i].DefaultValue; } else { IRCConnection.SendMessage("@{0}, this is a bug; please notify the devs. Error: the “{1}” command has an unrecognized parameter “{2}”. It expects a type of “{3}”, and the extraObject is of type “{4}”.", msg.UserNickName, !msg.IsWhisper, msg.UserNickName, command.Method.Name, parameters[i].Name, parameters[i].ParameterType.Name, extraObject?.GetType().Name); return(true); } } var invokeResult = command.Method.Invoke(null, arguments); if (invokeResult is bool invRes) { return(invRes); } else if (invokeResult is IEnumerator coroutine) { ProcessCommandCoroutine(coroutine, extraObject); } else if (invokeResult != null) { IRCConnection.SendMessage("@{0}, this is a bug; please notify the devs. Error: the “{1}” command returned something unrecognized.", msg.UserNickName, !msg.IsWhisper, msg.UserNickName, command.Method.Name); } if ((TwitchPlaySettings.data.AnarchyMode ? command.Attr.AccessLevelAnarchy : command.Attr.AccessLevel) > AccessLevel.Defuser) { AuditLog.Log(msg.UserNickName, UserAccess.HighestAccessLevel(msg.UserNickName), msg.Text); } return(true); }