From 1ff6179a7832d1c3074bd6b44a90d6d1a7ce006d Mon Sep 17 00:00:00 2001 From: William Pitcock Date: Fri, 10 Aug 2018 14:59:46 -0500 Subject: [PATCH] more skeleton --- viera/__init__.py | 10 ++++++++++ viera/actor.py | 43 +++++++++++++++++++++++++++++++++++++++++++ viera/database.py | 24 ++++++++++++++++++++++++ 3 files changed, 77 insertions(+) create mode 100644 viera/database.py diff --git a/viera/__init__.py b/viera/__init__.py index 4cfb05c..c32462d 100644 --- a/viera/__init__.py +++ b/viera/__init__.py @@ -4,9 +4,19 @@ from . import logging import asyncio import aiohttp import aiohttp.web +import yaml + + +def load_config(): + with open('viera.yaml') as f: + return yaml.load(f) + + +CONFIG = load_config() app = aiohttp.web.Application() +from . import database from . import actor diff --git a/viera/actor.py b/viera/actor.py index e69de29..7d0329f 100644 --- a/viera/actor.py +++ b/viera/actor.py @@ -0,0 +1,43 @@ +import aiohttp.web +import logging +from Crypto.PublicKey import RSA +from .database import DATABASE + + +# generate actor keys if not present +if "actorKeys" not in DATABASE: + logging.info("No actor keys present, generating 4096-bit RSA keypair.") + + privkey = RSA.generate(4096) + pubkey = privkey.publickey() + + DATABASE["actorKeys"] = { + "publicKey": pubkey.exportKey('PEM'), + "privateKey": privkey.exportKey('PEM') + } + + +from . import app + + +async def actor(request): + data = { + "@context": "https://www.w3.org/ns/activitystreams", + "endpoints": { + "sharedInbox": "https://{}/inbox".format(request.host) + }, + "followers": "https://{}/followers".format(request.host), + "inbox": "https://{}/inbox".format(request.host), + "name": "Viera", + "type": "Application", + "publicKey": { + "id": "https://{}/actor#main-key".format(request.host), + "owner": "https://{}/actor".format(request.host), + "publicKeyPem": DATABASE["actorKeys"]["publicKey"] + }, + "summary": "Viera, the bot" + } + return aiohttp.web.json_response(data) + + +app.router.add_get('/actor', actor) diff --git a/viera/database.py b/viera/database.py new file mode 100644 index 0000000..857af93 --- /dev/null +++ b/viera/database.py @@ -0,0 +1,24 @@ +import asyncio +import logging +import simplejson as json + + +from . import CONFIG + + +try: + with open(CONFIG['db']) as f: + DATABASE = json.load(f) +except: + logging.info('No database was found, making a new one.') + DATABASE = {} + + +async def database_save(): + while True: + with open(CONFIG['db'], 'w') as f: + json.dump(DATABASE, f) + await asyncio.sleep(30) + + +asyncio.ensure_future(database_save())