microblog.pub/config.py

111 lines
2.7 KiB
Python
Raw Normal View History

2018-05-18 18:41:41 +00:00
import os
2018-06-16 20:02:10 +00:00
import subprocess
from datetime import datetime
2018-05-18 18:41:41 +00:00
import requests
2018-06-16 20:02:10 +00:00
import yaml
2018-05-30 21:47:01 +00:00
from itsdangerous import JSONWebSignatureSerializer
2018-06-16 20:02:10 +00:00
from pymongo import MongoClient
2018-05-18 18:41:41 +00:00
2018-06-16 20:02:10 +00:00
from little_boxes import strtobool
from utils.key import KEY_DIR
from utils.key import get_key
from utils.key import get_secret_key
2018-06-16 19:24:53 +00:00
2018-05-18 18:41:41 +00:00
def noop():
pass
2018-05-18 18:41:41 +00:00
CUSTOM_CACHE_HOOKS = False
try:
2018-06-16 19:24:53 +00:00
from cache_hooks import purge as custom_cache_purge_hook
except ModuleNotFoundError:
custom_cache_purge_hook = noop
2018-06-17 17:21:59 +00:00
VERSION = (
subprocess.check_output(["git", "describe", "--always"]).split()[0].decode("utf-8")
)
2018-05-18 18:41:41 +00:00
2018-06-17 17:21:59 +00:00
DEBUG_MODE = strtobool(os.getenv("MICROBLOGPUB_DEBUG", "false"))
2018-06-17 17:21:59 +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"
2018-05-18 18:41:41 +00:00
HEADERS = [
2018-06-17 17:21:59 +00:00
"application/activity+json",
"application/ld+json;profile=https://www.w3.org/ns/activitystreams",
2018-05-18 18:41:41 +00:00
'application/ld+json; profile="https://www.w3.org/ns/activitystreams"',
2018-06-17 17:21:59 +00:00
"application/ld+json",
2018-05-18 18:41:41 +00:00
]
2018-06-17 17:21:59 +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)
2018-06-17 17:21:59 +00:00
USERNAME = conf["username"]
NAME = conf["name"]
DOMAIN = conf["domain"]
SCHEME = "https" if conf.get("https", True) else "http"
BASE_URL = SCHEME + "://" + DOMAIN
2018-05-18 18:41:41 +00:00
ID = BASE_URL
2018-06-17 17:21:59 +00:00
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-06-17 17:21:59 +00:00
THEME_COLOR = conf.get("theme_color")
2018-05-18 18:41:41 +00:00
USER_AGENT = (
2018-06-17 17:21:59 +00:00
f"{requests.utils.default_user_agent()} " f"(microblog.pub/{VERSION}; +{BASE_URL})"
2018-05-18 18:41:41 +00:00
)
mongo_client = MongoClient(
2018-06-17 17:21:59 +00:00
host=[os.getenv("MICROBLOGPUB_MONGODB_HOST", "localhost:27017")]
2018-05-18 18:41:41 +00:00
)
2018-06-17 17:21:59 +00:00
DB_NAME = "{}_{}".format(USERNAME, DOMAIN.replace(".", "_"))
DB = mongo_client[DB_NAME]
2018-06-16 19:24:53 +00:00
def _drop_db():
if not DEBUG_MODE:
return
mongo_client.drop_database(DB_NAME)
2018-06-16 19:24:53 +00:00
KEY = get_key(ID, USERNAME, DOMAIN)
2018-05-18 18:41:41 +00:00
2018-05-30 21:47:01 +00:00
2018-06-17 17:21:59 +00:00
JWT_SECRET = get_secret_key("jwt")
2018-05-30 21:47:01 +00:00
JWT = JSONWebSignatureSerializer(JWT_SECRET)
2018-06-16 19:24:53 +00:00
2018-05-30 21:47:01 +00:00
def _admin_jwt_token() -> str:
2018-06-17 18:51:23 +00:00
return JWT.dumps({"me": "ADMIN", "ts": datetime.now().timestamp()}).decode( # type: ignore
2018-06-17 17:21:59 +00:00
"utf-8"
2018-06-17 18:51:23 +00:00
)
2018-05-30 21:47:01 +00:00
2018-06-17 17:21:59 +00:00
ADMIN_API_KEY = get_secret_key("admin_api_key", _admin_jwt_token)
2018-05-30 21:47:01 +00:00
2018-05-18 18:41:41 +00:00
ME = {
2018-06-17 17:21:59 +00:00
"@context": [CTX_AS, CTX_SECURITY],
2018-05-18 18:41:41 +00:00
"type": "Person",
"id": ID,
2018-06-17 17:21:59 +00:00
"following": ID + "/following",
"followers": ID + "/followers",
"liked": ID + "/liked",
"inbox": ID + "/inbox",
"outbox": ID + "/outbox",
2018-05-18 18:41:41 +00:00
"preferredUsername": USERNAME,
"name": NAME,
"summary": SUMMARY,
"endpoints": {},
"url": ID,
2018-06-17 17:21:59 +00:00
"icon": {"mediaType": "image/png", "type": "Image", "url": ICON_URL},
2018-06-16 19:24:53 +00:00
"publicKey": KEY.to_dict(),
2018-05-18 18:41:41 +00:00
}