public ActionResult CreateIPBan(string ip, string expires, string reason, bool? showall, int? page, int? pagesize) { var retryValues = new { ip, expires, reason }; if (!ip.HasValue()) return RecoverableError("IP must be set.", retryValues); if (!expires.HasValue()) return RecoverableError("Expires must be set.", retryValues); if (!reason.HasValue()) return RecoverableError("Reason must be set.", retryValues); DateTime expDate; if (!DateTime.TryParse(expires, out expDate)) return RecoverableError("Expires not recognized as a date.", retryValues); var now = Current.Now; if (expDate < now) return RecoverableError("Expiration date must be in the future.", retryValues); var newBan = new IPBan { CreationDate = now, ExpirationDate = expDate, IP = ip, Reason = reason }; var db = Current.WriteDB; db.IPBans.InsertOnSubmit(newBan); db.SubmitChanges(); return SafeRedirect( (Func<bool?, int?, int?, ActionResult>)IPBans, new { showall, page, pagesize }); }
partial void DeleteIPBan(IPBan instance);
partial void InsertIPBan(IPBan instance);
partial void UpdateIPBan(IPBan instance);
/// <summary> /// Create a new ban for the given ip lasting for the given period. /// </summary> public static void Ban(string ip, TimeSpan @for, string reason) { // Never ban an internal IP if (Current.IsPrivateIP(ip)) return; var db = Current.WriteDB; var now = Current.Now; var newBan = new IPBan { CreationDate = now, ExpirationDate = now + @for, IP = ip, Reason = reason }; db.IPBans.InsertOnSubmit(newBan); db.SubmitChanges(); var period = new BanPeriod { CreationDate = newBan.CreationDate, ExpirationDate = newBan.ExpirationDate }; BannedIPCache.AddOrUpdate(ip, period, (string key, BanPeriod old) => period); }