Support shares from NC side
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
decentral1se 2021-06-16 15:26:04 +02:00
parent f84c65fab8
commit 5b4fe5fc54
Signed by: decentral1se
GPG Key ID: 92DAD76BD9567B8A
5 changed files with 32 additions and 1 deletions

View File

@ -2,9 +2,13 @@
export MASTODON_ACCESS_TOKEN=foobar export MASTODON_ACCESS_TOKEN=foobar
export MASTODON_API_BASE_URL=social.lumbung.space export MASTODON_API_BASE_URL=social.lumbung.space
export APP_LOG_LEVEL=info export APP_LOG_LEVEL=info
export NEXTCLOUD_API_BASE_URL=cloud.lumbung.space
export NEXTCLOUD_USER=decentral1se
export NEXTCLOUD_APP_PASSWORD=barfoo
# Deployment # Deployment
export STACK_NAME=publish_lumbung_space export STACK_NAME=publish_lumbung_space
export DOMAIN=publish.lumbung.space export DOMAIN=publish.lumbung.space
export ENTRYPOINT_CONF_VERSION=v1 export ENTRYPOINT_CONF_VERSION=v1
export SECRET_MASTODON_ACCESS_TOKEN=v1 export SECRET_MASTODON_ACCESS_TOKEN=v1
export SECRET_NEXTCLOUD_APP_PASSWORD=v1

View File

@ -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 $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 $ cp .env.sample .env # and update the values to match the environment
$ set -a && source .env && set +a $ set -a && source .env && set +a
$ docker stack deploy -c compose.yml publish_lumbung_space $ docker stack deploy -c compose.yml publish_lumbung_space

View File

@ -6,10 +6,12 @@ services:
image: "decentral1se/pubspace:latest" image: "decentral1se/pubspace:latest"
environment: environment:
- MASTODON_ACCESS_TOKEN_FILE=/run/secrets/access_token - MASTODON_ACCESS_TOKEN_FILE=/run/secrets/access_token
- NEXTCLOUD_APP_PASSWORD_FILE=/run/secrets/app_password
- MASTODON_API_BASE_URL - MASTODON_API_BASE_URL
- APP_LOG_LEVEL - APP_LOG_LEVEL
secrets: secrets:
- access_token - access_token
- app_password
networks: networks:
- proxy - proxy
configs: configs:
@ -50,3 +52,6 @@ secrets:
access_token: access_token:
external: true external: true
name: ${STACK_NAME}_access_token_${SECRET_MASTODON_ACCESS_TOKEN} name: ${STACK_NAME}_access_token_${SECRET_MASTODON_ACCESS_TOKEN}
app_password:
external: true
name: ${STACK_NAME}_app_password_${SECRET_NEXTCLOUD_APP_PASSWORD}

View File

@ -24,6 +24,7 @@ file_env() {
} }
file_env "MASTODON_ACCESS_TOKEN" file_env "MASTODON_ACCESS_TOKEN"
file_env "NEXTCLOUD_APP_PASSWORD"
echo "Passing it back to the upstream ENTRYPOINT/CMD..." echo "Passing it back to the upstream ENTRYPOINT/CMD..."
exec "$@" exec "$@"

View File

@ -1,12 +1,17 @@
import logging import logging
from os import environ from os import environ
import owncloud
from fastapi import FastAPI, Request from fastapi import FastAPI, Request
from mastodon import Mastodon, StreamListener from mastodon import Mastodon, StreamListener
MASTODON_ACCESS_TOKEN = environ.get("MASTODON_ACCESS_TOKEN") MASTODON_ACCESS_TOKEN = environ.get("MASTODON_ACCESS_TOKEN")
MASTODON_API_BASE_URL = environ.get("MASTODON_API_BASE_URL") 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") APP_LOG_LEVEL = environ.get("APP_LOG_LEVEL")
if APP_LOG_LEVEL == "info": if APP_LOG_LEVEL == "info":
APP_LOG_LEVEL = logging.INFO APP_LOG_LEVEL = logging.INFO
@ -19,6 +24,7 @@ mastodon = Mastodon(
access_token=MASTODON_ACCESS_TOKEN, access_token=MASTODON_ACCESS_TOKEN,
api_base_url=f"https://{MASTODON_API_BASE_URL}", api_base_url=f"https://{MASTODON_API_BASE_URL}",
) )
nextcloud = owncloud.Client(f"https://{NEXTCLOUD_API_BASE_URL}")
log = logging.getLogger("uvicorn") log = logging.getLogger("uvicorn")
log.setLevel(APP_LOG_LEVEL) log.setLevel(APP_LOG_LEVEL)
@ -33,12 +39,26 @@ class PubspaceListener(StreamListener):
mastodon.stream_hashtag("pubspace", PubspaceListener(), run_async=True) 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("/") @app.get("/")
async def home(request: Request): async def home(request: Request):
try: 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: except Exception:
return {} return {}