#!/usr/bin/env python3 import hashlib from bottle import route, run, request, HTTPResponse, response import pdb updated = True filename = "firmware.bin" @route('/update') def update(): #for header in request.headers.keys(): # print("{}: {}".format(header, request.headers.get(header, ""))) requestor_mac = request.headers.get("X-Esp8266-Sta-Mac") running_fw_md5 = request.headers.get("X-Esp8266-Sketch-Md5", "") print("Update request from {} with fw {}".format(requestor_mac, running_fw_md5)) available_fw_md5 = md5(filename) print("Lates firmware available is {} - ".format(available_fw_md5), end="") if available_fw_md5 != running_fw_md5: print("Differs, updating…") response.set_header('Content-Type', 'application/octet-stream') response.set_header('Content-Disposition', ' attachment; filename={}'.format(filename)) with open(filename, "rb") as firmware: fw = firmware.read() response.set_header('Content-Length', '{}'.format(len(fw))) response.set_header('X-MD5', available_fw_md5) return fw else: print("Same, skipping…") return HTTPResponse(status=304, body="") def md5(fname): hash_md5 = hashlib.md5() with open(fname, "rb") as f: for chunk in iter(lambda: f.read(4096), b""): hash_md5.update(chunk) return hash_md5.hexdigest() run(host='localhost', port=8080, debug=True)