Skip to content

Commit f8756bb

Browse files
committed
[This is not production ready code] Copy cookie from negotiate to websocket
1 parent d842db7 commit f8756bb

File tree

3 files changed

+41
-2
lines changed

3 files changed

+41
-2
lines changed

include/signalrclient/http_client.h

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,5 +64,40 @@ namespace signalr
6464
virtual void send(const std::string& url, const http_request& request, std::function<void(const http_response&, std::exception_ptr)> callback) = 0;
6565

6666
virtual ~http_client() {}
67+
68+
void set_cookies(std::string&& cookies)
69+
{
70+
// TODO: validate, append, parse?
71+
auto pos = cookies.find(';');
72+
if (pos != -1)
73+
{
74+
m_cookies = cookies.substr(0, pos);
75+
}
76+
else
77+
{
78+
m_cookies = cookies;
79+
}
80+
}
81+
82+
void set_cookies(const std::string& cookies)
83+
{
84+
// TODO: validate, append, parse?
85+
auto pos = cookies.find(';');
86+
if (pos != -1)
87+
{
88+
m_cookies = cookies.substr(0, pos);
89+
}
90+
else
91+
{
92+
m_cookies = cookies;
93+
}
94+
}
95+
96+
const std::string& get_cookies() const noexcept
97+
{
98+
return m_cookies;
99+
}
100+
private:
101+
std::string m_cookies;
67102
};
68103
}

src/signalrclient/connection_impl.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,8 @@ namespace signalr
236236
return;
237237
}
238238

239+
connection->m_signalr_client_config.get_http_headers()["Cookie"] = connection->m_http_client->get_cookies();
240+
239241
connection->start_transport(url, [weak_connection, callback, token](std::shared_ptr<transport> transport, std::exception_ptr exception)
240242
{
241243
auto connection = weak_connection.lock();

src/signalrclient/default_http_client.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,17 +78,19 @@ namespace signalr
7878

7979
web::http::client::http_client client(utility::conversions::to_string_t(url));
8080
client.request(http_request, cts.get_token())
81-
.then([context, callback](pplx::task<web::http::http_response> response_task)
81+
.then([context, callback, this](pplx::task<web::http::http_response> response_task)
8282
{
8383
try
8484
{
8585
auto http_response = response_task.get();
8686
auto status_code = http_response.status_code();
87+
auto& cookies = http_response.headers()[U("set-cookie")];
88+
set_cookies(utility::conversions::to_utf8string(cookies));
8789
http_response.extract_utf8string()
8890
.then([callback, status_code](std::string response_body)
8991
{
9092
signalr::http_response response;
91-
response.content = response_body;
93+
response.content = std::move(response_body);
9294
response.status_code = status_code;
9395
callback(std::move(response), nullptr);
9496
});

0 commit comments

Comments
 (0)