-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathapi_setup.php
More file actions
86 lines (67 loc) · 2.71 KB
/
Copy pathapi_setup.php
File metadata and controls
86 lines (67 loc) · 2.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<?php
namespace HamletCMS;
use rbwebdesigns\core\Request;
/****************************************************************
HamletCMS API Start Point
****************************************************************/
HamletCMS::$function = 'api';
// Create custom request, shifting the query path along one.
// First part of query variable is the controller name.
$queryPath = $_GET['query'] ?? '';
$queryParts = explode('/', $queryPath);
$controllerName = $queryParts[0] ?? '';
// Set the correct controller.
$_REQUEST['p'] = $controllerName;
// Set the correct query.
if (count($queryParts) > 1) {
$_REQUEST['query'] = implode('/', array_slice($queryParts, 1));
}
else {
$_REQUEST['query'] = '';
}
$request = HamletCMS::request();
$response = HamletCMS::response();
/****************************************************************
Get content
****************************************************************/
$route = HamletCMS::pathMatch();
$routeIsValid = $route &&
array_key_exists('controller', $route) &&
array_key_exists('action', $route);
if (!$routeIsValid) {
$response->setBody('{ "success": false, "errorMessage": "API method not found" }');
$response->code(404);
$response->addHeader('Content-Type', 'application/json');
$response->writeBody();
exit;
}
$permissionsModel = HamletCMS::model('permissions');
$blogModel = HamletCMS::model('blogs');
$blogID = $request->getInt('blogID', false);
if ($blogID && !$blog = $blogModel->getBlogById($blogID)) {
$response->setBody('{ "success": false, "errorMessage": "Blog not found" }');
$response->code(406);
$response->addHeader('Content-Type', 'application/json');
$response->writeBody();
exit;
}
// Check permissions
if (array_key_exists('permissions', $route) && count($route['permissions'])) {
foreach ($route['permissions'] as $permissionName) {
if (!$permissionsModel->userHasPermission($permissionName, $blog->id) ) {
$response->setBody('{ "success": false, "errorMessage": "Access denied" }');
$response->code(403);
$response->addHeader('Content-Type', 'application/json');
$response->writeBody();
exit;
}
}
}
HamletCMS::$blogID = $blogID;
$controller = new $route['controller']();
$action = $route['action'];
$controller->$action();
// TBD how to handle CORS
// $this->response->addHeader('Access-Control-Allow-Origin', '*');
$response->addHeader('Content-Type', 'application/json');
$response->writeBody();