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 = "
"
- ""
+ "
"
""
""
"";
@@ -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);
}