setCert( __DIR__ . '/../host/' . $argv[1] . '/cert.pem' ); $server->setKey( __DIR__ . '/../host/' . $argv[1] . '/key.rsa' ); $server->setHandler( function (\Yggverse\TitanII\Request $request): \Yggverse\TitanII\Response { global $config; global $filesystem; $response = new \Yggverse\TitanII\Response(); $response->setCode( 20 ); $response->setMeta( 'text/gemini' ); // Route begin switch ($request->getPath()) { // Home request case null: case '/': if ($path = $filesystem->getPagePathByUri($config->dokuwiki->uri->home)) { $reader = new \Yggverse\Gemini\Dokuwiki\Reader(); $response->setContent( $reader->toGemini( file_get_contents( $path ) ) ); return $response; } // Internal page request default: if (preg_match('/^\/([^\/]*)$/', $request->getPath(), $matches)) { if (!empty($matches[1])) { if ($path = $filesystem->getPagePathByUri($matches[1])) { // Append extra data $lines = [ PHP_EOL ]; // Append actions header $lines[] = sprintf( '## %s', $config->string->actions ); // Append source and homepage link $lines[] = sprintf( '=> gemini://%s%s %s', $config->gemini->server->host, $config->gemini->server->port == 1965 ? null : ':' . $config->gemini->server->port, $config->string->main ); // Append source link $lines[] = sprintf( '=> %s/%s %s', $config->dokuwiki->url->source, $matches[1], $config->string->source ); // Append about info $lines[] = $config->string->about; // Merge data lines $data = implode( PHP_EOL, $lines ); // Read document $reader = new \Yggverse\Gemini\Dokuwiki\Reader(); // Define base URL $reader->setMacros( '~URL:base~', sprintf( 'gemini://%s%s/', $config->gemini->server->host, $config->gemini->server->port == 1965 ? null : ':' . $config->gemini->server->port ) ); $response->setContent( $reader->toGemini( file_get_contents( $path ) . $data ) ); return $response; } } } } // Route not found $response->setCode( 51 ); return $response; } ); // Start server echo sprintf( _('Server "%s" started on %s:%d') . PHP_EOL, $argv[1], $config->gemini->server->host, $config->gemini->server->port ); $server->start( $config->gemini->server->host, $config->gemini->server->port );