notify: added more documentation + examples

This commit is contained in:
eyjhb 2025-03-10 19:41:57 +01:00
parent b067fb5df2
commit 76b09c1c5f
Signed by: eyjhb
GPG key ID: 609F508E3239F920
2 changed files with 98 additions and 27 deletions

View file

@ -32,6 +32,7 @@ CONFIG_PORT = int(getenv("PORT", 8080))
CONFIG_DATABASE_PATH = getenv("DATABASE_PATH", "notifications.db") CONFIG_DATABASE_PATH = getenv("DATABASE_PATH", "notifications.db")
CONFIG_MATRIX_BOT_NAME = getenv("MATRIX_BOT_NAME", "unset")
CONFIG_MATRIX_BOT_TOKEN = getenv("MATRIX_BOT_TOKEN") CONFIG_MATRIX_BOT_TOKEN = getenv("MATRIX_BOT_TOKEN")
CONFIG_MATRIX_HOST = getenv("MATRIX_HOST") CONFIG_MATRIX_HOST = getenv("MATRIX_HOST")
@ -41,33 +42,44 @@ CONFIG_MAIL_USERNAME = getenv("MAIL_USERNAME")
CONFIG_MAIL_PASSWORD = getenv("MAIL_PASSWORD") CONFIG_MAIL_PASSWORD = getenv("MAIL_PASSWORD")
CONFIG_MAIL_DOMAIN = getenv("MAIL_DOMAIN") CONFIG_MAIL_DOMAIN = getenv("MAIL_DOMAIN")
CONFIG_MAIL_HOST = getenv("MAIL_HOST") CONFIG_MAIL_HOST = getenv("MAIL_HOST")
CONFIG_MAIL_PORT = int(getenv("MAIL_PORT")) CONFIG_MAIL_PORT = int(getenv("MAIL_PORT", "465"))
CONFIG_MAIL_MODE = getenv("MAIL_MODE", "ssl") CONFIG_MAIL_MODE = getenv("MAIL_MODE", "ssl")
script_example = rf"""#!/usr/bin/env bash
#!/usr/bin/env nix-shell
#!nix-shell --pure -i python3 -p "python3.withPackages (ps: with ps; [ requests ])"
import requests
import argparse
import sys
import os
script_example = r"""#!/usr/bin/env bash parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
BODY="$1" parser.add_argument("--title", default="", help="Subject/title of the notification")
TITLE=${2:-Notification} parser.add_argument("--body", default="", help="`-` for stdin")
JQ_EXPR=${3:-.} parser.add_argument("--jq", default=".", help="Jq filter to use")
TYPE=${4:-matrix} parser.add_argument("--type", default="matrix", help="mail or matrix")
TOKEN="$(cat ~/.config/notify/token)" parser.add_argument("--token", help="token to use")
# TOKEN="$(cat /run/agenix/notify-token)" parser.add_argument("--token-file", help="file to read token from")
URL="||URL||/notify" parser.add_argument("--url", default="{CONFIG_URL}/notify", help="Notify endpoint")
args = parser.parse_args()
# get stdin if needed token: str = args.token
if [ "$BODY" = "-" ]; then if args.token_file:
BODY="$(cat -)" token = open(args.token_file, "r").read().strip()
fi if not token:
exit("No token or tokenfile specified, or empty")
# make request data = args.body
curl -H "Authorization: Bearer $TOKEN" "$URL" \ if data == "-" and not sys.stdin.isatty():
--get \ data = "\n".join(sys.stdin.readlines())
--data-urlencode "title=$TITLE" \
--data-urlencode "body=$BODY" \ req = requests.post(args.url, headers={{"Authorization": f"Bearer {{token}}"}}, data=data)
--data-urlencode "jq=$JQ_EXPR" \ print(req.text)
--data-urlencode "type=$TYPE" """
""".replace(
"||URL||", "https://notify.fricloud.dk" script_example_with_token = script_example.replace(
'--token"',
'--token", default="||TOKEN||"',
) )
@ -149,9 +161,66 @@ def index():
<input type="submit" class="btn btn-primary" name="action" value="Generate Token"> <input type="submit" class="btn btn-primary" name="action" value="Generate Token">
</form> </form>
<hr> <hr>
<pre><code> <p>
{script_example} This notification service has support for both matrix and email.
Matrix notifications will be sent from {CONFIG_MATRIX_BOT_NAME}, be sure to invite them to the room/space if it is private.
If using email, they will only be sent to your member email, and can't be sent anywhere else.
You'll receive them from {CONFIG_MAIL_USERNAME}@{CONFIG_MAIL_DOMAIN}.
</p>
<hr>
<table class="table">
<thead>
<tr>
<th scope="col">Param</th>
<th scope="col">Description</th>
<th scope="col">Default</th>
<th scope="col">Example</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">title</th>
<td>Title of notification</td>
<td>Notification</td>
<td>Compilation Finished!</td>
</tr>
<tr>
<th scope="row">body</th>
<td>Body of notification</td>
<td>empty</td>
<td>Compilation result: success (default is nothing)</td>
</tr>
<tr>
<th scope="row">type</th>
<td>type of notification</td>
<td>matrix</td>
<td>matrix</td>
</tr>
<tr>
<th scope="row">room_id</th>
<td>Matrix room ID</td>
<td>default room</td>
<td>!yREJWHUMJhGROiHbtu:fricloud.dk or #na-offtopic:rend.al</td>
</tr>
</tbody>
</table>
<hr>
curl
<pre class="border"><code>curl "{CONFIG_URL}/notify" -H "Authorization: Bearer {token}"</code></pre>
curl w/ specific body/title
<pre class="border"><code>curl "{CONFIG_URL}/notify?title=MyTitle&body=MyBody" -H "Authorization: Bearer {token}"</code></pre>
Python
<pre class="border"><code>{script_example}</code></pre>
Python w/ <b>hardcoded token (DO NOT SHARE)</b>
<pre class="border"><code>{script_example_with_token}</code></pre>
Nix Python Script <b>HARDCODED TOKEN (DO NOT SHARE)</b>
<pre class="border"><code>pkgs.writers.writePython3Bin "notify" {{
libraries = with pkgs.python3Packages; [ requests ];
doCheck = false;
}} ''{script_example_with_token}'';
</code></pre> </code></pre>
<!-- <!--
<p class="fs-5">You've successfully loaded up the Bootstrap starter example. It includes <a href="https://getbootstrap.com/">Bootstrap 5</a> via the <a href="https://www.jsdelivr.com/package/npm/bootstrap">jsDelivr CDN</a> and includes an additional CSS and JS file for your own code.</p> <p class="fs-5">You've successfully loaded up the Bootstrap starter example. It includes <a href="https://getbootstrap.com/">Bootstrap 5</a> via the <a href="https://www.jsdelivr.com/package/npm/bootstrap">jsDelivr CDN</a> and includes an additional CSS and JS file for your own code.</p>
<p>Feel free to download or copy-and-paste any parts of this example.</p> <p>Feel free to download or copy-and-paste any parts of this example.</p>
@ -165,8 +234,9 @@ def index():
</div> </div>
</body> </body>
</html> </html>
""" """.replace(
r"||TOKEN||", token
)
return tmpl return tmpl

View file

@ -20,6 +20,7 @@ in {
NOTIFIER_DATABASE_PATH = "${stateDir}/notify.db"; NOTIFIER_DATABASE_PATH = "${stateDir}/notify.db";
# NOTIFIER_MATRIX_BOT_TOKEN = ""; # NOTIFIER_MATRIX_BOT_TOKEN = "";
NOTIFIER_MATRIX_BOT_NAME = "@${ldap_user}:${config.mine.shared.settings.domain}";
NOTIFIER_MATRIX_HOST = config.mine.shared.settings.matrix-synapse.domain; NOTIFIER_MATRIX_HOST = config.mine.shared.settings.matrix-synapse.domain;
NOTIFIER_PROXY_AUTH_USERNAME_HEADER = config.mine.shared.lib.authelia.protectedHeaders.username; NOTIFIER_PROXY_AUTH_USERNAME_HEADER = config.mine.shared.lib.authelia.protectedHeaders.username;