-
Notifications
You must be signed in to change notification settings - Fork 375
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
20 changed files
with
819 additions
and
31,233 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,7 @@ | ||
<?php | ||
include ('config.php'); | ||
include (APP_BASE_PATH.'rest.php'); | ||
if (isset($_REQUEST['method']) && isset($_REQUEST['url'])) { | ||
include (APP_BASE_PATH.'api.php'); | ||
} else { | ||
include (APP_BASE_PATH.'rest.php'); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
<?php | ||
define('CLIENT_PATH',dirname(__FILE__)); | ||
include ("config.base.php"); | ||
include ("include.common.php"); | ||
include("server.includes.inc.php"); | ||
|
||
if(\Classes\SettingsManager::getInstance()->getSetting('Api: REST Api Enabled') == '1') { | ||
|
||
\Utils\LogManager::getInstance()->info("Request: " . $_REQUEST); | ||
|
||
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { | ||
http_response_code(200); | ||
exit(); | ||
} | ||
|
||
define('REST_API_PATH', '/'); | ||
|
||
$echoRoute = \Classes\Macaw::get(REST_API_PATH . 'echo', function () { | ||
echo "Echo " . rand(); | ||
}); | ||
|
||
\Utils\LogManager::getInstance()->debug('Api registered URI: '.$echoRoute); | ||
|
||
$moduleManagers = \Classes\BaseService::getInstance()->getModuleManagers(); | ||
|
||
foreach ($moduleManagers as $moduleManagerObj) { | ||
|
||
$moduleManagerObj->setupRestEndPoints(); | ||
} | ||
$method = $_SERVER['REQUEST_METHOD']; | ||
if (strtoupper($method) === 'GET') { | ||
\Classes\IceRoute::dispatch($_GET['url'], $method); | ||
} else { | ||
$method = strtoupper($_REQUEST['method']); | ||
\Classes\IceRoute::dispatch($_REQUEST['url'], $method); | ||
} | ||
|
||
|
||
}else{ | ||
echo "REST Api is not enabled. Please set 'Api: REST Api Enabled' setting to true"; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,177 @@ | ||
<?php | ||
|
||
namespace Classes; | ||
|
||
/** | ||
* @method static IceRoute get(string $route, Callable $callback) | ||
* @method static IceRoute post(string $route, Callable $callback) | ||
* @method static IceRoute put(string $route, Callable $callback) | ||
* @method static IceRoute delete(string $route, Callable $callback) | ||
* @method static IceRoute options(string $route, Callable $callback) | ||
* @method static IceRoute head(string $route, Callable $callback) | ||
*/ | ||
class IceRoute | ||
{ | ||
|
||
public static $halts = false; | ||
|
||
public static $routes = array(); | ||
|
||
public static $methods = array(); | ||
|
||
public static $callbacks = array(); | ||
|
||
public static $patterns = array( | ||
':any' => '[^/]+', | ||
':num' => '[0-9]+', | ||
':all' => '.*' | ||
); | ||
|
||
public static $error_callback; | ||
|
||
/** | ||
* Defines a route w/ callback and method | ||
*/ | ||
public static function __callstatic($method, $params) | ||
{ | ||
|
||
$uri = $params[0][0]; | ||
$callback = $params[0][1]; | ||
|
||
array_push(self::$routes, $uri); | ||
array_push(self::$methods, strtoupper($method)); | ||
array_push(self::$callbacks, $callback); | ||
|
||
return $uri; | ||
} | ||
|
||
/** | ||
* Defines callback if route is not found | ||
*/ | ||
public static function error($callback) | ||
{ | ||
self::$error_callback = $callback; | ||
} | ||
|
||
public static function haltOnMatch($flag = true) | ||
{ | ||
self::$halts = $flag; | ||
} | ||
|
||
/** | ||
* Runs the callback for the given request | ||
*/ | ||
public static function dispatch($uri, $method) | ||
{ | ||
|
||
$searches = array_keys(static::$patterns); | ||
$replaces = array_values(static::$patterns); | ||
|
||
$found_route = false; | ||
|
||
self::$routes = str_replace('//', '/', self::$routes); | ||
|
||
// check if route is defined without regex | ||
if (in_array($uri, self::$routes)) { | ||
$route_pos = array_keys(self::$routes, $uri); | ||
foreach ($route_pos as $route) { | ||
//using an ANY option to match both GET and POST requests | ||
if (self::$methods[$route] == $method || self::$methods[$route] == 'ANY') { | ||
$found_route = true; | ||
|
||
//if route is not an object | ||
if (!is_object(self::$callbacks[$route])) { | ||
//grab all parts based on a / separator | ||
$parts = explode('/', self::$callbacks[$route]); | ||
|
||
//collect the last index of the array | ||
$last = end($parts); | ||
|
||
//grab the controller name and method call | ||
$segments = explode('@', $last); | ||
|
||
//instanitate controller | ||
$controller = new $segments[0](); | ||
|
||
//call method | ||
$controller->$segments[1](); | ||
|
||
if (self::$halts) { | ||
return; | ||
} | ||
} else { | ||
//call closure | ||
call_user_func(self::$callbacks[$route]); | ||
|
||
if (self::$halts) { | ||
return; | ||
} | ||
} | ||
} | ||
} | ||
} else { | ||
// check if defined with regex | ||
$pos = 0; | ||
foreach (self::$routes as $route) { | ||
if (strpos($route, ':') !== false) { | ||
$route = str_replace($searches, $replaces, $route); | ||
} | ||
|
||
if (preg_match('#^' . $route . '$#', $uri, $matched)) { | ||
if (self::$methods[$pos] == $method) { | ||
$found_route = true; | ||
|
||
array_shift($matched); //remove $matched[0] as [1] is the first parameter. | ||
|
||
|
||
if (!is_object(self::$callbacks[$pos])) { | ||
//grab all parts based on a / separator | ||
$parts = explode('/', self::$callbacks[$pos]); | ||
|
||
//collect the last index of the array | ||
$last = end($parts); | ||
|
||
//grab the controller name and method call | ||
$segments = explode('@', $last); | ||
|
||
//instanitate controller | ||
$controller = new $segments[0](); | ||
|
||
//fix multi parameters | ||
if (!method_exists($controller, $segments[1])) { | ||
echo "controller and action not found"; | ||
} else { | ||
call_user_func_array(array($controller, $segments[1]), $matched); | ||
} | ||
|
||
//call method and pass any extra parameters to the method | ||
// $controller->$segments[1](implode(",", $matched)); | ||
|
||
if (self::$halts) { | ||
return; | ||
} | ||
} else { | ||
call_user_func_array(self::$callbacks[$pos], $matched); | ||
|
||
if (self::$halts) { | ||
return; | ||
} | ||
} | ||
} | ||
} | ||
$pos++; | ||
} | ||
} | ||
|
||
// run the error callback if the route was not found | ||
if ($found_route == false) { | ||
if (!self::$error_callback) { | ||
self::$error_callback = function () { | ||
header($_SERVER['SERVER_PROTOCOL']." 404 Not Found"); | ||
echo '404'; | ||
}; | ||
} | ||
call_user_func(self::$error_callback); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.