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

<?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
]);
}
}