KMHTTP+OEM.swift 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. //
  2. // KMHTTP+OEM.swift
  3. // PDF Reader Pro
  4. //
  5. // Created by User-Tangchao on 2024/10/24.
  6. //
  7. import Foundation
  8. import CommonCrypto
  9. // MARK: - OEM
  10. let kURLAPI_oemRegister = "/pdf/register"
  11. let kURLAPI_oemLogin = "/pdf/login"
  12. let kURLAPI_oemGetProductData = "/pdf/get_product_data"
  13. let kURLAPI_oemGetPermissions = "/pdf/get_permissions"
  14. let kURLAPI_oemLogout = "/pdf/logout"
  15. let kURLAPI_oemBind = "/pdf/bind"
  16. enum KMHttpReponseCode: Int {
  17. case none = 0
  18. case passwordChanged = 405
  19. case accountAtOtherDeviceLogin = 402
  20. }
  21. extension KMHTTP {
  22. public class func OEM_POST(urlString: String, parameter: [String : Any]?, headers: [String : String]?, callback:@escaping ((Bool, KMRequestResultModel?, String?)->Void)) {
  23. let timeStamp = String(format: "%.0f", Date().timeIntervalSince1970)
  24. var randomStr = "100000000"
  25. let random = arc4random()
  26. if random > 0 {
  27. randomStr = String(format: "%ld", random)
  28. }
  29. let secret = "puN3du01bFtumyu2L"
  30. let string = timeStamp + randomStr + secret
  31. let encrypt = self.sha1(str: string)
  32. var signature = self.md5(encrypt).uppercased()
  33. let theUrl = kOEMBaseUrl + urlString + "?" + "timeStamp=" + timeStamp + "&" + "randomStr=" + randomStr + "&" + "signature=" + signature
  34. let boundary = "Boundary-\(UUID().uuidString)"
  35. var theHeaders = ["Device-Type" : "mac", "Content-Type" : "multipart/form-data; boundary=\(boundary)"]
  36. for (key, value) in headers ?? [:] {
  37. theHeaders.updateValue(value, forKey: key)
  38. }
  39. KMHTTP.POST(urlString: theUrl, parameter: parameter, headers: theHeaders, callback: callback)
  40. }
  41. class func md5(_ input: String) -> String {
  42. let messageData = input.data(using: .utf8)!
  43. var digestData = Data(count: Int(CC_MD5_DIGEST_LENGTH))
  44. _ = digestData.withUnsafeMutableBytes { digestBytes -> UnsafeMutablePointer<UInt8>? in
  45. messageData.withUnsafeBytes { messageBytes -> UnsafeMutablePointer<UInt8>? in
  46. CC_MD5(messageBytes.baseAddress, CC_LONG(messageData.count), digestBytes.bindMemory(to: UInt8.self).baseAddress)
  47. }
  48. }
  49. return digestData.map { String(format: "%02x", $0) }.joined()
  50. }
  51. class func sha1(str: String) -> String {
  52. let data = str.data(using: .utf8)
  53. var digest = [uint8](repeating: 0, count: Int(CC_SHA1_DIGEST_LENGTH))
  54. let newData = NSData.init(data: data!)
  55. CC_SHA1(newData.bytes, CC_LONG(data?.count ?? 0), &digest)
  56. let output = NSMutableString(capacity: Int(CC_SHA1_DIGEST_LENGTH))
  57. for byte in digest {
  58. output.appendFormat("%02x", byte)
  59. }
  60. return output as String
  61. }
  62. }