microblog.pub/config.py

120 lines
3.1 KiB
Python
Raw Normal View History

import subprocess
2018-05-18 18:41:41 +00:00
import os
import yaml
from pymongo import MongoClient
import requests
2018-05-30 21:47:01 +00:00
from itsdangerous import JSONWebSignatureSerializer
2018-05-30 21:53:14 +00:00
from datetime import datetime
2018-05-18 18:41:41 +00:00
from utils import strtobool
2018-05-30 21:47:01 +00:00
from utils.key import Key, KEY_DIR, get_secret_key
2018-05-18 18:41:41 +00:00
from utils.actor_service import ActorService
from utils.object_service import ObjectService
def noop():
pass
2018-05-18 18:41:41 +00:00
CUSTOM_CACHE_HOOKS = False
try:
from cache_hooks import purge as custom_cache_purge_hook
except ModuleNotFoundError:
custom_cache_purge_hook = noop
VERSION = subprocess.check_output(['git', 'describe', '--always']).split()[0].decode('utf-8')
2018-05-18 18:41:41 +00:00
DEBUG_MODE = strtobool(os.getenv('MICROBLOGPUB_DEBUG', 'false'))
2018-05-18 18:41:41 +00:00
CTX_AS = 'https://www.w3.org/ns/activitystreams'
CTX_SECURITY = 'https://w3id.org/security/v1'
AS_PUBLIC = 'https://www.w3.org/ns/activitystreams#Public'
HEADERS = [
'application/activity+json',
'application/ld+json;profile=https://www.w3.org/ns/activitystreams',
'application/ld+json; profile="https://www.w3.org/ns/activitystreams"',
'application/ld+json',
]
2018-05-30 20:50:45 +00:00
with open(os.path.join(KEY_DIR, 'me.yml')) as f:
2018-05-18 18:41:41 +00:00
conf = yaml.load(f)
USERNAME = conf['username']
NAME = conf['name']
DOMAIN = conf['domain']
SCHEME = 'https' if conf.get('https', True) else 'http'
BASE_URL = SCHEME + '://' + DOMAIN
ID = BASE_URL
SUMMARY = conf['summary']
ICON_URL = conf['icon_url']
PASS = conf['pass']
PUBLIC_INSTANCES = conf.get('public_instances', [])
2018-05-25 21:57:29 +00:00
# TODO(tsileo): choose dark/light style
2018-05-21 19:10:21 +00:00
THEME_COLOR = conf.get('theme_color')
2018-05-18 18:41:41 +00:00
USER_AGENT = (
f'{requests.utils.default_user_agent()} '
f'(microblog.pub/{VERSION}; +{BASE_URL})'
)
# TODO(tsileo): use 'mongo:27017;
# mongo_client = MongoClient(host=['mongo:27017'])
mongo_client = MongoClient(
host=[os.getenv('MICROBLOGPUB_MONGODB_HOST', 'localhost:27017')],
)
DB_NAME = '{}_{}'.format(USERNAME, DOMAIN.replace('.', '_'))
DB = mongo_client[DB_NAME]
def _drop_db():
if not DEBUG_MODE:
return
mongo_client.drop_database(DB_NAME)
2018-05-18 18:41:41 +00:00
KEY = Key(USERNAME, DOMAIN, create=True)
2018-05-30 21:47:01 +00:00
JWT_SECRET = get_secret_key('jwt')
JWT = JSONWebSignatureSerializer(JWT_SECRET)
def _admin_jwt_token() -> str:
return JWT.dumps({'me': 'ADMIN', 'ts': datetime.now().timestamp()}).decode('utf-8') # type: ignore
ADMIN_API_KEY = get_secret_key('admin_api_key', _admin_jwt_token)
2018-05-18 18:41:41 +00:00
ME = {
"@context": [
CTX_AS,
CTX_SECURITY,
],
"type": "Person",
"id": ID,
"following": ID+"/following",
"followers": ID+"/followers",
"liked": ID+"/liked",
"inbox": ID+"/inbox",
"outbox": ID+"/outbox",
"preferredUsername": USERNAME,
"name": NAME,
"summary": SUMMARY,
"endpoints": {},
"url": ID,
"icon": {
"mediaType": "image/png",
"type": "Image",
"url": ICON_URL,
},
"publicKey": {
"id": ID+"#main-key",
"owner": ID,
"publicKeyPem": KEY.pubkey_pem,
},
}
print(ME)
ACTOR_SERVICE = ActorService(USER_AGENT, DB.actors_cache, ID, ME, DB.instances)
OBJECT_SERVICE = ObjectService(USER_AGENT, DB.objects_cache, DB.inbox, DB.outbox, DB.instances)