options('/{routes:.*}', function (Request $request, Response $response) { // CORS Pre-Flight OPTIONS Request Handler return $response; }); $app->get('/', function (Request $request, Response $response) { $asciiArt = <<getBody()->write("phpds - an atproto personal data server in php"); $response->getBody()->write("
{$asciiArt}
"); $response->getBody()->write("

this is phpds, an atproto personal data server implemented in PHP!

"); $response->getBody()->write("

useful routes are under /xrpc/

"); $response->getBody()->write("

please don't use this in prod!

"); $response ->getBody() ->write("

with love, @andresitorresm.com

"); $response ->getBody() ->write( "

source code: " . "GitHub and " . "tangled.sh

" ); return $response; }); $app->get('/health', function (Request $request, Response $response) { $response->getBody()->write('ok'); return $response; }); $app->get('/robots.txt', function (Request $request, Response $response) { $response->getBody()->write("User-agent: *\nAllow: /"); return $response->withHeader('Content-Type', 'text/plain'); }); $app->group('/xrpc', function (Group $group) { // atproto admin $group->get('/com.atproto.admin.getInviteCodes', GetInviteCodesAction::class) ->add(AdminAuthMiddleware::class); // atproto server $group->post('/com.atproto.server.createAccount', CreateAccountAction::class); $group->post('/com.atproto.server.createInviteCode', CreateInviteCodeAction::class) ->add(AdminAuthMiddleware::class); $group->post('/com.atproto.server.createSession', CreateSessionAction::class); $group->get('/com.atproto.server.describeServer', DescribeServerAction::class); // atproto identity $group->get('/com.atproto.identity.resolveHandle', ResolveHandleAction::class); // atproto sync $group->get('/com.atproto.sync.listRepos', ListReposAction::class); $group->get('/com.atproto.sync.getLatestCommit', GetLatestCommitAction::class); $group->get('/com.atproto.sync.getRepoStatus', GetRepoStatusAction::class); // misc $group->get('/_health', function (Request $request, Response $response) { $version = InstalledVersions::getRootPackage()['pretty_version']; $response->getBody()->write((string) json_encode(['version' => $version])); return $response->withHeader('Content-Type', 'application/json'); }); }); };