Passed
Push — develop ( 6305d1...602320 )
by Jens
02:48
created

CmsComponent   D

Complexity

Total Complexity 149

Size/Duplication

Total Lines 452
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Importance

Changes 24
Bugs 0 Features 17
Metric Value
c 24
b 0
f 17
dl 0
loc 452
rs 4.8717
wmc 149
lcom 1
cbo 4

6 Methods

Rating   Name   Duplication   Size   Complexity  
A run() 0 15 1
B checkLogin() 0 30 5
A showLogin() 0 7 1
F routing() 0 340 136
A checkWhiteList() 0 10 3
A checkBlackList() 0 10 3

How to fix   Complexity   

Complex Class

Complex classes like CmsComponent often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes. You can also have a look at the cohesion graph to spot any un-connected, or weakly-connected components.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

While breaking up the class, it is a good idea to analyze how other classes use CmsComponent, and based on these observations, apply Extract Interface, too.

1
<?php
2
namespace library\components
3
{
4
5
	use library\crypt\Crypt;
6
	use library\storage\Storage;
7
8
	class CmsComponent extends BaseComponent
9
	{
10
		/**
11
		 * @var \library\storage\Storage
12
		 */
13
		protected $storage;
14
		/**
15
		 * @var string
16
		 */
17
		protected $invalidCredentialsMsg = 'Invalid username / password combination';
18
19
		/**
20
		 * @param \library\storage\Storage $storage
21
		 *
22
		 * @return void
23
		 */
24
		public function run(Storage $storage)
25
		{
26
			$this->parameters['mainNavClass'] = 'default';
27
			$this->storage = $storage;
28
29
			$remoteAddress = $_SERVER['REMOTE_ADDR'];
30
			$this->checkWhiteList($remoteAddress);
31
			$this->checkBlackList($remoteAddress);
32
33
			$this->checkLogin();
34
35
			$this->parameters['userRights'] = $_SESSION['cloudcontrol']->rights;
36
37
			$this->routing();
38
		}
39
40
		/**
41
		 * See if a user is logged or wants to log in and
42
		 * takes appropriate actions.
43
		 *
44
		 * @throws \Exception
45
		 */
46
		protected function checkLogin()
47
		{
48
			$request = $this->request;
49
			
50
			if (!isset($_SESSION['cloudcontrol'])) {
51
				if (isset($request::$post['username'], $request::$post['password'])) {
52
					$user = $this->storage->getUserByUsername($request::$post['username']);
53
					$crypt = new Crypt();
54
					if (empty($user)) {
55
						$crypt->encrypt($request::$post['password'], 16); // Buy time, to avoid brute forcing
56
						$this->parameters['errorMsg'] = $this->invalidCredentialsMsg;
57
						$this->showLogin();
58
					} else {
59
						$salt = $user->salt;
60
						$password = $user->password;
61
						
62
						$passwordCorrect = $crypt->compare($request::$post['password'], $password, $salt);
63
						
64
						if ($passwordCorrect) {
65
							$_SESSION['cloudcontrol'] = $user;
66
						} else {
67
							$this->parameters['errorMsg'] = $this->invalidCredentialsMsg;
68
							$this->showLogin();
69
						}
70
					}
71
				} else {
72
					$this->showLogin();
73
				}
74
			}
75
		}
76
77
		/**
78
		 * Overrides normal behaviour and only renders the
79
		 * login screen
80
		 *
81
		 * @throws \Exception
82
		 */
83
		protected function showLogin()
84
		{
85
			$loginTemplatePath = 'cms/login';
86
			$this->renderTemplate($loginTemplatePath);
87
			ob_end_flush();
88
			exit;
89
		}
90
91
		/**
92
		 * As an exception, to keep the initial file structure simple
93
		 * the cms implements it's own routing, apart from the regular sitemap functionality
94
		 *
95
		 * @throws \Exception
96
		 */
97
		protected function routing()
98
		{
99
			$request = $this->request;
100
101
			// TODO Use regex match parameter instead of calculating relative uri
102
			$pos = strpos($request::$relativeUri, $this->parameters['cmsPrefix']);
103
			if ($pos !== false) {
104
				$relativeCmsUri = substr_replace($request::$relativeUri, '', $pos, strlen($this->parameters['cmsPrefix']));
105
			} else {
106
				$relativeCmsUri = '/';
107
			}
108
			
109
			$template = null;
110
111
			$userRights = $_SESSION['cloudcontrol']->rights;
112
			
113
			if ($relativeCmsUri == '' || $relativeCmsUri == '/') {
114
				$template = 'cms/dashboard';
115
			} elseif ($relativeCmsUri == '/documents' && in_array('documents', $userRights)) {
116
				$template = 'cms/documents';
117
				$this->parameters['documents'] = $this->storage->getDocuments();
118
				$this->parameters['mainNavClass'] = 'documents';
119
			} elseif ($relativeCmsUri == '/documents.json') {
120
				header('Content-type:application/json');
121
				die(json_encode($this->storage->getDocuments()));
122
			} elseif ($relativeCmsUri == '/documents/new-folder' && isset($request::$get['path']) && in_array('documents', $userRights)) {
123
				$template = 'cms/documents/folder-form';
124
				$this->parameters['mainNavClass'] = 'documents';
125
				if (isset($request::$post['title'], $request::$post['path'])) {
126
					$this->storage->addDocumentFolder($request::$post);
127
					header('Location: ' . $request::$subfolders . $this->parameters['cmsPrefix'] . '/documents');
128
					exit;
129
				}
130
			} elseif ($relativeCmsUri == '/documents/new-document' && isset($request::$get['path']) && in_array('documents', $userRights)) {
131
				$template = 'cms/documents/document-form';
132
				$this->parameters['mainNavClass'] = 'documents';
133
				$this->parameters['smallestImage'] = $this->storage->getSmallestImageSet()->slug;
134
				if (isset($request::$get['documentType'])) {
135
					if (isset($request::$post['title'], $request::$get['documentType'], $request::$get['path'])) {
136
						$this->storage->addDocument($request::$post);
137
						header('Location: ' . $request::$subfolders . $this->parameters['cmsPrefix'] . '/documents');
138
						exit;
139
					}
140
					$this->parameters['documentType'] = $this->storage->getDocumentTypeBySlug($request::$get['documentType'], true);
141
					$this->parameters['bricks'] = $this->storage->getBricks();
142
				} else {
143
					$this->parameters['documentTypes'] = $this->storage->getDocumentTypes();
144
				}
145
			} elseif ($relativeCmsUri == '/documents/edit-document' && isset($request::$get['slug']) && in_array('documents', $userRights)) {
146
				$template = 'cms/documents/document-form';
147
				$this->parameters['mainNavClass'] = 'documents';
148
				$this->parameters['smallestImage'] = $this->storage->getSmallestImageSet()->slug;
149
				if (isset($request::$post['title'], $request::$get['slug'])) {
150
					$this->storage->saveDocument($request::$post);
151
					header('Location: ' . $request::$subfolders . $this->parameters['cmsPrefix'] . '/documents');
152
					exit;
153
				}
154
				$this->parameters['document'] = $this->storage->getDocumentBySlug($request::$get['slug']);
155
				$request::$get['path'] = $request::$get['slug'];
156
				$this->parameters['documentType'] = $this->storage->getDocumentTypeBySlug($this->parameters['document']->documentTypeSlug, true);
157
				$this->parameters['bricks'] = $this->storage->getBricks();
158
			} elseif ($relativeCmsUri == '/documents/get-brick' && isset($request::$get['slug']) && in_array('documents', $userRights)) {
159
				$this->parameters['smallestImage'] = $this->storage->getSmallestImageSet()->slug;
160
				$this->template = 'cms/documents/brick';
161
				$this->parameters['brick'] = $this->storage->getBrickBySlug($request::$get['slug']);
162
				$this->parameters['static'] = $request::$get['static'] === 'true';
163
				if (isset($request::$get['myBrickSlug'])) {
164
					$this->parameters['myBrickSlug'] = $request::$get['myBrickSlug'];
165
				}
166
				$result = new \stdClass();
167
				$result->body = $this->renderTemplate('cms/documents/brick');
168
				$result->rteList = isset($GLOBALS['rteList']) ? $GLOBALS['rteList'] : array();
169
				ob_clean();
170
				header('Content-type: application/json');
171
				die(json_encode($result));
172
			} else if ($relativeCmsUri == '/documents/edit-folder' && isset($request::$get['slug']) && in_array('documents', $userRights)) {
173
174
				$template = 'cms/documents/folder-form';
175
				$folder = $this->storage->getDocumentFolderBySlug($request::$get['slug']);
176
177
				$path = $request::$get['slug'];
178
				$path = explode('/', $path);
179
				array_pop($path);
180
				$path = implode('/', $path);
181
182
				$request::$get['path'] = '/' . $path;
183
184
				if (isset($request::$post['title'], $request::$post['content'])) {
185
					$this->storage->saveDocumentFolder($request::$post);
186
					header('Location: ' . $request::$subfolders . $this->parameters['cmsPrefix'] . '/documents');
187
					exit;
188
				}
189
190
				$this->parameters['mainNavClass'] = 'documents';
191
				$this->parameters['folder'] = $folder;
192
			} else if ($relativeCmsUri == '/documents/delete-document' && isset($request::$get['slug']) && in_array('documents', $userRights)) {
193
				$this->storage->deleteDocumentBySlug($request::$get['slug']);
194
				header('Location: ' . $request::$subfolders . $this->parameters['cmsPrefix'] . '/documents');
195
				exit;
196
			} else if ($relativeCmsUri == '/documents/delete-folder' && isset($request::$get['slug']) && in_array('documents', $userRights)) {
197
				$this->storage->deleteDocumentFolderBySlug($request::$get['slug']);
198
				header('Location: ' . $request::$subfolders . $this->parameters['cmsPrefix'] . '/documents');
199
				exit;
200
			} elseif ($relativeCmsUri == '/sitemap' && in_array('sitemap', $userRights)) {
201
				$template = 'cms/sitemap';
202
				if (isset($request::$post['save'])) {					
203
					$this->storage->saveSitemap($request::$post);
204
				}
205
				$this->parameters['mainNavClass'] = 'sitemap';
206
				$this->parameters['sitemap'] = $this->storage->getSitemap();
207
			} elseif ($relativeCmsUri == '/sitemap/new' && in_array('sitemap', $userRights)) {
208
				$template = 'cms/sitemap/form';
209
				$this->parameters['mainNavClass'] = 'sitemap';
210
				if (isset($request::$post['title'], $request::$post['template'], $request::$post['component'])) {
211
					$this->storage->addSitemapItem($request::$post);
212
					header('Location: ' . $request::$subfolders . $this->parameters['cmsPrefix'] . '/sitemap');
213
					exit;
214
				}
215
			} elseif ($relativeCmsUri == '/sitemap/edit' && isset($request::$get['slug']) && in_array('sitemap', $userRights)) {
216
				$template = 'cms/sitemap/form';
217
				$this->parameters['mainNavClass'] = 'sitemap';
218
				$sitemapItem = $this->storage->getSitemapItemBySlug($request::$get['slug']);
219
				if (isset($request::$post['title'], $request::$post['template'], $request::$post['component'])) {
220
					$this->storage->saveSitemapItem($request::$get['slug'], $request::$post);
221
					header('Location: ' . $request::$subfolders . $this->parameters['cmsPrefix'] . '/sitemap');
222
					exit;
223
				}
224
				$this->parameters['sitemapItem'] = $sitemapItem;
225
			} elseif ($relativeCmsUri == '/sitemap/delete' && isset($request::$get['slug']) && in_array('sitemap', $userRights)) {
226
				$this->storage->deleteSitemapItemBySlug($request::$get['slug']);
227
				header('Location: ' . $request::$subfolders . $this->parameters['cmsPrefix'] . '/sitemap');
228
				exit;
229
			} elseif ($relativeCmsUri == '/images' && in_array('images', $userRights)) {
230
				$template = 'cms/images';
231
				$this->parameters['mainNavClass'] = 'images';
232
				$this->parameters['images'] = $this->storage->getImages();
233
				$this->parameters['smallestImage'] = $this->storage->getSmallestImageSet()->slug;
234
			} elseif ($relativeCmsUri == '/images.json') {
235
				header('Content-type:application/json');
236
				die(json_encode($this->storage->getImages()));
237
			} elseif ($relativeCmsUri == '/images/new' && in_array('images', $userRights)) {
238
				$template = 'cms/images/form';
239
				$this->parameters['mainNavClass'] = 'images';
240
				if (isset($_FILES['file'])) {
241
					$this->storage->addImage($_FILES['file']);
242
					header('Location: ' . $request::$subfolders . $this->parameters['cmsPrefix'] . '/images');
243
					exit;
244
				}
245
			} elseif ($relativeCmsUri == '/images/delete' && isset($request::$get['file']) && in_array('images', $userRights)) {
246
				$this->storage->deleteImageByName($request::$get['file']);
247
				header('Location: ' . $request::$subfolders . $this->parameters['cmsPrefix'] . '/images');
248
				exit;
249
			} elseif ($relativeCmsUri == '/images/show' && isset($request::$get['file']) && in_array('images', $userRights)) {
250
				$template = 'cms/images/show';
251
				$this->parameters['mainNavClass'] = 'images';
252
				$this->parameters['image'] = $this->storage->getImageByName($request::$get['file']);
253
			} elseif ($relativeCmsUri == '/files' && in_array('files', $userRights)) {
254
				$template = 'cms/files';
255
				$this->parameters['mainNavClass'] = 'files';
256
				$this->parameters['files'] = $this->storage->getFiles();
257
			} elseif ($relativeCmsUri == '/files.json') {
258
				header('Content-type:application/json');
259
				die(json_encode($this->storage->getFiles()));
260
			} elseif ($relativeCmsUri == '/files/new' && in_array('files', $userRights)) {
261
				$template = 'cms/files/form';
262
				$this->parameters['mainNavClass'] = 'files';
263
				if (isset($_FILES['file'])) {
264
					$this->storage->addFile($_FILES['file']);
265
					header('Location: ' . $request::$subfolders . $this->parameters['cmsPrefix'] . '/files');
266
					exit;
267
				}
268
			} elseif ($relativeCmsUri == '/files/get' && isset($request::$get['file']) && in_array('files', $userRights)) {
269
				$file = $this->storage->getFileByName($request::$get['file']);
270
				$path = realpath(__DIR__ . '/../../www/files/');
271
				$quoted = sprintf('"%s"', addcslashes(basename($path . '/' . $file->file), '"\\'));
272
				$size   = filesize($path . '/' . $file->file);
273
274
				header('Content-Description: File Transfer');
275
				header('Content-Type: ' . $file->type);
276
				header('Content-Disposition: attachment; filename=' . $quoted);
277
				header('Content-Transfer-Encoding: binary');
278
				header('Connection: Keep-Alive');
279
				header('Expires: 0');
280
				header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
281
				header('Pragma: public');
282
				header('Content-Length: ' . $size);
283
284
				readfile($path . '/' . $file->file);
285
				exit;
286
			} elseif ($relativeCmsUri == '/files/delete' && isset($request::$get['file']) && in_array('files', $userRights)) {
287
				$this->storage->deleteFileByName($request::$get['file']);
288
				header('Location: ' . $request::$subfolders . $this->parameters['cmsPrefix'] . '/files');
289
				exit;
290
			} elseif ($relativeCmsUri == '/configuration' && in_array('configuration', $userRights)) {
291
				$template = 'cms/configuration';
292
				$this->parameters['mainNavClass'] = 'configuration';
293
			} elseif ($relativeCmsUri == '/configuration/users' && in_array('configuration', $userRights)) {
294
				$template = 'cms/configuration/users';
295
				$this->parameters['mainNavClass'] = 'configuration';
296
				$this->parameters['users'] = $this->storage->getUsers();
297
			} elseif ($relativeCmsUri == '/configuration/users/new' && in_array('configuration', $userRights)) {
298
				$template = 'cms/configuration/users-form';
299
				$this->parameters['mainNavClass'] = 'configuration';
300
				if (isset($_POST['username'])) {
301
					$this->storage->addUser($request::$post);
302
					header('Location: ' . $request::$subfolders . $this->parameters['cmsPrefix'] . '/configuration/users');
303
					exit;
304
				}
305
			} elseif ($relativeCmsUri == '/configuration/users/delete' && isset($request::$get['slug']) && in_array('configuration', $userRights)) {
306
				$this->storage->deleteUserBySlug($request::$get['slug']);
307
				header('Location: ' . $request::$subfolders . $this->parameters['cmsPrefix'] . '/configuration/users');
308
				exit;
309
			} elseif ($relativeCmsUri == '/configuration/users/edit' && isset($request::$get['slug']) && in_array('configuration', $userRights)) {
310
				$template = 'cms/configuration/users-form';
311
				$this->parameters['mainNavClass'] = 'configuration';
312
				$this->parameters['user'] = $this->storage->getUserBySlug($request::$get['slug']);
313
				if (isset($_POST['username'])) {
314
					$this->storage->saveUser($request::$get['slug'], $request::$post);
315
					header('Location: ' . $request::$subfolders . $this->parameters['cmsPrefix'] . '/configuration/users');
316
					exit;
317
				}
318
			} elseif ($relativeCmsUri == '/configuration/document-types' && in_array('configuration', $userRights)) {
319
				$template = 'cms/configuration/document-types';
320
				$this->parameters['mainNavClass'] = 'configuration';
321
				$this->parameters['documentTypes'] = $this->storage->getDocumentTypes();
322
			} elseif ($relativeCmsUri == '/configuration/document-types/new' && in_array('configuration', $userRights)) {
323
				$template = 'cms/configuration/document-types-form';
324
				$this->parameters['mainNavClass'] = 'configuration';
325
				$bricks = $this->storage->getBricks();
326
				if (isset($request::$post['title'])) {
327
					$this->storage->addDocumentType($request::$post);
328
					header('Location: ' . $request::$subfolders . $this->parameters['cmsPrefix'] . '/configuration/document-types');
329
					exit;
330
				}
331
				$this->parameters['bricks'] = $bricks;
332
			} elseif ($relativeCmsUri == '/configuration/document-types/edit' && isset($request::$get['slug']) && in_array('configuration', $userRights)) {
333
				$template = 'cms/configuration/document-types-form';
334
				$this->parameters['mainNavClass'] = 'configuration';
335
				$documentType = $this->storage->getDocumentTypeBySlug($request::$get['slug'], false);
336
				$bricks = $this->storage->getBricks();
337
				if (isset($request::$post['title'])) {
338
					$this->storage->saveDocumentType($request::$get['slug'], $request::$post);
339
					header('Location: ' . $request::$subfolders . $this->parameters['cmsPrefix'] . '/configuration/document-types');
340
					exit;
341
				}
342
				$this->parameters['documentType'] = $documentType;
343
				$this->parameters['bricks'] = $bricks;
344
			} elseif ($relativeCmsUri == '/configuration/document-types/delete' && isset($request::$get['slug']) && in_array('configuration', $userRights)) {
345
				$this->storage->deleteDocumentTypeBySlug($request::$get['slug']);
346
				header('Location: ' . $request::$subfolders . $this->parameters['cmsPrefix'] . '/configuration/document-types');
347
				exit;
348
			} elseif ($relativeCmsUri == '/configuration/bricks' && in_array('configuration', $userRights)) {
349
				$template = 'cms/configuration/bricks';
350
				$this->parameters['mainNavClass'] = 'configuration';
351
				$this->parameters['bricks'] = $this->storage->getBricks();
352
			} elseif ($relativeCmsUri == '/configuration/bricks/new' && in_array('configuration', $userRights)) {
353
				$template = 'cms/configuration/bricks-form';
354
				$this->parameters['mainNavClass'] = 'configuration';
355
				if (isset($request::$post['title'])) {
356
					$this->storage->addBrick($request::$post);
357
					header('Location: ' . $request::$subfolders . $this->parameters['cmsPrefix'] . '/configuration/bricks');
358
					exit;
359
				}
360
			} elseif ($relativeCmsUri == '/configuration/bricks/edit' && isset($request::$get['slug']) && in_array('configuration', $userRights)) {
361
				$template = 'cms/configuration/bricks-form';
362
				$this->parameters['mainNavClass'] = 'configuration';
363
				$brick = $this->storage->getBrickBySlug($request::$get['slug']);
364
				if (isset($request::$post['title'])) {
365
					$this->storage->saveBrick($request::$get['slug'], $request::$post);
366
					header('Location: ' . $request::$subfolders . $this->parameters['cmsPrefix'] . '/configuration/bricks');
367
					exit;
368
				}
369
				$this->parameters['brick'] = $brick;
370
			} elseif ($relativeCmsUri == '/configuration/bricks/delete' && isset($request::$get['slug']) && in_array('configuration', $userRights)) {
371
				$this->storage->deleteBrickBySlug($request::$get['slug']);
372
				header('Location: ' . $request::$subfolders . $this->parameters['cmsPrefix'] . '/configuration/bricks');
373
				exit;
374
			} elseif ($relativeCmsUri == '/configuration/image-set' && in_array('configuration', $userRights)) {
375
				$template = 'cms/configuration/image-set';
376
				$this->parameters['mainNavClass'] = 'configuration';
377
				$this->parameters['imageSet'] = $this->storage->getImageSet();
378
			} elseif ($relativeCmsUri == '/configuration/image-set/edit' && isset($request::$get['slug']) && in_array('configuration', $userRights)) {
379
				$template = 'cms/configuration/image-set-form';
380
				$this->parameters['mainNavClass'] = 'configuration';
381
				$imageSet = $this->storage->getImageSetBySlug($request::$get['slug']);
382
				if (isset($request::$post['title'])) {
383
					$this->storage->saveImageSet($request::$get['slug'], $request::$post);
384
					header('Location: ' . $request::$subfolders . $this->parameters['cmsPrefix'] . '/configuration/image-set');
385
					exit;
386
				}
387
				$this->parameters['imageSet'] = $imageSet;
388
			} elseif ($relativeCmsUri == '/configuration/image-set/new' && in_array('configuration', $userRights)) {
389
				$template = 'cms/configuration/image-set-form';
390
				$this->parameters['mainNavClass'] = 'configuration';
391
				if (isset($request::$post['title'])) {
392
					$this->storage->addImageSet($request::$post);
393
					header('Location: ' . $request::$subfolders . $this->parameters['cmsPrefix'] . '/configuration/image-set');
394
					exit;
395
				}
396
			} elseif ($relativeCmsUri == '/configuration/image-set/delete' && isset($request::$get['slug']) && in_array('configuration', $userRights)) {
397
				$this->storage->deleteImageSetBySlug($request::$get['slug']);
398
				header('Location: ' . $request::$subfolders . $this->parameters['cmsPrefix'] . '/configuration/image-set');
399
				exit;
400
			} elseif ($relativeCmsUri == '/configuration/application-components' && in_array('configuration', $userRights)) {
401
				$template = 'cms/configuration/application-components';
402
				$this->parameters['mainNavClass'] = 'configuration';
403
				$this->parameters['applicationComponents'] = $this->storage->getApplicationComponents();
404
			} elseif ($relativeCmsUri == '/configuration/application-components/new' && in_array('configuration', $userRights)) {
405
				$template = 'cms/configuration/application-components-form';
406
				$this->parameters['mainNavClass'] = 'configuration';
407
				if (isset($request::$post['title'])) {
408
					$this->storage->addApplicationComponent($request::$post);
409
					header('Location: ' . $request::$subfolders . $this->parameters['cmsPrefix'] . '/configuration/application-components');
410
					exit;
411
				}
412
			} elseif ($relativeCmsUri == '/configuration/application-components/edit' && isset($request::$get['slug']) && in_array('configuration', $userRights)) {
413
				$template = 'cms/configuration/application-components-form';
414
				$this->parameters['mainNavClass'] = 'configuration';
415
				$applicationComponent = $this->storage->getApplicationComponentBySlug($request::$get['slug']);
416
				if (isset($request::$post['title'])) {
417
					$this->storage->saveApplicationComponent($request::$get['slug'], $request::$post);
418
					header('Location: ' . $request::$subfolders . $this->parameters['cmsPrefix'] . '/configuration/application-components');
419
					exit;
420
				}
421
				$this->parameters['applicationComponent'] = $applicationComponent;
422
			} elseif ($relativeCmsUri == '/configuration/application-components/delete' && isset($request::$get['slug']) && in_array('configuration', $userRights)) {
423
				$this->storage->deleteApplicationComponentBySlug($request::$get['slug']);
424
				header('Location: ' . $request::$subfolders . $this->parameters['cmsPrefix'] . '/configuration/application-components');
425
				exit;
426
			} elseif ($relativeCmsUri == '/log-off') {
427
				$_SESSION['cloudcontrol'] = null;
428
				unset($_SESSION['cloudcontrol']);
429
				header('Location: ' . $request::$subfolders . $this->parameters['cmsPrefix']);
430
				exit;
431
			}
432
433
			if ($template !== null) {
434
				$this->parameters['body'] = $this->renderTemplate($template);
435
			}			
436
		}
437
438
		private function checkWhiteList($remoteAddress)
439
		{
440
			if (isset($this->parameters['whitelistIps'])) {
441
				$whitelistIps = explode(',', $this->parameters['whitelistIps']);
442
				$whitelistIps = array_map("trim", $whitelistIps);
443
				if (!in_array($remoteAddress, $whitelistIps)) {
444
					throw new \Exception('Ip address ' . $remoteAddress . ' is not on whitelist');
445
				}
446
			}
447
		}
448
449
		private function checkBlackList($remoteAddress)
450
		{
451
			if (isset($this->parameters['blacklistIps'])) {
452
				$blacklistIps = explode(',', $this->parameters['blacklistIps']);
453
				$blacklistIps = array_map("trim", $blacklistIps);
454
				if (in_array($remoteAddress, $blacklistIps)) {
455
					throw new \Exception('Ip address ' . $remoteAddress . ' is on blacklist');
456
				}
457
			}
458
		}
459
	}
460
}