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

master
teknomunk 10 months ago
parent a8d7e7f041
commit 36b3cc92ba

@ -1,100 +0,0 @@
#include "app_args.h"
#include "json/layout.h"
#include "controller/cli.h"
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#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);
}

@ -1,23 +0,0 @@
#pragma once
#include <stdint.h>
#include <stdbool.h>
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;

@ -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 );
}

@ -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 );

@ -1 +1 @@
Subproject commit e7caba38aee79997c147ca718b69bb16795eb827
Subproject commit 25265c5f0132646a35c2f0bf21963a079ebee348

@ -1,2 +1,110 @@
#include "server.h"
#include "json/layout.h"
#include "controller/cli.h"
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#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);
}

@ -1,4 +1,26 @@
#pragma once
#include "app_args.h"
#include "http/server/server.h"
#include <stdint.h>
#include <stdbool.h>
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;

@ -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;

@ -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" );

Loading…
Cancel
Save