operator-time
quadrismegistus 4 years ago
parent b534cf2b4f
commit 0b0543ecc5

@ -1 +1 @@
AAEBQAwAAAAQAAAAtgAAAHpLTWfiYKDQNkK0351A2dzeB2dc/BFORHT96dEgoJAgSV5C7EI/NKkwDHH4MxtN02vP6riKpms/NZ39UI2kInoWJ/O6qS+MfruA1iYTMnJO1MoJhrqY0ywygVfpD4W79YRt0AEA24KPQ3WLWKsc/PU+Pq1fmGaC5bEWJFbNH8a+8nramPWsot3Ee/SD1NORQVzbBbHOMwbUtEsO6j34FeFj0cYqTJOeBIMIiqrHicoogS0zelcncp/7oW4ulAjsQUvkeVejb3Jwr40oSRC74D5vAA==
AAEBQAwAAAAQAAAAggEAALfhjselRil2GSSARzwV+FvwMJXeflbpWb5bd0bviC+J46+28AdnT6wcP+/ESrA20xSl+d8r6N5an31LnpZcxrfNsJlSaJrIynk8TOoOVElWwgNW+jgk9HeqEsiAyYXowC+FYkWv3wRxql3/5y9g6e5kJWBsmjZs8LdT4uK09yfwvJX2DlKim0+XO+HUu8Qq/BS7OPN4KueP/bEmZ91M4AowQ8DExBC0jAW887An0rM+gy+xKXV8UDE9LBGQg75NPZMc9bEfMLp0wg+EDWgXe0PXIKUCZF/El7CiUeM+MP17Md0No4N9/XqPqU4gXSjtkrohBujpTKOqv0OiDurb9Xl6Ig/4tML6VhwWBfaBOFP7vPdLiT+tQKdcTAKAn+PwVbo63rQ8dWz8wvcwDISd8iz/5tewQw9DDK5WJOwahGFS5NsUA5Hw9WpxHMYH5iydOmYeAskLmrlZVuxuixv+9CFxP+5hDg5ZT3pMVPsZwed6nlbP3DTlNGjVkr8o/OO4MXizBHLgQ6V0z3Im+zvgBKedNYSLwFTDx0aeEBm1ag==

@ -31,7 +31,7 @@ def logger():
handler = logging.StreamHandler()
formatter = logging.Formatter('[%(asctime)s]\n%(message)s\n')
handler.setFormatter(formatter)
logger = logging.getLogger(__file__)
logger = logging.getLogger('komrade')
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)
return logger

@ -11,18 +11,6 @@ class Caller(Operator):
Variant of an Operator which handles local keys and keymaking.
"""
@property
def phone(self):
global TELEPHONE
from komrade.backend.the_telephone import TheTelephone
if not TELEPHONE: TELEPHONE=TheTelephone()
return TELEPHONE
@property
def op(self):
global OPERATOR
from komrade.backend.the_operator import TheOperator
if not OPERATOR: OPERATOR=TheOperator()
return OPERATOR
def get_new_keys(self, name = None, passphrase = None, is_group=None):
if not name: name=self.name

@ -74,9 +74,9 @@ class KomradeAsymmetricPrivateKey(KomradeAsymmetricKey):
class Keymaker(Logger):
def __init__(self,name=None,passphrase=None, path_crypt_keys=None, path_crypt_data=None, allow_builtin=True):
def __init__(self,name=None,passphrase=None,keychain={}, path_crypt_keys=None, path_crypt_data=None, allow_builtin=True):
self.name=name
self._keychain={}
self._keychain=keychain
self.passphrase=passphrase
self.path_crypt_keys=path_crypt_keys
self.path_crypt_data=path_crypt_data
@ -122,6 +122,11 @@ class Keymaker(Logger):
def getkey(self, keyname, keychain={}, uri=None):
# cached?
if hasattr(self,'_'+keyname) and getattr(self,'_'+keyname):
return getattr(self,'_'+keyname)
if keyname in self._keychain: return self._keychain[keyname]
# self.log(f'keyname={keyname}, keychain={keychain.keys()}, uri={uri}')
# 1) I already have this key stored in either the keychain or the crypt; return straight away
@ -370,65 +375,6 @@ class Keymaker(Logger):
keychain[key_name]=_key_encr
return keychain
def check_builtin_keys(self):
global OMEGA_KEY,OPERATOR_KEYCHAIN,TELEPHONE_KEYCHAIN
if OMEGA_KEY and OPERATOR_KEYCHAIN and TELEPHONE_KEYCHAIN: return
self.log('getting built in keys!')
if not os.path.exists(PATH_OMEGA_KEY) or not os.path.exists(PATH_BUILTIN_KEYCHAIN):
self.log('builtin keys not present??')
return
with open(PATH_OMEGA_KEY,'rb') as f:
OMEGA_KEY = KomradeSymmetricKeyWithoutPassphrase(
key=b64decode(f.read())
)
with open(PATH_BUILTIN_KEYCHAIN,'rb') as f:
local_builtin_keychain_encr = b64decode(f.read())
print('local',local_builtin_keychain_encr)
from komrade.backend.mazes import tor_request
from komrade.backend import PATH_OPERATOR_WEB_KEYS_URL
meta_keychain={}
local_builtin_keychain = OMEGA_KEY.decrypt(local_builtin_keychain_encr)
local_builtin_keychain_phone,local_builtin_keychain_op = local_builtin_keychain.split(BSEP)
local_builtin_keychain_phone_json = unpackage_from_transmission(local_builtin_keychain_phone)
local_builtin_keychain_op_json = unpackage_from_transmission(local_builtin_keychain_op)
self.log('local_builtin_keychain_phone_json',local_builtin_keychain_phone_json)
self.log('local_builtin_keychain_op_json',local_builtin_keychain_op_json)
print('??',PATH_OPERATOR_WEB_KEYS_URL)
r = tor_request(PATH_OPERATOR_WEB_KEYS_URL)
if r.status_code!=200:
self.log('cannot authenticate the keymakers')
return
remote_builtin_keychain_encr = b64decode(r.text)
remote_builtin_keychain = OMEGA_KEY.decrypt(remote_builtin_keychain_encr)
remote_builtin_keychain_phone,remote_builtin_keychain_op = remote_builtin_keychain.split(BSEP)
remote_builtin_keychain_phone_json = unpackage_from_transmission(remote_builtin_keychain_phone)
remote_builtin_keychain_op_json = unpackage_from_transmission(remote_builtin_keychain_op)
self.log('remote_builtin_keychain_phone_json',remote_builtin_keychain_phone_json)
self.log('remote_builtin_keychain_op_json',remote_builtin_keychain_op_json)
TELEPHONE_KEYCHAIN={}
OPERATOR_KEYCHAIN={}
dict_merge(TELEPHONE_KEYCHAIN,local_builtin_keychain_phone_json)
dict_merge(OPERATOR_KEYCHAIN,local_builtin_keychain_op_json)
dict_merge(TELEPHONE_KEYCHAIN,remote_builtin_keychain_phone_json)
dict_merge(OPERATOR_KEYCHAIN,remote_builtin_keychain_op_json)
# BUILTIN_KEYCHAIN = meta_keychain
self.log('OPERATOR_KEYCHAIN',OPERATOR_KEYCHAIN)
self.log('TELEPHONE_KEYCHAIN',TELEPHONE_KEYCHAIN)
stop
return BUILTIN_KEYCHAIN
def forge_new_keys(self,

@ -4,6 +4,10 @@ from komrade import *
log=print
def komrade_request(url):
# return tor_request(url)
return requests.get(url,timeout=60)
def tor_request(url):
return tor_request_in_python(url)
# return tor_request_in_proxy(url)
@ -131,8 +135,8 @@ from torpy.http.requests import TorRequests, tor_requests_session, do_request as
from torpy.http.urlopener import do_request as urllib_request
# logging.getLogger('requests').setLevel(logging.CRITICAL)
logging.basicConfig(format='[%(asctime)s] [%(threadName)-16s] %(message)s', level=logging.DEBUG)
logger = logging.getLogger(__name__)
# logging.basicConfig(format='[%(asctime)s] [%(threadName)-16s] %(message)s', level=logging.DEBUG)
# logger = logging.getLogger('komrade')
HS_BASIC_HOST = os.getenv('HS_BASIC_HOST')

@ -11,8 +11,9 @@ from komrade.backend.switchboard import *
class Operator(Keymaker):
def __init__(self, name, passphrase=None, path_crypt_keys=PATH_CRYPT_CA_KEYS, path_crypt_data=PATH_CRYPT_CA_DATA):
super().__init__(name=name,passphrase=passphrase, path_crypt_keys=path_crypt_keys, path_crypt_data=path_crypt_data)
def __init__(self, name, passphrase=None, keychain = {}, path_crypt_keys=PATH_CRYPT_CA_KEYS, path_crypt_data=PATH_CRYPT_CA_DATA):
super().__init__(name=name,passphrase=passphrase, keychain=keychain,
path_crypt_keys=path_crypt_keys, path_crypt_data=path_crypt_data)
self.boot(create=False)
def boot(self,create=False):
@ -26,6 +27,29 @@ class Operator(Keymaker):
# load keychain into memory
self._keychain = self.keychain(force = True)
@property
def phone(self):
global TELEPHONE,TELEPHONE_KEYCHAIN
if TELEPHONE: return TELEPHONE
self.log('!! getting telephone !!')
if not TELEPHONE_KEYCHAIN:
self.log('!! getting telephone keychain !!')
connect_phonelines()
TELEPHONE=TheTelephone(keychain=TELEPHONE_KEYCHAIN)
return TELEPHONE
@property
def op(self):
global OPERATOR,OPERATOR_KEYCHAIN
if OPERATOR: return OPERATOR
self.log('!! getting operator !!')
if not OPERATOR_KEYCHAIN:
self.log('!! getting operator keychain !!')
connect_phonelines()
OPERATOR=TheOperator(keychain=OPERATOR_KEYCHAIN)
return OPERATOR
def encrypt_to_send(self,msg_json,from_privkey,to_pubkey):
if not msg_json or not from_privkey or not to_pubkey:
self.log('not enough info!')
@ -129,3 +153,133 @@ class Operator(Keymaker):
# return
req_data_encr = unencr_header + BSEP + json_phone_encr + BSEP + json_caller_encr
return req_data_encr
### CREATE PRIME ENTITIES
def create_phonelines():
## CREATE OPERATOR
op = Operator(name=OPERATOR_NAME)
op_keys_to_keep_on_client = ['pubkey_encr']
op_keys_to_keep_on_3rdparty = ['pubkey_decr','privkey_decr']
op_keys_to_keep_on_server = ['adminkey_encr','privkey_decr_encr','privkey_decr_decr','adminkey_decr_encr','adminkey_decr_decr']
## create phone
phone = Operator(name=TELEPHONE_NAME)
phone_keys_to_keep_on_client = ['privkey_encr']
phone_keys_to_keep_on_3rdparty = ['privkey_decr','pubkey_decr']
phone_keys_to_keep_on_server = ['pubkey_encr']
# create keys for Op
op_decr_keys = op.forge_new_keys(
keys_to_save=op_keys_to_keep_on_server, # on server only; flipped around
keys_to_return=op_keys_to_keep_on_client + op_keys_to_keep_on_3rdparty # on clients only
)
# create keys for phone
phone_decr_keys = phone.forge_new_keys(
name=TELEPHONE_NAME,
keys_to_save=phone_keys_to_keep_on_server, # on server only
keys_to_return=phone_keys_to_keep_on_client + phone_keys_to_keep_on_3rdparty # on clients only
)
## store remote keys
THIRD_PARTY_DICT = {OPERATOR_NAME:{}, TELEPHONE_NAME:{}}
for key in op_keys_to_keep_on_3rdparty:
if key in op_decr_keys:
THIRD_PARTY_DICT[OPERATOR_NAME][key]=op_decr_keys[key]
for key in phone_keys_to_keep_on_3rdparty:
if key in phone_decr_keys:
THIRD_PARTY_DICT[TELEPHONE_NAME][key]=phone_decr_keys[key]
# store local keys
STORE_IN_APP = {OPERATOR_NAME:{}, TELEPHONE_NAME:{}}
for key in op_keys_to_keep_on_client:
if key in op_decr_keys:
STORE_IN_APP[OPERATOR_NAME][key]=op_decr_keys[key]
for key in phone_keys_to_keep_on_client:
if key in phone_decr_keys:
STORE_IN_APP[TELEPHONE_NAME][key]=phone_decr_keys[key]
# package
STORE_IN_APP_pkg = package_for_transmission(STORE_IN_APP[TELEPHONE_NAME]) + BSEP + package_for_transmission(STORE_IN_APP[OPERATOR_NAME])
THIRD_PARTY_DICT_pkg = package_for_transmission(THIRD_PARTY_DICT[TELEPHONE_NAME]) + BSEP + package_for_transmission(THIRD_PARTY_DICT[OPERATOR_NAME])
# encrypt
omega_key = KomradeSymmetricKeyWithoutPassphrase()
STORE_IN_APP_encr = b64encode(omega_key.encrypt(STORE_IN_APP_pkg))
THIRD_PARTY_totalpkg = b64encode(omega_key.data + BSEP + omega_key.encrypt(THIRD_PARTY_DICT_pkg))
# save
with open(PATH_BUILTIN_KEYCHAIN,'wb') as of:
of.write(STORE_IN_APP_encr)
print('STORE_IN_APP_encr',STORE_IN_APP_encr)
with open(PATH_OPERATOR_WEB_KEYS_FILE,'wb') as of:
of.write(THIRD_PARTY_totalpkg)
print('THIRD_PARTY_DICT_encr',THIRD_PARTY_totalpkg)
def connect_phonelines():
# globals
global OMEGA_KEY,OPERATOR_KEYCHAIN,TELEPHONE_KEYCHAIN
if OMEGA_KEY and OPERATOR_KEYCHAIN and TELEPHONE_KEYCHAIN:
return (OPERATOR,TELEPHONE)
# import
from komrade.backend.mazes import tor_request
from komrade.backend import PATH_OPERATOR_WEB_KEYS_URL
# load local keys
if not os.path.exists(PATH_BUILTIN_KEYCHAIN):
print('builtin keys not present??')
return
with open(PATH_BUILTIN_KEYCHAIN,'rb') as f:
local_builtin_keychain_encr = b64decode(f.read())
# load remote keys
print('??',PATH_OPERATOR_WEB_KEYS_URL)
r = tor_request(PATH_OPERATOR_WEB_KEYS_URL)
if r.status_code!=200:
print('cannot authenticate the keymakers')
return
# unpack remote pkg
pkg = b64decode(r.text)
OMEGA_KEY_b,remote_builtin_keychain_encr = pkg.split(BSEP)
OMEGA_KEY = KomradeSymmetricKeyWithoutPassphrase(key=OMEGA_KEY_b)
remote_builtin_keychain = OMEGA_KEY.decrypt(remote_builtin_keychain_encr)
remote_builtin_keychain_phone,remote_builtin_keychain_op = remote_builtin_keychain.split(BSEP)
remote_builtin_keychain_phone_json = unpackage_from_transmission(remote_builtin_keychain_phone)
remote_builtin_keychain_op_json = unpackage_from_transmission(remote_builtin_keychain_op)
print('remote_builtin_keychain_phone_json',remote_builtin_keychain_phone_json)
print('remote_builtin_keychain_op_json',remote_builtin_keychain_op_json)
# unpack local pkg
local_builtin_keychain = OMEGA_KEY.decrypt(local_builtin_keychain_encr)
local_builtin_keychain_phone,local_builtin_keychain_op = local_builtin_keychain.split(BSEP)
local_builtin_keychain_phone_json = unpackage_from_transmission(local_builtin_keychain_phone)
local_builtin_keychain_op_json = unpackage_from_transmission(local_builtin_keychain_op)
print('local_builtin_keychain_phone_json',local_builtin_keychain_phone_json)
print('local_builtin_keychain_op_json',local_builtin_keychain_op_json)
# set builtin keychains
TELEPHONE_KEYCHAIN={}
OPERATOR_KEYCHAIN={}
dict_merge(TELEPHONE_KEYCHAIN,local_builtin_keychain_phone_json)
dict_merge(OPERATOR_KEYCHAIN,local_builtin_keychain_op_json)
dict_merge(TELEPHONE_KEYCHAIN,remote_builtin_keychain_phone_json)
dict_merge(OPERATOR_KEYCHAIN,remote_builtin_keychain_op_json)
return (OPERATOR_KEYCHAIN,TELEPHONE_KEYCHAIN)
# # load prime objects?
# from komrade.backend.the_operator import TheOperator
# from komrade.backend.the_telephone import TheTelephone
# OPERATOR = TheOperator(keychain=OPERATOR_KEYCHAIN)
# TELEPHONE = TheTelephone(keychain=TELEPHONE_KEYCHAIN)
# return (OPERATOR,TELEPHONE)

@ -8,8 +8,8 @@ from flask import Flask, request, jsonify
from flask_classful import FlaskView
# PATH_OPERATOR_WEB_KEYS_URI = hashish(b'keys')
PATH_OPERATOR_WEB_KEYS_FILE = f'/home/ryan/www/website-komrade/.builtin.keys'
PATH_OPERATOR_WEB_KEYS_URL = f'http://{KOMRADE_ONION}/.builtin.keys'
# PATH_OPERATOR_WEB_KEYS_FILE = f'/home/ryan/www/website-komrade/.builtin.keys'
# PATH_OPERATOR_WEB_KEYS_URL = f'http://{KOMRADE_ONION}/.builtin.keys'
# print(PATH_OPERATOR_WEB_KEYS_URL)

@ -8,10 +8,6 @@ from komrade import *
from komrade.backend import *
# PATH_OPERATOR_WEB_KEYS_URI = hashish(b'keys')
PATH_OPERATOR_WEB_KEYS_FILE = f'/home/ryan/www/website-komrade/.builtin.keys'
PATH_OPERATOR_WEB_KEYS_URL = f'http://{KOMRADE_ONION}/.builtin.keys'
# print(PATH_OPERATOR_WEB_KEYS_URL)
@ -27,7 +23,7 @@ class TheOperator(Operator):
return TELEPHONE
def __init__(self, name = OPERATOR_NAME, passphrase='acc', allow_builtin=True):
def __init__(self, name = OPERATOR_NAME, passphrase='acc', keychain = {}):
"""
Boot up the operator. Requires knowing or setting a password of memory.
"""
@ -35,8 +31,7 @@ class TheOperator(Operator):
# if not os.path.exists(PATH_OPERATOR): os.makedirs(PATH_OPERATOR)
if not passphrase:
passphrase=getpass.getpass('Hello, this is the Operator speaking. What is the passphrase?\n> ')
self.allow_builtin=allow_builtin
super().__init__(name,passphrase,path_crypt_keys=PATH_CRYPT_OP_KEYS,path_crypt_data=PATH_CRYPT_OP_DATA)
super().__init__(name,passphrase,path_crypt_keys=PATH_CRYPT_OP_KEYS,path_crypt_data=PATH_CRYPT_OP_DATA,keychain=keychain)
def decrypt_incoming(self,data):
# step 1 split:
@ -194,104 +189,6 @@ class TheOperator(Operator):
return (pkg,{})
def init_operators():
## CREATE OPERATOR
op = Operator(name=OPERATOR_NAME)
# save what we normally save for a client on the server -- The Op is a client from our pov
# take 1
# op_keys_to_keep_on_client = ['pubkey_decr']
# op_keys_to_keep_on_3rdparty = ['pubkey_encr','privkey_encr']
# op_keys_to_keep_on_server = ['adminkey_encr',
# 'privkey_decr_encr',
# 'privkey_decr_decr',
# 'adminkey_decr_encr',
# 'adminkey_decr_decr']
# phone_keys_to_keep_on_client = ['privkey_decr']
# phone_keys_to_keep_on_3rdparty = ['privkey_encr','pubkey_encr']
# phone_keys_to_keep_on_server = ['pubkey_decr']
op_keys_to_keep_on_client = ['pubkey_encr']
op_keys_to_keep_on_3rdparty = ['pubkey_decr','privkey_decr']
op_keys_to_keep_on_server = ['adminkey_encr',
'privkey_decr_encr',
'privkey_decr_decr',
'adminkey_decr_encr',
'adminkey_decr_decr']
phone_keys_to_keep_on_client = ['privkey_encr']
phone_keys_to_keep_on_3rdparty = ['privkey_decr','pubkey_decr']
phone_keys_to_keep_on_server = ['pubkey_encr']
op_decr_keys = op.forge_new_keys(
keys_to_save=op_keys_to_keep_on_server, # on server only; flipped around
keys_to_return=op_keys_to_keep_on_client + op_keys_to_keep_on_3rdparty # on clients only
)
from pprint import pprint
## CREATE TELEPHONE
phone = Operator(name=TELEPHONE_NAME)
phone_decr_keys = phone.forge_new_keys(
name=TELEPHONE_NAME,
keys_to_save=phone_keys_to_keep_on_server, # on server only
keys_to_return=phone_keys_to_keep_on_client + phone_keys_to_keep_on_3rdparty # on clients only
)
print('OP KEYS RETURNED')
pprint(op_decr_keys)
print('PHONE KEYS RETURNED')
pprint(phone_decr_keys)
THIRD_PARTY_DICT = {OPERATOR_NAME:{}, TELEPHONE_NAME:{}}
for key in op_keys_to_keep_on_3rdparty:
if key in op_decr_keys:
THIRD_PARTY_DICT[OPERATOR_NAME][key]=op_decr_keys[key]
for key in phone_keys_to_keep_on_3rdparty:
if key in phone_decr_keys:
THIRD_PARTY_DICT[TELEPHONE_NAME][key]=phone_decr_keys[key]
STORE_IN_APP = {OPERATOR_NAME:{}, TELEPHONE_NAME:{}}
for key in op_keys_to_keep_on_client:
if key in op_decr_keys:
STORE_IN_APP[OPERATOR_NAME][key]=op_decr_keys[key]
for key in phone_keys_to_keep_on_client:
if key in phone_decr_keys:
STORE_IN_APP[TELEPHONE_NAME][key]=phone_decr_keys[key]
STORE_IN_APP_pkg = package_for_transmission(STORE_IN_APP[TELEPHONE_NAME]) + BSEP + package_for_transmission(STORE_IN_APP[OPERATOR_NAME])
THIRD_PARTY_DICT_pkg = package_for_transmission(THIRD_PARTY_DICT[TELEPHONE_NAME]) + BSEP + package_for_transmission(THIRD_PARTY_DICT[OPERATOR_NAME])
print('store in app =',STORE_IN_APP)
print('store in web =',THIRD_PARTY_DICT)
print()
print('new: make omega key')
omega_key = KomradeSymmetricKeyWithoutPassphrase()
STORE_IN_APP_encr = b64encode(omega_key.encrypt(STORE_IN_APP_pkg))
THIRD_PARTY_totalpkg = b64encode(omega_key.data + BSEP + omega_key.encrypt(THIRD_PARTY_DICT_pkg))
with open(PATH_BUILTIN_KEYCHAIN,'wb') as of:
of.write(STORE_IN_APP_encr)
print('STORE_IN_APP_encr',STORE_IN_APP_encr)
with open(PATH_OPERATOR_WEB_KEYS_FILE,'wb') as of:
of.write(THIRD_PARTY_totalpkg)
print('THIRD_PARTY_DICT_encr',THIRD_PARTY_totalpkg)
def test_op():

@ -8,15 +8,14 @@ class TheTelephone(Operator):
"""
API client class for Caller to interact with The Operator.
"""
def __init__(self, caller=None, allow_builtin=True):
def __init__(self, caller=None, keychain={}):
super().__init__(
name=TELEPHONE_NAME,
keychain=keychain,
path_crypt_keys=PATH_CRYPT_CA_KEYS,
path_crypt_data=PATH_CRYPT_CA_KEYS
)
self.caller=caller
self.allow_builtin=allow_builtin
self.check_builtin_keys()
def dial_operator(self,msg):
msg=msg.replace('/','_')
@ -49,8 +48,7 @@ class TheTelephone(Operator):
json_phone = {json_phone}
json_caller = {json_caller}""")
op_keychain = unpackage_from_transmission(OPERATOR_KEYCHAIN)
phone_keychain = unpackage_from_transmission(TELEPHONE_KEYCHAIN)
print(type(self),self._keychain,self.keychain())
self.log('op_keychain',op_keychain)

@ -121,4 +121,12 @@ WHY_MSG = 'Forge the password of memory: '
TELEPHONE_KEYCHAIN = None
OPERATOR_KEYCHAIN = None
OMEGA_KEY = None
OMEGA_KEY = None
OPERATOR = None
TELEPHONE = None
PATH_OPERATOR_WEB_KEYS_FILE = f'/home/ryan/www/website-komrade/.builtin.keys'
PATH_OPERATOR_WEB_KEYS_URL = f'http://{KOMRADE_URL}/.builtin.keys'

@ -10,7 +10,7 @@ def logger():
handler = logging.StreamHandler()
formatter = logging.Formatter('[%(asctime)s]\n%(message)s\n')
handler.setFormatter(formatter)
logger = logging.getLogger(__file__)
logger = logging.getLogger('komrade')
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)
return logger

Loading…
Cancel
Save