From ae72a00361f00e019908f0565b12d8a2814bdd3c Mon Sep 17 00:00:00 2001 From: ghost Date: Thu, 25 Jan 2024 11:20:32 +0200 Subject: [PATCH] init psr-4 composer package --- README.md | 43 ++++++++++++------------ composer.json | 11 ++++--- composer.lock | 18 ---------- src/Request.php | 26 +++++++-------- src/Response.php | 44 ++++++++++++------------- src/Server.php | 77 +++++++++++++++++++++---------------------- test/certs/.gitignore | 2 -- test/server.php | 44 ------------------------- 8 files changed, 100 insertions(+), 165 deletions(-) delete mode 100644 composer.lock delete mode 100644 test/certs/.gitignore delete mode 100644 test/server.php diff --git a/README.md b/README.md index 4823830..4a861c0 100644 --- a/README.md +++ b/README.md @@ -1,40 +1,39 @@ # Titan II -Gemini Protocol library for PHP. +Gemini Protocol library for PHP 8 - [gemini://gemini.circumlunar.space/](gemini://gemini.circumlunar.space/) - [https://gemini.circumlunar.space/](https://gemini.circumlunar.space/) -## Basic Implentation +## Install + +1. `composer require yggverse/titan-ii` +2. `openssl req -x509 -newkey rsa:4096 -keyout key.rsa -out cert.pem -days 3650 -nodes -subj "/CN=127.0.0.1"` +3. `php server.php` +4. `gemini://127.0.0.1` + +## Usage ``` setCert('cert.pem'); $server->setKey('key.rsa'); -$server->setHandler(function (Request $request): Response { - $response = new Response(); +$server->setHandler( + function (\YGGverse\TitanII\Request $request): \YGGverse\TitanII\Response + { + $response = new \YGGverse\TitanII\Response(); - $response->setCode(20); - $response->setMeta("text/plain"); - $response->setContent("Hello World!"); + $response->setCode(20); + $response->setMeta('text/plain'); + $response->setContent('Hello World!'); - return $response; -}); + return $response; + } +); $server->start(); -``` - -## Instructions - -1. run `cd test/certs; openssl req -x509 -newkey rsa:4096 -keyout key.rsa -out cert.pem -days 3650 -nodes -subj "/CN=127.0.0.1"` -2. run `composer install` -3. run `cd ..; php server.php` -4. Open `gemini://127.0.0.1` \ No newline at end of file +``` \ No newline at end of file diff --git a/composer.json b/composer.json index ba62b6d..a4117b6 100644 --- a/composer.json +++ b/composer.json @@ -1,9 +1,10 @@ { - "name": "tdmckenney0/titan-ii", - "version": "0.1", + "name": "yggverse/titan-ii", "description": "Gemini Protocol Library", + "keywords": [ "gemini", "gemini-protocol", "ipv6" ], + "homepage": "https://github.com/YGGverse/titan-II", "type": "library", - "license": "GPLv3", + "license": "GPL-3.0-only", "authors": [ { "name": "Tanner Mckenney", @@ -12,6 +13,8 @@ ], "require": {}, "autoload": { - "classmap": ["src/"] + "psr-4": { + "YGGverse\\TitanII\\": "src/" + } } } diff --git a/composer.lock b/composer.lock deleted file mode 100644 index 90f12d1..0000000 --- a/composer.lock +++ /dev/null @@ -1,18 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "1d8aa09a1cb642af953e3d80b990a54a", - "packages": [], - "packages-dev": [], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": [], - "prefer-stable": false, - "prefer-lowest": false, - "platform": [], - "platform-dev": [], - "plugin-api-version": "2.0.0" -} diff --git a/src/Request.php b/src/Request.php index f611d7a..83059c8 100644 --- a/src/Request.php +++ b/src/Request.php @@ -1,6 +1,6 @@ - */ class Server { /** * Context created by stream_context_create(); - * - * @var resource + * + * @var resource */ private $context = null; /** * Socket created by stream_socket_server(); - * - * @var resource + * + * @var resource */ private $socket = null; /** * Function that gets called to handle incoming requests. - * + * * @var callable */ private $handler = null; /** - * Server active flag. - * + * Server active flag. + * * @var bool */ private bool $active = false; @@ -51,15 +48,15 @@ class Server { } /** - * @param callable Handle incoming requests. - * - * @return self Method chaining. - * + * @param callable Handle incoming requests. + * + * @return self Method chaining. + * * Parameter 1 Callable is expected to handle the following: - * - * @param Request - * - * @return Response + * + * @param \YGGverse\TitanII\Request + * + * @return \YGGverse\TitanII\Response */ public function setHandler(callable $handler): self { @@ -69,9 +66,9 @@ class Server { } /** - * Set the Certification file. - * - * @return self Method chaining. + * Set the Certification file. + * + * @return self Method chaining. */ public function setCert(string $file): self { @@ -81,11 +78,11 @@ class Server { } /** - * Optional. Set cert paassphrase. - * + * Optional. Set cert paassphrase. + * * @param string - * - * @return self Method chaining. + * + * @return self Method chaining. */ public function setCertPassphrase(string $passphrase): self { @@ -96,10 +93,10 @@ class Server { /** * Set the Key file. - * + * * @param string - * - * @return self Method chaining. + * + * @return self Method chaining. */ public function setKey(string $key): self { @@ -109,12 +106,12 @@ class Server { } /** - * Open the server socket. - * + * Open the server socket. + * * @param string IP Address - * @param int Port Number. - * - * @return bool True on success, false on failure. + * @param int Port Number. + * + * @return bool True on success, false on failure. */ protected function openSocket(string $ip, int $port): bool { @@ -133,15 +130,15 @@ class Server { /** * Start the server! - * + * * @param string IP Address * @param int Port Number. */ public function start(string $ip = '0', int $port = 1965): void { $this->openSocket($ip, $port); - - $this->active = true; + + $this->active = true; while ($this->active) { $incoming = stream_socket_accept($this->socket, -1, $peername); @@ -153,7 +150,7 @@ class Server { stream_set_blocking($incoming, false); - $request = new Request($body); + $request = new \YGGverse\TitanII\Request($body); $response = call_user_func($this->handler, $request); diff --git a/test/certs/.gitignore b/test/certs/.gitignore deleted file mode 100644 index c96a04f..0000000 --- a/test/certs/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!.gitignore \ No newline at end of file diff --git a/test/server.php b/test/server.php deleted file mode 100644 index 8a83036..0000000 --- a/test/server.php +++ /dev/null @@ -1,44 +0,0 @@ -setCert(__DIR__ . DIRECTORY_SEPARATOR . 'certs' . DIRECTORY_SEPARATOR . 'cert.pem'); -$server->setKey(__DIR__ . DIRECTORY_SEPARATOR . 'certs' . DIRECTORY_SEPARATOR . 'key.rsa'); - -// Response Body (Gemini Text!) -$body = <<setHandler(function (Request $request) use (&$body): Response { - $response = new Response(); - - $response->setMeta('text/gemini'); - $response->setContent($body); - - echo $request; - - return $response; -}); - -/** - * Boot the server! - */ -$server->start();