diff --git a/.env.sample b/.env.sample index 0031883..0c30121 100644 --- a/.env.sample +++ b/.env.sample @@ -2,9 +2,13 @@ export MASTODON_ACCESS_TOKEN=foobar export MASTODON_API_BASE_URL=social.lumbung.space export APP_LOG_LEVEL=info +export NEXTCLOUD_API_BASE_URL=cloud.lumbung.space +export NEXTCLOUD_USER=decentral1se +export NEXTCLOUD_APP_PASSWORD=barfoo # Deployment export STACK_NAME=publish_lumbung_space export DOMAIN=publish.lumbung.space export ENTRYPOINT_CONF_VERSION=v1 export SECRET_MASTODON_ACCESS_TOKEN=v1 +export SECRET_NEXTCLOUD_APP_PASSWORD=v1 diff --git a/README.md b/README.md index 8c1933f..7a0cdfb 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,7 @@ to generate a share for that file. The Nextcloud crontab runs the script. ``` $ printf $YOURMASTODONACCESSTOKEN | docker secret create publish_lumbung_space_access_token_v1 - +$ printf $YOURNEXTCLOUDAPPPASSWORD | docker secret create publish_lumbung_space_app_password_v1 - $ cp .env.sample .env # and update the values to match the environment $ set -a && source .env && set +a $ docker stack deploy -c compose.yml publish_lumbung_space diff --git a/compose.yml b/compose.yml index e6253ab..7c75902 100644 --- a/compose.yml +++ b/compose.yml @@ -6,10 +6,12 @@ services: image: "decentral1se/pubspace:latest" environment: - MASTODON_ACCESS_TOKEN_FILE=/run/secrets/access_token + - NEXTCLOUD_APP_PASSWORD_FILE=/run/secrets/app_password - MASTODON_API_BASE_URL - APP_LOG_LEVEL secrets: - access_token + - app_password networks: - proxy configs: @@ -50,3 +52,6 @@ secrets: access_token: external: true name: ${STACK_NAME}_access_token_${SECRET_MASTODON_ACCESS_TOKEN} + app_password: + external: true + name: ${STACK_NAME}_app_password_${SECRET_NEXTCLOUD_APP_PASSWORD} diff --git a/entrypoint.sh.tmpl b/entrypoint.sh.tmpl index 9ad7dee..865c4bd 100644 --- a/entrypoint.sh.tmpl +++ b/entrypoint.sh.tmpl @@ -24,6 +24,7 @@ file_env() { } file_env "MASTODON_ACCESS_TOKEN" +file_env "NEXTCLOUD_APP_PASSWORD" echo "Passing it back to the upstream ENTRYPOINT/CMD..." exec "$@" diff --git a/pubspace.py b/pubspace.py index d21131b..da13eb7 100644 --- a/pubspace.py +++ b/pubspace.py @@ -1,12 +1,17 @@ import logging from os import environ +import owncloud from fastapi import FastAPI, Request from mastodon import Mastodon, StreamListener MASTODON_ACCESS_TOKEN = environ.get("MASTODON_ACCESS_TOKEN") MASTODON_API_BASE_URL = environ.get("MASTODON_API_BASE_URL") +NEXTCLOUD_API_BASE_URL = environ.get("NEXTCLOUD_API_BASE_URL") +NEXTCLOUD_USER = environ.get("NEXTCLOUD_USER") +NEXTCLOUD_APP_PASSWORD = environ.get("NEXTCLOUD_APP_PASSWORD") + APP_LOG_LEVEL = environ.get("APP_LOG_LEVEL") if APP_LOG_LEVEL == "info": APP_LOG_LEVEL = logging.INFO @@ -19,6 +24,7 @@ mastodon = Mastodon( access_token=MASTODON_ACCESS_TOKEN, api_base_url=f"https://{MASTODON_API_BASE_URL}", ) +nextcloud = owncloud.Client(f"https://{NEXTCLOUD_API_BASE_URL}") log = logging.getLogger("uvicorn") log.setLevel(APP_LOG_LEVEL) @@ -33,12 +39,26 @@ class PubspaceListener(StreamListener): mastodon.stream_hashtag("pubspace", PubspaceListener(), run_async=True) +nextcloud.login(NEXTCLOUD_USER, NEXTCLOUD_APP_PASSWORD) + + +def create_share(fpath): + if not nextcloud.is_shared(fpath): + info = nextcloud.share_file_with_link(fpath) + return info.get_link() + return None @app.get("/") async def home(request: Request): try: - app.state.log.info(await request.json()) + payload = await request.json() + file = payload["file"] + link = create_share(file) + if link: + app.state.log(f"Shared {file} on {link}") + else: + app.state.log(f"{file} has already been shared!") except Exception: return {}