Compare commits

...

8 Commits

Author SHA1 Message Date
1e62814108 Add note and drop logging [ci skip] 2021-06-16 20:47:55 +02:00
bc7f51098e Fix bad typo
All checks were successful
continuous-integration/drone/push Build is passing
2021-06-16 17:04:41 +02:00
6256260057 Ignore test files
All checks were successful
continuous-integration/drone/push Build is passing
2021-06-16 17:02:46 +02:00
f677e27282 Attempt to log more and find correct paths 2021-06-16 17:02:34 +02:00
c1b25603a8 Ignore more stuff 2021-06-16 17:02:29 +02:00
f66c2e0396 More info from the script 2021-06-16 17:02:23 +02:00
b61342b576 Fix logging
All checks were successful
continuous-integration/drone/push Build is passing
2021-06-16 16:14:07 +02:00
0aa5c1b625 Pass env vars, push does build now 2021-06-16 15:54:32 +02:00
7 changed files with 44 additions and 16 deletions

View File

@ -1,4 +1,5 @@
.envrc
.git .git
.mypy_cache
.venv .venv
__pycache__ __pycache__
.mypy_cache

1
.gitignore vendored
View File

@ -1,2 +1,3 @@
*.pyc *.pyc
/__pycache__/ /__pycache__/
test.py

View File

@ -1,5 +1,11 @@
# pubspace # pubspace
> **WARNING**: this was an experimental prototype to understand if an
> "always-on" intermediary service could facilitate digital publishing
> practices in the lumbung.space. We have since moved to the idea of a
> slow and not real-time mode of publishing which will happen in another
> repository.
[![Build Status](https://drone.autonomic.zone/api/badges/ruangrupa/pubspace/status.svg?ref=refs/heads/main)](https://drone.autonomic.zone/ruangrupa/pubspace) [![Build Status](https://drone.autonomic.zone/api/badges/ruangrupa/pubspace/status.svg?ref=refs/heads/main)](https://drone.autonomic.zone/ruangrupa/pubspace)
A service to facilitate collective digital publishing practices. A service to facilitate collective digital publishing practices.

View File

@ -5,10 +5,12 @@ services:
app: app:
image: "decentral1se/pubspace:latest" image: "decentral1se/pubspace:latest"
environment: environment:
- MASTODON_ACCESS_TOKEN_FILE=/run/secrets/access_token
- NEXTCLOUD_APP_PASSWORD_FILE=/run/secrets/app_password
- MASTODON_API_BASE_URL
- APP_LOG_LEVEL - APP_LOG_LEVEL
- MASTODON_ACCESS_TOKEN_FILE=/run/secrets/access_token
- MASTODON_API_BASE_URL
- NEXTCLOUD_API_BASE_URL
- NEXTCLOUD_APP_PASSWORD_FILE=/run/secrets/app_password
- NEXTCLOUD_USER
secrets: secrets:
- access_token - access_token
- app_password - app_password

View File

@ -12,5 +12,5 @@ run:
build: build:
@docker build -t decentral1se/pubspace . @docker build -t decentral1se/pubspace .
push: push: build
@docker push decentral1se/pubspace @docker push decentral1se/pubspace

View File

@ -1,5 +1,6 @@
import logging import logging
from os import environ from os import environ
from os.path import basename
import owncloud import owncloud
from fastapi import FastAPI, Request from fastapi import FastAPI, Request
@ -43,8 +44,11 @@ nextcloud.login(NEXTCLOUD_USER, NEXTCLOUD_APP_PASSWORD)
def create_share(fpath): def create_share(fpath):
if not nextcloud.is_shared(fpath): fname = basname(fpath)
info = nextcloud.share_file_with_link(fpath) fpaths = nextcloud.list("/", depth="infinity")
matching = [f.path for f in fpaths if fname in f.path][0]
if not nextcloud.is_shared(matching):
info = nextcloud.share_file_with_link(matching)
return info.get_link() return info.get_link()
return None return None
@ -53,14 +57,23 @@ def create_share(fpath):
async def home(request: Request): async def home(request: Request):
try: try:
payload = 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 {} request.app.state.log.info("Unable to parse request, bailing out")
return {"detail": "unknown request"}
request.app.state.log.info(f"Received: {payload}")
try:
file = payload["rel_path"]
link = create_share(file)
except Exception:
request.app.state.log.info(f"Failed to share {file}")
return {"detail": "failed to create share"}
if link:
request.app.state.log.info(f"Shared {file} on {link}")
else:
request.app.state.log.info(f"{file} already shared or failure!")
@app.get("/healthz") @app.get("/healthz")

View File

@ -1,9 +1,14 @@
#!/bin/bash #!/bin/bash
FILE="$1" set -e
ACTORS_USER_ID="$1"
OWNER_USER_ID="$2"
NEXTCLOUD_RELATIVE_PATH="$3"
LOCALLY_AVAILABLE_FILE="$4"
/usr/bin/curl \ /usr/bin/curl \
-H "Content-Type: application/json" \ -H "Content-Type: application/json" \
-X GET \ -X GET \
-d "{\"file\":\"${FILE}\"}" \ -d "{\"actor_id\":\"${ACTORS_USER_ID}\", \"owner_id\":\"${OWNER_USER_ID}\", \"rel_path\":\"${NEXTCLOUD_RELATIVE_PATH}\", \"local_path\":\"${LOCALLY_AVAILABLE_PATH}\"}" \
https://publish.lumbung.space https://publish.lumbung.space