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