From 36b3cc92ba0e097c34896f7ea323e5d9b7398219 Mon Sep 17 00:00:00 2001 From: teknomunk Date: Sat, 15 Jul 2023 09:27:40 -0500 Subject: [PATCH] Rename src/app_args.* to src/model/server.*, use new struct http_settings, provide http status code 401 when not properly authenticated to make logs more useful --- src/app_args.c | 100 ---------------------------- src/app_args.h | 23 ------- src/controller/api/client_apps.c | 4 +- src/controller/mastodon_api.c | 7 +- src/http | 2 +- src/model/server.c | 108 +++++++++++++++++++++++++++++++ src/model/server.h | 24 ++++++- src/process.c | 2 +- src/tor.c | 2 +- 9 files changed, 143 insertions(+), 129 deletions(-) delete mode 100644 src/app_args.c delete mode 100644 src/app_args.h diff --git a/src/app_args.c b/src/app_args.c deleted file mode 100644 index d625b1a..0000000 --- a/src/app_args.c +++ /dev/null @@ -1,100 +0,0 @@ -#include "app_args.h" - -#include "json/layout.h" - -#include "controller/cli.h" - -#include -#include -#include - -#define OBJ_TYPE struct app_args -static struct json_object_field app_args_layout[] = { - JSON_FIELD_STRING( domain, true ), - JSON_FIELD_STRING( addr, false ), - JSON_FIELD_INTEGER( port, false ), - JSON_FIELD_BOOL( debug, false ), - JSON_FIELD_BOOL( disable_tor, false ), - JSON_FIELD_INTEGER( tor_socks_port, false ), - - JSON_FIELD_BOOL( develop, false ), - JSON_FIELD_END, -}; -#undef OBJ_TYPE - -struct app_args* g_server = NULL; -void app_args_refresh_tor_hidden_service() -{ - if( !g_server ) { return; } - - free( g_server->tor_hidden_service ); - g_server->tor_hidden_service = NULL; - - FILE* f = fopen("data/tor/hidden_service/hostname","r"); - size_t n; - getline( &g_server->tor_hidden_service, &n, f ); - n = strlen( g_server->tor_hidden_service ); - if( g_server->tor_hidden_service[n-1] == '\n' ) { - g_server->tor_hidden_service[n-1] = '\0'; - } - fclose(f); -} -struct app_args* app_args_new( int argc, char** argv ) -{ - struct app_args* args = (struct app_args*)malloc( sizeof(struct app_args) ); - memset(args,0,sizeof(*args)); - if( !args ) { return NULL; } - - g_server = args; - - args->port = 9053; - args->addr = strdup("0.0.0.0"); - args->tor_socks_port = 9123; - args->section = -1; - - json_read_object_layout_from_file( "data/server.json", app_args_layout, args ); - - app_args_refresh_tor_hidden_service(); - - if( ( argc > 1 ) && ( 0 != strncmp(argv[1],"--",2) ) ) { - handle_command( argv, argc ); - free(args); - return NULL; - } - - for( int i = 1; i < argc; ++i ) { - const char* arg = argv[i]; - - if( sscanf(arg,"--section=%d",&args->section) ) { - } else if( 0 == strcmp(argv[i],"--debug") ) { - args->debug = true; - } else if( 0 == strcmp(argv[i],"--test") ) { - args->section = 3; - } else if( 0 == strcmp(argv[i],"--webserver") ) { - args->section = 0; - } else if( 0 == strcmp(argv[i],"--inbox") ) { - args->section = 1; - } else if( 0 == strcmp(argv[i],"--outbox") ) { - args->section = 2; - } else if( 0 == strcmp(argv[i],"--reindex") ) { - args->section = 3; - } else if( 0 == strcmp(argv[i],"--devel") ) { - args->section = 100; - } else { - printf( "Unknown argument: %s\n", argv[i] ); - free(args); - return NULL; - } - } - - return args; -} - -void app_args_release( struct app_args* args ) -{ - free(args->addr); - free(args->domain); - free(args->tor_hidden_service); - free(args); -} - diff --git a/src/app_args.h b/src/app_args.h deleted file mode 100644 index 76b1a2f..0000000 --- a/src/app_args.h +++ /dev/null @@ -1,23 +0,0 @@ -#pragma once - -#include -#include - -struct app_args -{ - uint16_t port; - char* addr; - char* domain; - char* tor_hidden_service; - bool debug; - int section; - bool disable_tor; - int tor_socks_port; - - bool develop; -}; - -struct app_args* app_args_new( int argc, char** argv ); -void app_args_release( struct app_args* args ); -extern struct app_args* g_server; - diff --git a/src/controller/api/client_apps.c b/src/controller/api/client_apps.c index 871667c..5c0198b 100644 --- a/src/controller/api/client_apps.c +++ b/src/controller/api/client_apps.c @@ -98,7 +98,9 @@ bool check_authentication_header( struct http_request* req ) { // Check bearer token const char* auth_token = http_request_get_header( req, "Authorization" ); - if( !auth_token ) { return false; } + if( !auth_token ) { + return false; + } return check_bearer_token( auth_token ); } diff --git a/src/controller/mastodon_api.c b/src/controller/mastodon_api.c index 69f6997..fb9372c 100644 --- a/src/controller/mastodon_api.c +++ b/src/controller/mastodon_api.c @@ -358,7 +358,12 @@ bool route_mastodon_api( struct http_request* req ) return route_statuses(req); } - if( !check_authentication_header(req) ) { return false; } + if( !check_authentication_header(req) ) { + http_request_send_headers( req, 401, "text/plain", true ); + FILE* f = http_request_get_response_body( req ); + fprintf( f, "Not authorized to use this endpoint.\n" ); + return true; + } if( http_request_route( req, "pleroma" ) ) { return route_pleroma_api( req ); diff --git a/src/http b/src/http index e7caba3..25265c5 160000 --- a/src/http +++ b/src/http @@ -1 +1 @@ -Subproject commit e7caba38aee79997c147ca718b69bb16795eb827 +Subproject commit 25265c5f0132646a35c2f0bf21963a079ebee348 diff --git a/src/model/server.c b/src/model/server.c index 81496a1..ec6bd13 100644 --- a/src/model/server.c +++ b/src/model/server.c @@ -1,2 +1,110 @@ #include "server.h" +#include "json/layout.h" + +#include "controller/cli.h" + +#include +#include +#include + +#define OBJ_TYPE struct app_args +static struct json_object_field app_args_layout[] = { + JSON_FIELD_STRING( domain, true ), + { + .key = "addr", + .offset = offsetof( OBJ_TYPE, http_settings.bind_address ), + .type = &json_field_string, + }, + { + .key = "port", + .offset = offsetof( OBJ_TYPE, http_settings.bind_port ), + .type = &json_field_integer, + }, + //JSON_FIELD_STRING( addr, false ), + //JSON_FIELD_INTEGER( port, false ), + JSON_FIELD_BOOL( debug, false ), + JSON_FIELD_BOOL( disable_tor, false ), + JSON_FIELD_INTEGER( tor_socks_port, false ), + + JSON_FIELD_BOOL( develop, false ), + JSON_FIELD_END, +}; +#undef OBJ_TYPE + +struct app_args* g_server = NULL; +void app_args_refresh_tor_hidden_service() +{ + if( !g_server ) { return; } + + free( g_server->tor_hidden_service ); + g_server->tor_hidden_service = NULL; + + FILE* f = fopen("data/tor/hidden_service/hostname","r"); + size_t n; + getline( &g_server->tor_hidden_service, &n, f ); + n = strlen( g_server->tor_hidden_service ); + if( g_server->tor_hidden_service[n-1] == '\n' ) { + g_server->tor_hidden_service[n-1] = '\0'; + } + fclose(f); +} +struct app_args* app_args_new( int argc, char** argv ) +{ + struct app_args* args = (struct app_args*)malloc( sizeof(struct app_args) ); + memset(args,0,sizeof(*args)); + if( !args ) { return NULL; } + + g_server = args; + + args->http_settings.bind_port = 9053; + args->http_settings.bind_address = strdup("0.0.0.0"); + args->tor_socks_port = 9123; + args->section = -1; + + json_read_object_layout_from_file( "data/server.json", app_args_layout, args ); + + app_args_refresh_tor_hidden_service(); + + if( ( argc > 1 ) && ( 0 != strncmp(argv[1],"--",2) ) ) { + handle_command( argv, argc ); + free(args); + return NULL; + } + + for( int i = 1; i < argc; ++i ) { + const char* arg = argv[i]; + + if( sscanf(arg,"--section=%d",&args->section) ) { + } else if( 0 == strcmp(argv[i],"--debug") ) { + args->debug = true; + } else if( 0 == strcmp(argv[i],"--test") ) { + args->section = 3; + } else if( 0 == strcmp(argv[i],"--webserver") ) { + args->section = 0; + } else if( 0 == strcmp(argv[i],"--inbox") ) { + args->section = 1; + } else if( 0 == strcmp(argv[i],"--outbox") ) { + args->section = 2; + } else if( 0 == strcmp(argv[i],"--reindex") ) { + args->section = 3; + } else if( 0 == strcmp(argv[i],"--devel") ) { + args->section = 100; + } else { + printf( "Unknown argument: %s\n", argv[i] ); + free(args); + return NULL; + } + } + + return args; +} + +void app_args_release( struct app_args* args ) +{ + free(args->http_settings.bind_address); + free(args->domain); + free(args->tor_hidden_service); + free(args); +} + diff --git a/src/model/server.h b/src/model/server.h index 73d1d3f..d751bc7 100644 --- a/src/model/server.h +++ b/src/model/server.h @@ -1,4 +1,26 @@ #pragma once -#include "app_args.h" +#include "http/server/server.h" + +#include +#include + +struct app_args +{ + //uint16_t port; + struct http_server_args http_settings; + //char* addr; + char* domain; + char* tor_hidden_service; + bool debug; + int section; + bool disable_tor; + int tor_socks_port; + + bool develop; +}; + +struct app_args* app_args_new( int argc, char** argv ); +void app_args_release( struct app_args* args ); +extern struct app_args* g_server; diff --git a/src/process.c b/src/process.c index a64d160..24b0b97 100644 --- a/src/process.c +++ b/src/process.c @@ -54,7 +54,7 @@ static void handle_request( struct http_request* req, void* ) static bool run_webserver( struct app_args* args ) { - struct http_server* srv = http_server_new( args, handle_request, NULL ); + struct http_server* srv = http_server_new( &args->http_settings, handle_request, NULL ); if( !srv ) { printf( "Error setting up server\n" ); return false; diff --git a/src/tor.c b/src/tor.c index 2a7733c..3a6e164 100644 --- a/src/tor.c +++ b/src/tor.c @@ -28,7 +28,7 @@ int start_tor() fprintf( f, "Log notice stdout\n" ); fprintf( f, "DataDirectory %s\n", wd ); fprintf( f, "HiddenServiceDir %s/hidden_service\n", wd ); - fprintf( f, "HiddenServicePort 80 127.0.0.1:%d\n", g_server->port ); + fprintf( f, "HiddenServicePort 80 127.0.0.1:%d\n", g_server->http_settings.bind_port ); fclose(f); printf( "Starting tor...\n" );