Started to add support for Cookies, not fully implemented yet
This commit is contained in:
parent
444d1ff60c
commit
bbebac6212
@ -23,6 +23,15 @@ class WEBServer : public TCPServer<T>, public HttpConstants
|
|||||||
PARSE_HTTP_HEADER_PARAMS
|
PARSE_HTTP_HEADER_PARAMS
|
||||||
};
|
};
|
||||||
enum WEBClientState {ACCEPTED, PARSING, QUERY_PARSED, RESPONSE_SENT, DONE};
|
enum WEBClientState {ACCEPTED, PARSING, QUERY_PARSED, RESPONSE_SENT, DONE};
|
||||||
|
|
||||||
|
struct HttpCookie
|
||||||
|
{
|
||||||
|
DictionaryHelper::StringEntity value;
|
||||||
|
DictionaryHelper::StringEntity domain;
|
||||||
|
DictionaryHelper::StringEntity path;
|
||||||
|
int32_t sameSite : 1, httpOnly : 1, maxAge : 30;
|
||||||
|
//Need to add the expires field as well. Thinking about the best way of doing it.
|
||||||
|
};
|
||||||
|
|
||||||
struct HttpRequestData
|
struct HttpRequestData
|
||||||
{
|
{
|
||||||
@ -87,6 +96,25 @@ class WEBServer : public TCPServer<T>, public HttpConstants
|
|||||||
return _httpHeadersDictionary.count();
|
return _httpHeadersDictionary.count();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The addCookie method adds cookies to the cookie dictionary which will be used when calling the sendHTTPResponse method.
|
||||||
|
* Once the cookies are sent, the dictionary will be emptied.
|
||||||
|
**/
|
||||||
|
boolean addCookies(const char *cookieName, const char *cookieValue, int32_t maxAge = -1, const char *cookiePath = nullptr, const char *cookieDomain = nullptr, boolean httpOnly = false, boolean sameSite = false)
|
||||||
|
{
|
||||||
|
return _setCookieDictionary.add(cookieName, new HttpCookie({cookieValue, cookieDomain, cookiePath, sameSite, httpOnly, maxAge}));
|
||||||
|
}
|
||||||
|
|
||||||
|
void clearCookies(void)
|
||||||
|
{
|
||||||
|
_setCookieDictionary.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean removeCookie(const char *cookieName)
|
||||||
|
{
|
||||||
|
return _setCookieDictionary.remove(cookieName);
|
||||||
|
}
|
||||||
|
|
||||||
void sendHTTPResponse(WiFiClient *client, const char *contentType, const size_t contentLength = 0, HttpVersion version = HttpVersion::HTTP_1_1, HTTP_CODE HTTPCode = HTTP_CODE::HTTP_CODE_OK)
|
void sendHTTPResponse(WiFiClient *client, const char *contentType, const size_t contentLength = 0, HttpVersion version = HttpVersion::HTTP_1_1, HTTP_CODE HTTPCode = HTTP_CODE::HTTP_CODE_OK)
|
||||||
{
|
{
|
||||||
if(!client) return;
|
if(!client) return;
|
||||||
@ -104,6 +132,15 @@ class WEBServer : public TCPServer<T>, public HttpConstants
|
|||||||
{
|
{
|
||||||
client->printf("\r\n%s: %s", _httpHeadersDictionary.getParameter(i), _httpHeadersDictionary.getAt(i) ? _httpHeadersDictionary.getAt(i)->getString() : "");
|
client->printf("\r\n%s: %s", _httpHeadersDictionary.getParameter(i), _httpHeadersDictionary.getAt(i) ? _httpHeadersDictionary.getAt(i)->getString() : "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//We here send the user defined cookies :)
|
||||||
|
for(unsigned int i(0); i < _setCookieDictionary.count(); i++)
|
||||||
|
{
|
||||||
|
//client
|
||||||
|
}
|
||||||
|
|
||||||
|
//We do not forget to clear them after
|
||||||
|
clearCookies();
|
||||||
|
|
||||||
client->print("\r\n\r\n");
|
client->print("\r\n\r\n");
|
||||||
}
|
}
|
||||||
@ -1075,6 +1112,7 @@ class WEBServer : public TCPServer<T>, public HttpConstants
|
|||||||
|
|
||||||
Dictionary<ApiRoutine> _apiDictionary;
|
Dictionary<ApiRoutine> _apiDictionary;
|
||||||
Dictionary<DictionaryHelper::StringEntity> _httpHeadersDictionary;
|
Dictionary<DictionaryHelper::StringEntity> _httpHeadersDictionary;
|
||||||
|
Dictionary<HttpCookie> _setCookieDictionary;
|
||||||
SDClass *_sdClass;
|
SDClass *_sdClass;
|
||||||
char *_WWWDir = nullptr; //Website root folder
|
char *_WWWDir = nullptr; //Website root folder
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user