diff --git a/ui/src/app/certificate_requests/row.tsx b/ui/src/app/certificate_requests/row.tsx
index dc4d5be..69cc377 100644
--- a/ui/src/app/certificate_requests/row.tsx
+++ b/ui/src/app/certificate_requests/row.tsx
@@ -1,8 +1,8 @@
import { useState, Dispatch, SetStateAction, useEffect, useRef } from "react"
import { UseMutationResult, useMutation, useQueryClient } from "react-query"
import { extractCSR, extractCert } from "../utils"
-import { deleteCSR, rejectCSR } from "../queries"
-import { ConfirmationModal, SuccessNotification } from "./components"
+import { deleteCSR, rejectCSR, revokeCertificate } from "../queries"
+import { ConfirmationModal, SubmitCertificateModal, SuccessNotification } from "./components"
type rowProps = {
id: number,
@@ -20,6 +20,7 @@ export type ConfirmationModalData = {
export default function Row({ id, csr, certificate, ActionMenuExpanded, setActionMenuExpanded }: rowProps) {
const [successNotification, setSuccessNotification] = useState
(null)
const [detailsMenuOpen, setDetailsMenuOpen] = useState(false)
+ const [certificateFormOpen, setCertificateFormOpen] = useState(false)
const [confirmationModalData, setConfirmationModalData] = useState(null)
const csrObj = extractCSR(csr)
@@ -32,6 +33,9 @@ export default function Row({ id, csr, certificate, ActionMenuExpanded, setActio
const rejectMutation = useMutation(rejectCSR, {
onSuccess: () => queryClient.invalidateQueries('csrs')
})
+ const revokeMutation = useMutation(revokeCertificate, {
+ onSuccess: () => queryClient.invalidateQueries('csrs')
+ })
const mutationFunc = (mutation: UseMutationResult) => {
mutation.mutate(id.toString())
@@ -48,6 +52,13 @@ export default function Row({ id, csr, certificate, ActionMenuExpanded, setActio
warningText: "Deleting a Certificate Request means this row will be completely removed from the application. This action cannot be undone."
})
}
+ const handleRevoke = () => {
+ setConfirmationModalData({
+ func: () => mutationFunc(revokeMutation),
+ warningText: "Revoking a Certificate will delete it from the table. This action cannot be undone."
+ })
+ }
+
const handleCopy = () => {
navigator.clipboard.writeText(csr).then(function () {
setSuccessNotification("CSR copied to clipboard")
@@ -114,8 +125,11 @@ export default function Row({ id, csr, certificate, ActionMenuExpanded, setActio
-
-
+
+ {certificate == "rejected" || certificate == "" ?
+ :
+
+ }
@@ -129,6 +143,7 @@ export default function Row({ id, csr, certificate, ActionMenuExpanded, setActio
{confirmationModalData != null && }
+ {certificateFormOpen && }
{successNotification &&
diff --git a/ui/src/app/queries.ts b/ui/src/app/queries.ts
index 9e77178..d8b2c24 100644
--- a/ui/src/app/queries.ts
+++ b/ui/src/app/queries.ts
@@ -22,6 +22,22 @@ export async function postCSR(csr: string) {
return response.json()
}
+export function postCertToID(id: string) {
+ return async (cert: string) => {
+ const response = await fetch("/api/v1/certificate_requests/" + id + "/certificate", {
+ method: 'post',
+ headers: {
+ 'Content-Type': 'text/plain',
+ },
+ body: cert.trim()
+ })
+ if (!response.ok) {
+ throw new Error('Network response was not ok')
+ }
+ return response.json()
+ }
+}
+
export async function deleteCSR(id: string) {
const response = await fetch("/api/v1/certificate_requests/" + id, {
method: 'delete',
@@ -40,4 +56,14 @@ export async function rejectCSR(id: string) {
throw new Error('Network response was not ok')
}
return response.json()
+}
+
+export async function revokeCertificate(id: string) {
+ const response = await fetch("/api/v1/certificate_requests/" + id + "/certificate/reject", {
+ method: 'post',
+ })
+ if (!response.ok) {
+ throw new Error('Network response was not ok')
+ }
+ return response.json()
}
\ No newline at end of file
|