remove metadata when hiding project or file names
This commit is contained in:
parent
ae2ac14a9f
commit
4b9d375c90
2 changed files with 46 additions and 41 deletions
|
@ -42,6 +42,8 @@ class Heartbeat(object):
|
||||||
cursorpos = None
|
cursorpos = None
|
||||||
user_agent = None
|
user_agent = None
|
||||||
|
|
||||||
|
_sensitive = ('dependencies', 'lines', 'lineno', 'cursorpos', 'branch')
|
||||||
|
|
||||||
def __init__(self, data, args, configs, _clone=None):
|
def __init__(self, data, args, configs, _clone=None):
|
||||||
if not data:
|
if not data:
|
||||||
self.skip = u('Skipping because heartbeat data is missing.')
|
self.skip = u('Skipping because heartbeat data is missing.')
|
||||||
|
@ -141,29 +143,12 @@ class Heartbeat(object):
|
||||||
if self.type != 'file':
|
if self.type != 'file':
|
||||||
return self
|
return self
|
||||||
|
|
||||||
for pattern in self.args.hide_file_names:
|
if self.should_obfuscate_filename():
|
||||||
try:
|
self._sanitize_metadata()
|
||||||
compiled = re.compile(pattern, re.IGNORECASE)
|
|
||||||
if compiled.search(self.entity):
|
|
||||||
|
|
||||||
sanitized = {}
|
|
||||||
sensitive = ['dependencies', 'lines', 'lineno', 'cursorpos', 'branch']
|
|
||||||
for key, val in self.items():
|
|
||||||
if key in sensitive:
|
|
||||||
sanitized[key] = None
|
|
||||||
else:
|
|
||||||
sanitized[key] = val
|
|
||||||
|
|
||||||
extension = u(os.path.splitext(self.entity)[1])
|
extension = u(os.path.splitext(self.entity)[1])
|
||||||
sanitized['entity'] = u('HIDDEN{0}').format(extension)
|
self.entity = u('HIDDEN{0}').format(extension)
|
||||||
|
elif self.should_obfuscate_project():
|
||||||
return self.update(sanitized)
|
self._sanitize_metadata()
|
||||||
|
|
||||||
except re.error as ex:
|
|
||||||
log.warning(u('Regex error ({msg}) for hide_file_names pattern: {pattern}').format(
|
|
||||||
msg=u(ex),
|
|
||||||
pattern=u(pattern),
|
|
||||||
))
|
|
||||||
|
|
||||||
return self
|
return self
|
||||||
|
|
||||||
|
@ -201,6 +186,38 @@ class Heartbeat(object):
|
||||||
is_write=self.is_write,
|
is_write=self.is_write,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def should_obfuscate_filename(self):
|
||||||
|
"""Returns True if hide_file_names is true or the entity file path
|
||||||
|
matches one in the list of obfuscated file paths."""
|
||||||
|
|
||||||
|
for pattern in self.args.hide_file_names:
|
||||||
|
try:
|
||||||
|
compiled = re.compile(pattern, re.IGNORECASE)
|
||||||
|
if compiled.search(self.entity):
|
||||||
|
return True
|
||||||
|
except re.error as ex:
|
||||||
|
log.warning(u('Regex error ({msg}) for hide_file_names pattern: {pattern}').format(
|
||||||
|
msg=u(ex),
|
||||||
|
pattern=u(pattern),
|
||||||
|
))
|
||||||
|
return False
|
||||||
|
|
||||||
|
def should_obfuscate_project(self):
|
||||||
|
"""Returns True if hide_project_names is true or the entity file path
|
||||||
|
matches one in the list of obfuscated project paths."""
|
||||||
|
|
||||||
|
for pattern in self.args.hide_project_names:
|
||||||
|
try:
|
||||||
|
compiled = re.compile(pattern, re.IGNORECASE)
|
||||||
|
if compiled.search(self.entity):
|
||||||
|
return True
|
||||||
|
except re.error as ex:
|
||||||
|
log.warning(u('Regex error ({msg}) for hide_project_names pattern: {pattern}').format(
|
||||||
|
msg=u(ex),
|
||||||
|
pattern=u(pattern),
|
||||||
|
))
|
||||||
|
return False
|
||||||
|
|
||||||
def _unicode(self, value):
|
def _unicode(self, value):
|
||||||
if value is None:
|
if value is None:
|
||||||
return None
|
return None
|
||||||
|
@ -224,6 +241,10 @@ class Heartbeat(object):
|
||||||
return False
|
return False
|
||||||
return find_project_file(self.entity) is None
|
return find_project_file(self.entity) is None
|
||||||
|
|
||||||
|
def _sanitize_metadata(self):
|
||||||
|
for key in self._sensitive:
|
||||||
|
setattr(self, key, None)
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return self.json()
|
return self.json()
|
||||||
|
|
||||||
|
|
|
@ -12,9 +12,8 @@
|
||||||
import os
|
import os
|
||||||
import logging
|
import logging
|
||||||
import random
|
import random
|
||||||
import re
|
|
||||||
|
|
||||||
from .compat import open, u
|
from .compat import open
|
||||||
from .projects.git import Git
|
from .projects.git import Git
|
||||||
from .projects.mercurial import Mercurial
|
from .projects.mercurial import Mercurial
|
||||||
from .projects.projectfile import ProjectFile
|
from .projects.projectfile import ProjectFile
|
||||||
|
@ -69,7 +68,7 @@ def get_project_info(configs, heartbeat, data):
|
||||||
if project_name is None:
|
if project_name is None:
|
||||||
project_name = data.get('project') or heartbeat.args.project
|
project_name = data.get('project') or heartbeat.args.project
|
||||||
|
|
||||||
hide_project = should_obfuscate_project(heartbeat)
|
hide_project = heartbeat.should_obfuscate_project()
|
||||||
|
|
||||||
if project_name is None or branch_name is None:
|
if project_name is None or branch_name is None:
|
||||||
|
|
||||||
|
@ -99,21 +98,6 @@ def get_project_info(configs, heartbeat, data):
|
||||||
return project_name, branch_name
|
return project_name, branch_name
|
||||||
|
|
||||||
|
|
||||||
def should_obfuscate_project(heartbeat):
|
|
||||||
"""Returns True if hide_project_names is true or the path matches one in
|
|
||||||
the list of obfuscated project paths."""
|
|
||||||
|
|
||||||
for pattern in heartbeat.args.hide_project_names:
|
|
||||||
try:
|
|
||||||
compiled = re.compile(pattern, re.IGNORECASE)
|
|
||||||
return compiled.search(heartbeat.entity)
|
|
||||||
except re.error as ex:
|
|
||||||
log.warning(u('Regex error ({msg}) for hide_project_names pattern: {pattern}').format(
|
|
||||||
msg=u(ex),
|
|
||||||
pattern=u(pattern),
|
|
||||||
))
|
|
||||||
|
|
||||||
|
|
||||||
def get_configs_for_plugin(plugin_name, configs):
|
def get_configs_for_plugin(plugin_name, configs):
|
||||||
if configs and configs.has_section(plugin_name):
|
if configs and configs.has_section(plugin_name):
|
||||||
return dict(configs.items(plugin_name))
|
return dict(configs.items(plugin_name))
|
||||||
|
|
Loading…
Reference in a new issue