Skip to content

Commit 621c847

Browse files
author
Marius Burkard
committed
Merge branch 'feature/load-remoting-classes-from-modules' into 'stable-3.1'
Load remoting classes from modules See merge request ispconfig/ispconfig3!978
2 parents ab8a71f + 3336bba commit 621c847

File tree

7 files changed

+81
-120
lines changed

7 files changed

+81
-120
lines changed

interface/lib/classes/json_handler.inc.php

Lines changed: 1 addition & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -30,45 +30,7 @@
3030
*/
3131

3232

33-
class ISPConfigJSONHandler {
34-
private $methods = array();
35-
private $classes = array();
36-
37-
public function __construct() {
38-
global $app;
39-
40-
// load main remoting file
41-
$app->load('remoting');
42-
43-
// load all remote classes and get their methods
44-
$dir = dirname(realpath(__FILE__)) . '/remote.d';
45-
$d = opendir($dir);
46-
while($f = readdir($d)) {
47-
if($f == '.' || $f == '..') continue;
48-
if(!is_file($dir . '/' . $f) || substr($f, strrpos($f, '.')) != '.php') continue;
49-
50-
$name = substr($f, 0, strpos($f, '.'));
51-
52-
include $dir . '/' . $f;
53-
$class_name = 'remoting_' . $name;
54-
if(class_exists($class_name, false)) {
55-
$this->classes[$class_name] = new $class_name();
56-
foreach(get_class_methods($this->classes[$class_name]) as $method) {
57-
$this->methods[$method] = $class_name;
58-
}
59-
}
60-
}
61-
closedir($d);
62-
63-
// add main methods
64-
$this->methods['login'] = 'remoting';
65-
$this->methods['logout'] = 'remoting';
66-
$this->methods['get_function_list'] = 'remoting';
67-
68-
// create main class
69-
$this->classes['remoting'] = new remoting(array_keys($this->methods));
70-
}
71-
33+
class ISPConfigJSONHandler extends ISPConfigRemotingHandlerBase {
7234
private function _return_json($code, $message, $data = false) {
7335
$ret = new stdClass;
7436
$ret->code = $code;
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
<?php
2+
3+
/*
4+
Copyright (c) 2020, ISPConfig
5+
All rights reserved.
6+
7+
Redistribution and use in source and binary forms, with or without modification,
8+
are permitted provided that the following conditions are met:
9+
10+
* Redistributions of source code must retain the above copyright notice,
11+
this list of conditions and the following disclaimer.
12+
* Redistributions in binary form must reproduce the above copyright notice,
13+
this list of conditions and the following disclaimer in the documentation
14+
and/or other materials provided with the distribution.
15+
* Neither the name of ISPConfig nor the names of its contributors
16+
may be used to endorse or promote products derived from this software without
17+
specific prior written permission.
18+
19+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
20+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
22+
IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
23+
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
24+
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25+
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
26+
OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27+
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
28+
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29+
*/
30+
31+
class ISPConfigRemotingHandlerBase
32+
{
33+
protected $methods = array();
34+
protected $classes = array();
35+
36+
public function __construct()
37+
{
38+
global $app;
39+
40+
// load main remoting file
41+
$app->load('remoting');
42+
43+
// load all remoting classes and get their methods
44+
$this->load_remoting_classes(realpath(__DIR__) . '/remote.d/*.inc.php');
45+
46+
// load all remoting classes from modules
47+
$this->load_remoting_classes(realpath(__DIR__) . '/../../web/*/lib/classes/remote.d/*.inc.php');
48+
49+
// add main methods
50+
$this->methods['login'] = 'remoting';
51+
$this->methods['logout'] = 'remoting';
52+
$this->methods['get_function_list'] = 'remoting';
53+
54+
// create main class
55+
$this->classes['remoting'] = new remoting(array_keys($this->methods));
56+
}
57+
58+
private function load_remoting_classes($glob_pattern)
59+
{
60+
$files = glob($glob_pattern);
61+
62+
foreach ($files as $file) {
63+
$name = str_replace('.inc.php', '', basename($file));
64+
$class_name = 'remoting_' . $name;
65+
66+
include_once $file;
67+
if(class_exists($class_name, false)) {
68+
$this->classes[$class_name] = new $class_name();
69+
foreach(get_class_methods($this->classes[$class_name]) as $method) {
70+
$this->methods[$method] = $class_name;
71+
}
72+
}
73+
}
74+
}
75+
}

interface/lib/classes/rest_handler.inc.php

Lines changed: 1 addition & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -30,46 +30,8 @@
3030
*/
3131

3232

33-
class ISPConfigRESTHandler {
34-
private $methods = array();
35-
private $classes = array();
36-
33+
class ISPConfigRESTHandler extends ISPConfigRemotingHandlerBase {
3734
private $api_version = 1;
38-
39-
public function __construct() {
40-
global $app;
41-
42-
// load main remoting file
43-
$app->load('remoting');
44-
45-
// load all remote classes and get their methods
46-
$dir = dirname(realpath(__FILE__)) . '/remote.d';
47-
$d = opendir($dir);
48-
while($f = readdir($d)) {
49-
if($f == '.' || $f == '..') continue;
50-
if(!is_file($dir . '/' . $f) || substr($f, strrpos($f, '.')) != '.php') continue;
51-
52-
$name = substr($f, 0, strpos($f, '.'));
53-
54-
include $dir . '/' . $f;
55-
$class_name = 'remoting_' . $name;
56-
if(class_exists($class_name, false)) {
57-
$this->classes[$class_name] = new $class_name();
58-
foreach(get_class_methods($this->classes[$class_name]) as $method) {
59-
$this->methods[$method] = $class_name;
60-
}
61-
}
62-
}
63-
closedir($d);
64-
65-
// add main methods
66-
$this->methods['login'] = 'remoting';
67-
$this->methods['logout'] = 'remoting';
68-
$this->methods['get_function_list'] = 'remoting';
69-
70-
// create main class
71-
$this->classes['remoting'] = new remoting(array_keys($this->methods));
72-
}
7335

7436
private function _return_error($code, $codename, $message) {
7537
header('HTTP/1.1 ' . $code . ' ' . $codename);

interface/lib/classes/soap_handler.inc.php

Lines changed: 1 addition & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -30,45 +30,7 @@
3030
*/
3131

3232

33-
class ISPConfigSoapHandler {
34-
private $methods = array();
35-
private $classes = array();
36-
37-
public function __construct() {
38-
global $app;
39-
40-
// load main remoting file
41-
$app->load('remoting');
42-
43-
// load all remote classes and get their methods
44-
$dir = dirname(realpath(__FILE__)) . '/remote.d';
45-
$d = opendir($dir);
46-
while($f = readdir($d)) {
47-
if($f == '.' || $f == '..') continue;
48-
if(!is_file($dir . '/' . $f) || substr($f, strrpos($f, '.')) != '.php') continue;
49-
50-
$name = substr($f, 0, strpos($f, '.'));
51-
52-
include_once $dir . '/' . $f;
53-
$class_name = 'remoting_' . $name;
54-
if(class_exists($class_name, false)) {
55-
$this->classes[$class_name] = new $class_name();
56-
foreach(get_class_methods($this->classes[$class_name]) as $method) {
57-
$this->methods[$method] = $class_name;
58-
}
59-
}
60-
}
61-
closedir($d);
62-
63-
// add main methods
64-
$this->methods['login'] = 'remoting';
65-
$this->methods['logout'] = 'remoting';
66-
$this->methods['get_function_list'] = 'remoting';
67-
68-
// create main class
69-
$this->classes['remoting'] = new remoting(array_keys($this->methods));
70-
}
71-
33+
class ISPConfigSoapHandler extends ISPConfigRemotingHandlerBase {
7234
public function __call($method, $params) {
7335
if(array_key_exists($method, $this->methods) == false) {
7436
throw new SoapFault('invalid_method', 'Method ' . $method . ' does not exist');

interface/web/remote/index.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
if($conf['demo_mode'] == true) $app->error('This function is disabled in demo mode.');
1010

11-
$app->load('soap_handler,getconf');
11+
$app->load('remoting_handler_base,soap_handler,getconf');
1212

1313
$security_config = $app->getconf->get_security_config('permissions');
1414
if($security_config['remote_api_allowed'] != 'yes') die('Remote API is disabled in security settings.');

interface/web/remote/json.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
if($conf['demo_mode'] == true) $app->error('This function is disabled in demo mode.');
1010

11-
$app->load('json_handler,getconf');
11+
$app->load('remoting_handler_base,json_handler,getconf');
1212

1313
$security_config = $app->getconf->get_security_config('permissions');
1414
if($security_config['remote_api_allowed'] != 'yes') die('Remote API is disabled in security settings.');

interface/web/remote/rest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
$conf['start_session'] = false;
77
require_once '../../lib/app.inc.php';
88

9-
$app->load('rest_handler,getconf');
9+
$app->load('remoting_handler_base,rest_handler,getconf');
1010

1111
$security_config = $app->getconf->get_security_config('permissions');
1212
if($security_config['remote_api_allowed'] != 'yes') die('Remote API is disabled in security settings.');

0 commit comments

Comments
 (0)