From 756e07e787fe357534d04d50377ff326d345dfc7 Mon Sep 17 00:00:00 2001 From: GammaC0de Date: Tue, 3 Nov 2015 22:58:41 +0200 Subject: [Plugin] censor ACCOUNT request data --- module/plugins/internal/Plugin.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module/plugins/internal/Plugin.py b/module/plugins/internal/Plugin.py index 274cff301..e439dd912 100644 --- a/module/plugins/internal/Plugin.py +++ b/module/plugins/internal/Plugin.py @@ -20,7 +20,7 @@ from module.plugins.internal.utils import * class Plugin(object): __name__ = "Plugin" __type__ = "plugin" - __version__ = "0.59" + __version__ = "0.60" __status__ = "stable" __config__ = [] #: [("name", "type", "desc", "default")] @@ -214,7 +214,7 @@ class Plugin(object): """ if self.pyload.debug: self.log_debug("LOAD URL " + url, - *["%s=%s" % (key, val) for key, val in locals().items() if key not in ("self", "url", "_[1]")]) + *["%s=%s" % (key, "{********}" if self.__type__ == "account" and key in ("get", "post") else val) for key, val in locals().items() if key not in ("self", "url", "_[1]")]) url = fixurl(url, unquote=True) #: Recheck in 0.4.10 -- cgit v1.2.3 From 225dc7c20bee60c9da4b1a1b47ef68fc1d4d51fd Mon Sep 17 00:00:00 2001 From: GammaC0de Date: Wed, 4 Nov 2015 21:55:50 +0200 Subject: [Account] reimplement safe_info with deepcopy --- module/plugins/internal/Account.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/module/plugins/internal/Account.py b/module/plugins/internal/Account.py index 1c03f0b1c..fcfe7e0b7 100644 --- a/module/plugins/internal/Account.py +++ b/module/plugins/internal/Account.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- +import copy import random import re import threading @@ -12,7 +13,7 @@ from module.plugins.internal.utils import compare_time, isiterable, lock, parse_ class Account(Plugin): __name__ = "Account" __type__ = "account" - __version__ = "0.65" + __version__ = "0.66" __status__ = "stable" __description__ = """Base account plugin""" @@ -237,7 +238,9 @@ class Account(Plugin): self.syncback() - self.log_debug("Account info for user `%s`: %s" % (self.user, self.info)) + safe_info = copy.deepcopy(self.info) + safe_info['login']['password'] = "**********" + self.log_debug("Account info for user `%s`: %s" % (self.user, safe_info)) return self.info -- cgit v1.2.3 From a1a837d1a39675d94ae26b3b65188f27c88c9c40 Mon Sep 17 00:00:00 2001 From: GammaC0de Date: Sat, 26 Dec 2015 16:30:29 +0200 Subject: [Account] fix copy.deepcopy usage --- module/plugins/internal/Account.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/module/plugins/internal/Account.py b/module/plugins/internal/Account.py index fcfe7e0b7..a27e892cf 100644 --- a/module/plugins/internal/Account.py +++ b/module/plugins/internal/Account.py @@ -8,12 +8,12 @@ import time from module.plugins.internal.Plugin import Plugin, Skip from module.plugins.internal.utils import compare_time, isiterable, lock, parse_size - +d class Account(Plugin): __name__ = "Account" __type__ = "account" - __version__ = "0.66" + __version__ = "0.67" __status__ = "stable" __description__ = """Base account plugin""" @@ -238,7 +238,8 @@ class Account(Plugin): self.syncback() - safe_info = copy.deepcopy(self.info) + safe_info = copy.copy(self.info) + safe_info['login'] = copy.deepcopy(self.info['login']) #@Note: safe_info['login'] must be deepcopied to leave self.info['login'] without changes safe_info['login']['password'] = "**********" self.log_debug("Account info for user `%s`: %s" % (self.user, safe_info)) -- cgit v1.2.3 From 937a6d18f1573fa773f247e65c1625309a5b442e Mon Sep 17 00:00:00 2001 From: GammaC0de Date: Sat, 26 Dec 2015 16:33:16 +0200 Subject: typo --- module/plugins/internal/Account.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module/plugins/internal/Account.py b/module/plugins/internal/Account.py index a27e892cf..e875ecaeb 100644 --- a/module/plugins/internal/Account.py +++ b/module/plugins/internal/Account.py @@ -8,12 +8,12 @@ import time from module.plugins.internal.Plugin import Plugin, Skip from module.plugins.internal.utils import compare_time, isiterable, lock, parse_size -d + class Account(Plugin): __name__ = "Account" __type__ = "account" - __version__ = "0.67" + __version__ = "0.68" __status__ = "stable" __description__ = """Base account plugin""" -- cgit v1.2.3 From 29049ab7b25f96d4f59e4cb7b6773a52bad5576b Mon Sep 17 00:00:00 2001 From: GammaC0de Date: Sun, 27 Dec 2015 03:09:56 +0200 Subject: [utils] new function: safe_format() --- module/plugins/internal/Account.py | 10 +++------- module/plugins/internal/Plugin.py | 5 +++-- module/plugins/internal/utils.py | 32 +++++++++++++++++++++++++++++++- 3 files changed, 37 insertions(+), 10 deletions(-) diff --git a/module/plugins/internal/Account.py b/module/plugins/internal/Account.py index e875ecaeb..b02538c68 100644 --- a/module/plugins/internal/Account.py +++ b/module/plugins/internal/Account.py @@ -1,19 +1,18 @@ # -*- coding: utf-8 -*- -import copy import random import re import threading import time from module.plugins.internal.Plugin import Plugin, Skip -from module.plugins.internal.utils import compare_time, isiterable, lock, parse_size +from module.plugins.internal.utils import compare_time, isiterable, lock, parse_size, safe_format class Account(Plugin): __name__ = "Account" __type__ = "account" - __version__ = "0.68" + __version__ = "0.69" __status__ = "stable" __description__ = """Base account plugin""" @@ -238,10 +237,7 @@ class Account(Plugin): self.syncback() - safe_info = copy.copy(self.info) - safe_info['login'] = copy.deepcopy(self.info['login']) #@Note: safe_info['login'] must be deepcopied to leave self.info['login'] without changes - safe_info['login']['password'] = "**********" - self.log_debug("Account info for user `%s`: %s" % (self.user, safe_info)) + self.log_debug("Account info for user `%s`: %s" % (self.user, safe_format(self.info, self.info['login']['password']))) return self.info diff --git a/module/plugins/internal/Plugin.py b/module/plugins/internal/Plugin.py index e439dd912..bf591d482 100644 --- a/module/plugins/internal/Plugin.py +++ b/module/plugins/internal/Plugin.py @@ -20,7 +20,7 @@ from module.plugins.internal.utils import * class Plugin(object): __name__ = "Plugin" __type__ = "plugin" - __version__ = "0.60" + __version__ = "0.61" __status__ = "stable" __config__ = [] #: [("name", "type", "desc", "default")] @@ -214,7 +214,8 @@ class Plugin(object): """ if self.pyload.debug: self.log_debug("LOAD URL " + url, - *["%s=%s" % (key, "{********}" if self.__type__ == "account" and key in ("get", "post") else val) for key, val in locals().items() if key not in ("self", "url", "_[1]")]) + *["%s=%s" % (key, safe_format(val, self.info['login']['password']) if self.__type__ == "account" else val) + for key, val in locals().items() if key not in ("self", "url", "_[1]")]) url = fixurl(url, unquote=True) #: Recheck in 0.4.10 diff --git a/module/plugins/internal/utils.py b/module/plugins/internal/utils.py index 1fdbaf279..02077cffd 100644 --- a/module/plugins/internal/utils.py +++ b/module/plugins/internal/utils.py @@ -30,7 +30,7 @@ except ImportError: class utils(object): __name__ = "utils" __type__ = "plugin" - __version__ = "0.08" + __version__ = "0.09" __status__ = "stable" __pattern__ = r'^unmatchable$' @@ -71,6 +71,36 @@ def format_size(value): return "%.2f %s" % (size, sizes[steps]) +def safe_format(value, unsafe): + """ + Returns the content of value omitting sensitive information + + Args: + value: value to format + unsafe: string or list: sensitive word(s) to remove + """ + if isinstance(value, basestring): + if isinstance(unsafe, basestring): + return "'%s'" % ("**********" if value == unsafe else value) + + elif isinstance(unsafe, list): + return "'%s'" % ("**********" if value in unsafe else value) + + elif isinstance(value, dict): + return "{%s}" % ", ".join("'%s': %s" % (k, safe_format(v, unsafe)) for k, v in value.iteritems()) + + elif isinstance(value, list): + return "[%s]" % ", ".join("%s" % safe_format(v, unsafe) for v in value) + + elif isinstance(value, tuple): + return "(%s)" % ", ".join("%s" % safe_format(v, unsafe) for v in value) + + elif isinstance(value, set): + return "set([%s])" % ", ".join("%s" % safe_format(v, unsafe) for v in value) + + return repr(value) + + def compare_time(start, end): start = map(int, start) end = map(int, end) -- cgit v1.2.3