コード例 #1
0
ファイル: ProviderAbstractTest.php プロジェクト: k42b3/psx-ws
 public function testFlow()
 {
     $consumerRequest = $this->generateConsumerRequest();
     // association request
     $data = $this->doAssociation($consumerRequest['modulus'], $consumerRequest['gen'], $consumerRequest['consumer_public']);
     // we received the encrypted secret over the wire. The client can now
     // decrypt the secret
     $assocHandle = $data['assoc_handle'];
     $assocType = $data['assoc_type'];
     $serverPublicKey = $data['dh_server_public'];
     $encMacKey = $data['enc_mac_key'];
     $this->assertTrue(!empty($assocHandle));
     $this->assertTrue(!empty($assocType));
     $this->assertTrue(!empty($serverPublicKey));
     $this->assertTrue(!empty($encMacKey));
     $serverPub = base64_decode($serverPublicKey);
     $dhSec = OpenSsl::dhComputeKey($serverPub, $consumerRequest['pkey']);
     $sec = OpenSsl::digest(ProviderAbstract::btwoc($dhSec), 'SHA1', true);
     $serverSecret = base64_encode($sec ^ base64_decode($data['enc_mac_key']));
     // the client has established the association we can make now an
     // checkid setup request. If the user is authenticated he gets
     // redirected back to the relying party
     $url = $this->doCheckidSetupRequest($assocHandle);
     // later the relying party calls check authentication to verify the
     // callback
     $this->doCheckAuthentication($url);
 }
コード例 #2
0
ファイル: GenerateDhTest.php プロジェクト: k42b3/psx-ws
 public function testDhSha1()
 {
     // generate consumer
     $request = $this->generateConsumerRequest();
     // generate server
     $dhGen = $request['gen'];
     $dhModulus = $request['modulus'];
     $dhConsumerPub = $request['consumer_public'];
     $dhFunc = 'SHA1';
     $secret = ProviderAbstract::randomBytes(20);
     $res = ProviderAbstract::generateDh($dhGen, $dhModulus, $dhConsumerPub, $dhFunc, $secret);
     $this->assertEquals(true, isset($res['pubKey']));
     $this->assertEquals(true, isset($res['macKey']));
     // calculate consumer
     $serverPub = base64_decode($res['pubKey']);
     $dhSec = OpenSsl::dhComputeKey($serverPub, $request['pkey']);
     $sec = OpenSsl::digest(ProviderAbstract::btwoc($dhSec), $dhFunc, true);
     $serverSecret = $sec ^ base64_decode($res['macKey']);
     // compare with server
     $this->assertEquals(true, $secret === $serverSecret);
 }
コード例 #3
0
ファイル: OpenId.php プロジェクト: k42b3/psx-ws
 /**
  * Tries to establish a association with the op if a store is available. The
  * method returns null or PSX\OpenId\Provider\Data\Association. Discovery
  * must be made before calling this method
  *
  * @return PSX\OpenId\Provider\Data\Association|null
  */
 private function establishAssociaton($assocType = 'HMAC-SHA256', $sessionType = 'DH-SHA256')
 {
     // request association
     $g = pack('H*', ProviderAbstract::DH_G);
     $p = pack('H*', ProviderAbstract::DH_P);
     $pkey = new PKey(array('private_key_type' => OPENSSL_KEYTYPE_DH, 'dh' => array('p' => $p, 'g' => $g)));
     $details = $pkey->getDetails();
     $params = array('openid.ns' => ProviderAbstract::NS, 'openid.mode' => 'associate', 'openid.assoc_type' => $assocType, 'openid.session_type' => $sessionType, 'openid.dh_modulus' => base64_encode(ProviderAbstract::btwoc($details['dh']['p'])), 'openid.dh_gen' => base64_encode(ProviderAbstract::btwoc($details['dh']['g'])), 'openid.dh_consumer_public' => base64_encode(ProviderAbstract::btwoc($details['dh']['pub_key'])));
     $request = new PostRequest($this->identity->getServer(), array('User-Agent' => __CLASS__ . ' ' . Base::VERSION), $params);
     $response = $this->http->request($request);
     if ($response->getStatusCode() == 200) {
         $data = self::keyValueDecode($response->getBody());
         // check values
         $diff = array_diff(array('ns', 'assoc_handle', 'session_type', 'assoc_type', 'expires_in'), array_keys($data));
         if (count($diff) > 0) {
             throw new Exception('Missing fields ' . implode(', ', $diff));
         }
         if ($data['ns'] != ProviderAbstract::NS) {
             throw new Exception('Invalid namesspace');
         }
         if (!in_array($data['session_type'], self::$supportedSessionTypes)) {
             throw new Exception('Invalid session type');
         }
         if (!in_array($data['assoc_type'], self::$supportedAssocTypes)) {
             throw new Exception('Invalid assoc type');
         }
         // decrypt shared secret
         if ($data['session_type'] != 'no-encryption') {
             if (!isset($data['dh_server_public'])) {
                 throw new Exception('DH server public not set');
             }
             if (!isset($data['enc_mac_key'])) {
                 throw new Exception('Encoded mac key not set');
             }
             $dhFunc = str_replace('DH-', '', $data['session_type']);
             $serverPub = base64_decode($data['dh_server_public']);
             $dhSec = OpenSsl::dhComputeKey($serverPub, $pkey);
             $sec = OpenSsl::digest(ProviderAbstract::btwoc($dhSec), $dhFunc, true);
             $serverSecret = base64_encode($sec ^ base64_decode($data['enc_mac_key']));
         } else {
             if (!isset($data['mac_key'])) {
                 throw new Exception('Mac key not set');
             }
             $dhFunc = null;
             $serverSecret = $data['mac_key'];
         }
         // build association
         $assoc = new Association();
         $assoc->setAssocHandle($data['assoc_handle']);
         $assoc->setAssocType($data['assoc_type']);
         $assoc->setSessionType($data['session_type']);
         $assoc->setSecret($serverSecret);
         $assoc->setExpire($data['expires_in']);
         return $assoc;
     } else {
         throw new Exception('Could not establish associaton received ' . $response->getStatusCode());
     }
 }
コード例 #4
0
ファイル: ProviderAbstract.php プロジェクト: k42b3/psx-ws
 public static function generateDh($dhGen, $dhModulus, $dhConsumerPublic, $dhFunc, $secret)
 {
     if (empty($dhConsumerPublic)) {
         throw new Exception('Empty "openid.dh_consumer_public"');
     }
     $g = empty($dhGen) ? pack('H*', self::DH_G) : base64_decode($dhGen);
     $p = empty($dhModulus) ? pack('H*', self::DH_P) : base64_decode($dhModulus);
     $dhKey = self::createDhKey($p, $g);
     $details = $dhKey->getDetails();
     $dh = isset($details['dh']) ? $details['dh'] : null;
     if (empty($dh)) {
         throw new Exception('Could not get dh details');
     }
     $sec = OpenSsl::dhComputeKey(base64_decode($dhConsumerPublic), $dhKey);
     $digest = OpenSsl::digest(self::btwoc($sec), $dhFunc, true);
     $res = array('pubKey' => base64_encode(self::btwoc($dh['pub_key'])), 'macKey' => base64_encode($digest ^ $secret));
     return $res;
 }
コード例 #5
0
ファイル: Version010.php プロジェクト: virusvn/fusio
    public function getInstallInserts()
    {
        $now = new DateTime();
        $appKey = Uuid::pseudoRandom();
        $appSecret = hash('sha256', OpenSsl::randomPseudoBytes(256));
        $password = \password_hash('0a29e5bcaa810de0ca0513d9d4ab62f1860f998a', PASSWORD_DEFAULT);
        $passthruSchema = json_encode(['id' => 'http://fusio-project.org', 'title' => 'passthru', 'type' => 'object', 'description' => 'No schema was specified all data will pass thru. Please contact the API provider for more informations about the data format.', 'properties' => new \stdClass()], JSON_PRETTY_PRINT);
        $parser = new Parser();
        $passthruCache = $parser->parse($passthruSchema);
        $welcomeResponse = <<<'JSON'
{
    "message": "Congratulations the installation of Fusio was successful",
    "links": [{
        "rel": "about",
        "name": "http://fusio-project.org"
    }]
}
JSON;
        $welcomeConfig = 'a:1:{i:0;C:15:"PSX\\Data\\Record":605:{a:2:{s:4:"name";s:6:"config";s:6:"fields";a:4:{s:6:"active";b:1;s:6:"status";i:4;s:4:"name";s:1:"1";s:7:"methods";a:4:{i:0;C:15:"PSX\\Data\\Record":140:{a:2:{s:4:"name";s:6:"method";s:6:"fields";a:5:{s:6:"active";b:1;s:6:"public";b:1;s:4:"name";s:3:"GET";s:6:"action";i:1;s:8:"response";i:1;}}}i:1;C:15:"PSX\\Data\\Record":71:{a:2:{s:4:"name";s:6:"method";s:6:"fields";a:1:{s:4:"name";s:4:"POST";}}}i:2;C:15:"PSX\\Data\\Record":70:{a:2:{s:4:"name";s:6:"method";s:6:"fields";a:1:{s:4:"name";s:3:"PUT";}}}i:3;C:15:"PSX\\Data\\Record":73:{a:2:{s:4:"name";s:6:"method";s:6:"fields";a:1:{s:4:"name";s:6:"DELETE";}}}}}}}}';
        return ['fusio_user' => [['status' => 1, 'name' => 'Administrator', 'password' => $password, 'date' => $now->format('Y-m-d H:i:s')]], 'fusio_app' => [['userId' => 1, 'status' => 1, 'name' => 'Backend', 'url' => 'http://fusio-project.org', 'appKey' => $appKey, 'appSecret' => $appSecret, 'date' => $now->format('Y-m-d H:i:s')]], 'fusio_connection' => [['name' => 'Native-Connection', 'class' => 'Fusio\\Connection\\Native', 'config' => null]], 'fusio_scope' => [['name' => 'backend'], ['name' => 'authorization']], 'fusio_action' => [['name' => 'Welcome', 'class' => 'Fusio\\Action\\StaticResponse', 'config' => serialize(['response' => $welcomeResponse]), 'date' => $now->format('Y-m-d H:i:s')]], 'fusio_schema' => [['name' => 'Passthru', 'source' => $passthruSchema, 'cache' => $passthruCache]], 'fusio_routes' => [['status' => 1, 'methods' => 'GET|POST|PUT|DELETE', 'path' => '/backend', 'controller' => 'Fusio\\Backend\\Application\\Index', 'config' => null], ['status' => 1, 'methods' => 'GET|POST|PUT|DELETE', 'path' => '/backend/action', 'controller' => 'Fusio\\Backend\\Api\\Action\\Collection', 'config' => null], ['status' => 1, 'methods' => 'GET', 'path' => '/backend/action/list', 'controller' => 'Fusio\\Backend\\Api\\Action\\ListActions::doIndex', 'config' => null], ['status' => 1, 'methods' => 'GET', 'path' => '/backend/action/form', 'controller' => 'Fusio\\Backend\\Api\\Action\\ListActions::doDetail', 'config' => null], ['status' => 1, 'methods' => 'GET|POST|PUT|DELETE', 'path' => '/backend/action/:action_id', 'controller' => 'Fusio\\Backend\\Api\\Action\\Entity', 'config' => null], ['status' => 1, 'methods' => 'GET|POST|PUT|DELETE', 'path' => '/backend/app', 'controller' => 'Fusio\\Backend\\Api\\App\\Collection', 'config' => null], ['status' => 1, 'methods' => 'DELETE', 'path' => '/backend/app/:app_id/token/:token_id', 'controller' => 'Fusio\\Backend\\Api\\App\\Token::doRemove', 'config' => null], ['status' => 1, 'methods' => 'GET|POST|PUT|DELETE', 'path' => '/backend/app/:app_id', 'controller' => 'Fusio\\Backend\\Api\\App\\Entity', 'config' => null], ['status' => 1, 'methods' => 'GET|POST|PUT|DELETE', 'path' => '/backend/connection', 'controller' => 'Fusio\\Backend\\Api\\Connection\\Collection', 'config' => null], ['status' => 1, 'methods' => 'GET', 'path' => '/backend/connection/form', 'controller' => 'Fusio\\Backend\\Api\\Connection\\ListConnections::doDetail', 'config' => null], ['status' => 1, 'methods' => 'GET', 'path' => '/backend/connection/list', 'controller' => 'Fusio\\Backend\\Api\\Connection\\ListConnections::doIndex', 'config' => null], ['status' => 1, 'methods' => 'GET|POST|PUT|DELETE', 'path' => '/backend/connection/:connection_id', 'controller' => 'Fusio\\Backend\\Api\\Connection\\Entity', 'config' => null], ['status' => 1, 'methods' => 'GET', 'path' => '/backend/log', 'controller' => 'Fusio\\Backend\\Api\\Log\\Collection', 'config' => null], ['status' => 1, 'methods' => 'GET', 'path' => '/backend/log/:log_id', 'controller' => 'Fusio\\Backend\\Api\\Log\\Entity', 'config' => null], ['status' => 1, 'methods' => 'GET|POST|PUT|DELETE', 'path' => '/backend/routes', 'controller' => 'Fusio\\Backend\\Api\\Routes\\Collection', 'config' => null], ['status' => 1, 'methods' => 'GET|POST|PUT|DELETE', 'path' => '/backend/routes/:route_id', 'controller' => 'Fusio\\Backend\\Api\\Routes\\Entity', 'config' => null], ['status' => 1, 'methods' => 'GET|POST|PUT|DELETE', 'path' => '/backend/schema', 'controller' => 'Fusio\\Backend\\Api\\Schema\\Collection', 'config' => null], ['status' => 1, 'methods' => 'GET|POST|PUT|DELETE', 'path' => '/backend/schema/:schema_id', 'controller' => 'Fusio\\Backend\\Api\\Schema\\Entity', 'config' => null], ['status' => 1, 'methods' => 'GET', 'path' => '/backend/schema/preview/:schema_id', 'controller' => 'Fusio\\Backend\\Api\\Schema\\Preview', 'config' => null], ['status' => 1, 'methods' => 'GET|POST|PUT|DELETE', 'path' => '/backend/scope', 'controller' => 'Fusio\\Backend\\Api\\Scope\\Collection', 'config' => null], ['status' => 1, 'methods' => 'GET|POST|PUT|DELETE', 'path' => '/backend/scope/:scope_id', 'controller' => 'Fusio\\Backend\\Api\\Scope\\Entity', 'config' => null], ['status' => 1, 'methods' => 'GET|POST|PUT|DELETE', 'path' => '/backend/user', 'controller' => 'Fusio\\Backend\\Api\\User\\Collection', 'config' => null], ['status' => 1, 'methods' => 'GET|POST|PUT|DELETE', 'path' => '/backend/user/:user_id', 'controller' => 'Fusio\\Backend\\Api\\User\\Entity', 'config' => null], ['status' => 1, 'methods' => 'GET', 'path' => '/backend/dashboard/latest_requests', 'controller' => 'Fusio\\Backend\\Api\\Dashboard\\LatestRequests', 'config' => null], ['status' => 1, 'methods' => 'GET', 'path' => '/backend/dashboard/latest_apps', 'controller' => 'Fusio\\Backend\\Api\\Dashboard\\LatestApps', 'config' => null], ['status' => 1, 'methods' => 'GET', 'path' => '/backend/statistic/incoming_requests', 'controller' => 'Fusio\\Backend\\Api\\Statistic\\IncomingRequests', 'config' => null], ['status' => 1, 'methods' => 'GET', 'path' => '/backend/statistic/most_used_routes', 'controller' => 'Fusio\\Backend\\Api\\Statistic\\MostUsedRoutes', 'config' => null], ['status' => 1, 'methods' => 'GET', 'path' => '/backend/statistic/most_used_apps', 'controller' => 'Fusio\\Backend\\Api\\Statistic\\MostUsedApps', 'config' => null], ['status' => 1, 'methods' => 'GET', 'path' => '/backend/statistic/errors_per_route', 'controller' => 'Fusio\\Backend\\Api\\Statistic\\ErrorsPerRoute', 'config' => null], ['status' => 1, 'methods' => 'GET|POST|PUT|DELETE', 'path' => '/backend/account/change_password', 'controller' => 'Fusio\\Backend\\Api\\Account\\ChangePassword', 'config' => null], ['status' => 1, 'methods' => 'GET|POST', 'path' => '/backend/token', 'controller' => 'Fusio\\Backend\\Authorization\\Token', 'config' => null], ['status' => 1, 'methods' => 'POST', 'path' => '/authorization/revoke', 'controller' => 'Fusio\\Authorization\\Revoke', 'config' => null], ['status' => 1, 'methods' => 'GET|POST', 'path' => '/authorization/token', 'controller' => 'Fusio\\Authorization\\Token', 'config' => null], ['status' => 1, 'methods' => 'GET', 'path' => '/authorization/whoami', 'controller' => 'Fusio\\Authorization\\Whoami', 'config' => null], ['status' => 1, 'methods' => 'GET', 'path' => '/doc', 'controller' => 'PSX\\Controller\\Tool\\DocumentationController::doIndex', 'config' => null], ['status' => 1, 'methods' => 'GET', 'path' => '/doc/:version/*path', 'controller' => 'PSX\\Controller\\Tool\\DocumentationController::doDetail', 'config' => null], ['status' => 1, 'methods' => 'GET|POST|PUT|DELETE', 'path' => '/', 'controller' => 'Fusio\\Controller\\SchemaApiController', 'config' => $welcomeConfig]], 'fusio_app_scope' => [['appId' => 1, 'scopeId' => 1]], 'fusio_scope_routes' => [['scopeId' => 1, 'routeId' => 1, 'allow' => 1, 'methods' => 'GET|POST|PUT|DELETE'], ['scopeId' => 1, 'routeId' => 2, 'allow' => 1, 'methods' => 'GET|POST|PUT|DELETE'], ['scopeId' => 1, 'routeId' => 3, 'allow' => 1, 'methods' => 'GET'], ['scopeId' => 1, 'routeId' => 4, 'allow' => 1, 'methods' => 'GET'], ['scopeId' => 1, 'routeId' => 5, 'allow' => 1, 'methods' => 'GET|POST|PUT|DELETE'], ['scopeId' => 1, 'routeId' => 6, 'allow' => 1, 'methods' => 'GET|POST|PUT|DELETE'], ['scopeId' => 1, 'routeId' => 7, 'allow' => 1, 'methods' => 'DELETE'], ['scopeId' => 1, 'routeId' => 8, 'allow' => 1, 'methods' => 'GET|POST|PUT|DELETE'], ['scopeId' => 1, 'routeId' => 9, 'allow' => 1, 'methods' => 'GET|POST|PUT|DELETE'], ['scopeId' => 1, 'routeId' => 10, 'allow' => 1, 'methods' => 'GET'], ['scopeId' => 1, 'routeId' => 11, 'allow' => 1, 'methods' => 'GET'], ['scopeId' => 1, 'routeId' => 12, 'allow' => 1, 'methods' => 'GET|POST|PUT|DELETE'], ['scopeId' => 1, 'routeId' => 13, 'allow' => 1, 'methods' => 'GET'], ['scopeId' => 1, 'routeId' => 14, 'allow' => 1, 'methods' => 'GET'], ['scopeId' => 1, 'routeId' => 15, 'allow' => 1, 'methods' => 'GET|POST|PUT|DELETE'], ['scopeId' => 1, 'routeId' => 16, 'allow' => 1, 'methods' => 'GET|POST|PUT|DELETE'], ['scopeId' => 1, 'routeId' => 17, 'allow' => 1, 'methods' => 'GET|POST|PUT|DELETE'], ['scopeId' => 1, 'routeId' => 18, 'allow' => 1, 'methods' => 'GET|POST|PUT|DELETE'], ['scopeId' => 1, 'routeId' => 19, 'allow' => 1, 'methods' => 'GET'], ['scopeId' => 1, 'routeId' => 20, 'allow' => 1, 'methods' => 'GET|POST|PUT|DELETE'], ['scopeId' => 1, 'routeId' => 21, 'allow' => 1, 'methods' => 'GET|POST|PUT|DELETE'], ['scopeId' => 1, 'routeId' => 22, 'allow' => 1, 'methods' => 'GET|POST|PUT|DELETE'], ['scopeId' => 1, 'routeId' => 23, 'allow' => 1, 'methods' => 'GET|POST|PUT|DELETE'], ['scopeId' => 1, 'routeId' => 24, 'allow' => 1, 'methods' => 'GET'], ['scopeId' => 1, 'routeId' => 25, 'allow' => 1, 'methods' => 'GET'], ['scopeId' => 1, 'routeId' => 26, 'allow' => 1, 'methods' => 'GET'], ['scopeId' => 1, 'routeId' => 27, 'allow' => 1, 'methods' => 'GET'], ['scopeId' => 1, 'routeId' => 28, 'allow' => 1, 'methods' => 'GET'], ['scopeId' => 1, 'routeId' => 29, 'allow' => 1, 'methods' => 'GET'], ['scopeId' => 1, 'routeId' => 30, 'allow' => 1, 'methods' => 'PUT'], ['scopeId' => 1, 'routeId' => 31, 'allow' => 1, 'methods' => 'GET|POST'], ['scopeId' => 1, 'routeId' => 32, 'allow' => 1, 'methods' => 'POST'], ['scopeId' => 1, 'routeId' => 33, 'allow' => 1, 'methods' => 'GET|POST'], ['scopeId' => 1, 'routeId' => 34, 'allow' => 1, 'methods' => 'GET'], ['scopeId' => 2, 'routeId' => 32, 'allow' => 1, 'methods' => 'POST'], ['scopeId' => 2, 'routeId' => 33, 'allow' => 1, 'methods' => 'GET|POST'], ['scopeId' => 2, 'routeId' => 34, 'allow' => 1, 'methods' => 'GET']], 'fusio_user_scope' => [['userId' => 1, 'scopeId' => 1]]];
    }
コード例 #6
0
ファイル: Collection.php プロジェクト: virusvn/fusio
 /**
  * Returns the POST response
  *
  * @param \PSX\Data\RecordInterface $record
  * @param \PSX\Api\Version $version
  * @return array|\PSX\Data\RecordInterface
  */
 protected function doCreate(RecordInterface $record, Version $version)
 {
     $this->getValidator()->validate($record);
     $appKey = Uuid::pseudoRandom();
     $appSecret = hash('sha256', OpenSsl::randomPseudoBytes(256));
     $table = $this->tableManager->getTable('Fusio\\Backend\\Table\\App');
     $table->create(array('userId' => $record->getUserId(), 'status' => $record->getStatus(), 'name' => $record->getName(), 'url' => $record->getUrl(), 'appKey' => $appKey, 'appSecret' => $appSecret, 'date' => new DateTime()));
     $appId = $table->getLastInsertId();
     // insert scopes to the app which are assigned to the user
     $this->insertDefaultScopes($appId, $record->getUserId());
     return array('success' => true, 'message' => 'App successful created');
 }
コード例 #7
0
ファイル: OpenSslTest.php プロジェクト: seytar/psx
 public function testErrorString()
 {
     $message = OpenSsl::errorString();
     $this->assertEquals('', $message);
 }
コード例 #8
0
ファイル: Version010.php プロジェクト: saakaifoundry/fusio
 public function getInstallInserts()
 {
     $parser = new Parser();
     $now = new DateTime();
     $appKey = Uuid::pseudoRandom();
     $appSecret = hash('sha256', OpenSsl::randomPseudoBytes(256));
     $password = \password_hash('0a29e5bcaa810de0ca0513d9d4ab62f1860f998a', PASSWORD_DEFAULT);
     $schema = $this->getPassthruSchema();
     $cache = $parser->parse($schema);
     $response = $this->getWelcomeResponse();
     $config = $this->getWelcomeConfig();
     return ['fusio_user' => [['status' => 1, 'name' => 'Administrator', 'password' => $password, 'date' => $now->format('Y-m-d H:i:s')]], 'fusio_app' => [['userId' => 1, 'status' => 1, 'name' => 'Backend', 'url' => 'http://fusio-project.org', 'appKey' => $appKey, 'appSecret' => $appSecret, 'date' => $now->format('Y-m-d H:i:s')]], 'fusio_connection' => [['name' => 'Native-Connection', 'class' => 'Fusio\\Connection\\Native', 'config' => null]], 'fusio_scope' => [['name' => 'backend'], ['name' => 'authorization']], 'fusio_action' => [['name' => 'Welcome', 'class' => 'Fusio\\Action\\StaticResponse', 'config' => serialize(['response' => $response]), 'date' => $now->format('Y-m-d H:i:s')]], 'fusio_schema' => [['name' => 'Passthru', 'source' => $schema, 'cache' => $cache]], 'fusio_routes' => [['status' => 1, 'methods' => 'GET|POST|PUT|DELETE', 'path' => '/backend', 'controller' => 'Fusio\\Backend\\Application\\Index', 'config' => null], ['status' => 1, 'methods' => 'GET|POST|PUT|DELETE', 'path' => '/backend/action', 'controller' => 'Fusio\\Backend\\Api\\Action\\Collection', 'config' => null], ['status' => 1, 'methods' => 'GET', 'path' => '/backend/action/list', 'controller' => 'Fusio\\Backend\\Api\\Action\\ListActions::doIndex', 'config' => null], ['status' => 1, 'methods' => 'GET', 'path' => '/backend/action/form', 'controller' => 'Fusio\\Backend\\Api\\Action\\ListActions::doDetail', 'config' => null], ['status' => 1, 'methods' => 'GET|POST|PUT|DELETE', 'path' => '/backend/action/:action_id', 'controller' => 'Fusio\\Backend\\Api\\Action\\Entity', 'config' => null], ['status' => 1, 'methods' => 'GET|POST|PUT|DELETE', 'path' => '/backend/app', 'controller' => 'Fusio\\Backend\\Api\\App\\Collection', 'config' => null], ['status' => 1, 'methods' => 'DELETE', 'path' => '/backend/app/:app_id/token/:token_id', 'controller' => 'Fusio\\Backend\\Api\\App\\Token::doRemove', 'config' => null], ['status' => 1, 'methods' => 'GET|POST|PUT|DELETE', 'path' => '/backend/app/:app_id', 'controller' => 'Fusio\\Backend\\Api\\App\\Entity', 'config' => null], ['status' => 1, 'methods' => 'GET|POST|PUT|DELETE', 'path' => '/backend/connection', 'controller' => 'Fusio\\Backend\\Api\\Connection\\Collection', 'config' => null], ['status' => 1, 'methods' => 'GET', 'path' => '/backend/connection/form', 'controller' => 'Fusio\\Backend\\Api\\Connection\\ListConnections::doDetail', 'config' => null], ['status' => 1, 'methods' => 'GET', 'path' => '/backend/connection/list', 'controller' => 'Fusio\\Backend\\Api\\Connection\\ListConnections::doIndex', 'config' => null], ['status' => 1, 'methods' => 'GET|POST|PUT|DELETE', 'path' => '/backend/connection/:connection_id', 'controller' => 'Fusio\\Backend\\Api\\Connection\\Entity', 'config' => null], ['status' => 1, 'methods' => 'GET', 'path' => '/backend/log', 'controller' => 'Fusio\\Backend\\Api\\Log\\Collection', 'config' => null], ['status' => 1, 'methods' => 'GET', 'path' => '/backend/log/:log_id', 'controller' => 'Fusio\\Backend\\Api\\Log\\Entity', 'config' => null], ['status' => 1, 'methods' => 'GET|POST|PUT|DELETE', 'path' => '/backend/routes', 'controller' => 'Fusio\\Backend\\Api\\Routes\\Collection', 'config' => null], ['status' => 1, 'methods' => 'GET|POST|PUT|DELETE', 'path' => '/backend/routes/:route_id', 'controller' => 'Fusio\\Backend\\Api\\Routes\\Entity', 'config' => null], ['status' => 1, 'methods' => 'GET|POST|PUT|DELETE', 'path' => '/backend/schema', 'controller' => 'Fusio\\Backend\\Api\\Schema\\Collection', 'config' => null], ['status' => 1, 'methods' => 'GET|POST|PUT|DELETE', 'path' => '/backend/schema/:schema_id', 'controller' => 'Fusio\\Backend\\Api\\Schema\\Entity', 'config' => null], ['status' => 1, 'methods' => 'GET', 'path' => '/backend/schema/preview/:schema_id', 'controller' => 'Fusio\\Backend\\Api\\Schema\\Preview', 'config' => null], ['status' => 1, 'methods' => 'GET|POST|PUT|DELETE', 'path' => '/backend/scope', 'controller' => 'Fusio\\Backend\\Api\\Scope\\Collection', 'config' => null], ['status' => 1, 'methods' => 'GET|POST|PUT|DELETE', 'path' => '/backend/scope/:scope_id', 'controller' => 'Fusio\\Backend\\Api\\Scope\\Entity', 'config' => null], ['status' => 1, 'methods' => 'GET|POST|PUT|DELETE', 'path' => '/backend/user', 'controller' => 'Fusio\\Backend\\Api\\User\\Collection', 'config' => null], ['status' => 1, 'methods' => 'GET|POST|PUT|DELETE', 'path' => '/backend/user/:user_id', 'controller' => 'Fusio\\Backend\\Api\\User\\Entity', 'config' => null], ['status' => 1, 'methods' => 'GET', 'path' => '/backend/dashboard/latest_requests', 'controller' => 'Fusio\\Backend\\Api\\Dashboard\\LatestRequests', 'config' => null], ['status' => 1, 'methods' => 'GET', 'path' => '/backend/dashboard/latest_apps', 'controller' => 'Fusio\\Backend\\Api\\Dashboard\\LatestApps', 'config' => null], ['status' => 1, 'methods' => 'GET', 'path' => '/backend/statistic/incoming_requests', 'controller' => 'Fusio\\Backend\\Api\\Statistic\\IncomingRequests', 'config' => null], ['status' => 1, 'methods' => 'GET', 'path' => '/backend/statistic/most_used_routes', 'controller' => 'Fusio\\Backend\\Api\\Statistic\\MostUsedRoutes', 'config' => null], ['status' => 1, 'methods' => 'GET', 'path' => '/backend/statistic/most_used_apps', 'controller' => 'Fusio\\Backend\\Api\\Statistic\\MostUsedApps', 'config' => null], ['status' => 1, 'methods' => 'GET', 'path' => '/backend/statistic/errors_per_route', 'controller' => 'Fusio\\Backend\\Api\\Statistic\\ErrorsPerRoute', 'config' => null], ['status' => 1, 'methods' => 'GET|POST|PUT|DELETE', 'path' => '/backend/account/change_password', 'controller' => 'Fusio\\Backend\\Api\\Account\\ChangePassword', 'config' => null], ['status' => 1, 'methods' => 'GET|POST', 'path' => '/backend/token', 'controller' => 'Fusio\\Backend\\Authorization\\Token', 'config' => null], ['status' => 1, 'methods' => 'POST', 'path' => '/authorization/revoke', 'controller' => 'Fusio\\Authorization\\Revoke', 'config' => null], ['status' => 1, 'methods' => 'GET|POST', 'path' => '/authorization/token', 'controller' => 'Fusio\\Authorization\\Token', 'config' => null], ['status' => 1, 'methods' => 'GET', 'path' => '/authorization/whoami', 'controller' => 'Fusio\\Authorization\\Whoami', 'config' => null], ['status' => 1, 'methods' => 'GET', 'path' => '/doc', 'controller' => 'PSX\\Controller\\Tool\\DocumentationController::doIndex', 'config' => null], ['status' => 1, 'methods' => 'GET', 'path' => '/doc/:version/*path', 'controller' => 'PSX\\Controller\\Tool\\DocumentationController::doDetail', 'config' => null], ['status' => 1, 'methods' => 'GET', 'path' => '/export/wsdl/:version/*path', 'controller' => 'PSX\\Controller\\Tool\\WsdlGeneratorController', 'config' => null], ['status' => 1, 'methods' => 'GET', 'path' => '/export/raml/:version/*path', 'controller' => 'PSX\\Controller\\Tool\\RamlGeneratorController', 'config' => null], ['status' => 1, 'methods' => 'GET', 'path' => '/export/swagger/:version/*path', 'controller' => 'PSX\\Controller\\Tool\\SwaggerGeneratorController::doDetail', 'config' => null], ['status' => 1, 'methods' => 'GET|POST|PUT|DELETE', 'path' => '/', 'controller' => 'Fusio\\Controller\\SchemaApiController', 'config' => $config]], 'fusio_app_scope' => [['appId' => 1, 'scopeId' => 1]], 'fusio_scope_routes' => [['scopeId' => 1, 'routeId' => 1, 'allow' => 1, 'methods' => 'GET|POST|PUT|DELETE'], ['scopeId' => 1, 'routeId' => 2, 'allow' => 1, 'methods' => 'GET|POST|PUT|DELETE'], ['scopeId' => 1, 'routeId' => 3, 'allow' => 1, 'methods' => 'GET'], ['scopeId' => 1, 'routeId' => 4, 'allow' => 1, 'methods' => 'GET'], ['scopeId' => 1, 'routeId' => 5, 'allow' => 1, 'methods' => 'GET|POST|PUT|DELETE'], ['scopeId' => 1, 'routeId' => 6, 'allow' => 1, 'methods' => 'GET|POST|PUT|DELETE'], ['scopeId' => 1, 'routeId' => 7, 'allow' => 1, 'methods' => 'DELETE'], ['scopeId' => 1, 'routeId' => 8, 'allow' => 1, 'methods' => 'GET|POST|PUT|DELETE'], ['scopeId' => 1, 'routeId' => 9, 'allow' => 1, 'methods' => 'GET|POST|PUT|DELETE'], ['scopeId' => 1, 'routeId' => 10, 'allow' => 1, 'methods' => 'GET'], ['scopeId' => 1, 'routeId' => 11, 'allow' => 1, 'methods' => 'GET'], ['scopeId' => 1, 'routeId' => 12, 'allow' => 1, 'methods' => 'GET|POST|PUT|DELETE'], ['scopeId' => 1, 'routeId' => 13, 'allow' => 1, 'methods' => 'GET'], ['scopeId' => 1, 'routeId' => 14, 'allow' => 1, 'methods' => 'GET'], ['scopeId' => 1, 'routeId' => 15, 'allow' => 1, 'methods' => 'GET|POST|PUT|DELETE'], ['scopeId' => 1, 'routeId' => 16, 'allow' => 1, 'methods' => 'GET|POST|PUT|DELETE'], ['scopeId' => 1, 'routeId' => 17, 'allow' => 1, 'methods' => 'GET|POST|PUT|DELETE'], ['scopeId' => 1, 'routeId' => 18, 'allow' => 1, 'methods' => 'GET|POST|PUT|DELETE'], ['scopeId' => 1, 'routeId' => 19, 'allow' => 1, 'methods' => 'GET'], ['scopeId' => 1, 'routeId' => 20, 'allow' => 1, 'methods' => 'GET|POST|PUT|DELETE'], ['scopeId' => 1, 'routeId' => 21, 'allow' => 1, 'methods' => 'GET|POST|PUT|DELETE'], ['scopeId' => 1, 'routeId' => 22, 'allow' => 1, 'methods' => 'GET|POST|PUT|DELETE'], ['scopeId' => 1, 'routeId' => 23, 'allow' => 1, 'methods' => 'GET|POST|PUT|DELETE'], ['scopeId' => 1, 'routeId' => 24, 'allow' => 1, 'methods' => 'GET'], ['scopeId' => 1, 'routeId' => 25, 'allow' => 1, 'methods' => 'GET'], ['scopeId' => 1, 'routeId' => 26, 'allow' => 1, 'methods' => 'GET'], ['scopeId' => 1, 'routeId' => 27, 'allow' => 1, 'methods' => 'GET'], ['scopeId' => 1, 'routeId' => 28, 'allow' => 1, 'methods' => 'GET'], ['scopeId' => 1, 'routeId' => 29, 'allow' => 1, 'methods' => 'GET'], ['scopeId' => 1, 'routeId' => 30, 'allow' => 1, 'methods' => 'PUT'], ['scopeId' => 1, 'routeId' => 31, 'allow' => 1, 'methods' => 'GET|POST'], ['scopeId' => 1, 'routeId' => 32, 'allow' => 1, 'methods' => 'POST'], ['scopeId' => 1, 'routeId' => 33, 'allow' => 1, 'methods' => 'GET|POST'], ['scopeId' => 1, 'routeId' => 34, 'allow' => 1, 'methods' => 'GET'], ['scopeId' => 2, 'routeId' => 32, 'allow' => 1, 'methods' => 'POST'], ['scopeId' => 2, 'routeId' => 33, 'allow' => 1, 'methods' => 'GET|POST'], ['scopeId' => 2, 'routeId' => 34, 'allow' => 1, 'methods' => 'GET']], 'fusio_user_scope' => [['userId' => 1, 'scopeId' => 1]]];
 }