Support shares from NC side
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
f84c65fab8
commit
5b4fe5fc54
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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}
|
||||||
|
@ -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 "$@"
|
||||||
|
22
pubspace.py
22
pubspace.py
@ -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 {}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user