frontend: user domain vesta ssl certificate support

This commit is contained in:
Serghey Rodin 2019-03-14 00:44:32 +02:00
commit 80ebfc0daa
2 changed files with 302 additions and 49 deletions

View file

@ -78,20 +78,43 @@ foreach ($backup_types as $backup_type) {
}
}
// List ssl web domains
exec (VESTA_CMD."v-search-ssl-certificates json", $output, $return_var);
$v_ssl_domains = json_decode(implode('', $output), true);
//$v_vesta_certificate
unset($output);
// List ssl certificate info
exec (VESTA_CMD."v-list-sys-vesta-ssl json", $output, $return_var);
$ssl_str = json_decode(implode('', $output), true);
$v_sys_ssl_str = json_decode(implode('', $output), true);
unset($output);
$v_ssl_crt = $ssl_str['VESTA']['CRT'];
$v_ssl_key = $ssl_str['VESTA']['KEY'];
$v_ssl_ca = $ssl_str['VESTA']['CA'];
$v_ssl_subject = $ssl_str['VESTA']['SUBJECT'];
$v_ssl_aliases = $ssl_str['VESTA']['ALIASES'];
$v_ssl_not_before = $ssl_str['VESTA']['NOT_BEFORE'];
$v_ssl_not_after = $ssl_str['VESTA']['NOT_AFTER'];
$v_ssl_signature = $ssl_str['VESTA']['SIGNATURE'];
$v_ssl_pub_key = $ssl_str['VESTA']['PUB_KEY'];
$v_ssl_issuer = $ssl_str['VESTA']['ISSUER'];
$v_sys_ssl_crt = $v_sys_ssl_str['VESTA']['CRT'];
$v_sys_ssl_key = $v_sys_ssl_str['VESTA']['KEY'];
$v_sys_ssl_ca = $v_sys_ssl_str['VESTA']['CA'];
$v_sys_ssl_subject = $v_sys_ssl_str['VESTA']['SUBJECT'];
$v_sys_ssl_aliases = $v_sys_ssl_str['VESTA']['ALIASES'];
$v_sys_ssl_not_before = $v_sys_ssl_str['VESTA']['NOT_BEFORE'];
$v_sys_ssl_not_after = $v_sys_ssl_str['VESTA']['NOT_AFTER'];
$v_sys_ssl_signature = $v_sys_ssl_str['VESTA']['SIGNATURE'];
$v_sys_ssl_pub_key = $v_sys_ssl_str['VESTA']['PUB_KEY'];
$v_sys_ssl_issuer = $v_sys_ssl_str['VESTA']['ISSUER'];
// List mail ssl certificate info
if (!empty($_SESSION['VESTA_CERTIFICATE'])); {
exec (VESTA_CMD."v-list-sys-mail-ssl json", $output, $return_var);
$v_mail_ssl_str = json_decode(implode('', $output), true);
unset($output);
$v_mail_ssl_crt = $v_mail_ssl_str['MAIL']['CRT'];
$v_mail_ssl_key = $v_mail_ssl_str['MAIL']['KEY'];
$v_mail_ssl_ca = $v_mail_ssl_str['MAIL']['CA'];
$v_mail_ssl_subject = $v_mail_ssl_str['MAIL']['SUBJECT'];
$v_mail_ssl_aliases = $v_mail_ssl_str['MAIL']['ALIASES'];
$v_mail_ssl_not_before = $v_mail_ssl_str['MAIL']['NOT_BEFORE'];
$v_mail_ssl_not_after = $v_mail_ssl_str['MAIL']['NOT_AFTER'];
$v_mail_ssl_signature = $v_mail_ssl_str['MAIL']['SIGNATURE'];
$v_mail_ssl_pub_key = $v_mail_ssl_str['MAIL']['PUB_KEY'];
$v_mail_ssl_issuer = $v_mail_ssl_str['MAIL']['ISSUER'];
}
// Check POST request
if (!empty($_POST['save'])) {
@ -193,6 +216,47 @@ if (!empty($_POST['save'])) {
}
}
// Delete Mail Domain SSL certificate
if ((!isset($_POST['v_mail_ssl_domain_checkbox'])) && (!empty($_SESSION['MAIL_CERTIFICATE'])) && (empty($_SESSION['error_msg']))) {
unset($_SESSION['MAIL_CERTIFICATE']);
exec (VESTA_CMD."v-delete-sys-mail-ssl", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
// Updating Mail Domain SSL certificate
if ((isset($_POST['v_mail_ssl_domain_checkbox'])) && (isset($_POST['v_mail_ssl_domain'])) && (empty($_SESSION['error_msg']))) {
if ((!empty($_POST['v_mail_ssl_domain'])) && ($_POST['v_mail_ssl_domain'] != $_SESSION['MAIL_CERTIFICATE'])) {
$v_mail_ssl_str = explode(":", $_POST['v_mail_ssl_domain']);
$v_mail_ssl_user = escapeshellarg($v_mail_ssl_str[0]);
$v_mail_ssl_domain = escapeshellarg($v_mail_ssl_str[1]);
exec (VESTA_CMD."v-add-sys-mail-ssl ".$v_mail_ssl_user." ".$v_mail_ssl_domain, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
unset($v_mail_ssl_str);
if (empty($_SESSION['error_msg'])) {
$_SESSION['MAIL_CERTIFICATE'] = $_POST['v_mail_ssl_domain'];
// List SSL certificate info
exec (VESTA_CMD."v-list-sys-mail-ssl json", $output, $return_var);
$v_mail_ssl_str = json_decode(implode('', $output), true);
unset($output);
$v_mail_ssl_crt = $v_mail_ssl_str['MAIL']['CRT'];
$v_mail_ssl_key = $v_mail_ssl_str['MAIL']['KEY'];
$v_mail_ssl_ca = $v_mail_ssl_str['MAIL']['CA'];
$v_mail_ssl_subject = $v_mail_ssl_str['MAIL']['SUBJECT'];
$v_mail_ssl_aliases = $v_mail_ssl_str['MAIL']['ALIASES'];
$v_mail_ssl_not_before = $v_mail_ssl_str['MAIL']['NOT_BEFORE'];
$v_mail_ssl_not_after = $v_mail_ssl_str['MAIL']['NOT_AFTER'];
$v_mail_ssl_signature = $v_mail_ssl_str['MAIL']['SIGNATURE'];
$v_mail_ssl_pub_key = $v_mail_ssl_str['MAIL']['PUB_KEY'];
$v_mail_ssl_issuer = $v_mail_ssl_str['MAIL']['ISSUER'];
}
}
}
// Update webmail url
if (empty($_SESSION['error_msg'])) {
if ($_POST['v_mail_url'] != $_SESSION['MAIL_URL']) {
@ -352,24 +416,67 @@ if (!empty($_POST['save'])) {
}
}
// Delete WEB Domain SSL certificate
if ((!isset($_POST['v_web_ssl_domain_checkbox'])) && (!empty($_SESSION['VESTA_CERTIFICATE'])) && (empty($_SESSION['error_msg']))) {
unset($_SESSION['VESTA_CERTIFICATE']);
exec (VESTA_CMD."v-delete-sys-vesta-ssl", $output, $return_var);
check_return_code($return_var,$output);
unset($output);
}
// Updating WEB Domain SSL certificate
if ((isset($_POST['v_web_ssl_domain_checkbox'])) && (isset($_POST['v_web_ssl_domain'])) && (empty($_SESSION['error_msg']))) {
if ((!empty($_POST['v_web_ssl_domain'])) && ($_POST['v_web_ssl_domain'] != $_SESSION['VESTA_CERTIFICATE'])) {
$v_web_ssl_str = explode(":", $_POST['v_web_ssl_domain']);
$v_web_ssl_user = escapeshellarg($v_web_ssl_str[0]);
$v_web_ssl_domain = escapeshellarg($v_web_ssl_str[1]);
exec (VESTA_CMD."v-add-sys-vesta-ssl ".$v_web_ssl_user." ".$v_web_ssl_domain, $output, $return_var);
check_return_code($return_var,$output);
unset($output);
if (empty($_SESSION['error_msg'])) {
$_SESSION['VESTA_CERTIFICATE'] = $_POST['v_web_ssl_domain'];
// List SSL certificate info
exec (VESTA_CMD."v-list-sys-vesta-ssl json", $output, $return_var);
$v_sys_ssl_str = json_decode(implode('', $output), true);
unset($output);
$v_sys_ssl_crt = $v_sys_ssl_str['VESTA']['CRT'];
$v_sys_ssl_key = $v_sys_ssl_str['VESTA']['KEY'];
$v_sys_ssl_ca = $v_sys_ssl_str['VESTA']['CA'];
$v_sys_ssl_subject = $v_sys_ssl_str['VESTA']['SUBJECT'];
$v_sys_ssl_aliases = $v_sys_ssl_str['VESTA']['ALIASES'];
$v_sys_ssl_not_before = $v_sys_ssl_str['VESTA']['NOT_BEFORE'];
$v_sys_ssl_not_after = $v_sys_ssl_str['VESTA']['NOT_AFTER'];
$v_sys_ssl_signature = $v_sys_ssl_str['VESTA']['SIGNATURE'];
$v_sys_ssl_pub_key = $v_sys_ssl_str['VESTA']['PUB_KEY'];
$v_sys_ssl_issuer = $v_sys_ssl_str['VESTA']['ISSUER'];
}
}
}
// Update SSL certificate
if ((!empty($_POST['v_ssl_crt'])) && (empty($_SESSION['error_msg']))) {
if (($v_ssl_crt != str_replace("\r\n", "\n", $_POST['v_ssl_crt'])) || ($v_ssl_key != str_replace("\r\n", "\n", $_POST['v_ssl_key']))) {
if ((!empty($_POST['v_sys_ssl_crt'])) && (empty($_POST['v_web_ssl_domain'])) && (empty($_SESSION['error_msg']))) {
if (($v_sys_ssl_crt != str_replace("\r\n", "\n", $_POST['v_sys_ssl_crt'])) || ($v_sys_ssl_key != str_replace("\r\n", "\n", $_POST['v_sys_ssl_key']))) {
exec ('mktemp -d', $mktemp_output, $return_var);
$tmpdir = $mktemp_output[0];
// Certificate
if (!empty($_POST['v_ssl_crt'])) {
if (!empty($_POST['v_sys_ssl_crt'])) {
$fp = fopen($tmpdir."/certificate.crt", 'w');
fwrite($fp, str_replace("\r\n", "\n", $_POST['v_ssl_crt']));
fwrite($fp, str_replace("\r\n", "\n", $_POST['v_sys_ssl_crt']));
fwrite($fp, "\n");
fclose($fp);
}
// Key
if (!empty($_POST['v_ssl_key'])) {
if (!empty($_POST['v_sys_ssl_key'])) {
$fp = fopen($tmpdir."/certificate.key", 'w');
fwrite($fp, str_replace("\r\n", "\n", $_POST['v_ssl_key']));
fwrite($fp, str_replace("\r\n", "\n", $_POST['v_sys_ssl_key']));
fwrite($fp, "\n");
fclose($fp);
}
@ -378,20 +485,22 @@ if (!empty($_POST['save'])) {
check_return_code($return_var,$output);
unset($output);
// List ssl certificate info
exec (VESTA_CMD."v-list-sys-vesta-ssl json", $output, $return_var);
$ssl_str = json_decode(implode('', $output), true);
unset($output);
$v_ssl_crt = $ssl_str['VESTA']['CRT'];
$v_ssl_key = $ssl_str['VESTA']['KEY'];
$v_ssl_ca = $ssl_str['VESTA']['CA'];
$v_ssl_subject = $ssl_str['VESTA']['SUBJECT'];
$v_ssl_aliases = $ssl_str['VESTA']['ALIASES'];
$v_ssl_not_before = $ssl_str['VESTA']['NOT_BEFORE'];
$v_ssl_not_after = $ssl_str['VESTA']['NOT_AFTER'];
$v_ssl_signature = $ssl_str['VESTA']['SIGNATURE'];
$v_ssl_pub_key = $ssl_str['VESTA']['PUB_KEY'];
$v_ssl_issuer = $ssl_str['VESTA']['ISSUER'];
if (empty($_SESSION['error_msg'])) {
// List ssl certificate info
exec (VESTA_CMD."v-list-sys-vesta-ssl json", $output, $return_var);
$v_sys_ssl_str = json_decode(implode('', $output), true);
unset($output);
$v_sys_ssl_crt = $v_sys_ssl_str['VESTA']['CRT'];
$v_sys_ssl_key = $v_sys_ssl_str['VESTA']['KEY'];
$v_sys_ssl_ca = $v_sys_ssl_str['VESTA']['CA'];
$v_sys_ssl_subject = $v_sys_ssl_str['VESTA']['SUBJECT'];
$v_sys_ssl_aliases = $v_sys_ssl_str['VESTA']['ALIASES'];
$v_sys_ssl_not_before = $v_sys_ssl_str['VESTA']['NOT_BEFORE'];
$v_sys_ssl_not_after = $v_sys_ssl_str['VESTA']['NOT_AFTER'];
$v_sys_ssl_signature = $v_sys_ssl_str['VESTA']['SIGNATURE'];
$v_sys_ssl_pub_key = $v_sys_ssl_str['VESTA']['PUB_KEY'];
$v_sys_ssl_issuer = $v_sys_ssl_str['VESTA']['ISSUER'];
}
}
}

View file

@ -280,13 +280,115 @@
<br><br>
</td>
</tr>
<tr>
<td class="vst-text input-label step-top">
<label><input type="checkbox" size="20" class="vst-checkbox" name="v_mail_ssl_domain_checkbox"
<?php if(!empty($_SESSION['MAIL_CERTIFICATE'])) echo "checked=yes" ?>
onclick="javascript:elementHideShow('mail_ssl');">
<?php print __('Use Web Domain SSL Certificate');?>
</label>
</td>
</tr>
<tr>
<td class="vst-text input-label step-left">
<table style="display:<?php if (empty($_SESSION['MAIL_CERTIFICATE'])) echo 'none';?> ;" id="mail_ssl">
<tr>
<td class="vst-text">
<?php print __('Domain') ?>
</td>
</tr>
<tr>
<td>
<select class="vst-list" name="v_mail_ssl_domain">
<option value='' <?php if(empty($_SESSION['MAIL_CERTIFICATE'])) echo 'selected' ?>></option>
<?php
foreach ($v_ssl_domains as $key => $value) {
echo "\t\t\t\t<option value=\"".$value."\"";
if ((!empty($_SESSION['MAIL_CERTIFICATE'])) && ( $value == $_SESSION['MAIL_CERTIFICATE'])){
echo ' selected' ;
}
if ((!empty($_SESSION['MAIL_CERTIFICATE'])) && ( $value == $_POST['v_mail_certificate'])){
echo ' selected' ;
}
echo ">".$value."</option>\n";
}
?>
</select>
<br><br>
</td>
</tr>
<tr>
<td>
<table class="additional-info">
<tr>
<td>
<?=__('SUBJECT')?>:
</td>
<td class="details">
<?=$v_sys_ssl_subject?>
</td>
</tr>
<? if($v_sys_ssl_aliases){?>
<tr>
<td>
<?=__('ALIASES')?>:
</td>
<td class="details">
<?=$v_sys_ssl_aliases?>
</td>
</tr>
<? } ?>
<tr>
<td>
<?=__('NOT_BEFORE')?>:
</td>
<td class="details">
<?=$v_sys_ssl_not_before?>
</td>
</tr>
<tr>
<td>
<?=__('NOT_AFTER')?>:
</td>
<td class="details">
<?=$v_sys_ssl_not_after?>
</td>
</tr>
<tr>
<td>
<?=__('SIGNATURE')?>:
</td>
<td class="details">
<?=$v_sys_ssl_signature?>
</td>
</tr>
<tr>
<td>
<?=__('PUB_KEY')?>:
</td>
<td class="details">
<?=$v_sys_ssl_pub_key?>
</td>
</tr>
<tr>
<td>
<?=__('ISSUER')?>:
</td>
<td class="details">
<?=$v_sys_ssl_issuer?>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td class="vst-text input-label step-top">
<a href="javascript:elementHideShow('db');" class="vst-text">
@ -503,7 +605,8 @@
<input type="text" size="20" class="vst-input" name="v_backup_dir" value="<?=trim($v_backup_dir, "'")?>">
<br><br>
</td>
</tr> <tr>
</tr>
<tr>
<td class="vst-text input-label step-top">
<a href="javascript:elementHideShow('remote_backup');" class="vst-text">
<?php print __('Remote backup');?> <img src="/images/arrow.png">
@ -513,9 +616,10 @@
<tr>
<td class="vst-text input-label step-left">
<table style="display:<?php if (empty($v_backup_remote_adv)) echo 'none';?> ;" id="remote_backup">
<td class="vst-text">
<?php print __('Protocol') ?>
</td>
<tr>
<td class="vst-text">
<?php print __('Protocol') ?>
</td>
</tr>
<tr>
<td>
@ -580,13 +684,54 @@
<tr>
<td class="vst-text input-label step-top">
<a href="javascript:elementHideShow('ssl');" class="vst-text">
<b><?php print __('Vesta SSL');?> <!-- span style="color:#ff6701;font-size:10px; padding:0 10px;">preview</span--><img src="/images/arrow.png"></b>
<b><?php print __('Vesta SSL');?><img src="/images/arrow.png"></b>
</a>
</td>
</tr>
<tr>
<td class="vst-text input-label step-left">
<table style="display:<?php if (empty($v_adv)) echo 'none';?> ;" id="ssl">
<tr>
<td class="vst-text input-label step-top">
<label><input type="checkbox" size="20" class="vst-checkbox" name="v_web_ssl_domain_checkbox"
<?php if(!empty($_SESSION['VESTA_CERTIFICATE'])) echo "checked=yes" ?>
onclick="javascript:elementHideShow('domain_ssl');">
<?php print __('Use Web Domain SSL Certificate');?>
</label>
</td>
</tr>
<tr>
<td class="vst-text input-label step-left">
<table style="display:<?php if (empty($_SESSION['VESTA_CERTIFICATE'])) echo 'none';?> ;" id="domain_ssl">
<tr>
<td class="vst-text">
<?php print __('Domain') ?>
</td>
</tr>
<tr>
<td>
<select class="vst-list" name="v_web_ssl_domain">
<option value='' <?php if(empty($_SESSION['VESTA_CERTIFICATE'])) echo 'selected' ?>></option>
<?php
foreach ($v_ssl_domains as $key => $value) {
echo "\t\t\t\t<option value=\"".$value."\"";
if ((!empty($_SESSION['VESTA_CERTIFICATE'])) && ( $value == $_SESSION['VESTA_CERTIFICATE'])){
echo ' selected' ;
}
if ((!empty($_SESSION['VESTA_CERTIFICATE'])) && ( $value == $_POST['v_vesta_certificate'])){
echo ' selected' ;
}
echo ">".$value."</option>\n";
}
?>
</select>
<br><br>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td class="vst-text input-label">
<?php print __('SSL Certificate');?>
@ -594,7 +739,7 @@
</tr>
<tr>
<td>
<textarea size="20" class="vst-textinput" name="v_ssl_crt"><?=htmlentities(trim($v_ssl_crt, "'"))?></textarea>
<textarea size="20" class="vst-textinput" name="v_sys_ssl_crt"><?=htmlentities(trim($v_sys_ssl_crt, "'"))?></textarea>
</td>
</tr>
<tr>
@ -604,7 +749,7 @@
</tr>
<tr>
<td>
<textarea size="20" class="vst-textinput" name="v_ssl_key"><?=htmlentities(trim($v_ssl_key, "'"))?></textarea>
<textarea size="20" class="vst-textinput" name="v_sys_ssl_key"><?=htmlentities(trim($v_sys_ssl_key, "'"))?></textarea>
</td>
</tr>
<tr>
@ -615,16 +760,16 @@
<?=__('SUBJECT')?>:
</td>
<td class="details">
<?=$v_ssl_subject?>
<?=$v_sys_ssl_subject?>
</td>
</tr>
<? if($v_ssl_aliases){?>
<? if($v_sys_ssl_aliases){?>
<tr>
<td>
<?=__('ALIASES')?>:
</td>
<td class="details">
<?=$v_ssl_aliases?>
<?=$v_sys_ssl_aliases?>
</td>
</tr>
<? } ?>
@ -633,7 +778,7 @@
<?=__('NOT_BEFORE')?>:
</td>
<td class="details">
<?=$v_ssl_not_before?>
<?=$v_sys_ssl_not_before?>
</td>
</tr>
<tr>
@ -641,7 +786,7 @@
<?=__('NOT_AFTER')?>:
</td>
<td class="details">
<?=$v_ssl_not_after?>
<?=$v_sys_ssl_not_after?>
</td>
</tr>
<tr>
@ -649,16 +794,15 @@
<?=__('SIGNATURE')?>:
</td>
<td class="details">
<?=$v_ssl_signature?>
<?=$v_sys_ssl_signature?>
</td>
</tr>
<tr>
<td>
<?=__('PUB_KEY')?>:
</td>
<td class="details">
<?=$v_ssl_pub_key?>
<?=$v_sys_ssl_pub_key?>
</td>
</tr>
<tr>
@ -666,7 +810,7 @@
<?=__('ISSUER')?>:
</td>
<td class="details">
<?=$v_ssl_issuer?>
<?=$v_sys_ssl_issuer?>
</td>
</tr>
</table>