diff --git a/alert/bark/ciphertxt.sh b/alert/bark/ciphertxt.sh new file mode 100644 index 0000000..d8b9231 --- /dev/null +++ b/alert/bark/ciphertxt.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash + +# Documentation: https://bark.day.app/#/encryption + +set -e + +# bark key +deviceKey='PFEMc4eVAQutUrcAbXrVCb' +# push payload +# json='{"body": "test", "sound": "birdsong"}' +json=`cat /opt/scripts/alert/bark/option.json` + +# 必须32位 +key='sqCT9wE25eS2kMYu6BCGN4f9ymx2Fsmj' +# IV可以是随机生成的,但如果是随机的就需要放在 iv 参数里传递。 +iv='QA475QXtg4YaGQzc' + +# OpenSSL 要求输入的 Key 和 IV 需使用十六进制编码。 +key=$(printf $key | xxd -ps -c 200) +iv=$(printf $iv | xxd -ps -c 200) + +ciphertext=$(echo -n $json | openssl enc -aes-256-cbc -K $key -iv $iv | base64) + +# 删除密文中的空格 +ciphertext=`echo $ciphertext | tr -d ' '` + +# 密文可能有特殊字符,所以记得 URL 编码一下。 +curl --data-urlencode "ciphertext=$ciphertext" --data-urlencode "iv=QA475QXtg4YaGQzc" https://bark.erratic.eu.org/$deviceKey diff --git a/alert/bark/msgsend.py b/alert/bark/msgsend.py new file mode 100644 index 0000000..4146ea2 --- /dev/null +++ b/alert/bark/msgsend.py @@ -0,0 +1,51 @@ +#!/usr/bin/python3 +import sys +import json +import os + + +def usage(): + pformat = "%-7s%-6s%-10s%-10s%-10s%-10s%-10s%-10s%-10s%-10s%-10s" + sformat = "%-23s%-18s%-16s%-14s%-14s%-12s%-12s" + print(pformat % ('must', 'must', 'optional', 'optional', 'optional', 'optional', 'optional', 'optional', 'optional', 'optional', 'optional')) + print(pformat % ('title', 'body', 'sound', 'icon', 'group', 'copy', 'autoCopy', 'badge', 'url', 'isArchive', 'level')) + print(pformat % ('-', '-', '2.0-alarm', '-', '-', '-', '1', '-', '-', '1', 'active')) + print(pformat % ('-', '-', '1.4-bell', '-', '-', '-', '1', '-', '-', '1', 'timeSensitive')) + print(pformat % ('-', '-', '1.6-bloom', '-', '-', '-', '1', '-', '-', '1', 'passive')) + print("\nThe 'sound' parameter also accepts the following as its value:") + print(sformat % ("1.8-healthnotification", "2.6-typewriters", "2.9-newsflash", "1.5-mailsent", "1.5-tiptoes", "4.5-update", "2.9-spell")) + print(sformat % ("2.2-multiwayinvitation", "4.5-anticipate", "1.2-telegraph", "0.9-calypso", "1.5-newmail", "1.7-glass", "2.2-choo")) + print(sformat % ("1.4-paymentsuccess", "1.5-electronic", "0.7-birdsong", "1.9-descent", "1.3-ladder", "4.5-chime", "1.5-horn")) + print(sformat % ("4.7-sherwoodforest", "3.0-gotosleep", "4.2-suspense", "1.5-fanfare", "7.0-minuet", "0.6-shake", "1.9-noir")) + exit(8) + + +def getParams(params): + if len(params) < 2 or len(params) > 11: + print('Need at least 2 parameters, and most can have 11 parameters, exiting...') + exit(99) + + params_dict = {'title': '', 'body': '', 'sound': '', 'icon': '', 'group': 'alert', 'copy': '', 'autocopy': '', 'badge': '', 'url': '', 'isarchive': '1', 'level': 'active'} + elements = ['title', 'body', 'sound', 'icon', 'group', 'copy', 'autocopy', 'badge', 'url', 'isarchive', 'level', 'ciphertxt', 'device_key'] + for i in range(len(params)): + params_dict[elements[i]] = params[i] + + params_json = json.dumps(params_dict) + with open('/opt/scripts/alert/bark/option.json', 'w') as obj_option: + obj_option.write(params_json) + + os.system('/usr/bin/bash /opt/scripts/alert/bark/ciphertxt.sh') + + +def main(): + if len(sys.argv) == 1: + usage() + + params = sys.argv[1:] + getParams(params) + + +if __name__ == "__main__": + main() + + diff --git a/alert/bark/option.json b/alert/bark/option.json new file mode 100644 index 0000000..5fb7ac0 --- /dev/null +++ b/alert/bark/option.json @@ -0,0 +1 @@ +{"title": "TODO TIPS", "body": "Today, you NEED to finish the following task:\n a. +life | Happy weekend~\n\n18 days left to finish the following task:\n a. +cici | Special day for Cici(last for 0821)\n\n49 days left to finish the following task:\n a. +microsoft | Azure 100\u7eed\u8ba2\n\n58 days left to finish the following task:\n a. +simcard | \u79fb\u52a8\u5361\u7eed\u7ea6\uff0c\u6c38\u4e459\u5143/\u6708\n\nSo, hurry up!! Go get things done!!", "sound": "", "icon": "", "group": "alert", "copy": "", "autocopy": "", "badge": "", "url": "", "isarchive": "1", "level": "active"} \ No newline at end of file