@ -7,65 +7,65 @@ namespace NzbDrone.Common.Instrumentation
{
public class CleanseLogMessage
{
private static readonly Regex [ ] CleansingRules = new [ ]
{
// Url
new Regex ( @"(?<=[?&: ;])((?:api|auth|pass)?key|(?:access[-_]?|refresh_)?token|auth|user|u?id|api|[a-z_]*apikey|account|passwd|pwd)=(?<secret>[^&=""]+?)(?=[ ""&=]|$)" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
new Regex ( @"(?<=[?& ])[^=]*?(username|passwo?rd)=(?<secret>[^&=]+?)(?= |&|$)" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
new Regex ( @" torrentleech\.org/(?!rss)(?<secret>[0-9a-z]+)", RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
new Regex ( @"torrentleech\.org/rss/download/[0-9]+/(?<secret>[0-9a-z]+)" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
new Regex ( @"iptorrents\.com/[/a-z0-9?&;]*?(?:[?&;](u|tp)=(?<secret>[^&=;]+?))+(?= |;|&|$)" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
new Regex ( @"/fetch/[a-z0-9]{32}/(?<secret>[a-z0-9]{32})" , RegexOptions . Compiled ) ,
new Regex ( @"getnzb.*?(?<=\?|&)(r)=(?<secret>[^&=]+?)(?= |&|$)" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
new Regex ( @"\b(\w*)?(_?(?<!use|get_)token|username|passwo?rd)=(?<secret>[^&=]+?)(?= |&|$|;)" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
private static readonly Regex [ ] CleansingRules =
{
// Url
new ( @"(?<=[?&: ;])((?:api|auth|pass)?key|(?:access[-_]?|refresh_)?token|auth|user|u?id|api|[a-z_]*apikey|account|passwd|pwd)=(?<secret>[^&=""]+?)(?=[ ""&=]|$)" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
new ( @"(?<=[?& ])[^=]*?(username|passwo?rd)=(?<secret>[^&=]+?)(?= |&|$)" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
new ( @" rss(24h)?\. torrentleech\.org/(?!rss)(?<secret>[0-9a-z]+)", RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
new ( @"torrentleech\.org/rss/download/[0-9]+/(?<secret>[0-9a-z]+)" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
new ( @"iptorrents\.com/[/a-z0-9?&;]*?(?:[?&;](u|tp)=(?<secret>[^&=;]+?))+(?= |;|&|$)" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
new ( @"/fetch/[a-z0-9]{32}/(?<secret>[a-z0-9]{32})" , RegexOptions . Compiled ) ,
new ( @"getnzb.*?(?<=\?|&)(r)=(?<secret>[^&=]+?)(?= |&|$)" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
new ( @"\b(\w*)?(_?(?<!use|get_)token|username|passwo?rd)=(?<secret>[^&=]+?)(?= |&|$|;)" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
// Trackers Announce Keys; Designed for Qbit Json; should work for all in theory
new Regex ( @"announce(\.php)?(/|%2f|%3fpasskey%3d)(?<secret>[a-z0-9]{16,})|(?<secret>[a-z0-9]{16,})(/|%2f)announce" ) ,
// Trackers Announce Keys; Designed for Qbit Json; should work for all in theory
new ( @"announce(\.php)?(/|%2f|%3fpasskey%3d)(?<secret>[a-z0-9]{16,})|(?<secret>[a-z0-9]{16,})(/|%2f)announce" ) ,
// Path
new Regex ( @"C:\\Users\\(?<secret>[^\""]+?)(\\|$)" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
new Regex ( @"/ home/(?<secret>[^/""]+?)(/|$)", RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
// Path
new ( @"C:\\Users\\(?<secret>[^\""]+?)(\\|$)" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
new ( @"/ ( home|Users) /(?<secret>[^/""]+?)(/|$)", RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
// Trackers Announce Keys; Designed for Qbit Json; should work for all in theory
new Regex ( @"announce(\.php)?(/|%2f|%3fpasskey%3d)(?<secret>[a-z0-9]{16,})|(?<secret>[a-z0-9]{16,})(/|%2f)announce" ) ,
// Trackers Announce Keys; Designed for Qbit Json; should work for all in theory
new ( @"announce(\.php)?(/|%2f|%3fpasskey%3d)(?<secret>[a-z0-9]{16,})|(?<secret>[a-z0-9]{16,})(/|%2f)announce" ) ,
// NzbGet
new Regex ( @"""Name""\s*:\s*""[^""]*(username|password)""\s*,\s*""Value""\s*:\s*""(?<secret>[^""]+?)""" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
// NzbGet
new ( @"""Name""\s*:\s*""[^""]*(username|password)""\s*,\s*""Value""\s*:\s*""(?<secret>[^""]+?)""" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
// Sabnzbd
new Regex ( @"""[^""]*(username|password|api_?key|nzb_key)""\s*:\s*""(?<secret>[^""]+?)""" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
new Regex ( @"""email_(account|to|from|pwd)""\s*:\s*""(?<secret>[^""]+?)""" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
// Sabnzbd
new ( @"""[^""]*(username|password|api_?key|nzb_key)""\s*:\s*""(?<secret>[^""]+?)""" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
new ( @"""email_(account|to|from|pwd)""\s*:\s*""(?<secret>[^""]+?)""" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
// uTorrent
new Regex ( @"\[""[a-z._]*(username|password)"",\d,""(?<secret>[^""]+?)""" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
new Regex ( @"\[""(boss_key|boss_key_salt|proxy\.proxy)"",\d,""(?<secret>[^""]+?)""" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
// uTorrent
new ( @"\[""[a-z._]*(username|password)"",\d,""(?<secret>[^""]+?)""" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
new ( @"\[""(boss_key|boss_key_salt|proxy\.proxy)"",\d,""(?<secret>[^""]+?)""" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
// Deluge
new Regex ( @"auth.login\(""(?<secret>[^""]+?)""" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
// Deluge
new ( @"auth.login\(""(?<secret>[^""]+?)""" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
// BroadcastheNet
new Regex ( @"""?method""?\s*:\s*""(getTorrents)"",\s*""?params""?\s*:\s*\[\s*""(?<secret>[^""]+?)""" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
new Regex ( @"getTorrents\(""(?<secret>[^""]+?)""" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
new Regex ( @"(?<=\?|&)(authkey|torrent_pass)=(?<secret>[^&=]+?)(?=""|&|$)" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
// BroadcastheNet
new ( @"""?method""?\s*:\s*""(getTorrents)"",\s*""?params""?\s*:\s*\[\s*""(?<secret>[^""]+?)""" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
new ( @"getTorrents\(""(?<secret>[^""]+?)""" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
new ( @"(?<=\?|&)(authkey|torrent_pass)=(?<secret>[^&=]+?)(?=""|&|$)" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
// Plex
new Regex ( @"(?<=\?|&)(X-Plex-Client-Identifier|X-Plex-Token)=(?<secret>[^&=]+?)(?= |&|$)" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
// Plex
new ( @"(?<=\?|&)(X-Plex-Client-Identifier|X-Plex-Token)=(?<secret>[^&=]+?)(?= |&|$)" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
// Webhooks
// Notifiarr
new Regex ( @"api/v[0-9]/notification/lidarr/(?<secret>[\w-]+)" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
// Webhooks
// Notifiarr
new ( @"api/v[0-9]/notification/lidarr/(?<secret>[\w-]+)" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
// Indexer Responses
new Regex ( @"avistaz\.[a-z]{2,3}\\\/rss\\\/download\\\/(?<secret>[^&=]+?)\\\/(?<secret>[^&=]+?)\.torrent" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
new Regex ( @",""info_hash"":""(?<secret>[^&=]+?)""," , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
new Regex ( @",""pass[- _]?key"":""(?<secret>[^&=]+?)""," , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
new Regex ( @",""rss[- _]?key"":""(?<secret>[^&=]+?)""," , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
// Indexer Responses
new ( @"avistaz\.[a-z]{2,3}\\\/rss\\\/download\\\/(?<secret>[^&=]+?)\\\/(?<secret>[^&=]+?)\.torrent" , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
new ( @",""info_hash"":""(?<secret>[^&=]+?)""," , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
new ( @",""pass[- _]?key"":""(?<secret>[^&=]+?)""," , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
new ( @",""rss[- _]?key"":""(?<secret>[^&=]+?)""," , RegexOptions . Compiled | RegexOptions . IgnoreCase ) ,
// Discord
new Regex ( @"discord.com/api/webhooks/((?<secret>[\w-]+)/)?(?<secret>[\w-]+)" , RegexOptions . Compiled | RegexOptions . IgnoreCase )
} ;
// Discord
new ( @"discord.com/api/webhooks/((?<secret>[\w-]+)/)?(?<secret>[\w-]+)" , RegexOptions . Compiled | RegexOptions . IgnoreCase )
} ;
private static readonly Regex CleanseRemoteIPRegex = new Regex ( @"(?:Auth-\w+(?<!Failure|Unauthorized) ip|from) (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})" , RegexOptions . Compiled ) ;
private static readonly Regex CleanseRemoteIPRegex = new ( @"(?:Auth-\w+(?<!Failure|Unauthorized) ip|from) (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})" , RegexOptions . Compiled ) ;
public static string Cleanse ( string message )
{
@ -96,7 +96,6 @@ namespace NzbDrone.Common.Instrumentation
private static string CleanseRemoteIP ( Match match )
{
var group = match . Groups [ 1 ] ;
var valueAll = match . Value ;
var valueIP = group . Value ;
if ( IPAddress . TryParse ( valueIP , out var address ) & & ! address . IsLocalAddress ( ) )