Move mod/amcd to src/Module/AccMgmtControlDoc

This commit is contained in:
Philipp Holzer 2019-05-01 00:32:33 +02:00
parent 440a43a693
commit 1460e417c1
No known key found for this signature in database
GPG key ID: 517BE60E2CE5C8A5
3 changed files with 151 additions and 132 deletions

View file

@ -1,49 +0,0 @@
<?php
function amcd_content()
{
echo <<< JSON
{
"version":1,
"sessionstatus":{
"method":"GET",
"path":"/session"
},
"auth-methods": {
"username-password-form": {
"connect": {
"method":"POST",
"path":"/login",
"params": {
"username":"login-name",
"password":"password"
},
"onsuccess": { "action":"reload" }
},
"disconnect": {
"method":"GET",
"path":"\/logout"
}
}
}
"methods": {
"username-password-form": {
"connect": {
"method":"POST",
"path":"\/login",
"params": {
"username":"login-name",
"password":"password"
},
"onsuccess": { "action":"reload" }
},
"disconnect": {
"method":"GET",
"path":"\/logout"
}
}
}
}
JSON;
exit();
}

View file

@ -1,83 +1,84 @@
<?php <?php
namespace Friendica\App; namespace Friendica\App;
use FastRoute\DataGenerator\GroupCountBased; use FastRoute\DataGenerator\GroupCountBased;
use FastRoute\Dispatcher; use FastRoute\Dispatcher;
use FastRoute\RouteCollector; use FastRoute\RouteCollector;
use FastRoute\RouteParser\Std; use FastRoute\RouteParser\Std;
use Friendica\Module; use Friendica\Module;
/** /**
* Wrapper for FastRoute\Router * Wrapper for FastRoute\Router
* *
* This wrapper only makes use of a subset of the router features, mainly parses a route rule to return the relevant * This wrapper only makes use of a subset of the router features, mainly parses a route rule to return the relevant
* module class. * module class.
* *
* Actual routes are defined in App->collectRoutes. * Actual routes are defined in App->collectRoutes.
* *
* @package Friendica\App * @package Friendica\App
*/ */
class Router class Router
{ {
/** @var RouteCollector */ /** @var RouteCollector */
protected $routeCollector; protected $routeCollector;
/** /**
* Static declaration of Friendica routes. * Static declaration of Friendica routes.
* *
* Supports: * Supports:
* - Route groups * - Route groups
* - Variable parts * - Variable parts
* Disregards: * Disregards:
* - HTTP method other than GET * - HTTP method other than GET
* - Named parameters * - Named parameters
* *
* Handler must be the name of a class extending Friendica\BaseModule. * Handler must be the name of a class extending Friendica\BaseModule.
* *
* @brief Static declaration of Friendica routes. * @brief Static declaration of Friendica routes.
*/ */
public function collectRoutes() public function collectRoutes()
{ {
$this->routeCollector->addRoute(['GET', 'POST'], '/itemsource[/{guid}]', Module\Itemsource::class); $this->routeCollector->addRoute(['GET', 'POST'], '/itemsource[/{guid}]', Module\Itemsource::class);
} $this->routeCollector->addRoute(['GET'], '/amcd', Module\AccMgmtControlDoc::class);
}
public function __construct(RouteCollector $routeCollector = null)
{ public function __construct(RouteCollector $routeCollector = null)
if (!$routeCollector) { {
$routeCollector = new RouteCollector(new Std(), new GroupCountBased()); if (!$routeCollector) {
} $routeCollector = new RouteCollector(new Std(), new GroupCountBased());
}
$this->routeCollector = $routeCollector;
} $this->routeCollector = $routeCollector;
}
public function getRouteCollector()
{ public function getRouteCollector()
return $this->routeCollector; {
} return $this->routeCollector;
}
/**
* Returns the relevant module class name for the given page URI or NULL if no route rule matched. /**
* * Returns the relevant module class name for the given page URI or NULL if no route rule matched.
* @param string $cmd The path component of the request URL without the query string *
* @return string|null A Friendica\BaseModule-extending class name if a route rule matched * @param string $cmd The path component of the request URL without the query string
*/ * @return string|null A Friendica\BaseModule-extending class name if a route rule matched
public function getModuleClass($cmd) */
{ public function getModuleClass($cmd)
$cmd = '/' . ltrim($cmd, '/'); {
$cmd = '/' . ltrim($cmd, '/');
$dispatcher = new \FastRoute\Dispatcher\GroupCountBased($this->routeCollector->getData());
$dispatcher = new \FastRoute\Dispatcher\GroupCountBased($this->routeCollector->getData());
$moduleClass = null;
$moduleClass = null;
// @TODO: Enable method-specific modules
$httpMethod = 'GET'; // @TODO: Enable method-specific modules
$routeInfo = $dispatcher->dispatch($httpMethod, $cmd); $httpMethod = 'GET';
if ($routeInfo[0] === Dispatcher::FOUND) { $routeInfo = $dispatcher->dispatch($httpMethod, $cmd);
$moduleClass = $routeInfo[1]; if ($routeInfo[0] === Dispatcher::FOUND) {
} $moduleClass = $routeInfo[1];
}
return $moduleClass;
} return $moduleClass;
} }
}

View file

@ -0,0 +1,67 @@
<?php
namespace Friendica\Module;
use Friendica\BaseModule;
/**
* Static definition for the Firefox Account Manager
*
* @see https://wiki.mozilla.org/Labs/Weave/Identity/Account_Manager/Spec/3#Contents_of_the_Account_Management_Control_Document
*/
class AccMgmtControlDoc extends BaseModule
{
public static function rawContent()
{
parent::rawContent();
$output = [
'version' => 1,
'sessionstatus' => [
'method' => 'GET',
'path' => '/session',
],
'auth-methods' => [
'username-password-form' => [
'connect' => [
'method' => 'POST',
'path' => '/login',
'params' => [
'username' => 'login-name',
'password' => 'password',
],
'onsuccess' => [
'action' => 'reload',
],
],
'disconnect' => [
'method' => 'GET',
'path' => '/logout',
],
],
],
'methods' => [
'username-password-form' => [
'connect' => [
'method' => 'POST',
'path' => '/login',
'params' => [
'username' => 'login-name',
'password' => 'password',
],
'onsuccess' => [
'action' => 'reload',
],
],
'disconnect' => [
'method' => 'GET',
'path' => '/logout',
],
],
],
];
echo json_encode($output);
exit();
}
}