KMHTTP+OEM.swift 2.9 KB

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