You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.3 KiB
PHP
49 lines
1.3 KiB
PHP
<?php
|
|
|
|
namespace Eater\Glim\Handler\Panel\Servers;
|
|
|
|
use Eater\Glim\Handler\Session;
|
|
use Eater\Glim\Model\ServerQuery;
|
|
use Eater\Glim\Service\CA;
|
|
use Eater\Glim\Service\Server;
|
|
use Symfony\Component\Config\Definition\Exception\Exception;
|
|
|
|
class Sign extends Session
|
|
{
|
|
protected $shouldHaveSuperuser = true;
|
|
|
|
public function handle()
|
|
{
|
|
/** @var CA $ca */
|
|
$ca = $this->get('ca');
|
|
$server = ServerQuery::create()->findOneByFingerprint($this->post('fingerprint'));
|
|
|
|
/** @var Server $serverManager */
|
|
$serverManager = $this->get('server');
|
|
try {
|
|
$csr = $serverManager->getCsrFromServer($server);
|
|
$crt = $ca->signServerKey($csr, $server->getFqdn());
|
|
} catch (\Exception $e) {
|
|
return $this->json([
|
|
'success' => false,
|
|
'error' => $e->getMessage()
|
|
]);
|
|
}
|
|
|
|
$server->setCertificate($crt);
|
|
$server->save();
|
|
|
|
try {
|
|
$serverManager->deliverSignedCertificate($server);
|
|
} catch (\Exception $e) {
|
|
return $this->json([
|
|
'success' => false,
|
|
'error' => 'Failed to deliver certificate to server: ' . $e->__toString()
|
|
]);
|
|
}
|
|
|
|
return $this->json([
|
|
'success' => true
|
|
]);
|
|
}
|
|
} |