Skip to content

Commit

Permalink
Add optional support for CORS headers (#2688)
Browse files Browse the repository at this point in the history
* add support for CORS headers

* remove accidental function impl

* rename setCORS to enableCORS, and add aliased function enableCrossOrigin
  • Loading branch information
vicatcu authored and me-no-dev committed Apr 22, 2019
1 parent f8eebb5 commit 672e4fa
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 5 deletions.
17 changes: 15 additions & 2 deletions libraries/WebServer/src/WebServer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ WebServer::WebServer(IPAddress addr, int port)
, _currentHeaders(nullptr)
, _contentLength(0)
, _chunked(false)
, _corsEnabled(false)
{
}

Expand All @@ -75,6 +76,7 @@ WebServer::WebServer(int port)
, _currentHeaders(nullptr)
, _contentLength(0)
, _chunked(false)
, _corsEnabled(false)
{
}

Expand Down Expand Up @@ -104,7 +106,7 @@ void WebServer::begin(uint16_t port) {

String WebServer::_extractParam(String& authReq,const String& param,const char delimit){
int _begin = authReq.indexOf(param);
if (_begin == -1)
if (_begin == -1)
return "";
return authReq.substring(_begin+param.length(),authReq.indexOf(delimit,_begin+param.length()));
}
Expand Down Expand Up @@ -366,6 +368,14 @@ void WebServer::setContentLength(const size_t contentLength) {
_contentLength = contentLength;
}

void WebServer::enableCORS(boolean value) {
_corsEnabled = value;
}

void WebServer::enableCrossOrigin(boolean value) {
enableCORS(value);
}

void WebServer::_prepareHeader(String& response, int code, const char* content_type, size_t contentLength) {
response = String(F("HTTP/1.")) + String(_currentVersion) + ' ';
response += String(code);
Expand All @@ -388,6 +398,9 @@ void WebServer::_prepareHeader(String& response, int code, const char* content_t
sendHeader(String(F("Accept-Ranges")),String(F("none")));
sendHeader(String(F("Transfer-Encoding")),String(F("chunked")));
}
if (_corsEnabled) {
sendHeader(String(FPSTR("Access-Control-Allow-Origin")), String("*"));
}
sendHeader(String(F("Connection")), String(F("close")));

response += _responseHeaders;
Expand Down Expand Up @@ -494,7 +507,7 @@ void WebServer::_streamFileCore(const size_t fileSize, const String & fileName,
send(200, contentType, "");
}

String WebServer::pathArg(unsigned int i) {
String WebServer::pathArg(unsigned int i) {
if (_currentHandler != nullptr)
return _currentHandler->pathArg(i);
return "";
Expand Down
10 changes: 7 additions & 3 deletions libraries/WebServer/src/WebServer.h
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,9 @@ class WebServer
void send_P(int code, PGM_P content_type, PGM_P content);
void send_P(int code, PGM_P content_type, PGM_P content, size_t contentLength);

void enableCORS(boolean value = true);
void enableCrossOrigin(boolean value = true);

void setContentLength(const size_t contentLength);
void sendHeader(const String& name, const String& value, bool first = false);
void sendContent(const String& content);
Expand All @@ -130,12 +133,12 @@ class WebServer

static String urlDecode(const String& text);

template<typename T>
template<typename T>
size_t streamFile(T &file, const String& contentType) {
_streamFileCore(file.size(), file.name(), contentType);
return _currentClient.write(file);
}

protected:
virtual size_t _currentClientWrite(const char* b, size_t l) { return _currentClient.write( b, l ); }
virtual size_t _currentClientWrite_P(PGM_P b, size_t l) { return _currentClient.write_P( b, l ); }
Expand All @@ -151,7 +154,7 @@ class WebServer
int _uploadReadByte(WiFiClient& client);
void _prepareHeader(String& response, int code, const char* content_type, size_t contentLength);
bool _collectHeader(const char* headerName, const char* headerValue);

void _streamFileCore(const size_t fileSize, const String & fileName, const String & contentType);

String _getRandomHexString();
Expand All @@ -163,6 +166,7 @@ class WebServer
String value;
};

boolean _corsEnabled;
WiFiServer _server;

WiFiClient _currentClient;
Expand Down

0 comments on commit 672e4fa

Please sign in to comment.