forked from hestiacp/hestiacp
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.php
More file actions
129 lines (116 loc) · 4.41 KB
/
index.php
File metadata and controls
129 lines (116 loc) · 4.41 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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
<?php
ob_start();
$TAB = 'WEB';
// Main include
include($_SERVER['DOCUMENT_ROOT']."/inc/main.php");
require_once $_SERVER['DOCUMENT_ROOT']."/src/init.php";
// Check domain argument
if (empty($_GET['domain'])) {
header("Location: /list/web/");
exit;
}
// Edit as someone else?
if (($_SESSION['user'] == 'admin') && (!empty($_GET['user']))) {
$user=escapeshellarg($_GET['user']);
}
// Check if domain belongs to the user
$v_domain = $_GET['domain'];
exec(HESTIA_CMD."v-list-web-domain ".$user." ".escapeshellarg($v_domain)." json", $output, $return_var);
if ($return_var > 0) {
check_return_code_redirect($return_var, $output, '/list/web/');
}
unset($output);
exec(HESTIA_CMD."v-list-sys-php json", $output, $return_var);
$php_versions = json_decode(implode('', $output), true);
unset($output);
// Check GET request
if (!empty($_GET['app'])) {
$app = basename($_GET['app']);
$hestia = new \Hestia\System\HestiaApp();
$app_installer_class = '\Hestia\WebApp\Installers\\'.$app.'\\' . $app . 'Setup';
if (class_exists($app_installer_class)) {
try {
$app_installer = new $app_installer_class($v_domain, $hestia);
$info = $app_installer -> info();
foreach ($php_versions as $version) {
if (in_array($version, $info['php_support'])) {
$supported = true;
$supported_versions[] = $version;
}
}
if ($supported) {
$info['enabled'] = true;
} else {
$info['enabled'] = false;
$_SESSION['error_msg'] = sprintf(_('Unable to install %s, %s is not available'), $app, 'PHP-'.end($info['php_support']));
}
if ($info['enabled'] == true) {
$installer = new \Hestia\WebApp\AppWizard($app_installer, $v_domain, $hestia);
$GLOBALS['WebappInstaller'] = $installer;
}
} catch (Exception $e) {
$_SESSION['error_msg'] = $e->getMessage();
header('Location: /add/webapp/?domain=' . $v_domain);
exit();
}
} else {
$_SESSION['error_msg'] = sprintf(_('%s installer missing'), $app);
}
}
// Check POST request
if (!empty($_POST['ok']) && !empty($app)) {
// Check token
verify_csrf($_POST);
if ($installer) {
try {
if (!$installer->execute($_POST)) {
$result = $installer->getStatus();
if (!empty($result)) {
$_SESSION['error_msg'] = implode(PHP_EOL, $result);
}
} else {
$_SESSION['ok_msg'] = sprintf(_('%s App was installed succesfully!'), htmlspecialchars($app));
header('Location: /add/webapp/?domain=' . $v_domain);
exit();
}
} catch (Exception $e) {
$_SESSION['error_msg'] = $e->getMessage();
header('Location: /add/webapp/?app='.rawurlencode($app).'&domain=' . $v_domain);
exit();
}
}
}
if (!empty($installer)) {
render_page($user, $TAB, 'setup_webapp');
} else {
$appInstallers = glob(__DIR__.'/../../src/app/WebApp/Installers/*/*.php');
$v_web_apps = array();
foreach ($appInstallers as $app) {
$hestia = new \Hestia\System\HestiaApp();
if (preg_match('/Installers\/([a-zA-Z][a-zA-Z0,9].*)\/([a-zA-Z][a-zA-Z0,9].*).php/', $app, $matches)) {
if ($matches[1] != "Resources") {
$app_installer_class = '\Hestia\WebApp\Installers\\'.$matches[1].'\\' . $matches[1] . 'Setup';
$app_installer = new $app_installer_class($v_domain, $hestia);
$appInstallerInfo = $app_installer -> info();
$supported = false;
$supported_versions = array();
foreach ($php_versions as $version) {
if (in_array($version, $appInstallerInfo['php_support'])) {
$supported = true;
$supported_versions[] = $version;
}
}
if ($supported) {
$appInstallerInfo['enabled'] = true;
} else {
$appInstallerInfo['enabled'] = false;
}
$v_web_apps[] = $appInstallerInfo;
}
}
}
render_page($user, $TAB, 'list_webapps');
}
// Flush session messages
unset($_SESSION['error_msg']);
unset($_SESSION['ok_msg']);