use Friendica\LegacyModule;
use Friendica\Module\HTTPException\MethodNotAllowed;
use Friendica\Module\HTTPException\PageNotFound;
+use Friendica\Module\Special\Options;
use Friendica\Network\HTTPException;
use Friendica\Network\HTTPException\MethodNotAllowedException;
-use Friendica\Network\HTTPException\NoContentException;
use Friendica\Network\HTTPException\NotFoundException;
use Psr\Log\LoggerInterface;
$httpMethod = $this->server['REQUEST_METHOD'] ?? self::GET;
- // @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/OPTIONS
- // @todo Check allowed methods per requested path
- if ($httpMethod === static::OPTIONS) {
- header('Allow: ' . implode(',', Router::ALLOWED_METHODS));
- throw new NoContentException();
- }
-
$this->httpMethod = in_array($httpMethod, self::ALLOWED_METHODS) ? $httpMethod : self::GET;
$this->routeCollector = isset($routeCollector) ?
$this->parameters = $routeInfo[2];
} elseif ($routeInfo[0] === Dispatcher::METHOD_NOT_ALLOWED) {
throw new HTTPException\MethodNotAllowedException($this->l10n->t('Method not allowed for this module. Allowed method(s): %s', implode(', ', $routeInfo[1])));
+ } elseif ($this->httpMethod === static::OPTIONS) {
+ // Default response for HTTP OPTIONS requests in case there is no special treatment
+ $moduleClass = Options::class;
} else {
throw new HTTPException\NotFoundException($this->l10n->t('Page not found.'));
}
{
}
+ /**
+ * Module OPTIONS method to process submitted data
+ *
+ * Extend this method if the module is supposed to process OPTIONS requests.
+ * Doesn't display any content
+ *
+ * @param string[] $request The $_REQUEST content
+ */
+ protected function options(array $request = [])
+ {
+ }
+
/**
* {@inheritDoc}
*/
case Router::PUT:
$this->put($request);
break;
+ case Router::OPTIONS:
+ $this->options($request);
+ break;
}
$timestamp = microtime(true);
--- /dev/null
+<?php
+
+namespace Friendica\Module\Special;
+
+use Friendica\App\Router;
+use Friendica\BaseModule;
+
+class Options extends BaseModule
+{
+ protected function options(array $request = [])
+ {
+ // @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/OPTIONS
+ $this->response->setHeader('Allow', implode(',', Router::ALLOWED_METHODS));
+ $this->response->setHeader(($this->server['SERVER_PROTOCOL'] ?? 'HTTP/1.1') . ' 204 No Content');
+ }
+}