mirror of https://github.com/r4sas/py-i2phosts
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
1.7 KiB
66 lines
1.7 KiB
import sys |
|
import logging |
|
import configobj |
|
import validate |
|
import hashlib |
|
import base64 |
|
|
|
from logging import handlers |
|
|
|
def get_logger(filename=None, log_level='debug'): |
|
""" Prepare logger instance for our scripts """ |
|
|
|
# workaround for django |
|
if hasattr(logging, "web_logger"): |
|
return logging.web_logger |
|
|
|
LEVELS = { |
|
'debug': logging.DEBUG, |
|
'info': logging.INFO, |
|
'warning': logging.WARNING, |
|
'error': logging.ERROR, |
|
'critical': logging.CRITICAL |
|
} |
|
level = LEVELS.get(log_level, logging.NOTSET) |
|
format = '%(asctime)s %(module)s:%(lineno)d[%(process)d] %(levelname)s: %(message)s' |
|
formatter = logging.Formatter(format) |
|
logger = logging.getLogger(__name__) |
|
logger.setLevel(level) |
|
if filename: |
|
handler = logging.handlers.WatchedFileHandler(filename) |
|
else: |
|
handler = logging.StreamHandler() |
|
handler.setFormatter(formatter) |
|
logger.addHandler(handler) |
|
|
|
# workaround for django |
|
logging.web_logger = logger |
|
|
|
return logger |
|
|
|
|
|
def validate_config(config): |
|
""" Validate configobj config """ |
|
validator = validate.Validator() |
|
results = config.validate(validator) |
|
if results != True: |
|
for (section_list, key, _) in configobj.flatten_errors(config, results): |
|
if key is not None: |
|
sys.stderr.write('The "%s" key in the section "%s" failed validation' % |
|
(key, ', '.join(section_list))) |
|
else: |
|
sys.stderr.write('The following section was missing:%s ' % |
|
', '.join(section_list)) |
|
sys.exit(1) |
|
|
|
|
|
def get_b32(dest): |
|
""" Calculate base32 hash from base64 """ |
|
try: |
|
raw_key = base64.b64decode(dest.encode('utf-8'), '-~') |
|
except TypeError: |
|
return 'corrupted_base64_hash' |
|
else: |
|
hash = hashlib.sha256(raw_key) |
|
b32 = base64.b32encode(hash.digest()).lower().replace('=', '')+'.b32.i2p' |
|
return b32
|
|
|