コード例 #1
0
ファイル: api.php プロジェクト: nyan-cat/easyweb
 function request($type, $uri, $get = [], $post = [])
 {
     $request = ['method' => $type, 'protocol_version' => '1.1', 'header' => 'Connection: Close', 'ignore_errors' => true];
     foreach ($post as $name => &$param) {
         if (is_array($param) and empty($param)) {
             $param = '_empty_array';
         }
     }
     if (!empty($post)) {
         $request['header'] .= "\r\nContent-type: application/x-www-form-urlencoded";
         $request['content'] = http_build_query($post);
     }
     $ctx = stream_context_create(['http' => $request]);
     $response = file_get_contents($this->endpoint . (empty($get) ? $uri : $uri . '?' . http_build_query($get)), false, $ctx);
     preg_match('/\\A[^ ]+ (\\d+) .+\\Z/', $http_response_header[0], $matches);
     if ($matches[1] == 200) {
         if (!empty($response)) {
             $result = json\decode($response);
             $result !== null or error('bad_backend_response', "Response from backend server is not valid JSON: {$response}");
             return $result;
         } else {
             error('bad_backend_response', 'Empty backend response');
         }
     } else {
         error('bad_backend_response', 'Backend HTTP response is not 200: ' . $response);
     }
 }
コード例 #2
0
ファイル: engine.php プロジェクト: nyan-cat/easyweb
 function extend($extensions)
 {
     if (!isset($extensions->filters)) {
         $extensions->filters = [];
     }
     if (!isset($extensions->functions)) {
         $extensions->functions = [];
     }
     $extensions->filters += ['array' => function ($object) {
         return (array) $object;
     }, 'ceil' => function ($value) {
         return ceil($value);
     }, 'local' => function ($alias) {
         return $this->locale->get($alias);
     }, 'md5' => function ($value) {
         return md5($value);
     }];
     $extensions->functions += ['json' => function ($filename) {
         return \json\decode(\fs\read($this->data . $filename));
     }];
     foreach ($extensions->filters as $name => $closure) {
         if ($closure instanceof \Closure) {
             $this->twig->addFilter(new \Twig_SimpleFilter($name, $closure->bindTo($this, $this)));
         } else {
             $options = [];
             if (isset($closure->escape) and !$closure->escape) {
                 $options['is_safe'] = ['html'];
             }
             $this->twig->addFilter(new \Twig_SimpleFilter($name, $closure->function->bindTo($this, $this), $options));
         }
     }
     foreach ($extensions->functions as $name => $closure) {
         $this->twig->addFunction(new \Twig_SimpleFunction($name, $closure));
     }
 }
コード例 #3
0
ファイル: procedure.php プロジェクト: nyan-cat/easyweb
 private static function embed(&$object, $metadata)
 {
     if (($json = json\decode($object->{$metadata}, true)) !== null) {
         if (is_array($json)) {
             foreach ($json as $name => $value) {
                 $object->{$name} = $value;
             }
         }
     }
 }
コード例 #4
0
 function query_direct($args)
 {
     switch ($this->method) {
         case 'photos':
             isset($args['_venue_id']) or error('missing_parameter', 'Foursquare _venue_id argument missing');
             $photos = [];
             if ($result = json\decode(file_get_contents('https://api.foursquare.com/v2/venues/' . $args['_venue_id'] . '/photos?' . $this->foursquare->get()))) {
                 foreach ($result->response->photos->groups as $group) {
                     if ($group->type == 'venue') {
                         foreach ($group->items as $item) {
                             $photo = (object) ['url' => $item->url, 'created' => $item->createdAt, 'user' => (object) ['id' => $item->user->id, 'first_name' => $item->user->firstName, 'gender' => $item->user->gender, 'photo' => $item->user->photo]];
                             if ($item->user->lastName) {
                                 $photo->user->last_name = $item->user->lastName;
                             }
                             $resampled = [];
                             foreach ($item->sizes->items as $size) {
                                 $resampled[] = (object) ['url' => $size->url, 'width' => $size->width, 'height' => $size->height];
                             }
                             $photo->resampled = $resampled;
                             $photos[] = $photo;
                         }
                     }
                 }
             }
             !(empty($photos) and $this->required) or error('empty_query_result', 'Empty response from Froursquare procedure');
             return (object) $photos;
         case 'venues':
             isset($args['_latitude']) or error('missing_parameter', 'Foursquare _latitude argument missing');
             isset($args['_longitude']) or error('missing_parameter', 'Foursquare _longitude argument missing');
             $venues = [];
             if ($result = json\decode(file_get_contents('https://api.foursquare.com/v2/venues/search?ll=' . $args['_latitude'] . ',' . $args['_longitude'] . '&' . $this->foursquare->get()))) {
                 foreach ($result->response->groups as $group) {
                     if ($group->type == 'nearby') {
                         foreach ($group->items as $item) {
                             $venue[] = (object) ['id' => $item->id, 'name' => $item->name, 'url' => $item->canonicalUrl];
                             $categories = [];
                             foreach ($item->categories as $category) {
                                 $categories[] = (object) ['id' => $category->id, 'name' => $category->name, 'plural_name' => $category->pluralName, 'short_name' => $category->shortName, 'icon' => $category->icon];
                             }
                             $venue->categories = $categories;
                             $venues[] = $venue;
                         }
                     }
                 }
             }
             !(empty($venues) and $this->required) or error('empty_query_result', 'Empty response from Froursquare procedure');
             return (object) $venues;
     }
 }
コード例 #5
0
ファイル: security.php プロジェクト: nyan-cat/easyweb
 static function unwrap($token, $host = null)
 {
     if ($package = base64_decode($token, true)) {
         if ($package = json\decode($package)) {
             if (isset($package->value) and isset($package->expire_at) and isset($package->digest)) {
                 $digest = $package->digest;
                 unset($package->digest);
                 if ($digest === self::digest($package)) {
                     if (isset($package->host) and $package->host !== $host) {
                         return null;
                     }
                     if ($package->expire_at === 0 or $package->expire_at > @time()) {
                         return $package->value;
                     }
                 }
             }
         }
     }
     return null;
 }
コード例 #6
0
ファイル: www_initialize.php プロジェクト: nyan-cat/easyweb
<?php

$this->api = new api($config->schema);
$this->locale = new locale($options->language, $options->country);
$this->locale->load($config->locale);
$this->vars = json\decode(fs\read($config->vars));
if ($config->engine == 'twig') {
    $this->templaters[$config->engine] = new twig\engine($config->templates, isset($options->cache) ? ['cache' => $options->cache] : [], $config->data, $this->locale);
}
foreach ($config->pages as $page) {
    $templater = isset($page->engine) ? $page->engine : $config->engine;
    $this->router->attach(isset($page->method) ? $page->method : 'GET', new page($page->uri, $page->params, isset($page->template) ? $this->templaters[$templater]->load($page->template) : null, isset($page->script) ? new script($this, $page->script) : null, $this->api));
}
foreach ($config->schemas as $name => $src) {
    $this->schemas[$name] = json\schema::load($src);
}