Start implementing administrative interface, add initial installation instructions to README, make soapbox.json into a server-created file
parent
48db4e78ab
commit
ce178cd5a9
@ -0,0 +1,45 @@
|
||||
#include "controller/admin.h"
|
||||
|
||||
// Model
|
||||
#include "src/model/server.h"
|
||||
|
||||
// View
|
||||
|
||||
// Controller
|
||||
#include "src/controller/api/client_apps.h"
|
||||
|
||||
#include "http/server/request.h"
|
||||
|
||||
const char* view_checkbox( bool value )
|
||||
{
|
||||
return value ? "checked" : "";
|
||||
}
|
||||
|
||||
bool route_admin_request( struct http_request* req )
|
||||
{
|
||||
// TODO: authenticate
|
||||
if( !check_authentication_header(req) ) {
|
||||
printf( "User-Agent: %s\n", http_request_get_header(req,"user-agent") );
|
||||
|
||||
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_term( req, "/server-setup" ) ) {
|
||||
return handle_admin_server_setup(req);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Route: /admin/server-setup
|
||||
// Special: / (when server hasn't been configured)
|
||||
bool handle_admin_server_setup( struct http_request* req )
|
||||
{
|
||||
http_request_send_headers( req, 200, "text/html", true );
|
||||
FILE* f = http_request_get_response_body( req );
|
||||
#include "view/admin/server-setup.html.inc"
|
||||
return true;
|
||||
}
|
||||
|
@ -0,0 +1,9 @@
|
||||
#pragma once
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
struct http_request;
|
||||
|
||||
bool route_admin_request( struct http_request* req );
|
||||
bool handle_admin_server_setup( struct http_request* req );
|
||||
|
@ -0,0 +1,76 @@
|
||||
<html>%(/*
|
||||
vim: filetype=html
|
||||
*/)
|
||||
<body>
|
||||
<h1>Welcome to Apogee</h1>
|
||||
<p>
|
||||
Apogee is a single-user Activity Pub federated server intended for self-hosting.
|
||||
</p>
|
||||
|
||||
<h2>Server Settings</h2>
|
||||
<form method="POST" action="/admin/">
|
||||
<h3>HTTP</h3>
|
||||
<table width='100%%'>
|
||||
<tr>
|
||||
<td width="15%%"><b>Domain Name:</b></td>
|
||||
<td><input name="domain" type="text" value="%s{ g_server->domain ? g_server->domain : "" }"/></td>
|
||||
<td></td>
|
||||
<tr>
|
||||
<td><b>Listen Address:</b></td>
|
||||
<td><input name="address" type="text" value="%s{ g_server->http_settings.bind_address ? g_server->http_settings.bind_address : "0.0.0.0" }"/></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>Listen Port:</b></td>
|
||||
<td><input name="port" type="text" value="%d{ g_server->http_settings.bind_port }" /></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>User Agent:</b></td>
|
||||
<td><input name="useragent" type="text" value="%s{ g_server->user_agent }" /></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h3>Tor</h3>
|
||||
<table width='100%%'>
|
||||
<tr>
|
||||
<td width="15%%"><b>Disable:<b></td>
|
||||
<td><input name="disable_tor" type="checkbox" %s{ view_checkbox(g_server->disable_tor) }/></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>SOCKS Port:<b></td>
|
||||
<td><input name="socks_port" type="text" value="%d{ g_server->tor_socks_port }" /></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h3>Other</h3>
|
||||
<table width='100%%'>
|
||||
<tr>
|
||||
<td width="15%%"><b>Outbox Discard Limit:</b></td>
|
||||
<td><input name="outbox_discard_limit" type="text" value="%d{ g_server->outbox_discard_limit }" /></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>Debug Mode:</b></td>
|
||||
<td><input name="debug" type="checkbox" %s{ view_checkbox(g_server->debug) }/></td>
|
||||
<td>Greatly increases server verbosity</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>Developer Mode:</b></td>
|
||||
<td><input name="develop" type="checkbox" %s{ view_checkbox(g_server->develop) }/></td>
|
||||
<td>Change server behavior to suit developers</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><b>Server Enabled:</b></td>
|
||||
<td><input name="enabled" type="checkbox" %s{ view_checkbox( g_server->enabled ) }/></td>
|
||||
<td>Turn the entire server off</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br/>
|
||||
<input type="submit" />
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,33 @@
|
||||
{
|
||||
"logo":"/instance/images/logo.png",
|
||||
"brandColor": "#0482d8",
|
||||
"promoPanel":{
|
||||
"items":[
|
||||
{
|
||||
"icon": "area-chart",
|
||||
"text": "Site stats",
|
||||
"url": "https://fediverse.network/%s{ g_server->domain }"
|
||||
},
|
||||
{
|
||||
"icon": "admin",
|
||||
"text": "Server Settings",
|
||||
"url": "/admin/server-settings"
|
||||
}
|
||||
]
|
||||
},
|
||||
"defaultSettings": {
|
||||
"autoPlayGif": false,
|
||||
"themeMode": "light"
|
||||
},
|
||||
"copyright": "♡2020. Copying is an act of love. Please copy and share.",
|
||||
"navlinks": {
|
||||
"homeFooter":[
|
||||
{ "title": "About", "url": "/about" },
|
||||
{ "title": "Terms of Service", "url": "/about/tos" },
|
||||
{ "title": "Privacy Policy", "url": "/about/privacy" },
|
||||
{ "title": "DMCA", "url": "/about/dmca" },
|
||||
{ "title": "Source Code", "url": "/about#opensource" }
|
||||
]
|
||||
},
|
||||
"allowedEmoji": ["🤔", "😂", "😭", "😡", "🥰", "👍🏼", "👎🏼", "🔥", "😩", "🍆"]
|
||||
}
|
Loading…
Reference in new issue