From c1e28bb1a35d7fa0e25295f1e359bb0cc4761847 Mon Sep 17 00:00:00 2001 From: xiaoqidun Date: Wed, 8 Jul 2026 13:47:19 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E7=AD=BE=E5=90=8D=E9=AA=8C=E7=AD=BE):=20?= =?UTF-8?q?=E4=BC=98=E5=8C=96WebUI=E7=AD=BE=E5=90=8D=E9=AA=8C=E7=AD=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/webui/ofdgo.js | 9 +++++++++ internal/webui/webui.go | 35 ++++++++++++++++++++++++++--------- 2 files changed, 35 insertions(+), 9 deletions(-) diff --git a/assets/webui/ofdgo.js b/assets/webui/ofdgo.js index 2a3b9aa..1634f49 100644 --- a/assets/webui/ofdgo.js +++ b/assets/webui/ofdgo.js @@ -1557,6 +1557,8 @@ function renderSignatures() { appendSignatureCheck(row, "匹配", signature.sealMatchOK); } appendSignatureCheck(row, "证书", signature.certOK); + appendSignaturePolicy(row, "时效", signature.certTimeChecked, signature.certTimeOK); + appendSignaturePolicy(row, "信任", signature.certTrustChecked, signature.certTrustOK); appendSignatureLine(row, "保护", signatureReferenceText(signature), signatureReferenceStatus(signature)); appendSignatureLine(row, "序号", signature.signSerial); appendSignatureLine(row, "算法", signature.signatureMethod); @@ -1676,6 +1678,13 @@ function appendSignatureCheck(row, label, ok) { appendSignatureLine(row, label, ok ? "通过" : "失败", ok ? "ok" : "fail"); } +function appendSignaturePolicy(row, label, checked, ok) { + if (!checked) { + return; + } + appendSignatureCheck(row, label, ok); +} + async function focusSignatureStamp(stamp) { const pageIndex = (stamp.page || 0) - 1; if (!state.doc || pageIndex < 0) { diff --git a/internal/webui/webui.go b/internal/webui/webui.go index 0ab8aaa..9919516 100644 --- a/internal/webui/webui.go +++ b/internal/webui/webui.go @@ -55,6 +55,10 @@ type SignatureInfo struct { 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"` SignSerial string `json:"signSerial,omitempty"` @@ -315,19 +319,15 @@ func (s *Session) signatureInfos() ([]SignatureInfo, error) { } infos := make([]SignatureInfo, 0, len(reports)) for _, report := range reports { - positions, err := s.Reader.SignatureStampPositions(report.Stamps) - if err != nil { - return nil, err - } - infos = append(infos, signatureInfo(report, positions)) + infos = append(infos, signatureInfo(report)) } return infos, nil } // signatureInfo 转换签名验证信息 -// 入参: report 签名验证报告, positions 签名外观位置 +// 入参: report 签名验证报告 // 返回: SignatureInfo 签名验证信息 -func signatureInfo(report ofdgo.SignatureVerifyReport, positions []ofdgo.SignatureStampPosition) SignatureInfo { +func signatureInfo(report ofdgo.SignatureVerifyReport) SignatureInfo { return SignatureInfo{ ID: report.ID, Type: string(report.Type), @@ -343,6 +343,10 @@ func signatureInfo(report ofdgo.SignatureVerifyReport, positions []ofdgo.Signatu 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), SignSerial: report.SignCert.SerialNumber, @@ -351,8 +355,8 @@ func signatureInfo(report ofdgo.SignatureVerifyReport, positions []ofdgo.Signatu SignSubject: report.SignCert.Subject, SignIssuer: report.SignCert.Issuer, SealSubject: report.SealCert.Subject, - Stamps: signatureStampInfos(positions), - Error: report.Error, + Stamps: signatureStampInfos(report.StampPositions), + Error: signatureReportError(report), } } @@ -385,6 +389,19 @@ func signatureReferencePassed(refs []ofdgo.SignatureReferenceVerify) int { return count } +// signatureReportError 获取签名错误信息 +// 入参: report 签名验证报告 +// 返回: string 错误信息 +func signatureReportError(report ofdgo.SignatureVerifyReport) string { + if report.Error != "" && report.StampPositionError != "" { + return report.Error + "; " + report.StampPositionError + } + if report.Error != "" { + return report.Error + } + return report.StampPositionError +} + // signatureStampInfos 转换签名外观位置 // 入参: positions 签名外观位置 // 返回: []SignatureStampInfo 签名外观信息