#include "mastodon_api.h" #include "http_server/http_request.h" #include #include #include #include "form.h" #include "json/json.h" #include "model/status.h" #include "model/account.h" #include "model/notification.h" #include "api/client_apps.h" #include "api/status.h" #include "api/notice.h" bool handle_timeline( struct http_request* req, const char* which ) { // "GET /api/v1/timelines/home?with_muted=true&limit=31" bool with_muted = false; unsigned int limit = 100; struct status s = { .id = 1, .account_id = 1, }; show_statuses( req, &s, 1 ); return true; } bool handle_mastodon_api_show_account( struct http_request* req, struct account* a ) { http_request_send_headers( req, 200, "application/json", true ); FILE* f = http_request_get_response_body( req ); account_write_as_json(a,f); return true; } static bool http_request_route_id( struct http_request* req, int* id ) { char* id_str = http_request_route_get_dir_or_file(req); if( !id_str || !*id_str ) { return false; } *id = -1; sscanf( id_str, "%d", id ); free(id_str); if( *id == -1 ) { return false; } return true; } bool route_mastodon_api( struct http_request* req ) { if( http_request_route( req, "apps" ) ) { if( http_request_route_method( req, "POST" ) ) { return handle_mastodon_api_apps(req); } } if( http_request_route( req, "timelines/public" ) ) { show_statuses( req, NULL, 0 ); return true; } /* if( !check_bearer_token(req) ) { return false; } printf( "authorization still valid\n" ); //*/ struct account* owner = account_from_id(0); if( http_request_route( req, "notifications" ) ) { struct notification note = { .account_id = 1, .status_id = 1, }; show_notifications( req, ¬e, 1 ); return true; } if( http_request_route( req, "statuses" ) ) { if( http_request_route( req, "/" ) ) { int id = -1; if( http_request_route_id( req, &id ) ) { struct status* s = status_from_id(id); if( http_request_route( req, "context" ) ) { show_status_context( req, s ); } else { show_status( req, s ); } return true; } } else if( http_request_route_method( req, "POST" ) ) { return handle_post(req, owner); } } if( http_request_route( req, "timelines/home" ) ) { return handle_timeline( req, "home" ); } else if( http_request_route( req, "accounts/" ) ) { if( http_request_route( req, "verify_credentials" ) ) { return true; } else if( http_request_route( req, "statuses" ) ) { show_statuses( req, NULL, 0 ); return true; } char* id_str = http_request_route_get_dir_or_file(req); int id = 0; if( http_request_route_id( req, &id ) ) { struct account* a = account_from_id( id ); if( !a ) { return false; } if( http_request_route( req, "statuses" ) ) { printf( "TODO: statuses\n" ); show_statuses( req, NULL, 0 ); return true; } else { return handle_mastodon_api_show_account( req, a ); } } else if( id == 0 ) { return handle_mastodon_api_show_account( req, owner ); } } return false; }