예제 #1
0
    public function testProcessGetRequest()
    {
        $moduleManager  = $this->getMockBuilder('Zend\ModuleManager\ModuleManager')
                               ->disableOriginalConstructor()
                               ->getMock();
        $moduleManager->expects($this->any())
                      ->method('getLoadedModules')
                      ->will($this->returnValue(array('ZFTest\Apigility\Admin\Model\TestAsset\Bar' => new BarModule)));

        $moduleResource = new ModuleModel($moduleManager, array(), array());
        $controller     = new SourceController($moduleResource);

        $request = new Request();
        $request->setMethod('get');
        $request->getQuery()->module = 'ZFTest\Apigility\Admin\Model\TestAsset\Bar';
        $request->getQuery()->class = 'ZFTest\Apigility\Admin\Model\TestAsset\Bar\Module';

        $controller->setRequest($request);
        $result = $controller->sourceAction();

        $this->assertTrue($result->getVariable('source') != '');
        $this->assertTrue($result->getVariable('file') != '');
        $this->assertEquals($result->getVariable('module'), $request->getQuery()->module);
        $this->assertEquals($result->getVariable('class'), $request->getQuery()->class);
    }
예제 #2
0
 /**
  * @return string
  */
 public function getIdentifier($paramName)
 {
     $tokenValue = $this->request->getQuery($paramName, false);
     if ($tokenValue) {
         return $tokenValue;
     }
     return md5(uniqid(rand(), true));
 }
예제 #3
0
 /** @return null|mixed */
 protected function getIdentity()
 {
     $accessToken = $this->request->getQuery('access_token', $this->request->getPost('access_token'));
     if ($accessToken === null) {
         return null;
     }
     $oAuthRequest = OAuth2RequestFactory::create($this->request);
     $accessTokenData = $this->oauthServer->getAccessTokenData($oAuthRequest);
     return $this->identity = $this->identityStorageAdapter->findByUsername($accessTokenData['user_id']);
 }
예제 #4
0
 /**
  * Return logout text after user has logged out.
  * Shown only after the first page load if loggedOut param is true.
  *
  * @return string Logout message
  */
 public function __invoke()
 {
     if ($this->authManager->userHasLoggedOut() && $this->request->getQuery('logout', false)) {
         if (!isset($this->session->logoutMessageShown) || !$this->session->logoutMessageShown) {
             $this->session->logoutMessageShown = true;
             return 'logout_success_message';
         }
     }
     return false;
 }
 /**
  * Convert a Zend\Http\Response in a PSR-7 response, using zend-diactoros
  *
  * @param  ZendRequest $zendRequest
  * @return ServerRequest
  */
 public static function fromZend(ZendRequest $zendRequest)
 {
     $body = new Stream('php://memory', 'wb+');
     $body->write($zendRequest->getContent());
     $headers = empty($zendRequest->getHeaders()) ? [] : $zendRequest->getHeaders()->toArray();
     $query = empty($zendRequest->getQuery()) ? [] : $zendRequest->getQuery()->toArray();
     $post = empty($zendRequest->getPost()) ? [] : $zendRequest->getPost()->toArray();
     $files = empty($zendRequest->getFiles()) ? [] : $zendRequest->getFiles()->toArray();
     $request = new ServerRequest([], self::convertFilesToUploaded($files), $zendRequest->getUriString(), $zendRequest->getMethod(), $body, $headers);
     $request = $request->withQueryParams($query);
     return $request->withParsedBody($post);
 }
예제 #6
0
 public function findRegion($country, $query)
 {
     $request = new Request();
     $request->setMethod(Request::METHOD_GET);
     foreach ($query as $key => $value) {
         $request->getQuery()->set($key, $value);
     }
     $request->getHeaders()->addHeaderLine('Accept', 'application/json');
     switch ($country) {
         case 'CH':
             $request->setUri($this->config['url'] . '/ch-region');
             break;
         default:
             $request->setUri($this->config['url'] . '/ch-region');
             break;
     }
     $client = new Client();
     $response = $client->send($request);
     $body = $response->getBody();
     $result = json_decode($body, true);
     if ($result) {
         return $result['_embedded']['ch_region'];
     }
     /*echo "<textarea cols='100' rows='30' style='position:relative; z-index:10000; width:inherit; height:200px;'>";
       print_r($body);
       echo "</textarea>";
       die();*/
     return null;
 }
 /**
  * @param FacebookConfig $config
  */
 public function __construct(array $config, Request $request)
 {
     $this->getParams = $request->getQuery()->toArray();
     $error = $request->getQuery('error');
     if (!empty($error)) {
         $this->isValid = false;
         return;
     }
     //        if (!$config->isEnabled())
     //        {
     //            throw new \Exception('Twitter is not enabled');
     //        }
     $this->consumerKey = $config['consumer_key'];
     $this->consumerSecret = $config['consumer_secret'];
     $this->returnUrlData = $config['return_url'];
 }
예제 #8
0
 /**
  * Login
  *
  * @param \Zend\Http\Request $request
  * @param \Zend\Http\Response $response
  * @return null|array|\Zend\Http\Response
  */
 public function login(array $options, HttpRequest $request, HttpResponse $response = null)
 {
     if (null === $response) {
         $response = new PhpResponse();
     }
     $session = $this->getSessionContainer();
     $code = $request->getQuery('code');
     if (empty($options['redirect_uri'])) {
         $options['redirect_uri'] = $request->getUri()->getScheme() . '://' . $this->getSiteInfo()->getFulldomain() . $request->getRequestUri();
     }
     if (empty($code)) {
         $session['state'] = String::generateRandom(32);
         $session['redirect_uri'] = $options['redirect_uri'];
         $response->setContent('')->setStatusCode(302)->getHeaders()->clearHeaders()->addHeaderLine('Location', static::DIALOG_URI . '?' . http_build_query(array('client_id' => $options['client_id'], 'redirect_uri' => $options['redirect_uri'], 'state' => $session['state'], 'scope' => 'email')));
         if ($response instanceof PhpResponse) {
             $response->send();
             exit;
         } else {
             return $response;
         }
     }
     $state = $request->getQuery('state');
     if (empty($session['state']) || $state !== $session['state']) {
         return null;
     }
     $client = $this->getHttpClient();
     $params = null;
     @parse_str($client->setMethod('GET')->setUri(static::ACCESS_URI)->setParameterGet(array('client_id' => $options['client_id'], 'redirect_uri' => $session['redirect_uri'], 'client_secret' => $options['client_secret'], 'code' => $code))->send()->getBody(), $params);
     unset($session['state']);
     unset($session['redirect_uri']);
     if (empty($params['access_token'])) {
         return null;
     }
     return @json_decode($client->setMethod('GET')->setUri(static::API_URI)->setParameterGet(array('access_token' => $params['access_token']))->send()->getBody(), true);
 }
예제 #9
0
 /**
  * Prepare a Zend Request by Operation with $parameters
  *
  * @param Operation $operation
  * @param array $parameters
  * @param int $options BitMask of options to skip or something else
  * @return Request
  * @throws \InvalidArgumentException
  * @throws \RuntimeException
  */
 public function makeRequestByOperation(Operation $operation, array $parameters = [], $options = 0)
 {
     $request = new Request();
     $path = $operation->path;
     if ($operation->parameters) {
         foreach ($operation->parameters as $parameter) {
             if (isset($parameters[$parameter->name])) {
                 switch ($parameter->in) {
                     case 'path':
                         $path = str_replace('{' . $parameter->name . '}', $parameters[$parameter->name], $path);
                         break;
                     case 'query':
                         $request->getQuery()->set($parameter->name, $parameters[$parameter->name]);
                         break;
                     case 'formData':
                         $request->getPost()->set($parameter->name, $parameters[$parameter->name]);
                         break;
                     default:
                         throw new RuntimeException(sprintf('Parameter "%s" with ->in = "%s" is not supported', $parameter->parameter, $parameter->in));
                 }
             } elseif ($parameter->required && !($options & SwaggerWrapper::SKIP_REQUIRED)) {
                 throw new InvalidArgumentException(sprintf('Parameter "%s" is required, please pass value for this in $parameters', $parameter->name));
             }
         }
     }
     $request->setUri($path);
     $request->setMethod($operation->method);
     return $request;
 }
예제 #10
0
 public function testToUriStringMultiQueryOverwrite()
 {
     $request = new Request();
     $request->setUri('http://google.ca/test.html?foo=bar');
     $request->getQuery()->set('foo', 'value');
     $this->assertEquals('http://google.ca/test.html?foo=value', RequestUtils::toUriString($request));
 }
예제 #11
0
 public function __invoke($name = null, $params = [], $options = [], $reuseMatchedParams = false)
 {
     if (null === $this->router) {
         throw new Exception\RuntimeException('No RouteStackInterface instance provided');
     }
     if (3 === func_num_args() && is_bool($options)) {
         $reuseMatchedParams = $options;
         $options = [];
     }
     // Inherit query parameters
     if ($reuseMatchedParams) {
         $providedQueryParams = isset($options['query']) ? $options['query'] : [];
         $currentQueryParams = $this->request->getQuery()->toArray();
         $options['query'] = array_merge($currentQueryParams, $providedQueryParams);
     }
     return parent::__invoke($name, $params, $options, $reuseMatchedParams);
 }
 public function testQueryAccessTokenProxiesOAuthServer()
 {
     $token = ['user_id' => 'test'];
     $this->setupMockOAuth2Server($token);
     $this->request->getQuery()->set('access_token', 'TOKEN');
     $identity = $this->listener->__invoke($this->mvcAuthEvent);
     $this->assertIdentityMatchesToken($token, $identity);
 }
예제 #13
0
 public static function create(HttpRequest $request)
 {
     $queryParams = $request->getQuery()->toArray();
     $postParams = $request->getPost()->toArray();
     $files = $request->getFiles()->toArray();
     $cookies = ($c = $request->getCookie()) ? [$c] : [];
     return new OAuth2Request($queryParams, $postParams, [], $cookies, $files, $_SERVER);
 }
예제 #14
0
 public function setUp()
 {
     $request = new Request();
     $request->getQuery()->fromArray(array('all' => 'query', 'query_and_post' => 'query'));
     $request->getPost()->fromArray(array('all' => 'post', 'query_and_post' => 'post', 'post_only' => 'post'));
     $this->request = $request;
     $this->routeMatch = new RouteMatch(array('all' => 'route'));
 }
예제 #15
0
 /**
  * Get an array of hidden filters
  *
  * @param string $searchClassId         Active search class
  * @param bool   $returnDefaultsIfEmpty Whether to return default tab filters if
  * no filters are currently active
  * @param bool   $ignoreCurrentRequest  Whether to ignore hidden filters in
  * the current request
  *
  * @return array
  */
 public function getHiddenFilters($searchClassId, $returnDefaultsIfEmpty = true, $ignoreCurrentRequest = false)
 {
     $filters = $ignoreCurrentRequest ? null : $this->request->getQuery('hiddenFilters');
     if (null === $filters && $returnDefaultsIfEmpty) {
         $filters = $this->getDefaultTabHiddenFilters($searchClassId);
     }
     return null === $filters ? [] : $this->parseFilters($searchClassId, $filters);
 }
 /**
  * @depends testProcessPostRequestReturnsToken
  */
 public function testProcessGetRequestReturnsFile(array $data)
 {
     $request = new Request();
     $request->setMethod('get');
     $request->getQuery()->set('format', $data['format']);
     $request->getQuery()->set('token', $data['token']);
     $this->controller->setRequest($request);
     $package = sys_get_temp_dir() . '/apigility_' . $data['token'] . '.' . $data['format'];
     $content = file_get_contents($package);
     $response = $this->controller->indexAction();
     $this->assertTrue($response->isSuccess());
     $this->assertEquals($content, $response->getRawBody());
     $this->assertEquals('application/octet-stream', $response->getHeaders()->get('Content-Type')->getFieldValue());
     $this->assertEquals(strlen($content), $response->getHeaders()->get('Content-Length')->getFieldValue());
     // Removal of file only happens during destruct
     $this->controller->__destruct();
     $this->assertFalse(file_exists($package));
 }
예제 #17
0
 public function setUp()
 {
     $request = new Request();
     $request->getQuery()->fromArray(array('all' => 'query', 'query_and_post' => 'query'));
     $request->getPost()->fromArray(array('all' => 'post', 'query_and_post' => 'post', 'post_only' => 'post'));
     $routeMatch = new RouteMatch(array('all' => 'route'));
     $mvcEvent = new MvcEvent();
     $mvcEvent->setRouteMatch($routeMatch);
     $mock = $this->getMock('Zend\\Mvc\\Controller\\AbstractController');
     $mock->expects($this->once())->method('getRequest')->will($this->returnValue($request));
     $mock->expects($this->once())->method('getEvent')->will($this->returnValue($mvcEvent));
     $this->plugin = new FromLegacyParams();
     $this->plugin->setController($mock);
 }
예제 #18
0
 public function testParameterRetrievalDefaultValue()
 {
     $request = new Request();
     $p = new \Zend\Stdlib\Parameters(array('foo' => 'bar'));
     $request->setQuery($p);
     $request->setPost($p);
     $request->setFiles($p);
     $default = 15;
     $this->assertSame($default, $request->getQuery('baz', $default));
     $this->assertSame($default, $request->getPost('baz', $default));
     $this->assertSame($default, $request->getFiles('baz', $default));
     $this->assertSame($default, $request->getHeaders('baz', $default));
     $this->assertSame($default, $request->getHeader('baz', $default));
 }
 /**
  * (non-PHPdoc)
  * @see Tinebase_Server_Plugin_Interface::getServer()
  */
 public static function getServer(\Zend\Http\Request $request)
 {
     /**************************** WebDAV / CardDAV / CalDAV API **********************************
      * RewriteCond %{REQUEST_METHOD} !^(GET|POST)$
      * RewriteRule ^/$            /index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
      *
      * RewriteRule ^/addressbooks /index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
      * RewriteRule ^/calendars    /index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
      * RewriteRule ^/principals   /index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
      * RewriteRule ^/webdav       /index.php?frontend=webdav [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
      */
     if ($request->getQuery('frontend') === 'webdav') {
         return new Tinebase_Server_WebDAV();
     }
 }
예제 #20
0
 public function testRequestAllowsSettingOfParameterContainer()
 {
     $request = new Request();
     $p = new \Zend\Stdlib\Parameters();
     $request->setQuery($p);
     $request->setPost($p);
     $request->setFile($p);
     $request->setServer($p);
     $request->setEnv($p);
     $this->assertSame($p, $request->getQuery());
     $this->assertSame($p, $request->getPost());
     $this->assertSame($p, $request->getFile());
     $this->assertSame($p, $request->getServer());
     $this->assertSame($p, $request->getEnv());
 }
예제 #21
0
 protected function get($url, $data, $options = array())
 {
     $request = new Request();
     $request->setUri($url);
     $request->setMethod('GET');
     $request->getQuery()->fromArray($data);
     $client = new Client();
     $client->setOptions($options);
     $response = $client->dispatch($request);
     try {
         $result = Json::decode($response->getBody(), Json::TYPE_ARRAY);
         return $result;
     } catch (RuntimeException $e) {
         return $response->getBody();
     }
 }
예제 #22
0
 /**
  * Creates and configures a HTTP request based on the provided base URL and the Perun request object.
  * 
  * @param string $baseUrl
  * @param PerunRequest $perunRequest
  * @param HttpRequest $httpRequest
  * @return \Zend\Http\Request
  */
 public function createRequest($baseUrl, PerunRequest $perunRequest)
 {
     /* @var $httpRequest \Zend\Http\Request */
     $httpRequest = new HttpRequest();
     $httpRequest->setUri($this->constructUrl($baseUrl, $perunRequest));
     if ($perunRequest->isChangeState()) {
         $serializedParams = $this->serializer->serialize($perunRequest->getPayload());
         $httpRequest->setMethod(HttpRequest::METHOD_POST);
         $httpRequest->setContent($serializedParams);
         $httpRequest->getHeaders()->addHeaders(array('Content-Type' => $this->serializer->getMimeType()));
     } else {
         $params = $perunRequest->getPayload()->getParams();
         $httpRequest->setMethod(HttpRequest::METHOD_GET);
         $httpRequest->getQuery()->fromArray($params);
     }
     return $httpRequest;
 }
예제 #23
0
 /**
  * HTTP GET METHOD (static)
  *
  * @param  string $url
  * @param  array $query
  * @param  array $headers
  * @param  mixed $body
  * @return Response|bool
  */
 public static function get($url, $query = array(), $headers = array(), $body = null)
 {
     if (empty($url)) {
         return false;
     }
     $request = new Request();
     $request->setUri($url);
     $request->setMethod(Request::METHOD_GET);
     if (!empty($query) && is_array($query)) {
         $request->getQuery()->fromArray($query);
     }
     if (!empty($headers) && is_array($headers)) {
         $request->getHeaders()->addHeaders($headers);
     }
     if (!empty($body)) {
         $request->setBody($body);
     }
     return static::getStaticClient()->send($request);
 }
예제 #24
0
 /**
  * Attempt to authenticate the current request.
  *
  * @param Request $request
  * @param Response $response
  * @param MvcAuthEvent $mvcAuthEvent
  * @return false|Identity\IdentityInterface False on failure, IdentityInterface
  *     otherwise
  */
 public function authenticate(Request $request, Response $response, MvcAuthEvent $mvcAuthEvent)
 {
     $oauth2request = new OAuth2Request($request->getQuery()->toArray(), $request->getPost()->toArray(), [], $request->getCookie() ? $request->getCookie()->getArrayCopy() : [], $request->getFiles() ? $request->getFiles()->toArray() : [], method_exists($request, 'getServer') ? $request->getServer()->toArray() : $_SERVER, $request->getContent(), $request->getHeaders()->toArray());
     // Failure to validate
     if (!$this->oauth2Server->verifyResourceRequest($oauth2request)) {
         $oauth2Response = $this->oauth2Server->getResponse();
         $status = $oauth2Response->getStatusCode();
         // 401 or 403 mean invalid credentials or unauthorized scopes; report those.
         if (in_array($status, [401, 403], true) && null !== $oauth2Response->getParameter('error')) {
             return $this->mergeOAuth2Response($status, $response, $oauth2Response);
         }
         // Merge in any headers; typically sets a WWW-Authenticate header.
         $this->mergeOAuth2ResponseHeaders($response, $oauth2Response->getHttpHeaders());
         // Otherwise, no credentials were present at all, so we just return a guest identity.
         return new Identity\GuestIdentity();
     }
     $token = $this->oauth2Server->getAccessTokenData($oauth2request);
     $identity = new Identity\AuthenticatedIdentity($token);
     $identity->setName($token['user_id']);
     return $identity;
 }
예제 #25
0
 /**
  * @param \Zend\Http\Request $request
  */
 public function it_should_fall_back_on_query_token_when_no_authentication_header_is_available($request)
 {
     $request->getHeader('Authorization')->willReturn(null);
     $request->getQuery('token', [])->willReturn(['token' => 'user_token_id', 'auth' => 'encrypted_auth']);
     $this->setRequest($request);
     $this->createToken()->shouldReturnAnInstanceOf('Phpro\\MvcAuthToken\\Token');
 }
예제 #26
0
 /**
  * Handles all GET requests to a web service
  *
  * @param   string $path  Path
  * @param   array  $parms Array of GET parameters
  * @param   string $type  Type of a request ("xml"|"json")
  * @return  mixed  decoded response from web service
  * @throws  Zend_Service_Delicious_Exception
  */
 public function makeRequest($path, array $params = array(), $type = 'xml')
 {
     // if previous request was made less then 1 sec ago
     // wait until we can make a new request
     $timeDiff = microtime(true) - self::$lastRequestTime;
     if ($timeDiff < 1) {
         usleep((1 - $timeDiff) * 1000000);
     }
     $this->httpClient->setAuth($this->authUname, $this->authPass);
     $this->httpClient->setOptions(array('ssltransport' => 'ssl'));
     $request = new HttpRequest();
     $request->setMethod(HttpRequest::METHOD_GET);
     switch ($type) {
         case 'xml':
             $request->setUri(self::API_URI);
             break;
         case 'json':
             $params['raw'] = true;
             $request->setUri(self::JSON_URI);
             break;
         default:
             throw new Exception('Unknown request type');
     }
     self::$lastRequestTime = microtime(true);
     $request->getQuery()->fromArray($params);
     $response = $this->httpClient->send($request);
     if (!$response->isSuccess()) {
         throw new Exception("Http client reported an error: '{$response->getReasonPhrase()}'");
     }
     $responseBody = $response->getBody();
     switch ($type) {
         case 'xml':
             $dom = new \DOMDocument();
             if (!@$dom->loadXML($responseBody)) {
                 throw new Exception('XML Error');
             }
             return $dom;
         case 'json':
             return \Zend\Json\Decoder::decode($responseBody);
     }
 }
 /**
  * Does the request represent a collection?
  *
  * @param string $serviceName
  * @param array $data
  * @param RouteMatch $matches
  * @param HttpRequest $request
  * @return bool
  */
 protected function isCollection($serviceName, $data, RouteMatch $matches, HttpRequest $request)
 {
     if (!array_key_exists($serviceName, $this->restControllers)) {
         return false;
     }
     if ($request->isPost() && (empty($data) || ArrayUtils::isHashTable($data))) {
         return false;
     }
     $identifierName = $this->restControllers[$serviceName];
     if ($matches->getParam($identifierName)) {
         return false;
     }
     return null === $request->getQuery($identifierName, null);
 }
예제 #28
0
 /**
  * Makes and HTTP GET request to given $path with $options.
  * HTTP Response is first validated, then returned.
  *
  * @param   string $path
  * @param   array $options
  * @return  Response
  * @throws  Exception\RuntimeException on failure
  * @access  protected
  */
 protected function makeRequest($path, $options = array())
 {
     $httpClient = $this->getHttpClient();
     $httpClient->resetParameters();
     $request = new HttpRequest();
     $request->setUri($path);
     $request->getQuery()->fromArray($options);
     $response = $httpClient->send($request);
     self::checkResponse($response);
     return $response;
 }
 public function testRemoveAuthenticationMapRequest()
 {
     $request = new Request();
     $request->setMethod('delete');
     $request->getHeaders()->addHeaderLine('Accept', 'application/vnd.apigility.v2+json');
     $request->getHeaders()->addHeaderLine('Content-Type', 'application/json');
     $request->getQuery()->set('version', 1);
     $this->controller->setRequest($request);
     $params = ['name' => 'Status'];
     $this->routeMatch = new RouteMatch($params);
     $this->routeMatch->setMatchedRouteName('zf-apigility/api/module/authentication');
     $this->event->setRouteMatch($this->routeMatch);
     $result = $this->controller->mappingAction();
     $this->assertInstanceOf('Zend\\Http\\PhpEnvironment\\Response', $result);
     $this->assertEquals(204, $result->getStatusCode());
 }
예제 #30
0
 /**
  * @group 3711
  */
 public function testPartRouteMarkedAsMayTerminateButWithQueryRouteChildWillMatchChildRoute()
 {
     $options = array('route' => array('type' => 'Zend\\Mvc\\Router\\Http\\Literal', 'options' => array('route' => '/resource', 'defaults' => array('controller' => 'ResourceController', 'action' => 'resource'))), 'route_plugins' => new RoutePluginManager(), 'may_terminate' => true, 'child_routes' => array('query' => array('type' => 'Zend\\Mvc\\Router\\Http\\Query', 'options' => array('defaults' => array('query' => 'string')))));
     $route = Part::factory($options);
     $request = new Request();
     $request->setUri('http://example.com/resource?foo=bar');
     $query = new Parameters(array('foo' => 'bar'));
     $request->setQuery($query);
     $query = $request->getQuery();
     $match = $route->match($request);
     $this->assertInstanceOf('Zend\\Mvc\\Router\\RouteMatch', $match);
     $this->assertEquals('string', $match->getParam('query'));
     $this->assertEquals('bar', $match->getParam('foo'));
 }