在 CB_IMGPSScanImp.pas.bk 中,「安全傳輸與 API 通訊模組」負責處理 ActiveX 客戶端與後端伺服器 (如 Java Servlet 平台) 之間的所有資料交換與檔案傳輸。由於涉及機敏的金融/保險文件,此模組高度依賴加密與安全通訊協定。
若要將此模組進一步細拆,其內部組成可分為以下四大子分類:
職責:專責透過 HTTP(S) 協定,向後端的 Java Servlet 端點發送 GET/POST 請求,用於同步時間、下載設定檔或回報案件狀態。
核心實作特性:
* 套件依賴:底層依賴 SecureBlackbox 的 TElHTTPSClient (在變數宣告為 HTTPSClient) 處理 SSL/TLS 連線。
* 字串/表單資料交換:
* ProcessServlet_Get:使用 HTTP GET 方式,將加密過的參數 (SendData) 送至伺服器,並將伺服器回傳的結果寫入 FReWrite 或 Memo1 中。
* ProcessServlet / ProcessServlet_FormData:使用 HTTP POST 或 multipart/form-data 方式提交較大的資料集(如 OMR 檢核結果、案件完成通知等)。
* 狀態與錯誤攔截:檢查伺服器回傳的代碼(例如回傳 0 代表成功,1 代表錯誤,或攔截回傳 HTML 中包含 login.js 來判斷 Session 是否逾時登出)。
職責:處理實體影像檔案(通常是打包後的 ZIP 檔)或系統授權檔的實體傳輸,並根據系統設定動態切換 HTTP 或 FTP 協定。
核心實作特性:
* HTTP 檔案傳輸:
* upFile:透過 HTTP POST (multipart/form-data) 將本地端的檔案 (如 Img.zip 或 .lic 檔) 上傳至伺服器指定的 Servlet 接收端。
* dnFile_Get / dnFile:透過 HTTP 協定從伺服器下載檔案 (如 OMRSet.zip, KeyinSet.zip 或舊案影像),並提供下載狀態監控。
* FTPS 檔案傳輸 (高頻寬/大檔專用):
* GetftpInfo:先透過 HTTP 向伺服器查詢該案件是否應使用 FTP 傳輸,並取回加密的 FTP 登入資訊。
* 依賴 SecureBlackbox 的 TElSimpleFTPSClient 建立 FTP over SSL 連線。
* SetFtpInfo、IIS_Ftp.FtpsConnect、IIS_Ftp.FtpsToMain、IIS_Ftp.FtpsDownloadFile:負責實際的 FTP 登入、切換目錄、上傳與下載操作,完成後呼叫 FtpCaseComplete 透過 HTTP 通知伺服器傳檔結束。
職責:負責資料傳輸前後的加解密運算,以及檔案完整性的 MD5 校驗,確保通訊過程不被竄改。
核心實作特性:
* 字串加解密 (String Encryption):
* 利用 En_DecryptionStr_Base64 函式(可能來自自訂或第三方的 Encryp 單元),對 URL 參數 (如 checktime, col 欄位清單) 進行加解密,避免敏感資訊在 URL 明文中裸奔。
* 解析加密過的 FTP 登入資訊字串。
* 檔案 MD5 雜湊校驗 (File Hashing):
* 使用 Indy 的 TIdHashMessageDigest5 元件。
* LoadFileGetMD5:讀取本機影像檔並計算其 MD5 值,用於比對「異動件 (ESCAN)」模式下,檔案是否與伺服器原有的版本一致,防止誤刪或重複傳輸。
* 憑證管理 (Certificate Management):
* HTTPSClientCertificateValidate:處理 X.509 憑證驗證事件,通常設定為 Validate := True 以略過嚴格的自簽憑證檢查(在內部封閉網路中常見的做法)。
職責:在真正啟動傳輸前,將硬碟上散落的 TIFF/JPG 檔案、.dat 索引檔以及 .ini 設定檔,打包成單一的封裝檔以利傳輸。
核心實作特性:
* ZIP 壓縮封裝:
* 依賴 TVCLZip (VCLZip 模組)。
* ZipMainFile:讀取 Context.dat 等清單,將案件目錄下的所有影像與關聯的索引文字檔打包成 Img.zip。
* 包含檔案大小檢核邏輯:在打包完成後,檢查 ZIP 檔是否超過伺服器允許的上限 (FMaxUploadSize),若超過則阻擋上傳。
* ZIP 解壓縮處理:
* 依賴 VCLUnZip 模組。
* ExecuteUnZip / ExecuteUnZip_Pwd:將從伺服器下載回來的 OMRSet.zip、KeyinSet.zip 或舊案件影像壓縮檔解壓縮至指定的工作目錄中,並支援帶密碼的解壓縮。
針對「安全傳輸與 API 通訊模組」,若未來系統架構演進,建議考量以下重構方向:
HttpClient。建議將所有的 API 呼叫標準化為 RESTful API (JSON 格式),並使用原生的網路庫。DataLoading 鎖死整個 UI (Screen.Cursor := -11),使用者必須枯等上傳完成。重構時應將 Transport Manager 放入獨立的 Thread 或背景 Service 中執行,並透過回呼 (Callback) 或事件 (Event) 更新進度條,提升使用者體驗。En_DecryptionStr_Base64 在 URL 傳遞加密字串作為安全驗證。建議未來升級為標準的 OAuth 2.0 (JWT Token) 放在 HTTP Header 中進行授權,更加安全且符合現代 Web 規範。