diff --git a/consts.py b/consts.py index cd2136f..cafb438 100644 --- a/consts.py +++ b/consts.py @@ -15,4 +15,4 @@ CHARGER_GPIO = 2 CHARGER_RUNTIME = 10800 # 3 Hours -CHARGER_OFFTIME = 10800 # 3 Hours \ No newline at end of file +CHARGER_OFFTIME = 10800 # 3 Hours diff --git a/db.py b/db.py index c698ac0..74532b7 100644 --- a/db.py +++ b/db.py @@ -22,8 +22,9 @@ def logPumpRun(entry): def getLatestPumpRun(): with rlock: pumpRun = Query() - if (len(pumpDB.search(pumpRun.event == 'Pump Run')) > 0): - return pumpDB.all()[-1] + searchResult = pumpDB.search(pumpRun.event == "Pump Run") + if (len(searchResult) > 0): + return searchResult[-1] else: return None diff --git a/ipmailer.py b/ipmailer.py new file mode 100644 index 0000000..bce49a6 --- /dev/null +++ b/ipmailer.py @@ -0,0 +1,18 @@ +import smtplib +import json +import urllib.request + +config = {} +ip = urllib.request.urlopen("https://api.ipify.org").read().decode("utf-8") + +try: + with open("../config.json", "r") as configJson: + config = json.load(configJson) +finally: + if ("wanip" in config) is False or config["wanip"] != ip: + #Update IP + urllib.request.urlopen("https://www.randomgarage.com/postip.php?ip=" + ip) + config["wanip"] = ip + + with open("../config.json", "w") as configJson: + json.dump(fp = configJson, obj = config) diff --git a/phonecharger.py b/phonecharger.py new file mode 100644 index 0000000..c005dca --- /dev/null +++ b/phonecharger.py @@ -0,0 +1,16 @@ +# +# +# +import gpiozero +import time + +chargeRelay = gpiozero.OutputDevice(1, active_high = False, + initial_value = False) + +while True: + # Charge it for 3 hours + chargeRelay.on() + time.sleep(10800) + # Switch off power for 20 minutes + chargeRelay.off() + time.sleep(1200) diff --git a/static/styles.css b/static/styles.css index d2c5bd1..0227086 100644 --- a/static/styles.css +++ b/static/styles.css @@ -1,5 +1,15 @@ html { font-size: 1em; + background: antiquewhite; +} + +body { + width: 50%; + margin: auto; + background: white; + padding: 10px; + border-left: 1px solid lightblue; + border-right: 1px solid lightblue; } table { diff --git a/webserver.py b/webserver.py index 577cf9b..9ac6090 100644 --- a/webserver.py +++ b/webserver.py @@ -15,7 +15,8 @@ class Index: def GET(self): - if web.ctx.env.get('HTTP_AUTHORIZATION') is None: + auth = web.ctx.env.get('HTTP_AUTHORIZATION') + if auth is None or validateUser(auth) is False: web.seeother('/login') else: temp = os.popen("vcgencmd measure_temp").readline().replace('temp=', '') @@ -23,7 +24,8 @@ def GET(self): class Logs: def GET(self, logcat, since): - if web.ctx.env.get('HTTP_AUTHORIZATION') is None: + auth = web.ctx.env.get('HTTP_AUTHORIZATION') + if auth is None or validateUser(auth) is False: web.seeother('/login') elif(logcat == 'pump'): if (since == 'all'): @@ -48,12 +50,10 @@ def GET(self): if auth is None: authreq = True else: - auth = re.sub('^Basic ','',auth) - username,password = base64.decodestring(auth).split(':') - if (username,password) in users: - raise web.seeother('/') - else: - authreq = True + if validateUser(auth): + raise web.seeother('/') + else: + authreq = True if authreq: web.header('WWW-Authenticate','Basic realm="WaterPI"') web.ctx.status = '401 Unauthorized' @@ -61,12 +61,20 @@ def GET(self): class Operations: def GET(self, operation): - if web.ctx.env.get('HTTP_AUTHORIZATION') is None: + auth = web.ctx.env.get('HTTP_AUTHORIZATION') + if auth is None or validateUser(auth) is False: web.seeother('/login') elif(operation == 'runpump'): os.popen("python3 pumpcontroller.py runnow &") return "Success" +def validateUser(auth): + auth = re.sub('^Basic ','',auth) + username,password = base64.decodestring(auth).split(':') + if (username, password) in users: + return True + else: + return False def startServer(): app = web.application(urls, globals()) diff --git a/webtemplates/index.html b/webtemplates/index.html index 4f348a2..944ab0b 100644 --- a/webtemplates/index.html +++ b/webtemplates/index.html @@ -96,7 +96,6 @@