98 lines
2.8 KiB
Python
Executable File
98 lines
2.8 KiB
Python
Executable File
#!/usr/local/bin/python3
|
|
import os
|
|
import argparse
|
|
import http.client
|
|
|
|
aboutme = """
|
|
# New User Monitor
|
|
# Created for tilde.institute by Kneezle
|
|
# BSD Rocks!
|
|
|
|
# assuming we're running once a day.
|
|
# this replaces the 1.0 version that ran in a constant loop
|
|
"""
|
|
|
|
#put the tokens here for each admin to be alerted
|
|
gotifytokens = []
|
|
gotifytokens.append("your_gotify_token")
|
|
|
|
defaulttitle = "Alert: New Users"
|
|
|
|
defaultnewuserpath = "/path/to/new/user/dump/file"
|
|
|
|
runcmdtemplate = """curl -X POST "https://gotify/message?token={}" -F "title=Alert: New Users" -F "message={}" -F "priority=5" """
|
|
|
|
ap = argparse.ArgumentParser()
|
|
ap.add_argument('--newuserpath', default=defaultnewuserpath,
|
|
help='sets the path for the new user txt file')
|
|
|
|
ap.add_argument('--title', default=defaulttitle,
|
|
help='sets the title')
|
|
|
|
ap.add_argument('--usecurl', default=False,
|
|
help='use curl or build in sockets')
|
|
|
|
ap.add_argument("-a", "--about", dest='about', action='store_true', help="about me")
|
|
|
|
args = vars(ap.parse_args())
|
|
|
|
if args['about']:
|
|
print(aboutme)
|
|
exit()
|
|
|
|
title = args['title']
|
|
newuserpath = args['newuserpath']
|
|
usecurl = args['usecurl']
|
|
|
|
boilerplate = """New pending user found!
|
|
|
|
Username: {}
|
|
Email: {}
|
|
SSH Key {}
|
|
|
|
"""
|
|
push_notification = ""
|
|
|
|
num_linesp = 0
|
|
|
|
num_lines = sum(1 for line in open(args['newuserpath']))
|
|
print(" I found: " + str(num_lines))
|
|
|
|
numnonblanklines = 0
|
|
if num_lines > 0:
|
|
with open(args['newuserpath']) as fp:
|
|
line = fp.readline()
|
|
cnt = 1
|
|
while line:
|
|
if line.strip() != "": #not a blank line
|
|
numnonblanklines = numnonblanklines + 1
|
|
print("Line {}: {}".format(cnt, line.strip()))
|
|
x = line.split(" ")
|
|
sshkey = ""
|
|
itemno = 0
|
|
for item in x:
|
|
if itemno > 1:
|
|
sshkey = sshkey + " " + item
|
|
itemno = itemno + 1
|
|
sshkey = sshkey.replace('"', "")
|
|
|
|
push_notification = push_notification + boilerplate.format(x[0], x[1], sshkey)
|
|
cnt = cnt + 1
|
|
line = fp.readline()
|
|
|
|
if numnonblanklines > 0:
|
|
for key in gotifytokens:
|
|
if not usecurl:
|
|
conn = http.client.HTTPSConnection("gotify.tildeverse.org")
|
|
payload = """title={}&message={}&priority=5""".format(title, push_notification)
|
|
headers = {'content-type': "application/x-www-form-urlencoded"}
|
|
conn.request("POST", "/message?token={}".format(key), payload, headers)
|
|
res = conn.getresponse()
|
|
data = res.read()
|
|
print(data.decode("utf-8"))
|
|
else:
|
|
torun = runcmdtemplate.format(key, push_notification)
|
|
os.system(torun)
|
|
else:
|
|
print("only blank lines")
|