diff --git a/example/config.json b/example/config.json index b9e6aa3..1bf9d37 100644 --- a/example/config.json +++ b/example/config.json @@ -19,6 +19,29 @@ "size":3072, "line":1024 }, + "session": + { + "captcha": + { + "length":3, + "chars":"1234567890", + "dimensions": + { + "width":100, + "height":40 + }, + "background": + { + "r":0, + "g":0, + "b":0 + }, + "ascii": + { + "width": 50 + } + } + }, "action": { "welcome": @@ -72,27 +95,6 @@ "template":"[{time}] handler {host}:{port} captcha: {code} sent: {sent} length: {size} bytes {data}" } } - }, - "captcha": - { - "enabled":true, - "length":3, - "chars":"1234567890", - "dimensions": - { - "width":100, - "height":40 - }, - "background": - { - "r":0, - "g":0, - "b":0 - }, - "ascii": - { - "width": 50 - } } } } \ No newline at end of file diff --git a/src/server.php b/src/server.php index d96b719..4297b0a 100644 --- a/src/server.php +++ b/src/server.php @@ -15,8 +15,8 @@ $config = json_decode( ) ); -// Init session code -$code = null; +// Init session +$session = []; // Init server $server = new \Yggverse\Nps\Server( @@ -33,47 +33,43 @@ $server->setWelcome( ): ?string { global $config; - global $code; - - // Build captcha on enabled - if ($config->nps->captcha->enabled) - { - $captcha = new \Gregwar\Captcha\CaptchaBuilder( - null, - new \Gregwar\Captcha\PhraseBuilder( - $config->nps->captcha->length, - $config->nps->captcha->chars - ) - ); - - $captcha->setBackgroundColor( - $config->nps->captcha->background->r, - $config->nps->captcha->background->g, - $config->nps->captcha->background->b - ); - - $captcha->build( - $config->nps->captcha->dimensions->width, - $config->nps->captcha->dimensions->height - ); + global $session; + + // Init session + $session[$connect] = + [ + 'time' => time(), + 'code' => null + ]; + + // Build captcha + $captcha = new \Gregwar\Captcha\CaptchaBuilder( + null, + new \Gregwar\Captcha\PhraseBuilder( + $config->nps->session->captcha->length, + $config->nps->session->captcha->chars + ) + ); - // Set captcha value to the session code - $code = $captcha->getPhrase(); + $captcha->setBackgroundColor( + $config->nps->session->captcha->background->r, + $config->nps->session->captcha->background->g, + $config->nps->session->captcha->background->b + ); - // Create ASCII confirmation code - $image = new \Ixnode\PhpCliImage\CliImage( - $captcha->get(), - $config->nps->captcha->ascii->width - ); + $captcha->build( + $config->nps->session->captcha->dimensions->width, + $config->nps->session->captcha->dimensions->height + ); - $confirmation = PHP_EOL . $image->getAsciiString() . PHP_EOL; - } + // Set captcha value to the session code + $session[$connect]['captcha'] = $captcha->getPhrase(); - else - { - $confirmation = null; - $code = true; - } + // Create ASCII confirmation code + $image = new \Ixnode\PhpCliImage\CliImage( + $captcha->get(), + $config->nps->session->captcha->ascii->width + ); // Debug request on enabled if ($config->nps->action->welcome->debug->enabled) @@ -97,7 +93,7 @@ $server->setWelcome( (string) date('c'), (string) parse_url($url, PHP_URL_HOST), (string) parse_url($url, PHP_URL_PORT), - (string) is_null($code) ? '[off]' : $code + (string) $session[$connect]['captcha'] ], $config->nps->action->welcome->debug->template ) . PHP_EOL @@ -108,7 +104,7 @@ $server->setWelcome( implode( PHP_EOL, $config->nps->action->welcome->message - ) . PHP_EOL . $confirmation + ) . PHP_EOL . $image->getAsciiString() . PHP_EOL ); } ); @@ -121,7 +117,7 @@ $server->setPending( ): ?string { global $config; - global $code; + global $session; // Filter request $request = trim( @@ -152,15 +148,15 @@ $server->setPending( (string) parse_url($url, PHP_URL_HOST), (string) parse_url($url, PHP_URL_PORT), (string) $request, - (string) is_null($code) ? '[off]' : $code + (string) $session[$connect]['captcha'] ], $config->nps->action->pending->debug->template ) . PHP_EOL ); } - return is_null($code) || $code == $request ? implode(PHP_EOL, $config->nps->action->pending->message->success) . PHP_EOL - : implode(PHP_EOL, $config->nps->action->pending->message->failure) . PHP_EOL; + return $session[$connect]['captcha'] == $request ? implode(PHP_EOL, $config->nps->action->pending->message->success) . PHP_EOL + : implode(PHP_EOL, $config->nps->action->pending->message->failure) . PHP_EOL; } ); @@ -174,13 +170,18 @@ $server->setHandler( ): ?string { global $config; - global $code; + global $session; // Filter request $request = trim( $request ); + // Filter content + $content = trim( + $content + ); + // @TODO save content in blockchain with kevacoin-php // Debug request on enabled @@ -209,17 +210,17 @@ $server->setHandler( (string) parse_url($url, PHP_URL_HOST), (string) parse_url($url, PHP_URL_PORT), (string) str_replace('%', '%%', $request), - (string) is_null($code) ? '[off]' : $code, + (string) $session[$connect]['captcha'], (string) mb_strlen($content), - (string) $content, + (string) PHP_EOL . $content, ], $config->nps->action->handler->debug->template ) . PHP_EOL ); } - return is_null($code) || $code == $request ? implode(PHP_EOL, $config->nps->action->handler->message->success) . PHP_EOL - : implode(PHP_EOL, $config->nps->action->handler->message->failure) . PHP_EOL; + return $session[$connect]['captcha'] == $request ? implode(PHP_EOL, $config->nps->action->handler->message->success) . PHP_EOL + : implode(PHP_EOL, $config->nps->action->handler->message->failure) . PHP_EOL; } );