diff --git a/HTTPd.indigoPlugin/Contents/Info.plist b/HTTPd.indigoPlugin/Contents/Info.plist index f5e4a73..16e6a16 100755 --- a/HTTPd.indigoPlugin/Contents/Info.plist +++ b/HTTPd.indigoPlugin/Contents/Info.plist @@ -3,13 +3,13 @@ PluginVersion - 1.2.0 + 1.3.0 ServerApiVersion 2.0 IwsApiVersion 1.0.0 CFBundleName - SMTPd + HTTPd CFBundleDisplayName HTTPd CFBundleIdentifier diff --git a/HTTPd.indigoPlugin/Contents/Server Plugin/plugin.py b/HTTPd.indigoPlugin/Contents/Server Plugin/plugin.py index 2babbe9..01c995a 100755 --- a/HTTPd.indigoPlugin/Contents/Server Plugin/plugin.py +++ b/HTTPd.indigoPlugin/Contents/Server Plugin/plugin.py @@ -32,16 +32,6 @@ def do_POST(self): client_host, client_port = self.client_address self.logger.debug("AuthHandler: POST from %s:%s to %s" % (str(client_host), str(client_port), self.path)) - self.send_response(200) - self.send_header("Content-type", "text/html") - self.end_headers() - - - def do_GET(self): - self.logger = logging.getLogger("Plugin.AuthHandler") - client_host, client_port = self.client_address - self.logger.debug("AuthHandler: GET from %s:%s for %s" % (str(client_host), str(client_port), self.path)) - auth_header = self.headers.getheader('Authorization') if auth_header == None: @@ -61,6 +51,7 @@ def do_GET(self): self.send_response(200) self.send_header("Content-type", "text/html") self.end_headers() + self.wfile.write("\nIndigo HTTPd Plugin\n") request = urlparse(self.path) @@ -72,23 +63,75 @@ def do_GET(self): updateVar("httpd_"+key, value, indigo.activePlugin.pluginPrefs["folderId"]) self.wfile.write("\n

Updated variable httpd_%s to '%s'

" % (key, value)) - indigo.activePlugin.triggerCheck() + else: + self.logger.debug(u"AuthHandler: Unknown request: %s" % request.path) + self.wfile.write("\n

Unknown request: {}".format(request.path)) + + self.wfile.write("\n\n\n") + + payload = self.rfile.read(int(self.headers['Content-Length'])) + indigo.server.broadcastToSubscribers(u"httpd_post_payload", payload) + self.logger.debug("POST Payload = {}".format(payload)) + + indigo.activePlugin.triggerCheck() + + else: + self.logger.debug(u"AuthHandler: Request with invalid Authorization header") + + self.send_response(401) + self.send_header('WWW-Authenticate', 'Basic realm="My Realm"') + self.send_header("Content-type", "text/html") + self.end_headers() + self.logger.debug(u"Theirs: '%s' -> '%s'" % (auth_header, base64.b64decode(auth_header[6:]))) + self.logger.debug(u"Ours: '%s' -> '%s'" % ('Basic ' + self.server.authKey, base64.b64decode(self.server.authKey))) + self.wfile.write("\nIndigo HTTPd Plugin\n") + self.wfile.write("\n

Invalid Authentication

") + self.wfile.write("\n\n\n") + - elif request.path == "/stripvar": + def do_GET(self): + self.logger = logging.getLogger("Plugin.AuthHandler") + client_host, client_port = self.client_address + self.logger.debug("AuthHandler: GET from %s:%s for %s" % (str(client_host), str(client_port), self.path)) + + auth_header = self.headers.getheader('Authorization') + + if auth_header == None: + self.logger.debug("AuthHandler: Request has no Authorization header") + + self.send_response(401) + self.send_header('WWW-Authenticate', 'Basic realm="My Realm"') + self.send_header("Content-type", "text/html") + self.end_headers() + self.wfile.write("\nIndigo HTTPd Plugin\n") + self.wfile.write("\n

Basic Authentication Required

") + self.wfile.write("\n\n\n") + + elif auth_header == ('Basic ' + self.server.authKey): + self.logger.debug(u"AuthHandler: Request has correct Authorization header") + + self.send_response(200) + self.send_header("Content-type", "text/html") + self.end_headers() + self.wfile.write("\nIndigo HTTPd Plugin\n") + request = urlparse(self.path) + + if request.path == "/setvar": query = parse_qs(request.query) for key in query: - value = query[key][0].strip() + value = query[key][0] self.logger.debug(u"AuthHandler: setting variable httpd_%s to '%s'" % (key, value)) updateVar("httpd_"+key, value, indigo.activePlugin.pluginPrefs["folderId"]) self.wfile.write("\n

Updated variable httpd_%s to '%s'

" % (key, value)) - indigo.activePlugin.triggerCheck() - else: - self.logger.debug(u"AuthHandler: Unknown request: %s" % self.request) + self.logger.debug(u"AuthHandler: Unknown request: %s" % request.path) + self.wfile.write("\n

Unknown request: {}".format(request.path)) self.wfile.write("\n\n\n") + indigo.activePlugin.triggerCheck() + else: self.logger.debug(u"AuthHandler: Request with invalid Authorization header") @@ -99,7 +142,7 @@ def do_GET(self): self.logger.debug(u"Theirs: '%s' -> '%s'" % (auth_header, base64.b64decode(auth_header[6:]))) self.logger.debug(u"Ours: '%s' -> '%s'" % ('Basic ' + self.server.authKey, base64.b64decode(self.server.authKey))) self.wfile.write("\nIndigo HTTPd Plugin\n") - self.wfile.write("\n

Invalid Authentication

") + self.wfile.write("\n

Invalid Authentication Header

") self.wfile.write("\n\n\n")