Browse Source

Support shares from NC side

main
decentral1se 3 months ago
parent
commit
5b4fe5fc54
Signed by: decentral1se GPG Key ID: 92DAD76BD9567B8A
  1. 4
      .env.sample
  2. 1
      README.md
  3. 5
      compose.yml
  4. 1
      entrypoint.sh.tmpl
  5. 22
      pubspace.py

4
.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

1
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

5
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}

1
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 "$@"

22
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 {}