From f9b568403ab001c39e662c49a312aae2283a3bff Mon Sep 17 00:00:00 2001 From: Chrome Legion Date: Thu, 31 May 2018 20:14:22 -0700 Subject: [PATCH] Qrome - updated with Basic Auth for OctoPrint --- printermonitor/OctoPrintClient.cpp | 16 +++++++++++++--- printermonitor/OctoPrintClient.h | 6 ++++-- printermonitor/Settings.h | 2 ++ printermonitor/printermonitor.ino | 24 +++++++++++++++++++++--- 4 files changed, 40 insertions(+), 8 deletions(-) diff --git a/printermonitor/OctoPrintClient.cpp b/printermonitor/OctoPrintClient.cpp index 205ff2c..204f9b9 100644 --- a/printermonitor/OctoPrintClient.cpp +++ b/printermonitor/OctoPrintClient.cpp @@ -23,14 +23,20 @@ SOFTWARE. #include "OctoPrintClient.h" -OctoPrintClient::OctoPrintClient(String ApiKey, String server, int port) { - updateOctoPrintClient(ApiKey, server, port); +OctoPrintClient::OctoPrintClient(String ApiKey, String server, int port, String user, String pass) { + updateOctoPrintClient(ApiKey, server, port, user, pass); } -void OctoPrintClient::updateOctoPrintClient(String ApiKey, String server, int port) { +void OctoPrintClient::updateOctoPrintClient(String ApiKey, String server, int port, String user, String pass) { server.toCharArray(myServer, 100); myApiKey = ApiKey; myPort = port; + encodedAuth = ""; + if (user != "") { + String userpass = user + ":" + pass; + base64 b64; + encodedAuth = b64.encode(userpass, true); + } } boolean OctoPrintClient::validate() { @@ -59,6 +65,10 @@ WiFiClient OctoPrintClient::getSubmitRequest(String apiGetData) { printClient.println(apiGetData); printClient.println("Host: " + String(myServer) + ":" + String(myPort)); printClient.println("X-Api-Key: " + myApiKey); + if (encodedAuth != "") { + printClient.print("Authorization: "); + printClient.println("Basic " + encodedAuth); + } printClient.println("User-Agent: ArduinoWiFi/1.1"); printClient.println("Connection: close"); if (printClient.println() == 0) { diff --git a/printermonitor/OctoPrintClient.h b/printermonitor/OctoPrintClient.h index b147715..0871868 100644 --- a/printermonitor/OctoPrintClient.h +++ b/printermonitor/OctoPrintClient.h @@ -24,6 +24,7 @@ SOFTWARE. #pragma once #include #include +#include class OctoPrintClient { @@ -31,6 +32,7 @@ class OctoPrintClient { char myServer[100]; int myPort = 80; String myApiKey = ""; + String encodedAuth = ""; void resetPrintData(); boolean validate(); @@ -62,9 +64,9 @@ class OctoPrintClient { public: - OctoPrintClient(String ApiKey, String server, int port); + OctoPrintClient(String ApiKey, String server, int port, String user, String pass); void getPrinterJobResults(); - void updateOctoPrintClient(String ApiKey, String server, int port); + void updateOctoPrintClient(String ApiKey, String server, int port, String user, String pass); String getAveragePrintTime(); String getEstimatedPrintTime(); diff --git a/printermonitor/Settings.h b/printermonitor/Settings.h index 3eb8bc3..bd4fdb8 100644 --- a/printermonitor/Settings.h +++ b/printermonitor/Settings.h @@ -56,6 +56,8 @@ String OctoPrintApiKey = ""; // ApiKey from your User Account on OctoPrint String OctoPrintHostName = "octopi";// Default 'octopi' -- or hostname if different (optional if your IP changes) String OctoPrintServer = ""; // IP or Address of your OctoPrint Server (DO NOT include http://) int OctoPrintPort = 80; // the port you are running your OctoPrint server on (usually 80); +String OctoAuthUser = ""; // only used if you have haproxy or basic athentintication turned on (not default) +String OctoAuthPass = ""; // only used with haproxy or basic auth (only needed if you must authenticate) const int WEBSERVER_PORT = 80; // The port you can access this device on over HTTP const boolean WEBSERVER_ENABLED = true; // Device will provide a web interface via http://[ip]:[port]/ diff --git a/printermonitor/printermonitor.ino b/printermonitor/printermonitor.ino index f415bbb..2a79341 100644 --- a/printermonitor/printermonitor.ino +++ b/printermonitor/printermonitor.ino @@ -83,7 +83,7 @@ String lastReportStatus = ""; boolean displayOn = true; // OctoPrint Client -OctoPrintClient printerClient(OctoPrintApiKey, OctoPrintServer, OctoPrintPort); +OctoPrintClient printerClient(OctoPrintApiKey, OctoPrintServer, OctoPrintPort, OctoAuthUser, OctoAuthPass); int printerCount = 0; //declairing prototypes @@ -103,11 +103,13 @@ const String CHANGE_FORM = "
OctoPrint Host Name (usually octopi)" "" "" + "" + "
" " Display Clock when printer is off

" " Use 24 Hour Clock (military time)

" "Time Refresh (minutes)

" "Theme Color

" - "" + "
" "" "" "
"; @@ -363,6 +365,8 @@ void handleUpdateConfig() { OctoPrintHostName = server.arg("octoPrintHostName"); OctoPrintServer = server.arg("octoPrintAddress"); OctoPrintPort = server.arg("octoPrintPort").toInt(); + OctoAuthUser = server.arg("octoUser"); + OctoAuthPass = server.arg("octoPass"); DISPLAYCLOCK = server.hasArg("isClockEnabled"); IS_24HOUR = server.hasArg("is24hour"); minutesBetweenDataRefresh = server.arg("refresh").toInt(); @@ -414,6 +418,8 @@ void handleConfigure() { form.replace("%OCTOHOST%", OctoPrintHostName); form.replace("%OCTOADDRESS%", OctoPrintServer); form.replace("%OCTOPORT%", String(OctoPrintPort)); + form.replace("%OCTOUSER%", OctoAuthUser); + form.replace("%OCTOPASS%", OctoAuthPass); String isClockChecked = ""; if (DISPLAYCLOCK) { isClockChecked = "checked='checked'"; @@ -771,6 +777,8 @@ void writeSettings() { f.println("octoHost=" + OctoPrintHostName); f.println("octoServer=" + OctoPrintServer); f.println("octoPort=" + String(OctoPrintPort)); + f.println("octoUser=" + OctoAuthUser); + f.println("octoPass=" + OctoAuthPass); f.println("refreshRate=" + String(minutesBetweenDataRefresh)); f.println("themeColor=" + themeColor); f.println("www_username=" + String(www_username)); @@ -817,6 +825,16 @@ void readSettings() { OctoPrintPort = line.substring(line.lastIndexOf("octoPort=") + 9).toInt(); Serial.println("OctoPrintPort=" + String(OctoPrintPort)); } + if (line.indexOf("octoUser=") >= 0) { + OctoAuthUser = line.substring(line.lastIndexOf("octoUser=") + 9); + OctoAuthUser.trim(); + Serial.println("OctoAuthUser=" + OctoAuthUser); + } + if (line.indexOf("octoPass=") >= 0) { + OctoAuthPass = line.substring(line.lastIndexOf("octoPass=") + 9); + OctoAuthPass.trim(); + Serial.println("OctoAuthPass=" + OctoAuthPass); + } if (line.indexOf("refreshRate=") >= 0) { minutesBetweenDataRefresh = line.substring(line.lastIndexOf("refreshRate=") + 12).toInt(); Serial.println("minutesBetweenDataRefresh=" + String(minutesBetweenDataRefresh)); @@ -848,7 +866,7 @@ void readSettings() { } } fr.close(); - printerClient.updateOctoPrintClient(OctoPrintApiKey, OctoPrintServer, OctoPrintPort); + printerClient.updateOctoPrintClient(OctoPrintApiKey, OctoPrintServer, OctoPrintPort, OctoAuthUser, OctoAuthPass); timeClient.setUtcOffset(UtcOffset); }