Skip to content
Snippets Groups Projects
Commit 39e5cf07 authored by Arie Peterson's avatar Arie Peterson
Browse files

Add endpoint for listing ssh keys

parent fa6727f5
No related branches found
No related tags found
No related merge requests found
/**
* Callback function that lists the current ssh keys authorised for access
* to the initrd.
* @param[in] request incoming HTTP request
* @param[out] response HTTP response to the request
* @param[in] user_data extra data to pass between main thread and callbacks
* @return internal status code
*/
int callback_ssh_keys_get(const struct _u_request * request,
struct _u_response * response, void * user_data)
{
FILE * authorized_keys;
char * line = NULL;
size_t line_length = 0;
ssize_t read;
json_t * keys = json_array();
// Open file.
authorized_keys = fopen("/root/.ssh/authorized_keys", "r");
// Check if that succeeded.
if (authorized_keys == NULL)
{
printf("Could not open authorized_keys file\n");
return send_simple_response(response, 500, "error",
"error reading authorized_keys");
}
// Read file line by line.
while ((read = getline(&line, &line_length, authorized_keys)) != -1)
{
// Remove trailing newline.
line[strcspn(line, "\n")] = 0;
json_array_append(keys, json_string(line));
}
// Close file and clean up.
fclose(authorized_keys);
if (line)
{
free(line);
}
// Create json response.
json_t * json_body = NULL;
json_body = json_object();
json_object_set_new(json_body, "ssh-keys", keys);
// Send response.
ulfius_set_json_body_response(response, 200, json_body);
json_decref(json_body);
return U_CALLBACK_CONTINUE;
}
......@@ -8,6 +8,7 @@
#include <api/default.c>
#include <api/encryption_add.c>
#include <api/encryption_unlock.c>
#include <api/ssh_keys_get.c>
int main(int argc, char ** argv)
{
......@@ -31,6 +32,8 @@ int main(int argc, char ** argv)
0, &callback_encryption_add, NULL);
ulfius_add_endpoint_by_val(&instance, "POST", PREFIX, "/encryption/unlock",
0, &callback_encryption_unlock, NULL);
ulfius_add_endpoint_by_val(&instance, "GET" , PREFIX, "/ssh/keys",
0, &callback_ssh_keys_get, NULL);
// Add default endpoint.
ulfius_set_default_endpoint(&instance, &callback_default, NULL);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment