appengine/flexible/datastore/app.php (61 lines of code) (raw):

<?php /** * Copyright 2016 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ use Google\Cloud\Datastore\DatastoreClient; use Psr\Http\Message\ServerRequestInterface as Request; use Psr\Http\Message\ResponseInterface as Response; use RKA\Middleware\IpAddress; use Slim\Factory\AppFactory; // Create App $app = AppFactory::create(); // Display errors $app->addErrorMiddleware(true, true, true); // Add IP address middleware $checkProxyHeaders = true; $trustedProxies = ['10.0.0.1', '10.0.0.2']; $app->add(new IpAddress($checkProxyHeaders, $trustedProxies)); $app->get('/', function (Request $request, Response $response) { $projectId = getenv('GCLOUD_PROJECT'); if (empty($projectId)) { $response->getBody()->write('Set the GCLOUD_PROJECT environment variable to run locally'); return $response; } # [START gae_flex_datastore_client] $datastore = new DatastoreClient([ 'projectId' => $projectId ]); # [END gae_flex_datastore_client] // determine the user's IP $user_ip = get_user_ip($request); # [START gae_flex_datastore_entity] // Create an entity to insert into datastore. $key = $datastore->key('visit'); $entity = $datastore->entity($key, [ 'user_ip' => $user_ip, 'timestamp' => new DateTime(), ]); $datastore->insert($entity); # [END gae_flex_datastore_entity] # [START gae_flex_datastore_query] // Query recent visits. $query = $datastore->query() ->kind('visit') ->order('timestamp', 'DESCENDING') ->limit(10); $results = $datastore->runQuery($query); $visits = []; foreach ($results as $entity) { $visits[] = sprintf('Time: %s Addr: %s', $entity['timestamp']->format('Y-m-d H:i:s'), $entity['user_ip']); } # [END gae_flex_datastore_query] array_unshift($visits, 'Last 10 visits:'); $response->getBody()->write(implode("\n", $visits)); return $response ->withStatus(200) ->withHeader('Content-Type', 'text/plain'); }); function get_user_ip(Request $request) { $ip = $request->getAttribute('ip_address'); // Keep only the first two octets of the IP address. $octets = explode($separator = ':', $ip); if (count($octets) < 2) { // Must be ip4 address $octets = explode($separator = '.', $ip); } if (count($octets) < 2) { $octets = ['bad', 'ip']; } // Replace empty chunks with zeros. $octets = array_map(function ($x) { return $x == '' ? '0' : $x; }, $octets); $user_ip = $octets[0] . $separator . $octets[1]; return $user_ip; } return $app;