You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
3.2 KiB
111 lines
3.2 KiB
<?php |
|
require __DIR__.'/vendor/autoload.php'; |
|
|
|
use Symfony\Component\HttpFoundation\Request; |
|
use Symfony\Component\HttpFoundation\Response; |
|
use Symfony\Component\Routing\RouteCollection; |
|
use Symfony\Component\Routing\Route; |
|
use Symfony\Component\Routing\RequestContext; |
|
use Symfony\Component\Routing\Matcher\UrlMatcher; |
|
use Symfony\Component\Routing\Exception\ResourceNotFoundException; |
|
use Symfony\Component\Routing\Exception\MethodNotAllowedException; |
|
|
|
use SmsGateway\Sender\FileSender; |
|
use SmsGateway\Logger\FileLogger; |
|
use SmsGateway\Auth\FileAuth; |
|
use SmsGateway\RpcServer; |
|
|
|
$request = Request::createFromGlobals(); |
|
|
|
$routes = new RouteCollection(); |
|
$routes->add('jsonHandle', new Route('/', array('controller' => 'handleJson'), array('_method' => 'POST'))); |
|
|
|
$context = new RequestContext(); |
|
$context->fromRequest($request); |
|
|
|
$matcher = new UrlMatcher($routes, $context); |
|
try { |
|
$parameters = $matcher->match($request->getPathInfo()); |
|
} catch (ResourceNotFoundException $e) { |
|
$response = new Response('Bad Request', 400); |
|
$response->send(); |
|
exit; |
|
} catch (MethodNotAllowedException $e) { |
|
$response = new Response('Bad Request', 400); |
|
$response->send(); |
|
exit; |
|
} |
|
|
|
if ($request->getContentType() != 'json') { |
|
$response = new Response('Bad Request', 400); |
|
$response->send(); |
|
exit; |
|
} |
|
|
|
$jsonData = json_decode($request->getContent(), true); |
|
if ($jsonData === null) { |
|
$response = new Response('Bad Request', 400); |
|
$response->send(); |
|
exit; |
|
} |
|
if (!array_key_exists('method', $jsonData) || !array_key_exists('params', $jsonData) || !is_array($jsonData['params'])) { |
|
$response = new Response('Bad Request', 400); |
|
$response->send(); |
|
exit; |
|
} |
|
$wantResponse = (!empty($jsonData['id'])); |
|
|
|
try { |
|
$sender = new FileSender('/var/www/html/smsgateway/app/cache/sms_spool'); |
|
} catch (Exception $e) { |
|
$response = new Response('Internal Server Error: Sender cannot be instantiated.', 500); |
|
$response->send(); |
|
exit; |
|
} |
|
|
|
try { |
|
$logger = new FileLogger('/var/www/html/smsgateway/app/logs/sms-message.log', '/var/www/html/smsgateway/app/logs/sms-audit.log'); |
|
} catch (LogicException $e) { |
|
$response = new Response('Internal Server Error: Logger cannot be instantiated.', 500); |
|
$response->send(); |
|
exit; |
|
} |
|
|
|
try { |
|
$auth = new FileAuth('/var/www/html/smsgateway/senders', '/var/www/html/smsgateway/app/cache/tokens'); |
|
} catch (Exception $e) { |
|
$response = new Response('Internal Server Error: Authenticator cannot be instantiated.', 500); |
|
$response->send(); |
|
exit; |
|
} |
|
|
|
$auth->setLogger($logger); |
|
$sender->setLogger($logger); |
|
|
|
$handler = new RpcServer($auth, $logger, $sender); |
|
|
|
try { |
|
$result = $handler->handle($request, $jsonData); |
|
} catch (Exception $e) { |
|
if ($wantResponse) { |
|
$jsonResponse = array( |
|
'id' => $jsonData['id'], |
|
'result' => null, |
|
'error' => $e->getMessage(), |
|
); |
|
$response = new Response(json_encode($jsonResponse)); |
|
$response->send(); |
|
} |
|
exit; |
|
} |
|
|
|
if ($wantResponse) { |
|
$jsonResponse = array( |
|
'id' => $jsonData['id'], |
|
'result' => $result, |
|
'error' => null, |
|
); |
|
|
|
$response = new Response(json_encode($jsonResponse), 200, array('Content-Type' => 'application/json')); |
|
$response->send(); |
|
}
|
|
|