logout, headers

This commit is contained in:
Felicia Seo 2022-12-10 20:41:03 -05:00
parent 4720b6f233
commit a874b62771
2 changed files with 21 additions and 12 deletions

View File

@ -121,13 +121,12 @@ http_process_headers(struct http_transaction *ta)
* are zero-terminated strings. * are zero-terminated strings.
*/ */
if (!strcasecmp(field_name, "Cookie")) { if (!strcasecmp(field_name, "Cookie")) {
if (field_value == NULL) if ((field_value == NULL) || (strlen(field_value) <= 11)
return false; return false;
printf("%s\n", field_value);
ta->token = field_value + 11; // + 11 gets rid of "auth_token=" heading. ta->token = field_value + 11; // + 11 gets rid of "auth_token=" heading.
ta->valid_token = validate_token_exp(ta, ta->token); ta->valid_token = validate_token_exp(ta, ta->token);
ta->cookie = bufio_ptr2offset(ta->client->bufio, field_name);
} }
} }
} }
@ -312,6 +311,7 @@ bool validate_token_exp(struct http_transaction *ta, char* token) {
char* grants = jwt_get_grants_json(cookie, NULL); char* grants = jwt_get_grants_json(cookie, NULL);
if (grants == NULL) if (grants == NULL)
return send_error(ta, HTTP_OK, "{}"); return send_error(ta, HTTP_OK, "{}");
ta->grants = grants;
// Get expiration time. // Get expiration time.
json_error_t error; json_error_t error;
@ -470,14 +470,18 @@ static bool get_handle_login(struct http_transaction *ta) {
http_add_header(&ta->resp_headers, "Content-Type", "application/json"); http_add_header(&ta->resp_headers, "Content-Type", "application/json");
if (!ta->valid_token) { if (!ta->valid_token) {
return send_error(ta, HTTP_PERMISSION_DENIED,"Forbidden.\n"); return send_error(ta, HTTP_PERMISSION_DENIED,"Permission denied.\n");
} }
//~ char *json = buffer_ensure_capacity(&ta->resp_body, MAX_HEADER_LEN); //~ char *json = buffer_ensure_capacity(&ta->resp_body, MAX_HEADER_LEN);
//~ int len = snprintf(json, strlen(grants) + 2, "%s\n", grants); //~ int len = snprintf(json, strlen(ta->grants) + 2, "%s\n", ta->grants);
//~ int length = len > MAX_HEADER_LEN ? MAX_HEADER_LEN - 1 : len; //~ int length = len > MAX_HEADER_LEN ? MAX_HEADER_LEN - 1 : len;
//~ ta->resp_body.len += length; //~ ta->resp_body.len += length;
buffer_appends(&ta->resp_body, ta->grants);
buffer_appends(&ta->resp_body, CRLF);
ta->resp_status = HTTP_OK;
return send_response(ta); return send_response(ta);
} }
@ -544,7 +548,6 @@ handle_api(struct http_transaction *ta)
return send_not_found(ta); return send_not_found(ta);
} }
http_add_header(&ta->resp_headers, "Accept-Ranges", "bytes");
if (val == 0) { if (val == 0) {
if (ta->req_method == HTTP_POST) { if (ta->req_method == HTTP_POST) {
// Handle login post // Handle login post
@ -562,6 +565,7 @@ handle_api(struct http_transaction *ta)
} }
if (val == 1) { if (val == 1) {
http_add_header(&ta->resp_headers, "Accept-Ranges", "bytes");
DIR* dir = opendir(server_root); DIR* dir = opendir(server_root);
char *json = list_videos(dir); char *json = list_videos(dir);
fprintf(stderr, "json: %s\n", json); fprintf(stderr, "json: %s\n", json);
@ -579,9 +583,14 @@ handle_api(struct http_transaction *ta)
} }
if (ta->req_method == HTTP_POST) // handles logout if (ta->req_method == HTTP_POST) // handles logout
{ {
char* cookie = "auth_token=; Path=/; Max-Age=0; HttpOnly"; // Add Set-Cookie header.
ta->cookie = bufio_ptr2offset(ta->client->bufio, cookie); http_add_header(&ta->resp_headers, "Set-Cookie", "auth_token=; Path=/; Max-Age=0; HttpOnly");
return true;
// Send message.
buffer_appends(&ta->resp_body, "{\"message\":\"logging out\"}");
buffer_appends(&ta->resp_body, CRLF);
ta->resp_status = HTTP_OK;
return send_response(ta);
} }
return false; return false;

View File

@ -40,9 +40,9 @@ struct http_transaction {
size_t req_body; // ditto size_t req_body; // ditto
int req_content_len; // content length of request body int req_content_len; // content length of request body
size_t cookie; // offset to cookie header
char *token; // authentication token char *token; // authentication token
bool valid_token; bool valid_token;
char* grants;
/* response related fields */ /* response related fields */
enum http_response_status resp_status; enum http_response_status resp_status;