From eaac5da4144048b787cf35ab1f15c3084f73dbb9 Mon Sep 17 00:00:00 2001 From: Adar Nimrod <nimrod@shore.co.il> Date: Fri, 23 Apr 2021 21:36:53 +0300 Subject: [PATCH] Actual implementation. Remove runamel.yaml, json output is available and better. --- app.py | 36 ++++++++++++++++++++++++++++++------ requirements.txt | 1 - 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/app.py b/app.py index 6226c9a..1f907e8 100644 --- a/app.py +++ b/app.py @@ -1,18 +1,17 @@ """Anonymous push notification service for Nextcloud.""" # pylint: disable=import-error +import json import os import docker from flask import Flask, request -from ruamel.yaml import YAML app = Flask(__name__) client = docker.from_env() -yaml = YAML(typ="safe") -USERNAME = os.getenv("NC_USERNAME", "nimrod") +NAME = os.getenv("NC_NAME", "Nimrod Adar") CONTAINER_NAME = os.getenv("NC_CONTAINER", "nextcloud_nextcloud_1") @@ -35,7 +34,32 @@ def send_message(): message = data else: message = request.args["message"] - return message - # result = container.exec_run( - # f"""./occ notification:generate -- {user_id} "{message}"""") + for c in client.containers.list(): # pylint: disable=invalid-name + if c.name == CONTAINER_NAME: + container = c + break + else: + raise RuntimeError(f"Failed to find container {CONTAINER_NAME}.") + + users = json.loads( + container.exec_run( + "./occ user:list --output json --info", user="www-data" + ).output + ) + for (k, v) in users.items(): # pylint: disable=invalid-name + if v["display_name"] == NAME: + uid = k + break + else: + raise RuntimeError(f"Failed to find user {NAME}.") + + result = container.exec_run( + f"""./occ notification:generate -- {uid} '{message}'""", + user="www-data", + ) + + if result.exit_code != 0: + raise RuntimeError(result.output.decode()) + + return message diff --git a/requirements.txt b/requirements.txt index 3107c49..e540f67 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,3 @@ docker flask gunicorn -ruamel.yaml -- GitLab