From e5265a21d5852427dfb07fbf559bcd5ff74c6e48 Mon Sep 17 00:00:00 2001 From: xiaoqidun Date: Wed, 15 Jul 2026 12:43:00 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E5=89=8D=E7=AB=AF=E7=95=8C=E9=9D=A2):=20?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=AD=BE=E5=90=8D=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/webui/ofdgo.js | 14 ++++- internal/webui/webui.go | 130 +++++++++++++++++++++++----------------- 2 files changed, 85 insertions(+), 59 deletions(-) diff --git a/assets/webui/ofdgo.js b/assets/webui/ofdgo.js index 2a00961..3297ac2 100644 --- a/assets/webui/ofdgo.js +++ b/assets/webui/ofdgo.js @@ -1673,7 +1673,7 @@ function renderSignatures() { const fragment = document.createDocumentFragment(); for (const signature of signatures) { const row = document.createElement("div"); - row.className = `signature-row ${signature.integrityValid ? "valid" : "invalid"}`; + row.className = `signature-row ${signature.valid ? "valid" : "invalid"}`; const head = document.createElement("div"); head.className = "signature-head"; @@ -1682,13 +1682,16 @@ function renderSignatures() { const badges = document.createElement("div"); badges.className = "signature-badges"; - badges.append(fontBadge(signature.integrityValid ? "完整" : "异常", signature.integrityValid ? "valid" : "invalid")); + badges.append(fontBadge(signature.valid ? "通过" : "异常", signature.valid ? "valid" : "invalid")); head.append(name, badges); row.append(head); appendSignatureLine(row, "编号", signature.id); appendSignatureLine(row, "版本", signature.version); appendSignatureLine(row, "章图", signature.sealType); + appendSignatureLine(row, "章号", signature.sealId); + appendSignatureLine(row, "章名", signature.sealName); + appendSignatureLine(row, "厂商", signature.sealVendor); appendSignatureLine(row, "签者", signature.signer); appendSignatureLine(row, "时间", formatSignatureTime(signature.signatureDateTime)); appendSignatureLine(row, "机构", signatureAgency(signature)); @@ -1699,6 +1702,11 @@ function renderSignatures() { appendSignatureCheck(row, "一致", signature.sealMatchOK); } appendSignatureCheck(row, "证书", signature.certOK); + appendSignaturePolicy(row, "签期", signature.signatureTimeChecked, signature.signatureTimeOK); + appendSignaturePolicy(row, "章期", signature.sealTimeChecked, signature.sealTimeOK); + if (signature.sealCertTimeChecked) { + appendSignatureLine(row, "制期", signature.sealCertTimeOK ? "有效" : "失效", signature.sealCertTimeOK ? "ok" : ""); + } appendSignaturePolicy(row, "时效", signature.certTimeChecked, signature.certTimeOK); appendSignaturePolicy(row, "信任", signature.certTrustChecked, signature.certTrustOK); appendSignatureLine(row, "保护", signatureReferenceText(signature), signatureReferenceStatus(signature)); @@ -1718,7 +1726,7 @@ function signatureSummary(signatures) { if (!signatures.length) { return "0"; } - const invalid = signatures.filter((signature) => !signature.integrityValid).length; + const invalid = signatures.filter((signature) => !signature.valid).length; if (invalid) { return `${signatures.length} · 异常 ${invalid}`; } diff --git a/internal/webui/webui.go b/internal/webui/webui.go index 912bfaa..09206f1 100644 --- a/internal/webui/webui.go +++ b/internal/webui/webui.go @@ -41,34 +41,43 @@ type FontInfo = ofdgo.FontInfo // SignatureInfo 签名验证信息 type SignatureInfo struct { - ID string `json:"id"` - Type string `json:"type"` - IntegrityValid bool `json:"integrityValid"` - Version string `json:"version,omitempty"` - SealType string `json:"sealType,omitempty"` - Signer string `json:"signer,omitempty"` - SignatureDateTime string `json:"signatureDateTime,omitempty"` - Provider string `json:"provider,omitempty"` - Company string `json:"company,omitempty"` - DataHashOK bool `json:"dataHashOK"` - SignedValueOK bool `json:"signedValueOK"` - SealOK bool `json:"sealOK"` - SealMatchOK bool `json:"sealMatchOK"` - CertOK bool `json:"certOK"` - CertTimeChecked bool `json:"certTimeChecked,omitempty"` - CertTimeOK bool `json:"certTimeOK,omitempty"` - CertTrustChecked bool `json:"certTrustChecked,omitempty"` - CertTrustOK bool `json:"certTrustOK,omitempty"` - ReferenceCount int `json:"referenceCount"` - ReferencePassed int `json:"referencePassed"` - SignatureMethod string `json:"signatureMethod,omitempty"` - DigestMethod string `json:"digestMethod,omitempty"` - SignSerial string `json:"signSerial,omitempty"` - SignSubject string `json:"signSubject,omitempty"` - SignIssuer string `json:"signIssuer,omitempty"` - SealSubject string `json:"sealSubject,omitempty"` - Stamps []SignatureStampInfo `json:"stamps,omitempty"` - Error string `json:"error,omitempty"` + ID string `json:"id"` + Type string `json:"type"` + Valid bool `json:"valid"` + Version string `json:"version,omitempty"` + SealType string `json:"sealType,omitempty"` + SealID string `json:"sealId,omitempty"` + SealName string `json:"sealName,omitempty"` + SealVendor string `json:"sealVendor,omitempty"` + Signer string `json:"signer,omitempty"` + SignatureDateTime string `json:"signatureDateTime,omitempty"` + Provider string `json:"provider,omitempty"` + Company string `json:"company,omitempty"` + DataHashOK bool `json:"dataHashOK"` + SignedValueOK bool `json:"signedValueOK"` + SealOK bool `json:"sealOK"` + SealMatchOK bool `json:"sealMatchOK"` + CertOK bool `json:"certOK"` + SignatureTimeChecked bool `json:"signatureTimeChecked,omitempty"` + SignatureTimeOK bool `json:"signatureTimeOK,omitempty"` + SealTimeChecked bool `json:"sealTimeChecked,omitempty"` + SealTimeOK bool `json:"sealTimeOK,omitempty"` + SealCertTimeChecked bool `json:"sealCertTimeChecked,omitempty"` + SealCertTimeOK bool `json:"sealCertTimeOK,omitempty"` + CertTimeChecked bool `json:"certTimeChecked,omitempty"` + CertTimeOK bool `json:"certTimeOK,omitempty"` + CertTrustChecked bool `json:"certTrustChecked,omitempty"` + CertTrustOK bool `json:"certTrustOK,omitempty"` + ReferenceCount int `json:"referenceCount"` + ReferencePassed int `json:"referencePassed"` + SignatureMethod string `json:"signatureMethod,omitempty"` + DigestMethod string `json:"digestMethod,omitempty"` + SignSerial string `json:"signSerial,omitempty"` + SignSubject string `json:"signSubject,omitempty"` + SignIssuer string `json:"signIssuer,omitempty"` + SealSubject string `json:"sealSubject,omitempty"` + Stamps []SignatureStampInfo `json:"stamps,omitempty"` + Error string `json:"error,omitempty"` } // SignatureStampInfo 签名外观信息 @@ -346,34 +355,43 @@ func (s *Session) signatureInfos() ([]SignatureInfo, error) { // 返回: SignatureInfo 签名验证信息 func signatureInfo(report ofdgo.SignatureVerifyReport) SignatureInfo { return SignatureInfo{ - ID: report.ID, - Type: string(report.Type), - IntegrityValid: report.IntegrityValid(), - Version: report.Provider.Version, - SealType: report.SealType, - Signer: signatureSigner(report), - SignatureDateTime: report.SignatureDateTime, - Provider: report.Provider.ProviderName, - Company: report.Provider.Company, - DataHashOK: report.DataHashOK, - SignedValueOK: report.SignedValueOK, - SealOK: report.SealOK, - SealMatchOK: report.SealMatchOK, - CertOK: report.CertOK, - CertTimeChecked: report.CertTimeChecked, - CertTimeOK: report.CertTimeOK, - CertTrustChecked: report.CertTrustChecked, - CertTrustOK: report.CertTrustOK, - ReferenceCount: len(report.References), - ReferencePassed: signatureReferencePassed(report.References), - SignatureMethod: report.SignatureMethod, - DigestMethod: report.DigestMethod, - SignSerial: report.SignCert.SerialNumber, - SignSubject: report.SignCert.Subject, - SignIssuer: report.SignCert.Issuer, - SealSubject: report.SealCert.Subject, - Stamps: signatureStampInfos(report.StampPositions), - Error: signatureReportError(report), + ID: report.ID, + Type: string(report.Type), + Valid: report.Valid, + Version: report.Provider.Version, + SealType: report.SealType, + SealID: report.SealInfo.ID, + SealName: report.SealInfo.Name, + SealVendor: report.SealInfo.VendorID, + Signer: signatureSigner(report), + SignatureDateTime: report.SignatureDateTime, + Provider: report.Provider.ProviderName, + Company: report.Provider.Company, + DataHashOK: report.DataHashOK, + SignedValueOK: report.SignedValueOK, + SealOK: report.SealOK, + SealMatchOK: report.SealMatchOK, + CertOK: report.CertOK, + SignatureTimeChecked: report.SignatureTimeChecked, + SignatureTimeOK: report.SignatureTimeOK, + SealTimeChecked: report.SealTimeChecked, + SealTimeOK: report.SealTimeOK, + SealCertTimeChecked: report.SealCertTimeChecked, + SealCertTimeOK: report.SealCertTimeOK, + CertTimeChecked: report.CertTimeChecked, + CertTimeOK: report.CertTimeOK, + CertTrustChecked: report.CertTrustChecked, + CertTrustOK: report.CertTrustOK, + ReferenceCount: len(report.References), + ReferencePassed: signatureReferencePassed(report.References), + SignatureMethod: report.SignatureMethod, + DigestMethod: report.DigestMethod, + SignSerial: report.SignCert.SerialNumber, + SignSubject: report.SignCert.Subject, + SignIssuer: report.SignCert.Issuer, + SealSubject: report.SealCert.Subject, + Stamps: signatureStampInfos(report.StampPositions), + Error: signatureReportError(report), } }