68 lines
2.1 KiB
Python
68 lines
2.1 KiB
Python
import argparse
|
|
import os
|
|
import json
|
|
|
|
from pywebpush import webpush
|
|
|
|
|
|
def get_config():
|
|
parser = argparse.ArgumentParser(description="WebPush tool")
|
|
parser.add_argument("--data", '-d', help="Data file")
|
|
parser.add_argument("--info", "-i", help="Subscription Info JSON file")
|
|
parser.add_argument("--head", help="Header Info JSON file")
|
|
parser.add_argument("--claims", help="Vapid claim file")
|
|
parser.add_argument("--key", help="Vapid private key file path")
|
|
parser.add_argument("--curl", help="Don't send, display as curl command",
|
|
default=False, action="store_true")
|
|
parser.add_argument("--encoding", default="aes128gcm")
|
|
parser.add_argument("--verbose", "-v", help="Provide verbose feedback",
|
|
default=False, action="store_true")
|
|
|
|
args = parser.parse_args()
|
|
|
|
if not args.info:
|
|
raise Exception("Subscription Info argument missing.")
|
|
if not os.path.exists(args.info):
|
|
raise Exception("Subscription Info file missing.")
|
|
try:
|
|
with open(args.info) as r:
|
|
args.sub_info = json.loads(r.read())
|
|
if args.data:
|
|
with open(args.data) as r:
|
|
args.data = r.read()
|
|
if args.head:
|
|
with open(args.head) as r:
|
|
args.head = json.loads(r.read())
|
|
if args.claims:
|
|
if not args.key:
|
|
raise Exception("No private --key specified for claims")
|
|
with open(args.claims) as r:
|
|
args.claims = json.loads(r.read())
|
|
except Exception as ex:
|
|
print("Couldn't read input {}.".format(ex))
|
|
raise ex
|
|
return args
|
|
|
|
|
|
def main():
|
|
""" Send data """
|
|
|
|
try:
|
|
args = get_config()
|
|
result = webpush(
|
|
args.sub_info,
|
|
data=args.data,
|
|
vapid_private_key=args.key,
|
|
vapid_claims=args.claims,
|
|
curl=args.curl,
|
|
content_encoding=args.encoding,
|
|
verbose=args.verbose,
|
|
headers=args.head)
|
|
print(result)
|
|
except Exception as ex:
|
|
print("ERROR: {}".format(ex))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|