mirror of
https://github.com/dyzulk/trustlab-api.git
synced 2026-01-26 21:32:08 +07:00
feat: add issuer_name tracking and display in CA management
This commit is contained in:
@@ -38,32 +38,7 @@ class RootCaApiController extends Controller
|
||||
$days = (int) $request->input('days', 3650);
|
||||
|
||||
try {
|
||||
$newData = $this->sslService->renewCaCertificate($certificate, $days);
|
||||
|
||||
// 1. Unset 'is_latest' from all versions of this CA type/name
|
||||
CaCertificate::where('ca_type', $certificate->ca_type)
|
||||
->where('common_name', $certificate->common_name)
|
||||
->update(['is_latest' => false]);
|
||||
|
||||
// 2. Create NEW version record
|
||||
$newCertificate = CaCertificate::create([
|
||||
'ca_type' => $certificate->ca_type,
|
||||
'common_name' => $certificate->common_name,
|
||||
'organization' => $certificate->organization,
|
||||
'key_content' => $certificate->key_content, // Keep same private key for renewal
|
||||
'cert_content' => $newData['cert_content'],
|
||||
'serial_number' => $newData['serial_number'],
|
||||
'valid_from' => $newData['valid_from'],
|
||||
'valid_to' => $newData['valid_to'],
|
||||
'is_latest' => true,
|
||||
]);
|
||||
|
||||
// 3. Automatically sync the new version to CDN (Both latest and archive locations)
|
||||
$this->sslService->uploadPublicCertsOnly($newCertificate, 'both');
|
||||
$this->sslService->uploadIndividualInstallersOnly($newCertificate, 'both');
|
||||
|
||||
// 4. Update bundles
|
||||
$this->sslService->syncAllBundles();
|
||||
$newCertificate = $this->sslService->executeRenewalFlow($certificate, $days);
|
||||
|
||||
return response()->json([
|
||||
'status' => 'success',
|
||||
|
||||
@@ -24,6 +24,7 @@ class CaCertificate extends Model
|
||||
'valid_from',
|
||||
'valid_to',
|
||||
'is_latest',
|
||||
'issuer_name',
|
||||
'cert_path',
|
||||
'der_path',
|
||||
'bat_path',
|
||||
|
||||
@@ -416,6 +416,7 @@ class OpenSslService
|
||||
'serial_number' => $newSerialHex,
|
||||
'valid_from' => date('Y-m-d H:i:s', $newInfo['validFrom_time_t']),
|
||||
'valid_to' => date('Y-m-d H:i:s', $newInfo['validTo_time_t']),
|
||||
'issuer_name' => $cert->ca_type === 'root' ? 'Self-Signed' : ($root ? $root->common_name : 'Unknown Root'),
|
||||
];
|
||||
|
||||
} finally {
|
||||
@@ -452,9 +453,9 @@ class OpenSslService
|
||||
}
|
||||
|
||||
/**
|
||||
* Internal helper to handle the DB + CDN flow for a single renewal.
|
||||
* Handle the DB + CDN flow for a single renewal.
|
||||
*/
|
||||
private function executeRenewalFlow(CaCertificate $cert, int $days)
|
||||
public function executeRenewalFlow(CaCertificate $cert, int $days)
|
||||
{
|
||||
$newData = $this->renewCaCertificate($cert, $days);
|
||||
|
||||
@@ -473,6 +474,7 @@ class OpenSslService
|
||||
'serial_number' => $newData['serial_number'],
|
||||
'valid_from' => $newData['valid_from'],
|
||||
'valid_to' => $newData['valid_to'],
|
||||
'issuer_name' => $newData['issuer_name'],
|
||||
'is_latest' => true,
|
||||
]);
|
||||
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::connection('mysql_ca')->table('ca_certificates', function (Blueprint $table) {
|
||||
$table->string('issuer_name')->nullable()->after('organization');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::connection('mysql_ca')->table('ca_certificates', function (Blueprint $table) {
|
||||
$table->dropColumn('issuer_name');
|
||||
});
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user