コード例 #1
0
ファイル: RequestConverter.php プロジェクト: pscheit/psc-cms
 public function fromHTTPRequest(Request $request)
 {
     $body = $request->getBody();
     $meta = array();
     // override method
     $rqMethodHeader = 'X-Psc-Cms-Request-Method';
     if (in_array($method = $request->getHeaderField($rqMethodHeader), array(Service::PUT, Service::DELETE))) {
         $this->log('Request-Method durch HTTP-Header ' . $rqMethodHeader . ' überschrieben zu: ' . $method);
         unset($body->{$rqMethodHeader});
     } else {
         $method = constant('Psc\\Net\\Service::' . $request->getMethod());
         // Request::GET => ServiceRequest::GET
     }
     // revision
     $revisionHeader = 'X-Psc-Cms-Revision';
     if (($revision = $request->getHeaderField($revisionHeader)) != '') {
         $meta['revision'] = $revision;
         unset($body->{$revisionHeader});
     }
     // convert bodyAsJSON to native
     if (is_object($body) && count($body) === 1 && isset($body->bodyAsJSON)) {
         $body = $this->jsonConverter->parse($body->bodyAsJSON);
     }
     // convert json request to native
     if (is_string($body) && $request->isContentType('application/json')) {
         $body = $this->jsonConverter->parse($body);
     }
     return new ServiceRequest($method, $request->getParts(), $body, $request->getQuery(), $request->getFiles(), $meta);
 }
コード例 #2
0
 public function testPreconditionRequestCanBeSerializedBidirectional()
 {
     $request = Request::create('GET', '/request-acceptance/nice/api/url/', array('some' => 'header'));
     $unserialized = unserialize(serialize($request));
     $this->assertInstanceof('Psc\\Net\\HTTP\\Request', $unserialized);
     $this->assertEquals($request, $unserialized);
 }
コード例 #3
0
ファイル: RequestTest.php プロジェクト: pscheit/psc-cms
 public function testAccepting()
 {
     $jsonRequest = Request::create(Request::GET, '/', NULL, array('Accept' => 'application/json, text/javascript, */*; q=0.01'));
     $this->assertTrue($jsonRequest->accepts('application/json'), 'accept field is: ' . $jsonRequest->getHeaderField('accept'));
     $this->assertFalse($jsonRequest->accepts('text/html'));
     $htmlRequest = Request::create(Request::GET, '/', NULL, array('Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'));
     $this->assertTrue($htmlRequest->accepts('text/html'));
     $this->assertFalse($htmlRequest->accepts('application/json'));
 }
コード例 #4
0
ファイル: DoublesManager.php プロジェクト: pscheit/psc-cms
 /**
  * @return Psc\Net\HTTP\Request
  */
 public function createHTTPRequest($methodString, $resource, $GET = array(), $POST = array(), $COOKIE = array(), $accept = NULL)
 {
     \Psc\Code\Code::value($methodString, 'GET', 'POST');
     $project = \Psc\PSC::getProject();
     $baseUrl = $project->getHostUrl('base');
     $SERVER = array('HTTP_HOST' => $baseUrl->getHost(), 'HTTP_USER_AGENT' => 'Mozilla/5.0 (Windows NT 6.0; rv:7.0.1) Gecko/20100101 Firefox/7.0.1', 'HTTP_ACCEPT' => $accept ?: 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'HTTP_ACCEPT_LANGUAGE' => 'en-us,en;q=0.5', 'HTTP_ACCEPT_ENCODING' => 'gzip, deflate', 'HTTP_ACCEPT_CHARSET' => 'ISO-8859-1,utf-8;q=0.7,*;q=0.7', 'HTTP_CONNECTION' => 'keep-alive', 'SERVER_NAME' => $baseUrl->getHost(), 'DOCUMENT_ROOT' => (string) $project->dir('www'), 'REDIRECT_QUERY_STRING' => 'request=' . $resource, 'REDIRECT_URL' => $resource, 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'REQUEST_METHOD' => $methodString, 'QUERY_STRING' => 'request=' . $resource, 'REQUEST_URI' => $resource, 'SCRIPT_NAME' => '/api.php', 'PHP_SELF' => '/api.php', 'REQUEST_TIME' => time());
     //$request = create($uri, $method = 'GET', $parameters = array(), $cookies = array(), $files = array(), $server = array(), $content = null)
     $request = SfRequest::create((string) $baseUrl . '/' . ltrim($resource, '/'), $methodString, $methodString === 'POST' ? $POST : $GET, $COOKIE, array(), $SERVER);
     $request = Request::infer($request);
     return $request;
 }
コード例 #5
0
ファイル: Request.php プロジェクト: pscheit/psc-cms
 /**
  * Erstellt einen Request aus den Umgebungsvariablen
  * 
  * wird eine Umgebungsvariable mit NULL übergeben (oder ausgelassen), wird die global Umgebungsvariable genommen
  * infer() ist also äquivalent mit:
  * infer($_GET, $_POST, $_COOKIE, $_SERVER)
  * 
  * ist $_GET['mod_rewrite_request'] gesetzt wird dies als resource genommen
  * 
  * @TODO Symfony hierfür nehmen (am besten ganz ersetzen)
  * 
  * @deprecated das übergeben von Variablen ist strongly discouraged!
  */
 public static function infer(SfRequest $sfRequest = NULL)
 {
     if (!isset($sfRequest)) {
         $sfRequest = SfRequest::createFromGlobals();
     }
     // alternativ könnten wir den code aus sf kopieren oder sf mal patchen..
     $method = NULL;
     switch ($sfRequest->getMethod()) {
         // wertet schon X-HTTP-METHOD-OVERRIDE aus
         case 'POST':
             $method = Request::POST;
             break;
         case 'PUT':
             $method = Request::PUT;
             break;
         case 'DELETE':
             $method = Request::DELETE;
             break;
         case 'PATCH':
             $method = Request::PATCH;
             break;
         case 'GET':
         default:
             $method = Request::GET;
             break;
     }
     $request = new Request($method, rawurldecode($sfRequest->getPathInfo()));
     $request->setQuery($sfRequest->query->all());
     $request->setReferer($sfRequest->server->get('HTTP_REFERER'));
     $request->setUserAgent($sfRequest->server->get('HTTP_USER_AGENT'));
     $request->setPreferredLanguages($sfRequest->getLanguages());
     $header = $request->getHeader();
     foreach ($sfRequest->headers->all() as $key => $value) {
         // wir verschönern hier z.B. X_REQUESTED_WITH zu X-Requested-With
         $key = mb_strtolower($key);
         $key = \Psc\Preg::replace_callback($key, '/(^|-)([a-z]{1})/', function ($m) {
             return ($m[1] === '' ? NULL : '-') . mb_strtoupper($m[2]);
         });
         // das ist voll doof, aber aus legacy gründen müssen wir das machen
         // schöner wäre auch die sf Requests / Header zu benutzen, dann wären wir durch
         if (count($value) === 1) {
             // unwrap arrays mit nur einem eintrag
             $value = current($value);
         }
         $header->setField($key, $value);
     }
     /* Body */
     if (mb_strpos($request->getHeaderField('Content-Type'), 'application/x-www-form-urlencoded') === 0) {
         $request->setBody($sfRequest->request->all());
     } elseif (mb_strpos($request->getHeaderField('Content-Type'), 'multipart/form-data') === 0) {
         $request->setBody($sfRequest->request->all());
         $files = array();
         foreach ($sfRequest->files->all() as $key => $sfFile) {
             if ($sfFile instanceof \Symfony\Component\HttpFoundation\File\UploadedFile) {
                 if (!$sfFile->isValid()) {
                     throw new \Psc\Exception('Cannot Upload File: ' . $sfFile->getClientOriginalName() . ' Error Code: ' . $sfFile->getErorr() . ' size: ' . $sfFile->getClientSize());
                 } else {
                     $files[$key] = $f = new \Psc\System\UploadedFile($sfFile->getPathName());
                     $f->setOriginalName($sfFile->getClientOriginalName());
                 }
                 $request->setFiles($files);
             }
             // FIXME else: kann auch ein array von files sein oder ein array von array ...
             // aber wie machen wir das in den files array rein?
         }
     } else {
         $request->setBody($sfRequest->getContent());
         // really raw
     }
     return $request;
 }
コード例 #6
0
ファイル: RequestHandler.php プロジェクト: pscheit/psc-cms
 /**
  * returns a importable string representation of the request
  * @return string
  */
 protected function dumpRequest(Request $request)
 {
     $body = $request->getBody();
     $dump = "Body of request is:\n";
     if (is_object($body) || is_array($body)) {
         $dump .= json_encode($body);
     } elseif (is_string($body)) {
         $dump .= sprintf('"%s"', $body);
     }
     return $dump;
 }
コード例 #7
0
ファイル: ProjectMain.php プロジェクト: pscheit/psc-cms
 public function initRequest(Request $request = NULL)
 {
     $this->request = $request ?: Request::infer();
     // infer() von $_GET usw ...
     $con = $this->request->getHeaderField('X-Psc-Cms-Connection');
     if (!empty($con)) {
         $this->setConnectionName($con);
     }
     if ($this->request->hasHeaderField('X-Psc-Cms-Debug-Level')) {
         $this->setDebugLevel((int) $this->request->getHeaderField('X-Psc-Cms-Debug-Level'));
     }
     // so rum überschreiben wir den X-Psc-Cms-Connection Header (was ja safe ist)
     if ($this->isTesting()) {
         $this->setConnectionName('tests');
     }
 }
コード例 #8
0
ファイル: ResponseConverter.php プロジェクト: pscheit/psc-cms
 /**
  * @return list($format, $mimeContentType)
  */
 public function decideFormat(ServiceResponse $response, Request $request)
 {
     if ($response->getFormat() !== NULL) {
         $format = $response->getFormat();
     } elseif ($request->accepts('application/json')) {
         $format = ServiceResponse::JSON;
     } else {
         $format = ServiceResponse::HTML;
     }
     return array($format, $this->getContentType($format));
 }
コード例 #9
0
ファイル: FrontController.php プロジェクト: pscheit/psc-cms
 public function init(Request $request = NULL)
 {
     $this->request = $request ?: Request::infer();
     return $this;
 }
コード例 #10
0
ファイル: request.helper.php プロジェクト: pscheit/psc-cms
<?php

try {
    /**
     * Ein Script was den Request aus den Globals Inferred und serialisiert ausgibt
     */
    $request = \Psc\Net\HTTP\Request::infer();
    print serialize($request);
} catch (\Exception $e) {
    $message = $e->getMessage() . ' ' . $e->getFile() . ':' . $e->getLine();
    $message = str_replace(array("\n", "\"r"), ' ', $message);
    $response = \Psc\Net\HTTP\Response::create(500, (string) $e, array('X-Psc-CMS-Error' => 'true', 'X-Psc-CMS-Error-Message' => $message));
    $response->output();
}