Browse Source

initial commit

main
ghost 9 months ago
parent
commit
fab623885c
  1. 3
      .gitignore
  2. 17
      composer.json
  3. 21
      example/config.json
  4. 1
      host/.gitignore
  5. 164
      src/server.php

3
.gitignore vendored

@ -0,0 +1,3 @@
/vendor/
composer.lock

17
composer.json

@ -0,0 +1,17 @@
{
"name": "yggverse/dokuwiki-gemini-server",
"description": "DokuWiki bridge for Gemini Protocol",
"keywords": [ "yggverse", "gemini", "gemini-protocol", "gemini-server", "wiki", "dokuwiki", "bridge", "server" ],
"homepage": "https://github.com/yggverse/dokuwiki-to-gemini",
"type": "project",
"require": {
"yggverse/gemini": "^0.1",
"yggverse/titan-ii": "^1.0"
},
"license": "MIT",
"autoload": {
"psr-4": {
"Yggverse\\DokuwikiGeminiServer\\": "src/"
}
}
}

21
example/config.json

@ -0,0 +1,21 @@
{
"gemini":
{
"server":
{
"host":"127.0.0.1",
"port":1965
}
},
"dokuwiki":
{
"uri":
{
"home":"start"
},
"url":
{
"canonical":"http://.."
}
}
}

1
host/.gitignore vendored

@ -0,0 +1 @@
/*/

164
src/server.php

@ -0,0 +1,164 @@
<?php
// Load dependencies
require_once __DIR__ . '/../vendor/autoload.php';
// Check arguments
if (empty($argv[1]))
{
exit(_('Configured hostname required as argument!') . PHP_EOL);
}
// Check cert exists
if (!file_exists(__DIR__ . '/../host/' . $argv[1] . '/cert.pem'))
{
exit(
sprintf(
_('Certificate for host "%s" not found!') . PHP_EOL,
$argv[1]
)
);
}
// Check key exists
if (!file_exists(__DIR__ . '/../host/' . $argv[1] . '/key.rsa'))
{
exit(
sprintf(
_('Key for host "%s" not found!') . PHP_EOL,
$argv[1]
)
);
}
// Check host configured
if (!file_exists(__DIR__ . '/../host/' . $argv[1] . '/config.json'))
{
exit(
sprintf(
_('Host "%s" not configured!') . PHP_EOL,
$argv[1]
)
);
}
// Check data directory exist
if (!is_dir(__DIR__ . '/../host/' . $argv[1] . '/data'))
{
exit(
sprintf(
_('Data directory "%s" not found!') . PHP_EOL,
$argv[1]
)
);
}
// Init config
$config = json_decode(
file_get_contents(
__DIR__ . '/../host/' . $argv[1] . '/config.json'
)
);
// Init filesystem
$filesystem = new \Yggverse\Gemini\Dokuwiki\Filesystem(
sprintf(
__DIR__ . '/../host/' . $argv[1] . '/data'
)
);
// Init server
$server = new \Yggverse\TitanII\Server();
$server->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]))
{
$reader = new \Yggverse\Gemini\Dokuwiki\Reader();
$response->setContent(
$reader->toGemini(
file_get_contents(
$path
)
)
);
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
);
Loading…
Cancel
Save