diff --git a/src/Controller/ViewController.php b/src/Controller/ViewController.php new file mode 100644 index 0000000..a784ec8 --- /dev/null +++ b/src/Controller/ViewController.php @@ -0,0 +1,96 @@ + '^N[A-z0-9]{33}$', + ], + methods: + [ + 'GET' + ] + )] + public function raw( + Request $request + ): Response + { + // Connect kevacoin + $client = new \Kevachat\Kevacoin\Client( + $this->getParameter('app.kevacoin.protocol'), + $this->getParameter('app.kevacoin.host'), + $this->getParameter('app.kevacoin.port'), + $this->getParameter('app.kevacoin.username'), + $this->getParameter('app.kevacoin.password') + ); + + // Detect clitor-is-protocol + if ($clitor = $client->kevaGet($request->get('namespace'), '_CLITOR_IS_')) + { + $reader = new \ClitorIsProtocol\Kevacoin\Reader( + $clitor['value'] + ); + + if ($reader->valid()) + { + if ($pieces = $client->kevaFilter($request->get('namespace'))) + { + if ($data = $reader->data($pieces)) + { + $response = new Response(); + + if ($mime = $reader->fileMime()) + { + $response->headers->set( + 'Content-type', + $mime + ); + } + + if ($length = $reader->fileLength()) + { + if ($length == strlen($data)) + { + $response->headers->set( + 'Content-length', + $length + ); + } + } + + if ($name = $reader->fileName()) + { + $response->headers->set( + 'Content-Disposition', + sprintf( + 'inline; filename="%s";', + $name + ) + ); + } + + $response->sendHeaders(); + + return $response->setContent( + $data + ); + } + } + } + } + + // Nothing to view by this namespace + throw $this->createNotFoundException(); + } +} \ No newline at end of file