Viewing file: InvalidateHandler.php (3.78 KB) -rwxr-xr-x Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php /** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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. */
class InvalidateHandler extends DataRequestHandler {
private static $INVALIDATE_PATH = "/cache/invalidate";
private static $KEYS_PARAM = "invalidationKeys";
public function __construct() { try { $service = trim(Config::get('invalidate_service')); if (!empty($service)) { $cache = Cache::createCache(Config::get('data_cache'), 'RemoteContent'); $this->service = new $service($cache); } } catch (ConfigException $e) { // Do nothing. If invalidate service is not specified in the config file. // All the requests to the handler will throw not implemented exception. } }
public function handleItem(RequestItem $requestItem) { try { $method = strtolower($requestItem->getMethod()); $method = 'handle' . ucfirst($method); $this->$method($requestItem); } catch (SocialSpiException $e) { $response = new ResponseItem($e->getCode(), $e->getMessage()); } catch (Exception $e) { $response = new ResponseItem(ResponseError::$INTERNAL_ERROR, "Internal error: " . $e->getMessage()); } return $response; }
public function handleDelete(RequestItem $request) { throw new SocialSpiException("Http delete not allowed for invalidation service", ResponseError::$BAD_REQUEST); }
public function handlePut(RequestItem $request) { throw new SocialSpiException("Http put not allowed for invalidation service", ResponseError::$BAD_REQUEST); }
public function handlePost(RequestItem $request) { $this->handleInvalidate($request); }
public function handleGet(RequestItem $request) { $this->handleInvalidate($request); }
public function handleInvalidate(RequestItem $request) { $this->checkService(); if (!$request->getToken()->getAppId() && !$request->getToken()->getAppUrl()) { throw new SocialSpiException("Can't invalidate content without specifying application", ResponseError::$BAD_REQUEST); }
$isBackendInvalidation = AuthenticationMode::$OAUTH_CONSUMER_REQUEST == $request->getToken()->getAuthenticationMode(); $invalidationKeys = $request->getListParameter('invalidationKeys'); $resources = array(); $userIds = array(); if ($request->getToken()->getViewerId()) { $userIds[] = $request->getToken()->getViewerId(); } foreach($invalidationKeys as $key) { if (strpos($key, 'http') !== false) { if (!$isBackendInvalidation) { throw new SocialSpiException('Cannot flush application resources from a gadget. Must use OAuth consumer request'); } $resources[] = $key; } else { if ($key == '@viewer') { continue; } if (!$isBackendInvalidation) { throw new SocialSpiException('Cannot invalidate the content for a user other than the viewer from a gadget.'); } $userIds[] = $key; } } $this->service->invalidateApplicationResources($resources, $request->getToken()); $this->service->invalidateUserResources($userIds, $request->getToken()); } }
|