diff --git a/libraries/ESP8266httpUpdate/keywords.txt b/libraries/ESP8266httpUpdate/keywords.txt index 78be600d4..1c5b9f958 100644 --- a/libraries/ESP8266httpUpdate/keywords.txt +++ b/libraries/ESP8266httpUpdate/keywords.txt @@ -24,6 +24,7 @@ update KEYWORD2 updateSpiffs KEYWORD2 getLastError KEYWORD2 getLastErrorString KEYWORD2 +setAuthorization KEYWORD2 ####################################### # Constants (LITERAL1) @@ -37,6 +38,7 @@ HTTP_UE_SERVER_WRONG_HTTP_CODE LITERAL1 RESERVED_WORD_2 HTTP_UE_SERVER_FAULTY_MD5 LITERAL1 RESERVED_WORD_2 HTTP_UE_BIN_VERIFY_HEADER_FAILED LITERAL1 RESERVED_WORD_2 HTTP_UE_BIN_FOR_WRONG_FLASH LITERAL1 RESERVED_WORD_2 +HTTP_UE_SERVER_UNAUTHORIZED LITERAL1 RESERVED_WORD_2 HTTP_UPDATE_FAILED LITERAL1 RESERVED_WORD_2 HTTP_UPDATE_NO_UPDATES LITERAL1 RESERVED_WORD_2 HTTP_UPDATE_OK LITERAL1 RESERVED_WORD_2 diff --git a/libraries/ESP8266httpUpdate/src/ESP8266httpUpdate.cpp b/libraries/ESP8266httpUpdate/src/ESP8266httpUpdate.cpp index f481d79a6..618f5eaa3 100755 --- a/libraries/ESP8266httpUpdate/src/ESP8266httpUpdate.cpp +++ b/libraries/ESP8266httpUpdate/src/ESP8266httpUpdate.cpp @@ -43,6 +43,26 @@ ESP8266HTTPUpdate::~ESP8266HTTPUpdate(void) { } +/** + * set the Authorization for the http request + * @param user const String& + * @param password const String& + */ +void ESP8266HTTPUpdate::setAuthorization(const String &user, const String &password) +{ + _user = user; + _password = password; +} + +/** + * set the Authorization for the http request + * @param auth const String& base64 + */ +void ESP8266HTTPUpdate::setAuthorization(const String &auth) +{ + _auth = auth; +} + #if HTTPUPDATE_1_2_COMPATIBLE HTTPUpdateResult ESP8266HTTPUpdate::update(const String& url, const String& currentVersion, const String& httpsFingerprint, bool reboot) @@ -241,6 +261,8 @@ String ESP8266HTTPUpdate::getLastErrorString(void) return F("Verify Bin Header Failed"); case HTTP_UE_BIN_FOR_WRONG_FLASH: return F("New Binary Does Not Fit Flash Size"); + case HTTP_UE_SERVER_UNAUTHORIZED: + return F("Unauthorized (401)"); } return String(); @@ -282,6 +304,16 @@ HTTPUpdateResult ESP8266HTTPUpdate::handleUpdate(HTTPClient& http, const String& http.addHeader(F("x-ESP8266-version"), currentVersion); } + if (!_user.isEmpty() && !_password.isEmpty()) + { + http.setAuthorization(_user.c_str(), _password.c_str()); + } + + if (!_auth.isEmpty()) + { + http.setAuthorization(_auth.c_str()); + } + const char * headerkeys[] = { "x-MD5" }; size_t headerkeyssize = sizeof(headerkeys) / sizeof(char*); @@ -432,6 +464,10 @@ HTTPUpdateResult ESP8266HTTPUpdate::handleUpdate(HTTPClient& http, const String& _setLastError(HTTP_UE_SERVER_FORBIDDEN); ret = HTTP_UPDATE_FAILED; break; + case HTTP_CODE_UNAUTHORIZED: + _setLastError(HTTP_UE_SERVER_UNAUTHORIZED); + ret = HTTP_UPDATE_FAILED; + break; default: _setLastError(HTTP_UE_SERVER_WRONG_HTTP_CODE); ret = HTTP_UPDATE_FAILED; diff --git a/libraries/ESP8266httpUpdate/src/ESP8266httpUpdate.h b/libraries/ESP8266httpUpdate/src/ESP8266httpUpdate.h index f1565cd2c..e8e722152 100755 --- a/libraries/ESP8266httpUpdate/src/ESP8266httpUpdate.h +++ b/libraries/ESP8266httpUpdate/src/ESP8266httpUpdate.h @@ -56,6 +56,7 @@ constexpr int HTTP_UE_SERVER_WRONG_HTTP_CODE = (-104); constexpr int HTTP_UE_SERVER_FAULTY_MD5 = (-105); constexpr int HTTP_UE_BIN_VERIFY_HEADER_FAILED = (-106); constexpr int HTTP_UE_BIN_FOR_WRONG_FLASH = (-107); +constexpr int HTTP_UE_SERVER_UNAUTHORIZED = (-108); enum HTTPUpdateResult { HTTP_UPDATE_FAILED, @@ -111,6 +112,9 @@ public: _ledOn = ledOn; } + void setAuthorization(const String& user, const String& password); + void setAuthorization(const String& auth); + #if HTTPUPDATE_1_2_COMPATIBLE // This function is deprecated, use rebootOnUpdate and the next one instead t_httpUpdate_return update(const String& url, const String& currentVersion, @@ -174,6 +178,10 @@ protected: int _lastError; bool _rebootOnUpdate = true; bool _closeConnectionsOnUpdate = true; + String _user; + String _password; + String _auth; + private: int _httpClientTimeout; followRedirects_t _followRedirects;