Skip to content

Commit c616a3d

Browse files
authored
Pass access token via authentication header (#38)
Pass token using authentication header instead of URL parameter
1 parent 46e38ae commit c616a3d

File tree

3 files changed

+24
-13
lines changed

3 files changed

+24
-13
lines changed

components/livekit/core/signaling.c

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -307,15 +307,33 @@ signal_err_t signal_connect(signal_handle_t handle, const char* server_url, cons
307307

308308
char* url = NULL;
309309
url_build_options options = {
310-
.server_url = server_url,
311-
.token = token
310+
.server_url = server_url
312311
};
313312
if (!url_build(&options, &url)) {
314313
return SIGNAL_ERR_INVALID_URL;
315314
}
315+
ESP_LOGI(TAG, "Connecting to server: %s", url);
316316
esp_websocket_client_set_uri(sg->ws, url);
317317
free(url);
318318

319+
if (!sg->is_terminal_state) {
320+
// Initial connection (transport not created yet)
321+
char* auth_value = NULL;
322+
if (asprintf(&auth_value, "Bearer %s", token) < 0) {
323+
return SIGNAL_ERR_NO_MEM;
324+
}
325+
esp_websocket_client_append_header(sg->ws, "Authorization", auth_value);
326+
free(auth_value);
327+
} else {
328+
// Subsequent connection (transport already created)
329+
char* header_string = NULL;
330+
if (asprintf(&header_string, "Authorization: Bearer %s\r\n", token) < 0) {
331+
return SIGNAL_ERR_NO_MEM;
332+
}
333+
esp_websocket_client_set_headers(sg->ws, header_string);
334+
free(header_string);
335+
}
336+
319337
if (esp_websocket_client_start(sg->ws) != ESP_OK) {
320338
ESP_LOGE(TAG, "Failed to start WebSocket");
321339
return SIGNAL_ERR_WEBSOCKET;

components/livekit/core/url.c

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,13 @@ static const char *TAG = "livekit_url";
3939
"&os_version=%s" \
4040
"&device_model=%d" \
4141
"&auto_subscribe=false" \
42-
"&protocol=" URL_PARAM_PROTOCOL \
43-
"&access_token=%s" // Keep at the end for log redaction
42+
"&protocol=" URL_PARAM_PROTOCOL
4443

4544
bool url_build(const url_build_options *options, char **out_url)
4645
{
4746
if (out_url == NULL ||
4847
options == NULL ||
49-
options->server_url == NULL ||
50-
options->token == NULL) {
48+
options->server_url == NULL) {
5149
return false;
5250
}
5351
size_t server_url_len = strlen(options->server_url);
@@ -69,19 +67,15 @@ bool url_build(const url_build_options *options, char **out_url)
6967
int model_code = chip_info.model;
7068
const char* idf_version = esp_get_idf_version();
7169

70+
// TODO: Now that token is not included in the URL, use a fixed size buffer
7271
int final_len = asprintf(out_url, URL_FORMAT,
7372
options->server_url,
7473
separator,
7574
idf_version,
76-
model_code,
77-
options->token
75+
model_code
7876
);
7977
if (*out_url == NULL) {
8078
return false;
8179
}
82-
// Token is redacted from logging for security
83-
ESP_LOGI(TAG, "Built signaling URL: %.*s[REDACTED]",
84-
(int)((size_t)final_len - strlen(options->token)),
85-
*out_url);
8680
return true;
8781
}

components/livekit/core/url.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ extern "C" {
2525
/// Options for building a signaling URL.
2626
typedef struct {
2727
const char *server_url;
28-
const char *token;
2928
} url_build_options;
3029

3130
/// Constructs a signaling URL.

0 commit comments

Comments
 (0)