hostnames registration application for I2P
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.

67 lines
1.9 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