<?php http_response_code(404); die(1); // it is a template, it is protected to be called directly ?> 
/** @noinspection PhpRedundantVariableDocTypeInspection */ 
 
/** 
 * It is the enrouter of the application.<br> 
 * <b>This file is generated by the CLI</b> 
 * @see           https://github.com/EFTEC/ApiAssemblerRuntime 
 * @package       eftec 
 * @author        Jorge Castro Castillo 
 * @copyright (c) Jorge Castro C. Dual Licence GPL-v3 and Commercial  https://github.com/EFTEC/ApiAssemblerRuntime 
 * @version       __version__ 
 */ 
use eftec\_BasePdoOneRepo; 
use eftec\apiassembler\ApiAssemblerRuntime; 
use eftec\CacheOne; 
use eftec\authone\AuthOne; 
use eftec\PdoOne; 
use eftec\routeone\RouteOne; 
use eftec\ValidationOne; 
//use Exception; 
include '__composerpath__/autoload.php'; 
 
 
 
config(); 
 
/** @noinspection PhpConditionAlreadyCheckedInspection 
 * @noinspection PhpUnhandledExceptionInspection 
 * @noinspection HtmlUnknownTarget 
 * @noinspection PhpUnusedParameterInspection 
 * @noinspection PhpIfWithCommonPartsInspection 
 */ 
function config() 
{ 
    $apiAssemblerRuntime = new ApiAssemblerRuntime(); 
    $apiAssemblerRuntime->init('__authtype__'); // note: this line could end the execution. 
    // todo: edit your configurations here 
    if (gethostname() __questiondev__== '__machineid__') { 
        // ************************************ 
        // * developer machine configuration  * 
        // ************************************ 
        // [EDIT:content_dev] you can edit this part 
        // [/EDIT] end of edit part 
        $apiAssemblerRuntime->debug=true; 
        define('DATABASE_CONFIG', [ 
            'databaseType' => '__databasetype__', // 'mysql','sqlsrv','oci' 
            'server' => '__server__', 
            'user' => '__user__', 
            'pwd' => '__password__', 
            'db' => '__database__', 
        ]); 
        $encryption = __questionencryption__; 
        define('ENCRYPTION', [ 
            'password' => '__encryptionpassword__', 
            'salt' => '__encryptionsalt__', 
            'encMethod' => '__encryptionmethod__' 
        ]); 
 
        $baseUrl = '__baseurl_dev__'; 
        /** @var string $templateUrl the expected url (starting from the base) */ 
        $templateUrl = '__templateurl__/{controller}/{action}/{id}/{idparent}'; 
        /** @var string $templateClass the class to be called when we call a controller */ 
        $templateClass = '__namespaceapi__\{controller}ApiController'; 
        $debug = true; 
        $cache = __questioncache__; 
        if ($cache) { 
            define('CACHE_CONFIG', [ 
                'type' => '__cache_type__', 
                'server' => '__cache_server__', 
                'schema' => '__cache_schema__', 
                'port' => '__cache_port__', 
                'user' => '__cache_user__', 
                'password' => '__cache_password__' 
            ]); 
        } 
    } else { 
        // ************************************ 
        // * production machine configuration * 
        // ************************************ 
        // [EDIT:content_dev] you can edit this part 
        // [/EDIT] end of edit part 
        $apiAssemblerRuntime->debug=true; 
        define('DATABASE_CONFIG', [ 
            'databaseType' => '__databasetype__', // 'mysql','sqlsrv','oci' 
            'server' => '__server__', 
            'user' => '__user__', 
            'pwd' => '__password__', 
            'db' => '__database__', 
        ]); 
        $encryption = __questionencryption__; 
        define('ENCRYPTION', [ 
            'password' => '__encryptionpassword__', 
            'salt' => '__encryptionsalt__', 
            'encMethod' => '__encryptionmethod__' 
        ]); 
        $baseUrl = '__baseurl_prod__'; 
        /** @var string $templateUrl the expected url (starting from the base) */ 
        $templateUrl = '__templateurl__/{controller}/{action}/{id}/{idparent}'; 
        /** @var string $templateClass the class to be called when we call a controller */ 
        $templateClass = '__namespaceapi__\{controller}ApiController'; 
        $debug = false; 
        $cache = __questioncache__; 
        if ($cache) { 
            define('CACHE_CONFIG', [ 
                'type' => '__cache_type__', 
                'server' => '__cache_server__', 
                'schema' => '__cache_schema__', 
                'port' => '__cache_port__', 
                'user' => '__cache_user__', 
                'password' => '__cache_password__' 
            ]); 
        } 
    } 
    // end configurations 
 
 
    // database connection 
 
    // [EDIT:content_database] you can edit this part 
    if(PHP_MAJOR_VERSION>=8) { 
        $apiAssemblerRuntime->pdo = new PdoOne(...DATABASE_CONFIG); 
        if ($encryption) { 
            $apiAssemblerRuntime->pdo->setEncryption(...ENCRYPTION); 
        } 
        $apiAssemblerRuntime->pdo->logLevel = $debug === true ? 2 : 0; 
        if ($cache) { 
            $apiAssemblerRuntime->pdo->cacheService = new CacheOne(...CACHE_CONFIG); 
        } 
    } else { 
        $apiAssemblerRuntime->pdo = new PdoOne(...array_values(DATABASE_CONFIG)); 
        if ($encryption) { 
            $apiAssemblerRuntime->pdo->setEncryption(...array_values(ENCRYPTION)); 
        } 
        $apiAssemblerRuntime->pdo->logLevel = $debug === true ? 2 : 0; 
        if ($cache) { 
            $apiAssemblerRuntime->pdo->cacheService = new CacheOne(...array_values(CACHE_CONFIG)); 
        } 
    } 
    // [/EDIT] end of edit content_database 
    // [EDIT:content_auth] you can edit this part 
    /** 
     * This function authenticate some operation and returns true if it is allowed or false if not.<br> 
     * <b>$api->routeOne</b>:  You can obtain information about the router such as input values, header, body, parameters, 
     * url,etc.<br> 
     * <b>$api->pdo</b>:  You can access to the database and read,insert, etc.<br> 
     * <b>$api->validationOne</b>:  With this service, you can validate objects, variables, etc.<br> 
     * <b>$api->pdo->cacheService</b>: You can access and use the cache service<br> 
     * 
     * @param ApiAssemblerRuntime $api      An instance of the ApiAssemblerRuntime 
     * @param string|null         $action   It contains the name of the method called<br> 
     *                                      Example "api\api\CityApiController::listallAction" 
     * @param mixed               $id       The id of the current route.<br> 
     *                                      Example: http://localhost/api/Customer/1  $id=1 
     * @param mixed               $idparent the  id parent of the current route<br> 
     *                                      Example: http://localhost/api/Customer/1/2  $id=1,$idparent=2 
     * @param mixed               $event    the event (if any)<br> 
     *                                      Example: http://localhost/api/Customer/?_event=click $event=click 
     * @return bool true if it passes the validation. Otherwise, it returns false. 
     * @throws Exception 
     * @link https://github.com/EFTEC/RouteOne 
     * @link https://github.com/EFTEC/PdoOne 
     * @link https://github.com/EFTEC/ValidationOne 
     * @link https://github.com/EFTEC/CacheOne 
     */ 
    function myAuth(ApiAssemblerRuntime $api,?string $action, $id = null, $idparent = null, $event = null) : bool { 
        $isValid=true; 
        //todo: edit your authentication here 
        // 
        // Example of authentication using Auth instance and tokens. 
        // Uncomment those lines if you want a default authentication. 
        /* 
            if($action==='User/createauth') { 
                // this action is allowed without authentication. 
                return true; 
            } 
            $auth=$api->validateAuth(); 
            $auth !== null; 
        */ 
        return $isValid; 
    } 
    if (true) { 
        // We use the method defined in router_auth.php to do the authentication. 
        // Why? It is because this file could be override, so we write the logic in a file that it is never override. 
        $apiAssemblerRuntime->setAuthMethod('myAuth'); 
    } 
    // [/EDIT] end of edit content_auth 
    try { 
        // optionally: if you have a Pdo instance, then you could use the next line: 
        //             $apiAssemblerRuntime->pdo->conn1=$pdoInstance; 
        $apiAssemblerRuntime->pdo->open(); 
 
    } catch (Exception $ex) { 
        $apiAssemblerRuntime->errorShow(500, $ex->getMessage(), 'connecting'); 
    } 
 
 
    // for the routing 
    $apiAssemblerRuntime->routeOne = new RouteOne($baseUrl); 
    $apiAssemblerRuntime->routeOne->addPath($templateUrl); 
    $apiAssemblerRuntime->routeOne->fetchPath(); 
 
    // for the validation 
    $apiAssemblerRuntime->validationOne = new ValidationOne(); 
    $apiAssemblerRuntime->validationOne->debug = $debug; 
 
    // for the authentication 
    if('__authtype__'!=='none' && '__authtype__'!=='') { 
        $apiAssemblerRuntime->auth=new AuthOne('__authtype__','__authstore_type__',null,null); 
        $apiAssemblerRuntime->isBear=__authtype_bear__; 
        $apiAssemblerRuntime->auth->setEncryptConfigUsingPDO(); // use the same paremters of encryption than PdoOne. 
        $apiAssemblerRuntime->auth->setUserStoreConfig('__authstore_table__','__authstore_user__','__authstore_password__'); 
    } 
 
    // the routing calls the corresponding class (if any). 
    if ($apiAssemblerRuntime->routeOne->controller) { 
        try { 
            $apiAssemblerRuntime->routeOne->callObjectEx($templateClass, true 
                , '{action}Action', '{action}Action{verb}', '{action}Action{verb}', ['id', 'idparent', 'event'] 
                , [$apiAssemblerRuntime]); 
        } catch (Exception $ex) { 
            $apiAssemblerRuntime->errorShow(401, $ex->getMessage(), 'calling'); 
        } 
    } else if ($debug) { 
        echo '<h1 style="background-color:blue; color:white; padding: 4px">Running DEBUG VERSION __version__</h1>'; 
        __links__ 
    } else { 
        $apiAssemblerRuntime->errorShow(401, 'no controller selected', 'calling'); 
    } 
} 
 
 
 
 |