StringUtils.swift 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. //
  2. // StringUtils.swift
  3. // flutter_callkit_incoming
  4. //
  5. // Created by Hien Nguyen on 21/02/2022.
  6. //
  7. import Foundation
  8. import CryptoSwift
  9. extension String {
  10. func encrypt(encryptionKey: String = "xrBixqjjMhHifSDgSJ8O4QJYMZ1UHs45", iv: String = "lmYSgP3vixDAiBzW") -> String {
  11. if let aes = try? AES(key: encryptionKey, iv: iv),
  12. let encrypted = try? aes.encrypt(Array<UInt8>(self.utf8)) {
  13. return encrypted.toHexString()
  14. }
  15. return ""
  16. }
  17. func decrypt(encryptionKey: String = "xrBixqjjMhHifSDgSJ8O4QJYMZ1UHs45", iv: String = "lmYSgP3vixDAiBzW") -> String {
  18. if let aes = try? AES(key: encryptionKey, iv: iv),
  19. let decrypted = try? aes.decrypt(Array<UInt8>(hex: self)) {
  20. return String(data: Foundation.Data(decrypted), encoding: .utf8) ?? ""
  21. }
  22. return ""
  23. }
  24. func fromBase64() -> String {
  25. guard let data = Foundation.Data(base64Encoded: self) else {
  26. return ""
  27. }
  28. return String(data: data, encoding: .utf8) ?? ""
  29. }
  30. func toBase64() -> String {
  31. return Foundation.Data(self.utf8).base64EncodedString()
  32. }
  33. public func encryptHandle(encryptionKey: String = "xrBixqjjMhHifSDgSJ8O4QJYMZ1UHs45", iv: String = "lmYSgP3vixDAiBzW") -> String {
  34. return self.encrypt().toBase64()
  35. }
  36. public func decryptHandle(encryptionKey: String = "xrBixqjjMhHifSDgSJ8O4QJYMZ1UHs45", iv: String = "lmYSgP3vixDAiBzW") -> String {
  37. return self.fromBase64().decrypt()
  38. }
  39. public func getDecryptHandle() -> [String: Any] {
  40. if (!self.isBase64Encoded()) {
  41. var map: [String: Any] = [:]
  42. map["handle"] = self
  43. return map
  44. }
  45. if let data = self.decryptHandle().data(using: .utf8) {
  46. do {
  47. return try (JSONSerialization.jsonObject(with: data, options: []) as? [String: Any])!
  48. } catch {
  49. print(error.localizedDescription)
  50. }
  51. }
  52. return [:]
  53. }
  54. public func getHandleType() -> String {
  55. if (!self.isBase64Encoded()) {
  56. if (!self.isPhoneNumber()) {
  57. return "email"
  58. } else {
  59. return "number"
  60. }
  61. }
  62. return "generic"
  63. }
  64. public func isBase64Encoded() -> Bool {
  65. let value = self.fromBase64()
  66. return !value.isEmpty
  67. }
  68. func isPhoneNumber() -> Bool {
  69. let cleanedValue = self
  70. .replacingOccurrences(of: "[+-]", with: "", options: .regularExpression)
  71. .replacingOccurrences(of: "[ ]", with: "", options: .regularExpression)
  72. let decimalCharacters = CharacterSet.decimalDigits
  73. let characterSet = CharacterSet(charactersIn: cleanedValue)
  74. return decimalCharacters.isSuperset(of: characterSet)
  75. }
  76. }