Certificate::orderBy('expires_at')->paginate(20), ]); } public function store(Request $request) { $validated = $request->validate([ 'name' => 'required|string', 'domain' => 'required|string', 'certificate' => 'required|string', 'private_key' => 'required|string', 'type' => 'required|in:self-signed,lets-encrypt,custom', 'expires_at' => 'required|date', ]); Certificate::create([...$validated, 'status' => 'valid', 'created_by' => auth()->id()]); return back()->with('success', 'Certificate imported.'); } public function show(Certificate $cert) { return Inertia::render('Identity/CertShow', ['cert' => $cert]); } public function destroy(Certificate $cert) { $cert->delete(); return back()->with('success', 'Certificate deleted.'); } public function generate(Request $request) { $data = $request->validate(['domain' => 'required|string', 'days' => 'integer|min:1|max:3650']); $days = $data['days'] ?? 365; $privateKey = openssl_pkey_new(['private_key_bits' => 2048, 'private_key_type' => OPENSSL_KEYTYPE_RSA]); $csr = openssl_csr_new(['CN' => $data['domain']], $privateKey); $cert = openssl_csr_sign($csr, null, $privateKey, $days); openssl_x509_export($cert, $certOut); openssl_pkey_export($privateKey, $keyOut); Certificate::create([ 'name' => $data['domain'], 'domain' => $data['domain'], 'certificate' => $certOut, 'private_key' => $keyOut, 'type' => 'self-signed', 'expires_at' => now()->addDays($days), 'status' => 'valid', 'created_by' => auth()->id(), ]); return back()->with('success', 'Self-signed certificate generated.'); } }