mirror of
https://github.com/PhyreApps/PhyrePanel.git
synced 2024-11-21 23:20:24 +00:00
update
This commit is contained in:
parent
42f850fef0
commit
d11a162f97
3 changed files with 101 additions and 125 deletions
86
web/Modules/LetsEncrypt/Jobs/LetsEncryptSecureDomain.php
Normal file
86
web/Modules/LetsEncrypt/Jobs/LetsEncryptSecureDomain.php
Normal file
|
@ -0,0 +1,86 @@
|
|||
<?php
|
||||
|
||||
namespace Modules\LetsEncrypt\Jobs;
|
||||
|
||||
use App\Models\DomainSslCertificate;
|
||||
use App\Settings;
|
||||
|
||||
class LetsEncryptSecureDomain
|
||||
{
|
||||
|
||||
public $domainId;
|
||||
|
||||
public function __construct($domainId)
|
||||
{
|
||||
$this->domainId = $domainId;
|
||||
}
|
||||
|
||||
public function handle(): void
|
||||
{
|
||||
|
||||
$findDomain = \App\Models\Domain::where('id', $this->domainId)->first();
|
||||
if (! $findDomain) {
|
||||
throw new \Exception('Domain not found');
|
||||
}
|
||||
|
||||
$generalSettings = Settings::general();
|
||||
|
||||
$sslCertificateFilePath = '/etc/letsencrypt/live/'.$findDomain->domain.'/cert.pem';
|
||||
$sslCertificateKeyFilePath = '/etc/letsencrypt/live/'.$findDomain->domain.'/privkey.pem';
|
||||
$sslCertificateChainFilePath = '/etc/letsencrypt/live/'.$findDomain->domain.'/fullchain.pem';
|
||||
|
||||
$certbotHttpSecureCommand = view('letsencrypt::actions.certbot-http-secure-command', [
|
||||
'domain' => $findDomain->domain,
|
||||
'domainRoot' => $findDomain->domain_root,
|
||||
'domainPublic' => $findDomain->domain_public,
|
||||
'email' => $generalSettings['master_email'],
|
||||
'country' => $generalSettings['master_country'],
|
||||
'locality' => $generalSettings['master_locality'],
|
||||
'organization' => $generalSettings['organization_name'],
|
||||
])->render();
|
||||
|
||||
$exec = shell_exec($certbotHttpSecureCommand);
|
||||
|
||||
$validateCertificates = [];
|
||||
|
||||
if (! file_exists($sslCertificateFilePath)
|
||||
|| ! file_exists($sslCertificateKeyFilePath)
|
||||
|| ! file_exists($sslCertificateChainFilePath)) {
|
||||
// Cant get all certificates
|
||||
throw new \Exception('Cant get all certificates');
|
||||
}
|
||||
|
||||
$sslCertificateFileContent = file_get_contents($sslCertificateFilePath);
|
||||
$sslCertificateKeyFileContent = file_get_contents($sslCertificateKeyFilePath);
|
||||
$sslCertificateChainFileContent = file_get_contents($sslCertificateChainFilePath);
|
||||
|
||||
if (! empty($sslCertificateChainFileContent)) {
|
||||
$validateCertificates['certificate'] = $sslCertificateFileContent;
|
||||
}
|
||||
if (! empty($sslCertificateKeyFileContent)) {
|
||||
$validateCertificates['private_key'] = $sslCertificateKeyFileContent;
|
||||
}
|
||||
if (! empty($sslCertificateChainFileContent)) {
|
||||
$validateCertificates['certificate_chain'] = $sslCertificateChainFileContent;
|
||||
}
|
||||
if (count($validateCertificates) !== 3) {
|
||||
// Cant get all certificates
|
||||
throw new \Exception('Cant get all certificates');
|
||||
}
|
||||
|
||||
$websiteSslCertificate = new DomainSslCertificate();
|
||||
$websiteSslCertificate->domain = $findDomain->domain;
|
||||
$websiteSslCertificate->certificate = $validateCertificates['certificate'];
|
||||
$websiteSslCertificate->private_key = $validateCertificates['private_key'];
|
||||
$websiteSslCertificate->certificate_chain = $validateCertificates['certificate_chain'];
|
||||
$websiteSslCertificate->customer_id = $findDomain->customer_id;
|
||||
$websiteSslCertificate->is_active = 1;
|
||||
$websiteSslCertificate->is_wildcard = 0;
|
||||
$websiteSslCertificate->is_auto_renew = 1;
|
||||
$websiteSslCertificate->provider = 'letsencrypt';
|
||||
$websiteSslCertificate->save();
|
||||
|
||||
$findDomain->configureVirtualHost(true);
|
||||
|
||||
}
|
||||
}
|
|
@ -43,70 +43,12 @@ class DomainIsCreatedListener
|
|||
return;
|
||||
}
|
||||
|
||||
$generalSettings = Settings::general();
|
||||
|
||||
$acmeConfigYaml = view('letsencrypt::actions.acme-config-yaml', [
|
||||
'domain' => $event->model->domain,
|
||||
'domainRoot' => $event->model->domain_root,
|
||||
'domainPublic' => $event->model->domain_public,
|
||||
'email' => $generalSettings['master_email'],
|
||||
'country' => $generalSettings['master_country'],
|
||||
'locality' => $generalSettings['master_locality'],
|
||||
'organization' => $generalSettings['organization_name'],
|
||||
])->render();
|
||||
|
||||
file_put_contents($event->model->domain_root.'/acme-config.yaml', $acmeConfigYaml);
|
||||
|
||||
$amePHPPharFile = base_path().'/Modules/LetsEncrypt/Actions/acmephp.phar';
|
||||
|
||||
$phyrePHP = ApiClient::getPhyrePHP();
|
||||
|
||||
$command = $phyrePHP.' '.$amePHPPharFile.' run '.$event->model->domain_root.'/acme-config.yaml';
|
||||
$execSSL = shell_exec($command);
|
||||
|
||||
$validateCertificates = [];
|
||||
$sslCertificateFilePath = '/root/.acmephp/master/certs/'.$event->model->domain.'/public/cert.pem';
|
||||
$sslCertificateKeyFilePath = '/root/.acmephp/master/certs/'.$event->model->domain.'/private/key.private.pem';
|
||||
$sslCertificateChainFilePath = '/root/.acmephp/master/certs/'.$event->model->domain.'/public/fullchain.pem';
|
||||
|
||||
if (! file_exists($sslCertificateFilePath)
|
||||
|| ! file_exists($sslCertificateKeyFilePath)
|
||||
|| ! file_exists($sslCertificateChainFilePath)) {
|
||||
// Cant get all certificates
|
||||
try {
|
||||
$secureDomain = new \Modules\LetsEncrypt\Jobs\LetsEncryptSecureDomain($findDomain->id);
|
||||
$secureDomain->handle();
|
||||
} catch (\Exception $e) {
|
||||
return;
|
||||
}
|
||||
|
||||
$sslCertificateFileContent = file_get_contents($sslCertificateFilePath);
|
||||
$sslCertificateKeyFileContent = file_get_contents($sslCertificateKeyFilePath);
|
||||
$sslCertificateChainFileContent = file_get_contents($sslCertificateChainFilePath);
|
||||
|
||||
if (! empty($sslCertificateChainFileContent)) {
|
||||
$validateCertificates['certificate'] = $sslCertificateFileContent;
|
||||
}
|
||||
if (! empty($sslCertificateKeyFileContent)) {
|
||||
$validateCertificates['private_key'] = $sslCertificateKeyFileContent;
|
||||
}
|
||||
if (! empty($sslCertificateChainFileContent)) {
|
||||
$validateCertificates['certificate_chain'] = $sslCertificateChainFileContent;
|
||||
}
|
||||
if (count($validateCertificates) !== 3) {
|
||||
// Cant get all certificates
|
||||
return;
|
||||
}
|
||||
|
||||
$websiteSslCertificate = new DomainSslCertificate();
|
||||
$websiteSslCertificate->domain = $event->model->domain;
|
||||
$websiteSslCertificate->certificate = $validateCertificates['certificate'];
|
||||
$websiteSslCertificate->private_key = $validateCertificates['private_key'];
|
||||
$websiteSslCertificate->certificate_chain = $validateCertificates['certificate_chain'];
|
||||
$websiteSslCertificate->customer_id = $event->model->customer_id;
|
||||
$websiteSslCertificate->is_active = 1;
|
||||
$websiteSslCertificate->is_wildcard = 0;
|
||||
$websiteSslCertificate->is_auto_renew = 1;
|
||||
$websiteSslCertificate->provider = 'letsencrypt';
|
||||
$websiteSslCertificate->save();
|
||||
|
||||
$findDomain->configureVirtualHost();
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,7 +28,7 @@ Route::post('letsencrypt/secure', function () {
|
|||
$email = request('email', null);
|
||||
|
||||
$findDomain = \App\Models\Domain::where('domain', $domain)->first();
|
||||
if (! $findDomain) {
|
||||
if (!$findDomain) {
|
||||
return response()->json(['error' => 'Domain not found'], 404);
|
||||
}
|
||||
|
||||
|
@ -38,73 +38,21 @@ Route::post('letsencrypt/secure', function () {
|
|||
}
|
||||
|
||||
$findHostingSubscription = \App\Models\HostingSubscription::where('id', $findDomain->hosting_subscription_id)->first();
|
||||
if (! $findHostingSubscription) {
|
||||
if (!$findHostingSubscription) {
|
||||
return response()->json(['error' => 'Domain not hosted'], 400);
|
||||
}
|
||||
|
||||
$generalSettings = Settings::general();
|
||||
try {
|
||||
$secureDomain = new \Modules\LetsEncrypt\Jobs\LetsEncryptSecureDomain($findDomain->id);
|
||||
$secureDomain->handle();
|
||||
|
||||
$sslCertificateFilePath = '/etc/letsencrypt/live/'.$findDomain->domain.'/cert.pem';
|
||||
$sslCertificateKeyFilePath = '/etc/letsencrypt/live/'.$findDomain->domain.'/privkey.pem';
|
||||
$sslCertificateChainFilePath = '/etc/letsencrypt/live/'.$findDomain->domain.'/fullchain.pem';
|
||||
ApacheBuild::dispatchSync();
|
||||
|
||||
$certbotHttpSecureCommand = view('letsencrypt::actions.certbot-http-secure-command', [
|
||||
'domain' => $findDomain->domain,
|
||||
'domainRoot' => $findDomain->domain_root,
|
||||
'domainPublic' => $findDomain->domain_public,
|
||||
'email' => $generalSettings['master_email'],
|
||||
'country' => $generalSettings['master_country'],
|
||||
'locality' => $generalSettings['master_locality'],
|
||||
'organization' => $generalSettings['organization_name'],
|
||||
])->render();
|
||||
|
||||
$exec = shell_exec($certbotHttpSecureCommand);
|
||||
|
||||
$validateCertificates = [];
|
||||
|
||||
if (! file_exists($sslCertificateFilePath)
|
||||
|| ! file_exists($sslCertificateKeyFilePath)
|
||||
|| ! file_exists($sslCertificateChainFilePath)) {
|
||||
// Cant get all certificates
|
||||
return response()->json(['error' => 'Cant get all certificates'], 400);
|
||||
return [
|
||||
'success' => 'Domain secured successfully'
|
||||
];
|
||||
} catch (\Exception $e) {
|
||||
return response()->json(['error' => 'Can\'t secure domain'], 500);
|
||||
}
|
||||
|
||||
$sslCertificateFileContent = file_get_contents($sslCertificateFilePath);
|
||||
$sslCertificateKeyFileContent = file_get_contents($sslCertificateKeyFilePath);
|
||||
$sslCertificateChainFileContent = file_get_contents($sslCertificateChainFilePath);
|
||||
|
||||
if (! empty($sslCertificateChainFileContent)) {
|
||||
$validateCertificates['certificate'] = $sslCertificateFileContent;
|
||||
}
|
||||
if (! empty($sslCertificateKeyFileContent)) {
|
||||
$validateCertificates['private_key'] = $sslCertificateKeyFileContent;
|
||||
}
|
||||
if (! empty($sslCertificateChainFileContent)) {
|
||||
$validateCertificates['certificate_chain'] = $sslCertificateChainFileContent;
|
||||
}
|
||||
if (count($validateCertificates) !== 3) {
|
||||
// Cant get all certificates
|
||||
return;
|
||||
}
|
||||
|
||||
$websiteSslCertificate = new DomainSslCertificate();
|
||||
$websiteSslCertificate->domain = $findDomain->domain;
|
||||
$websiteSslCertificate->certificate = $validateCertificates['certificate'];
|
||||
$websiteSslCertificate->private_key = $validateCertificates['private_key'];
|
||||
$websiteSslCertificate->certificate_chain = $validateCertificates['certificate_chain'];
|
||||
$websiteSslCertificate->customer_id = $findDomain->customer_id;
|
||||
$websiteSslCertificate->is_active = 1;
|
||||
$websiteSslCertificate->is_wildcard = 0;
|
||||
$websiteSslCertificate->is_auto_renew = 1;
|
||||
$websiteSslCertificate->provider = 'letsencrypt';
|
||||
$websiteSslCertificate->save();
|
||||
|
||||
$findDomain->configureVirtualHost(true);
|
||||
|
||||
ApacheBuild::dispatchSync();
|
||||
|
||||
return [
|
||||
'success' => 'Domain secured successfully'
|
||||
];
|
||||
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue