// // KMHTTP+OEM.swift // PDF Reader Pro // // Created by User-Tangchao on 2024/10/24. // import Foundation import CommonCrypto // MARK: - OEM let kURLAPI_oemRegister = "/pdf/register" let kURLAPI_oemLogin = "/pdf/login" let kURLAPI_oemGetProductData = "/pdf/get_product_data" let kURLAPI_oemGetPermissions = "/pdf/get_permissions" let kURLAPI_oemLogout = "/pdf/logout" let kURLAPI_oemBind = "/pdf/bind" enum KMHttpReponseCode: Int { case none = 0 case passwordChanged = 405 case accountAtOtherDeviceLogin = 402 } extension KMHTTP { public class func OEM_POST(urlString: String, parameter: [String : Any]?, headers: [String : String]?, callback:@escaping ((Bool, KMRequestResultModel?, String?)->Void)) { let timeStamp = String(format: "%.0f", Date().timeIntervalSince1970) var randomStr = "100000000" let random = arc4random() if random > 0 { randomStr = String(format: "%ld", random) } let secret = "puN3du01bFtumyu2L" let string = timeStamp + randomStr + secret let encrypt = self.sha1(str: string) var signature = self.md5(encrypt).uppercased() let theUrl = kOEMBaseUrl + urlString + "?" + "timeStamp=" + timeStamp + "&" + "randomStr=" + randomStr + "&" + "signature=" + signature let boundary = "Boundary-\(UUID().uuidString)" var theHeaders = ["Device-Type" : "mac", "Content-Type" : "multipart/form-data; boundary=\(boundary)"] for (key, value) in headers ?? [:] { theHeaders.updateValue(value, forKey: key) } KMHTTP.POST(urlString: theUrl, parameter: parameter, headers: theHeaders, callback: callback) } class func md5(_ input: String) -> String { let messageData = input.data(using: .utf8)! var digestData = Data(count: Int(CC_MD5_DIGEST_LENGTH)) _ = digestData.withUnsafeMutableBytes { digestBytes -> UnsafeMutablePointer? in messageData.withUnsafeBytes { messageBytes -> UnsafeMutablePointer? in CC_MD5(messageBytes.baseAddress, CC_LONG(messageData.count), digestBytes.bindMemory(to: UInt8.self).baseAddress) } } return digestData.map { String(format: "%02x", $0) }.joined() } class func sha1(str: String) -> String { let data = str.data(using: .utf8) var digest = [uint8](repeating: 0, count: Int(CC_SHA1_DIGEST_LENGTH)) let newData = NSData.init(data: data!) CC_SHA1(newData.bytes, CC_LONG(data?.count ?? 0), &digest) let output = NSMutableString(capacity: Int(CC_SHA1_DIGEST_LENGTH)) for byte in digest { output.appendFormat("%02x", byte) } return output as String } }