diff --git a/pi/.gitignore b/pi/.gitignore index 858899e..adc0d3e 100644 --- a/pi/.gitignore +++ b/pi/.gitignore @@ -1,2 +1,3 @@ get-pip.py *.pem +*.pyc diff --git a/pi/.gitignore b/pi/.gitignore index 858899e..adc0d3e 100644 --- a/pi/.gitignore +++ b/pi/.gitignore @@ -1,2 +1,3 @@ get-pip.py *.pem +*.pyc diff --git a/pi/monitor.py b/pi/monitor.py index bca9cff..3038c63 100644 --- a/pi/monitor.py +++ b/pi/monitor.py @@ -2,30 +2,17 @@ import gpiozero as GP from signal import pause -import base64 import sys from Cryptodome.PublicKey import RSA from Cryptodome.Cipher import PKCS1_OAEP -import urllib -import urllib2 +import report -import traceback +args = report.get_args(sys.argv[1:]) +if args is None: + exit(1) -if len(sys.argv) < 2: - print "No id" - exit(1) - -if len(sys.argv) < 3: - print "No url" - exit(1) - -ext = "" -if len(sys.argv) > 3: - ext = sys.argv[3] - -id = int(sys.argv[1]) -url_base = sys.argv[2] +id, base_url, ext = args l = GP.LED(18) @@ -35,53 +22,31 @@ status = False -private_key = RSA.import_key(open("private.pem").read()) -rsa = PKCS1_OAEP.new(private_key); +rsa = report.load_rsa_key_file("private.pem") last_report = 0 -def report(val): - global last_report - try: - url = url_base + "status-update" + ext + "?door_id=" + str(id) + "&status=" + ("1" if val else "0") - print " open " + url - response = urllib2.urlopen(url) +def reportAndSetTime(val): + global id, base_url, ext, rsa, last_report + if report.report(rsa, id, base_url, ext, False): + last_report = time() - responseStr = response.read() - print "Response: " + responseStr - enc_verify = base64.b64decode(responseStr) - - verify = rsa.decrypt(enc_verify) - - if ext == "": - verify = base64.b64encode(verify) - - print " verifying with: " + verify - - url = url_base + "verify-status" + ext + "?door_id=" + str(id) + "&verify=" + urllib.quote(verify) - print " open " + url - response = urllib2.urlopen(url) - print " returned: " + response.read() - - last_report = time() - except Exception as e: - print str(e) - traceback.print_tb(sys.exc_info()[2]) - -report(False) +reportAndSetTime(False) while True: now_pressed = b.is_pressed if now_pressed == status: if now_pressed: + pass b.wait_for_release(5) else: + pass b.wait_for_press(5) now_pressed = b.is_pressed if now_pressed != status or time() - last_report > 120: status = now_pressed print "status now: " + str(status) - report(status) + reportAndSetTime(status) sleep(1) diff --git a/pi/.gitignore b/pi/.gitignore index 858899e..adc0d3e 100644 --- a/pi/.gitignore +++ b/pi/.gitignore @@ -1,2 +1,3 @@ get-pip.py *.pem +*.pyc diff --git a/pi/monitor.py b/pi/monitor.py index bca9cff..3038c63 100644 --- a/pi/monitor.py +++ b/pi/monitor.py @@ -2,30 +2,17 @@ import gpiozero as GP from signal import pause -import base64 import sys from Cryptodome.PublicKey import RSA from Cryptodome.Cipher import PKCS1_OAEP -import urllib -import urllib2 +import report -import traceback +args = report.get_args(sys.argv[1:]) +if args is None: + exit(1) -if len(sys.argv) < 2: - print "No id" - exit(1) - -if len(sys.argv) < 3: - print "No url" - exit(1) - -ext = "" -if len(sys.argv) > 3: - ext = sys.argv[3] - -id = int(sys.argv[1]) -url_base = sys.argv[2] +id, base_url, ext = args l = GP.LED(18) @@ -35,53 +22,31 @@ status = False -private_key = RSA.import_key(open("private.pem").read()) -rsa = PKCS1_OAEP.new(private_key); +rsa = report.load_rsa_key_file("private.pem") last_report = 0 -def report(val): - global last_report - try: - url = url_base + "status-update" + ext + "?door_id=" + str(id) + "&status=" + ("1" if val else "0") - print " open " + url - response = urllib2.urlopen(url) +def reportAndSetTime(val): + global id, base_url, ext, rsa, last_report + if report.report(rsa, id, base_url, ext, False): + last_report = time() - responseStr = response.read() - print "Response: " + responseStr - enc_verify = base64.b64decode(responseStr) - - verify = rsa.decrypt(enc_verify) - - if ext == "": - verify = base64.b64encode(verify) - - print " verifying with: " + verify - - url = url_base + "verify-status" + ext + "?door_id=" + str(id) + "&verify=" + urllib.quote(verify) - print " open " + url - response = urllib2.urlopen(url) - print " returned: " + response.read() - - last_report = time() - except Exception as e: - print str(e) - traceback.print_tb(sys.exc_info()[2]) - -report(False) +reportAndSetTime(False) while True: now_pressed = b.is_pressed if now_pressed == status: if now_pressed: + pass b.wait_for_release(5) else: + pass b.wait_for_press(5) now_pressed = b.is_pressed if now_pressed != status or time() - last_report > 120: status = now_pressed print "status now: " + str(status) - report(status) + reportAndSetTime(status) sleep(1) diff --git a/pi/report.py b/pi/report.py new file mode 100644 index 0000000..bb970c4 --- /dev/null +++ b/pi/report.py @@ -0,0 +1,74 @@ +from Cryptodome.PublicKey import RSA +from Cryptodome.Cipher import PKCS1_OAEP + +import base64 + +import urllib +import urllib2 + +import sys +import traceback + +def load_rsa_key_file(fileName): + private_key = RSA.import_key(open(fileName).read()) + return PKCS1_OAEP.new(private_key); + +def get_args(args): + if len(args) < 1: + print "No id" + return None + + if len(args) < 2: + print "No url" + return None + + ext = "" + if len(args) > 2: + ext = args[2] + + id = int(args[0]) + url_base = args[1] + return (id, url_base, ext) + +def report(rsa, id, url_base, ext, val): + try: + url = url_base + "status-update" + ext + "?door_id=" + str(id) + "&status=" + ("1" if val else "0") + print " open " + url + response = urllib2.urlopen(url) + + responseStr = response.read() + print "Response: " + responseStr + enc_verify = base64.b64decode(responseStr) + + verify = rsa.decrypt(enc_verify) + + if ext == "": + verify = base64.b64encode(verify) + + print " verifying with: " + verify + + url = url_base + "verify-status" + ext + "?door_id=" + str(id) + "&verify=" + urllib.quote(verify) + print " open " + url + response = urllib2.urlopen(url) + print " returned: " + response.read() + + return True + except Exception as e: + print str(e) + traceback.print_tb(sys.exc_info()[2]) + + return False + +if __name__ == "__main__": + if len(sys.argv) < 2: + print "No status" + exit(1) + + args = get_args(sys.argv[2:]) + if args is None: + exit(1) + + id, url_base, ext = args + + rsa = load_rsa_key_file("private.pem") + report(rsa, id, url_base, ext, int(sys.argv[1]))