@sumsub/cordova-idensic-mobile-sdk-plugin 1.18.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (843) hide show
  1. package/CHANGELOG.md +3 -0
  2. package/README.md +8 -0
  3. package/demo/Gemfile +4 -0
  4. package/demo/Gemfile.lock +262 -0
  5. package/demo/README.md +61 -0
  6. package/demo/config.xml +46 -0
  7. package/demo/fastlane/Appfile +8 -0
  8. package/demo/fastlane/Fastfile +142 -0
  9. package/demo/fastlane/README.md +34 -0
  10. package/demo/fastlane/helpers +109 -0
  11. package/demo/hooks/README.md +23 -0
  12. package/demo/package-lock.json +3624 -0
  13. package/demo/package.json +57 -0
  14. package/demo/platforms/android/CordovaLib/AndroidManifest.xml +22 -0
  15. package/demo/platforms/android/CordovaLib/build.gradle +148 -0
  16. package/demo/platforms/android/CordovaLib/cordova.gradle +205 -0
  17. package/demo/platforms/android/CordovaLib/project.properties +11 -0
  18. package/demo/platforms/android/CordovaLib/src/org/apache/cordova/AuthenticationToken.java +69 -0
  19. package/demo/platforms/android/CordovaLib/src/org/apache/cordova/BuildHelper.java +70 -0
  20. package/demo/platforms/android/CordovaLib/src/org/apache/cordova/CallbackContext.java +142 -0
  21. package/demo/platforms/android/CordovaLib/src/org/apache/cordova/CallbackMap.java +65 -0
  22. package/demo/platforms/android/CordovaLib/src/org/apache/cordova/Config.java +71 -0
  23. package/demo/platforms/android/CordovaLib/src/org/apache/cordova/ConfigXmlParser.java +145 -0
  24. package/demo/platforms/android/CordovaLib/src/org/apache/cordova/CordovaActivity.java +521 -0
  25. package/demo/platforms/android/CordovaLib/src/org/apache/cordova/CordovaArgs.java +113 -0
  26. package/demo/platforms/android/CordovaLib/src/org/apache/cordova/CordovaBridge.java +187 -0
  27. package/demo/platforms/android/CordovaLib/src/org/apache/cordova/CordovaClientCertRequest.java +105 -0
  28. package/demo/platforms/android/CordovaLib/src/org/apache/cordova/CordovaDialogsHelper.java +152 -0
  29. package/demo/platforms/android/CordovaLib/src/org/apache/cordova/CordovaHttpAuthHandler.java +51 -0
  30. package/demo/platforms/android/CordovaLib/src/org/apache/cordova/CordovaInterface.java +97 -0
  31. package/demo/platforms/android/CordovaLib/src/org/apache/cordova/CordovaInterfaceImpl.java +249 -0
  32. package/demo/platforms/android/CordovaLib/src/org/apache/cordova/CordovaPlugin.java +422 -0
  33. package/demo/platforms/android/CordovaLib/src/org/apache/cordova/CordovaPreferences.java +101 -0
  34. package/demo/platforms/android/CordovaLib/src/org/apache/cordova/CordovaResourceApi.java +472 -0
  35. package/demo/platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebView.java +142 -0
  36. package/demo/platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebViewEngine.java +85 -0
  37. package/demo/platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebViewImpl.java +617 -0
  38. package/demo/platforms/android/CordovaLib/src/org/apache/cordova/CoreAndroid.java +407 -0
  39. package/demo/platforms/android/CordovaLib/src/org/apache/cordova/ExposedJsApi.java +31 -0
  40. package/demo/platforms/android/CordovaLib/src/org/apache/cordova/ICordovaClientCertRequest.java +66 -0
  41. package/demo/platforms/android/CordovaLib/src/org/apache/cordova/ICordovaCookieManager.java +33 -0
  42. package/demo/platforms/android/CordovaLib/src/org/apache/cordova/ICordovaHttpAuthHandler.java +38 -0
  43. package/demo/platforms/android/CordovaLib/src/org/apache/cordova/LOG.java +244 -0
  44. package/demo/platforms/android/CordovaLib/src/org/apache/cordova/NativeToJsMessageQueue.java +542 -0
  45. package/demo/platforms/android/CordovaLib/src/org/apache/cordova/PermissionHelper.java +87 -0
  46. package/demo/platforms/android/CordovaLib/src/org/apache/cordova/PluginEntry.java +70 -0
  47. package/demo/platforms/android/CordovaLib/src/org/apache/cordova/PluginManager.java +526 -0
  48. package/demo/platforms/android/CordovaLib/src/org/apache/cordova/PluginResult.java +198 -0
  49. package/demo/platforms/android/CordovaLib/src/org/apache/cordova/ResumeCallback.java +76 -0
  50. package/demo/platforms/android/CordovaLib/src/org/apache/cordova/Whitelist.java +170 -0
  51. package/demo/platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemCookieManager.java +74 -0
  52. package/demo/platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemExposedJsApi.java +53 -0
  53. package/demo/platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebChromeClient.java +301 -0
  54. package/demo/platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebView.java +88 -0
  55. package/demo/platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebViewClient.java +370 -0
  56. package/demo/platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebViewEngine.java +319 -0
  57. package/demo/platforms/android/android.json +440 -0
  58. package/demo/platforms/android/app/build.gradle +363 -0
  59. package/demo/platforms/android/app/libs/barcodescanner-release-2.1.5.aar +0 -0
  60. package/demo/platforms/android/app/src/main/AndroidManifest.xml +23 -0
  61. package/demo/platforms/android/app/src/main/java/com/applurk/nativetimer/Consumer.java +22 -0
  62. package/demo/platforms/android/app/src/main/java/com/applurk/nativetimer/NativeTimerAdapter.java +27 -0
  63. package/demo/platforms/android/app/src/main/java/com/applurk/nativetimer/NativeTimerAdapterImpl.java +123 -0
  64. package/demo/platforms/android/app/src/main/java/com/applurk/nativetimer/NativeTimerPlugin.java +163 -0
  65. package/demo/platforms/android/app/src/main/java/com/phonegap/plugins/barcodescanner/BarcodeScanner.java +328 -0
  66. package/demo/platforms/android/app/src/main/java/com/silkimen/cordovahttp/CordovaClientAuth.java +113 -0
  67. package/demo/platforms/android/app/src/main/java/com/silkimen/cordovahttp/CordovaHttpBase.java +225 -0
  68. package/demo/platforms/android/app/src/main/java/com/silkimen/cordovahttp/CordovaHttpDownload.java +41 -0
  69. package/demo/platforms/android/app/src/main/java/com/silkimen/cordovahttp/CordovaHttpOperation.java +24 -0
  70. package/demo/platforms/android/app/src/main/java/com/silkimen/cordovahttp/CordovaHttpPlugin.java +240 -0
  71. package/demo/platforms/android/app/src/main/java/com/silkimen/cordovahttp/CordovaHttpResponse.java +100 -0
  72. package/demo/platforms/android/app/src/main/java/com/silkimen/cordovahttp/CordovaHttpUpload.java +91 -0
  73. package/demo/platforms/android/app/src/main/java/com/silkimen/cordovahttp/CordovaObservableCallbackContext.java +58 -0
  74. package/demo/platforms/android/app/src/main/java/com/silkimen/cordovahttp/CordovaServerTrust.java +124 -0
  75. package/demo/platforms/android/app/src/main/java/com/silkimen/http/HttpBodyDecoder.java +55 -0
  76. package/demo/platforms/android/app/src/main/java/com/silkimen/http/HttpRequest.java +3095 -0
  77. package/demo/platforms/android/app/src/main/java/com/silkimen/http/JsonUtils.java +58 -0
  78. package/demo/platforms/android/app/src/main/java/com/silkimen/http/KeyChainKeyManager.java +57 -0
  79. package/demo/platforms/android/app/src/main/java/com/silkimen/http/TLSConfiguration.java +63 -0
  80. package/demo/platforms/android/app/src/main/java/com/silkimen/http/TLSSocketFactory.java +63 -0
  81. package/demo/platforms/android/app/src/main/java/com/sumsub/SumSubCordova/MainActivity.java +41 -0
  82. package/demo/platforms/android/app/src/main/java/main/java/com/sumsub/msdk/plugins/cordova/SNSMobileSdkCordovaPlugin.java +339 -0
  83. package/demo/platforms/android/app/src/main/java/org/apache/cordova/file/AssetFilesystem.java +294 -0
  84. package/demo/platforms/android/app/src/main/java/org/apache/cordova/file/ContentFilesystem.java +223 -0
  85. package/demo/platforms/android/app/src/main/java/org/apache/cordova/file/DirectoryManager.java +134 -0
  86. package/demo/platforms/android/app/src/main/java/org/apache/cordova/file/EncodingException.java +29 -0
  87. package/demo/platforms/android/app/src/main/java/org/apache/cordova/file/FileExistsException.java +29 -0
  88. package/demo/platforms/android/app/src/main/java/org/apache/cordova/file/FileUtils.java +1225 -0
  89. package/demo/platforms/android/app/src/main/java/org/apache/cordova/file/Filesystem.java +331 -0
  90. package/demo/platforms/android/app/src/main/java/org/apache/cordova/file/InvalidModificationException.java +30 -0
  91. package/demo/platforms/android/app/src/main/java/org/apache/cordova/file/LocalFilesystem.java +513 -0
  92. package/demo/platforms/android/app/src/main/java/org/apache/cordova/file/LocalFilesystemURL.java +64 -0
  93. package/demo/platforms/android/app/src/main/java/org/apache/cordova/file/NoModificationAllowedException.java +29 -0
  94. package/demo/platforms/android/app/src/main/java/org/apache/cordova/file/PendingRequests.java +94 -0
  95. package/demo/platforms/android/app/src/main/java/org/apache/cordova/file/TypeMismatchException.java +30 -0
  96. package/demo/platforms/android/app/src/main/java/org/apache/cordova/whitelist/WhitelistPlugin.java +161 -0
  97. package/demo/platforms/android/app/src/main/res/drawable-land-hdpi/screen.png +0 -0
  98. package/demo/platforms/android/app/src/main/res/drawable-land-ldpi/screen.png +0 -0
  99. package/demo/platforms/android/app/src/main/res/drawable-land-mdpi/screen.png +0 -0
  100. package/demo/platforms/android/app/src/main/res/drawable-land-xhdpi/screen.png +0 -0
  101. package/demo/platforms/android/app/src/main/res/drawable-land-xxhdpi/screen.png +0 -0
  102. package/demo/platforms/android/app/src/main/res/drawable-land-xxxhdpi/screen.png +0 -0
  103. package/demo/platforms/android/app/src/main/res/drawable-port-hdpi/screen.png +0 -0
  104. package/demo/platforms/android/app/src/main/res/drawable-port-ldpi/screen.png +0 -0
  105. package/demo/platforms/android/app/src/main/res/drawable-port-mdpi/screen.png +0 -0
  106. package/demo/platforms/android/app/src/main/res/drawable-port-xhdpi/screen.png +0 -0
  107. package/demo/platforms/android/app/src/main/res/drawable-port-xxhdpi/screen.png +0 -0
  108. package/demo/platforms/android/app/src/main/res/drawable-port-xxxhdpi/screen.png +0 -0
  109. package/demo/platforms/android/app/src/main/res/mipmap-ldpi/ic_launcher.png +0 -0
  110. package/demo/platforms/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
  111. package/demo/platforms/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
  112. package/demo/platforms/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  113. package/demo/platforms/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  114. package/demo/platforms/android/app/src/main/res/values/strings.xml +7 -0
  115. package/demo/platforms/android/app/src/main/res/xml/config.xml +44 -0
  116. package/demo/platforms/android/build.gradle +54 -0
  117. package/demo/platforms/android/cordova/Api.js +368 -0
  118. package/demo/platforms/android/cordova/android_sdk_version +27 -0
  119. package/demo/platforms/android/cordova/android_sdk_version.bat +26 -0
  120. package/demo/platforms/android/cordova/build +51 -0
  121. package/demo/platforms/android/cordova/build.bat +26 -0
  122. package/demo/platforms/android/cordova/check_reqs +32 -0
  123. package/demo/platforms/android/cordova/check_reqs.bat +26 -0
  124. package/demo/platforms/android/cordova/clean +51 -0
  125. package/demo/platforms/android/cordova/clean.bat +26 -0
  126. package/demo/platforms/android/cordova/defaults.xml +26 -0
  127. package/demo/platforms/android/cordova/lib/Adb.js +101 -0
  128. package/demo/platforms/android/cordova/lib/AndroidManifest.js +126 -0
  129. package/demo/platforms/android/cordova/lib/AndroidProject.js +202 -0
  130. package/demo/platforms/android/cordova/lib/PackageType.js +25 -0
  131. package/demo/platforms/android/cordova/lib/android_sdk.js +101 -0
  132. package/demo/platforms/android/cordova/lib/build.js +321 -0
  133. package/demo/platforms/android/cordova/lib/builders/ProjectBuilder.js +412 -0
  134. package/demo/platforms/android/cordova/lib/builders/builders.js +34 -0
  135. package/demo/platforms/android/cordova/lib/check_reqs.js +436 -0
  136. package/demo/platforms/android/cordova/lib/config/GradlePropertiesParser.js +114 -0
  137. package/demo/platforms/android/cordova/lib/device.js +111 -0
  138. package/demo/platforms/android/cordova/lib/emulator.js +530 -0
  139. package/demo/platforms/android/cordova/lib/getASPath.bat +3 -0
  140. package/demo/platforms/android/cordova/lib/install-device +42 -0
  141. package/demo/platforms/android/cordova/lib/install-device.bat +26 -0
  142. package/demo/platforms/android/cordova/lib/install-emulator +38 -0
  143. package/demo/platforms/android/cordova/lib/install-emulator.bat +26 -0
  144. package/demo/platforms/android/cordova/lib/list-devices +34 -0
  145. package/demo/platforms/android/cordova/lib/list-devices.bat +26 -0
  146. package/demo/platforms/android/cordova/lib/list-emulator-images +34 -0
  147. package/demo/platforms/android/cordova/lib/list-emulator-images.bat +26 -0
  148. package/demo/platforms/android/cordova/lib/list-started-emulators +34 -0
  149. package/demo/platforms/android/cordova/lib/list-started-emulators.bat +26 -0
  150. package/demo/platforms/android/cordova/lib/log.js +56 -0
  151. package/demo/platforms/android/cordova/lib/plugin-build.gradle +69 -0
  152. package/demo/platforms/android/cordova/lib/pluginHandlers.js +334 -0
  153. package/demo/platforms/android/cordova/lib/prepare.js +702 -0
  154. package/demo/platforms/android/cordova/lib/retry.js +64 -0
  155. package/demo/platforms/android/cordova/lib/run.js +140 -0
  156. package/demo/platforms/android/cordova/lib/start-emulator +38 -0
  157. package/demo/platforms/android/cordova/lib/start-emulator.bat +26 -0
  158. package/demo/platforms/android/cordova/log +36 -0
  159. package/demo/platforms/android/cordova/log.bat +26 -0
  160. package/demo/platforms/android/cordova/loggingHelper.js +18 -0
  161. package/demo/platforms/android/cordova/run +54 -0
  162. package/demo/platforms/android/cordova/run.bat +26 -0
  163. package/demo/platforms/android/cordova/version +29 -0
  164. package/demo/platforms/android/cordova/version.bat +26 -0
  165. package/demo/platforms/android/cordova-idensic-mobile-sdk-plugin/SumSubCordova-build-extras.gradle +20 -0
  166. package/demo/platforms/android/cordova-plugin-enable-multidex/SumSubCordova-build.gradle +9 -0
  167. package/demo/platforms/android/cordova-plugin-qr-barcode-scanner/SumSubCordova-barcodescanner.gradle +17 -0
  168. package/demo/platforms/android/gradle.properties +6 -0
  169. package/demo/platforms/android/platform_www/cordova-js-src/android/nativeapiprovider.js +36 -0
  170. package/demo/platforms/android/platform_www/cordova-js-src/android/promptbasednativeapi.js +35 -0
  171. package/demo/platforms/android/platform_www/cordova-js-src/exec.js +286 -0
  172. package/demo/platforms/android/platform_www/cordova-js-src/platform.js +125 -0
  173. package/demo/platforms/android/platform_www/cordova-js-src/plugin/android/app.js +108 -0
  174. package/demo/platforms/android/platform_www/cordova.js +1935 -0
  175. package/demo/platforms/android/platform_www/cordova_plugins.js +287 -0
  176. package/demo/platforms/android/platform_www/plugins/cordova-idensic-mobile-sdk-plugin/dist/SNSMobileSDK.js +3 -0
  177. package/demo/platforms/android/project.properties +17 -0
  178. package/demo/platforms/android/settings.gradle +4 -0
  179. package/demo/platforms/android/wrapper.gradle +1 -0
  180. package/demo/platforms/ios/CordovaLib/Classes/Private/CDVDebug.h +25 -0
  181. package/demo/platforms/ios/CordovaLib/Classes/Private/CDVJSON_private.h +31 -0
  182. package/demo/platforms/ios/CordovaLib/Classes/Private/CDVJSON_private.m +99 -0
  183. package/demo/platforms/ios/CordovaLib/Classes/Private/CDVPlugin+Private.h +24 -0
  184. package/demo/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVGestureHandler/CDVGestureHandler.h +26 -0
  185. package/demo/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVGestureHandler/CDVGestureHandler.m +70 -0
  186. package/demo/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVHandleOpenURL/CDVHandleOpenURL.h +27 -0
  187. package/demo/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVHandleOpenURL/CDVHandleOpenURL.m +86 -0
  188. package/demo/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVIntentAndNavigationFilter/CDVIntentAndNavigationFilter.h +40 -0
  189. package/demo/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVIntentAndNavigationFilter/CDVIntentAndNavigationFilter.m +150 -0
  190. package/demo/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVLocalStorage/CDVLocalStorage.h +50 -0
  191. package/demo/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVLocalStorage/CDVLocalStorage.m +493 -0
  192. package/demo/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVLogger/CDVLogger.h +26 -0
  193. package/demo/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVLogger/CDVLogger.m +37 -0
  194. package/demo/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewDelegate.h +45 -0
  195. package/demo/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewDelegate.m +408 -0
  196. package/demo/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewEngine.h +29 -0
  197. package/demo/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewEngine.m +206 -0
  198. package/demo/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewNavigationDelegate.h +33 -0
  199. package/demo/platforms/ios/CordovaLib/Classes/Private/Plugins/CDVUIWebViewEngine/CDVUIWebViewNavigationDelegate.m +157 -0
  200. package/demo/platforms/ios/CordovaLib/Classes/Public/CDV.h +32 -0
  201. package/demo/platforms/ios/CordovaLib/Classes/Public/CDVAppDelegate.h +28 -0
  202. package/demo/platforms/ios/CordovaLib/Classes/Public/CDVAppDelegate.m +118 -0
  203. package/demo/platforms/ios/CordovaLib/Classes/Public/CDVAvailability.h +115 -0
  204. package/demo/platforms/ios/CordovaLib/Classes/Public/CDVAvailabilityDeprecated.h +26 -0
  205. package/demo/platforms/ios/CordovaLib/Classes/Public/CDVCommandDelegate.h +51 -0
  206. package/demo/platforms/ios/CordovaLib/Classes/Public/CDVCommandDelegateImpl.h +36 -0
  207. package/demo/platforms/ios/CordovaLib/Classes/Public/CDVCommandDelegateImpl.m +186 -0
  208. package/demo/platforms/ios/CordovaLib/Classes/Public/CDVCommandQueue.h +39 -0
  209. package/demo/platforms/ios/CordovaLib/Classes/Public/CDVCommandQueue.m +194 -0
  210. package/demo/platforms/ios/CordovaLib/Classes/Public/CDVConfigParser.h +30 -0
  211. package/demo/platforms/ios/CordovaLib/Classes/Public/CDVConfigParser.m +81 -0
  212. package/demo/platforms/ios/CordovaLib/Classes/Public/CDVInvokedUrlCommand.h +52 -0
  213. package/demo/platforms/ios/CordovaLib/Classes/Public/CDVInvokedUrlCommand.m +116 -0
  214. package/demo/platforms/ios/CordovaLib/Classes/Public/CDVPlugin+Resources.h +39 -0
  215. package/demo/platforms/ios/CordovaLib/Classes/Public/CDVPlugin+Resources.m +38 -0
  216. package/demo/platforms/ios/CordovaLib/Classes/Public/CDVPlugin.h +74 -0
  217. package/demo/platforms/ios/CordovaLib/Classes/Public/CDVPlugin.m +199 -0
  218. package/demo/platforms/ios/CordovaLib/Classes/Public/CDVPluginResult.h +83 -0
  219. package/demo/platforms/ios/CordovaLib/Classes/Public/CDVPluginResult.m +203 -0
  220. package/demo/platforms/ios/CordovaLib/Classes/Public/CDVScreenOrientationDelegate.h +33 -0
  221. package/demo/platforms/ios/CordovaLib/Classes/Public/CDVTimer.h +27 -0
  222. package/demo/platforms/ios/CordovaLib/Classes/Public/CDVTimer.m +123 -0
  223. package/demo/platforms/ios/CordovaLib/Classes/Public/CDVURLProtocol.h +27 -0
  224. package/demo/platforms/ios/CordovaLib/Classes/Public/CDVURLProtocol.m +113 -0
  225. package/demo/platforms/ios/CordovaLib/Classes/Public/CDVUserAgentUtil.h +27 -0
  226. package/demo/platforms/ios/CordovaLib/Classes/Public/CDVUserAgentUtil.m +162 -0
  227. package/demo/platforms/ios/CordovaLib/Classes/Public/CDVViewController.h +92 -0
  228. package/demo/platforms/ios/CordovaLib/Classes/Public/CDVViewController.m +810 -0
  229. package/demo/platforms/ios/CordovaLib/Classes/Public/CDVWebViewEngineProtocol.h +42 -0
  230. package/demo/platforms/ios/CordovaLib/Classes/Public/CDVWhitelist.h +34 -0
  231. package/demo/platforms/ios/CordovaLib/Classes/Public/CDVWhitelist.m +285 -0
  232. package/demo/platforms/ios/CordovaLib/Classes/Public/NSDictionary+CordovaPreferences.h +35 -0
  233. package/demo/platforms/ios/CordovaLib/Classes/Public/NSDictionary+CordovaPreferences.m +63 -0
  234. package/demo/platforms/ios/CordovaLib/Classes/Public/NSMutableArray+QueueAdditions.h +29 -0
  235. package/demo/platforms/ios/CordovaLib/Classes/Public/NSMutableArray+QueueAdditions.m +58 -0
  236. package/demo/platforms/ios/CordovaLib/CordovaLib.xcodeproj/project.pbxproj +797 -0
  237. package/demo/platforms/ios/CordovaLib/CordovaLib_Prefix.pch +22 -0
  238. package/demo/platforms/ios/CordovaLib/VERSION +1 -0
  239. package/demo/platforms/ios/CordovaLib/cordova.js +2188 -0
  240. package/demo/platforms/ios/Podfile +9 -0
  241. package/demo/platforms/ios/Podfile.lock +20 -0
  242. package/demo/platforms/ios/SumSubCordova/Bridging-Header.h +28 -0
  243. package/demo/platforms/ios/SumSubCordova/CDVLaunchScreen.storyboard +60 -0
  244. package/demo/platforms/ios/SumSubCordova/Classes/AppDelegate.h +33 -0
  245. package/demo/platforms/ios/SumSubCordova/Classes/AppDelegate.m +39 -0
  246. package/demo/platforms/ios/SumSubCordova/Classes/MainViewController.h +40 -0
  247. package/demo/platforms/ios/SumSubCordova/Classes/MainViewController.m +148 -0
  248. package/demo/platforms/ios/SumSubCordova/Classes/MainViewController.xib +138 -0
  249. package/demo/platforms/ios/SumSubCordova/Entitlements-Debug.plist +24 -0
  250. package/demo/platforms/ios/SumSubCordova/Entitlements-Release.plist +24 -0
  251. package/demo/platforms/ios/SumSubCordova/Images.xcassets/AppIcon.appiconset/Contents.json +116 -0
  252. package/demo/platforms/ios/SumSubCordova/Images.xcassets/AppIcon.appiconset/cordova_icon-1024.png +0 -0
  253. package/demo/platforms/ios/SumSubCordova/Images.xcassets/AppIcon.appiconset/cordova_icon-20.png +0 -0
  254. package/demo/platforms/ios/SumSubCordova/Images.xcassets/AppIcon.appiconset/cordova_icon-20@2x.png +0 -0
  255. package/demo/platforms/ios/SumSubCordova/Images.xcassets/AppIcon.appiconset/cordova_icon-20@3x.png +0 -0
  256. package/demo/platforms/ios/SumSubCordova/Images.xcassets/AppIcon.appiconset/cordova_icon-29.png +0 -0
  257. package/demo/platforms/ios/SumSubCordova/Images.xcassets/AppIcon.appiconset/cordova_icon-29@2x.png +0 -0
  258. package/demo/platforms/ios/SumSubCordova/Images.xcassets/AppIcon.appiconset/cordova_icon-29@3x.png +0 -0
  259. package/demo/platforms/ios/SumSubCordova/Images.xcassets/AppIcon.appiconset/cordova_icon-40.png +0 -0
  260. package/demo/platforms/ios/SumSubCordova/Images.xcassets/AppIcon.appiconset/cordova_icon-40@2x.png +0 -0
  261. package/demo/platforms/ios/SumSubCordova/Images.xcassets/AppIcon.appiconset/cordova_icon-40@3x.png +0 -0
  262. package/demo/platforms/ios/SumSubCordova/Images.xcassets/AppIcon.appiconset/cordova_icon-60@2x.png +0 -0
  263. package/demo/platforms/ios/SumSubCordova/Images.xcassets/AppIcon.appiconset/cordova_icon-60@3x.png +0 -0
  264. package/demo/platforms/ios/SumSubCordova/Images.xcassets/AppIcon.appiconset/cordova_icon-76.png +0 -0
  265. package/demo/platforms/ios/SumSubCordova/Images.xcassets/AppIcon.appiconset/cordova_icon-76@2x.png +0 -0
  266. package/demo/platforms/ios/SumSubCordova/Images.xcassets/AppIcon.appiconset/cordova_icon-83.5@2x.png +0 -0
  267. package/demo/platforms/ios/SumSubCordova/Images.xcassets/Contents.json +6 -0
  268. package/demo/platforms/ios/SumSubCordova/Images.xcassets/LaunchImage.launchimage/Contents.json +176 -0
  269. package/demo/platforms/ios/SumSubCordova/Images.xcassets/LaunchImage.launchimage/Default-2436h.png +0 -0
  270. package/demo/platforms/ios/SumSubCordova/Images.xcassets/LaunchImage.launchimage/Default-568h@2x~iphone.png +0 -0
  271. package/demo/platforms/ios/SumSubCordova/Images.xcassets/LaunchImage.launchimage/Default-667h.png +0 -0
  272. package/demo/platforms/ios/SumSubCordova/Images.xcassets/LaunchImage.launchimage/Default-736h.png +0 -0
  273. package/demo/platforms/ios/SumSubCordova/Images.xcassets/LaunchImage.launchimage/Default-Landscape-2436h.png +0 -0
  274. package/demo/platforms/ios/SumSubCordova/Images.xcassets/LaunchImage.launchimage/Default-Landscape-736h.png +0 -0
  275. package/demo/platforms/ios/SumSubCordova/Images.xcassets/LaunchImage.launchimage/Default-Landscape@2x~ipad.png +0 -0
  276. package/demo/platforms/ios/SumSubCordova/Images.xcassets/LaunchImage.launchimage/Default-Landscape~ipad.png +0 -0
  277. package/demo/platforms/ios/SumSubCordova/Images.xcassets/LaunchImage.launchimage/Default-Portrait@2x~ipad.png +0 -0
  278. package/demo/platforms/ios/SumSubCordova/Images.xcassets/LaunchImage.launchimage/Default-Portrait~ipad.png +0 -0
  279. package/demo/platforms/ios/SumSubCordova/Images.xcassets/LaunchImage.launchimage/Default@2x~iphone.png +0 -0
  280. package/demo/platforms/ios/SumSubCordova/Images.xcassets/LaunchImage.launchimage/Default~iphone.png +0 -0
  281. package/demo/platforms/ios/SumSubCordova/Images.xcassets/LaunchStoryboard.imageset/Contents.json +168 -0
  282. package/demo/platforms/ios/SumSubCordova/Plugins/README +20 -0
  283. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-idensic-mobile-sdk-plugin/SNSMobileSdkCordovaPlugin.h +12 -0
  284. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-idensic-mobile-sdk-plugin/SNSMobileSdkCordovaPlugin.m +263 -0
  285. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-plugin-advanced-http/AFHTTPSessionManager.h +353 -0
  286. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-plugin-advanced-http/AFHTTPSessionManager.m +464 -0
  287. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-plugin-advanced-http/AFNetworkReachabilityManager.h +206 -0
  288. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-plugin-advanced-http/AFNetworkReachabilityManager.m +263 -0
  289. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-plugin-advanced-http/AFNetworking.h +41 -0
  290. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-plugin-advanced-http/AFSecurityPolicy.h +154 -0
  291. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-plugin-advanced-http/AFSecurityPolicy.m +353 -0
  292. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-plugin-advanced-http/AFURLRequestSerialization.h +479 -0
  293. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-plugin-advanced-http/AFURLRequestSerialization.m +1355 -0
  294. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-plugin-advanced-http/AFURLResponseSerialization.h +318 -0
  295. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-plugin-advanced-http/AFURLResponseSerialization.m +806 -0
  296. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-plugin-advanced-http/AFURLSessionManager.h +500 -0
  297. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-plugin-advanced-http/AFURLSessionManager.m +1239 -0
  298. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-plugin-advanced-http/BinaryRequestSerializer.h +8 -0
  299. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-plugin-advanced-http/BinaryRequestSerializer.m +53 -0
  300. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-plugin-advanced-http/BinaryResponseSerializer.h +8 -0
  301. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-plugin-advanced-http/BinaryResponseSerializer.m +126 -0
  302. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-plugin-advanced-http/CordovaHttpPlugin.h +20 -0
  303. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-plugin-advanced-http/CordovaHttpPlugin.m +639 -0
  304. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-plugin-advanced-http/SDNetworkActivityIndicator.h +18 -0
  305. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-plugin-advanced-http/SDNetworkActivityIndicator.m +70 -0
  306. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-plugin-advanced-http/TextRequestSerializer.h +8 -0
  307. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-plugin-advanced-http/TextRequestSerializer.m +53 -0
  308. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-plugin-advanced-http/TextResponseSerializer.h +8 -0
  309. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-plugin-advanced-http/TextResponseSerializer.m +145 -0
  310. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-plugin-file/CDVAssetLibraryFilesystem.h +30 -0
  311. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-plugin-file/CDVAssetLibraryFilesystem.m +253 -0
  312. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-plugin-file/CDVFile.h +157 -0
  313. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-plugin-file/CDVFile.m +1119 -0
  314. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-plugin-file/CDVLocalFilesystem.h +32 -0
  315. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-plugin-file/CDVLocalFilesystem.m +750 -0
  316. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-plugin-qr-barcode-scanner/CDVBarcodeScanner.mm +1067 -0
  317. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-plugin-timer/NativeTimerAdapter.h +35 -0
  318. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-plugin-timer/NativeTimerAdapter.m +76 -0
  319. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-plugin-timer/NativeTimerPlugin.h +28 -0
  320. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-plugin-timer/NativeTimerPlugin.m +158 -0
  321. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-plugin-wkwebview-engine/CDVWKProcessPoolFactory.h +27 -0
  322. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-plugin-wkwebview-engine/CDVWKProcessPoolFactory.m +49 -0
  323. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-plugin-wkwebview-engine/CDVWKWebViewEngine.h +29 -0
  324. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-plugin-wkwebview-engine/CDVWKWebViewEngine.m +494 -0
  325. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-plugin-wkwebview-engine/CDVWKWebViewUIDelegate.h +28 -0
  326. package/demo/platforms/ios/SumSubCordova/Plugins/cordova-plugin-wkwebview-engine/CDVWKWebViewUIDelegate.m +123 -0
  327. package/demo/platforms/ios/SumSubCordova/Resources/CDVBarcodeScanner.bundle/beep.caf +0 -0
  328. package/demo/platforms/ios/SumSubCordova/Resources/CDVBarcodeScanner.bundle/torch.png +0 -0
  329. package/demo/platforms/ios/SumSubCordova/Resources/CDVBarcodeScanner.bundle/torch@2x.png +0 -0
  330. package/demo/platforms/ios/SumSubCordova/Resources/CDVBarcodeScanner.bundle/torch@3x.png +0 -0
  331. package/demo/platforms/ios/SumSubCordova/Resources/scannerOverlay.xib +185 -0
  332. package/demo/platforms/ios/SumSubCordova/Scripts/copy-www-build-step.sh +63 -0
  333. package/demo/platforms/ios/SumSubCordova/SumSubCordova-Info.plist +60 -0
  334. package/demo/platforms/ios/SumSubCordova/SumSubCordova-Prefix.pch +26 -0
  335. package/demo/platforms/ios/SumSubCordova/config.xml +74 -0
  336. package/demo/platforms/ios/SumSubCordova/main.m +35 -0
  337. package/demo/platforms/ios/SumSubCordova.xcodeproj/project.pbxproj +698 -0
  338. package/demo/platforms/ios/SumSubCordova.xcworkspace/contents.xcworkspacedata +10 -0
  339. package/demo/platforms/ios/SumSubCordova.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  340. package/demo/platforms/ios/SumSubCordova.xcworkspace/xcshareddata/xcschemes/SumSubCordova.xcscheme +91 -0
  341. package/demo/platforms/ios/cordova/Api.js +715 -0
  342. package/demo/platforms/ios/cordova/apple_ios_version +27 -0
  343. package/demo/platforms/ios/cordova/apple_osx_version +27 -0
  344. package/demo/platforms/ios/cordova/apple_xcode_version +29 -0
  345. package/demo/platforms/ios/cordova/build +63 -0
  346. package/demo/platforms/ios/cordova/build-debug.xcconfig +32 -0
  347. package/demo/platforms/ios/cordova/build-extras.xcconfig +0 -0
  348. package/demo/platforms/ios/cordova/build-release.xcconfig +33 -0
  349. package/demo/platforms/ios/cordova/build.bat +19 -0
  350. package/demo/platforms/ios/cordova/build.xcconfig +45 -0
  351. package/demo/platforms/ios/cordova/check_reqs +32 -0
  352. package/demo/platforms/ios/cordova/check_reqs.bat +25 -0
  353. package/demo/platforms/ios/cordova/clean +49 -0
  354. package/demo/platforms/ios/cordova/clean.bat +19 -0
  355. package/demo/platforms/ios/cordova/defaults.xml +59 -0
  356. package/demo/platforms/ios/cordova/lib/BridgingHeader.js +125 -0
  357. package/demo/platforms/ios/cordova/lib/Podfile.js +424 -0
  358. package/demo/platforms/ios/cordova/lib/PodsJson.js +209 -0
  359. package/demo/platforms/ios/cordova/lib/build.js +464 -0
  360. package/demo/platforms/ios/cordova/lib/check_reqs.js +235 -0
  361. package/demo/platforms/ios/cordova/lib/clean.js +42 -0
  362. package/demo/platforms/ios/cordova/lib/list-devices +66 -0
  363. package/demo/platforms/ios/cordova/lib/list-emulator-build-targets +108 -0
  364. package/demo/platforms/ios/cordova/lib/list-emulator-images +43 -0
  365. package/demo/platforms/ios/cordova/lib/list-started-emulators +49 -0
  366. package/demo/platforms/ios/cordova/lib/plugman/pluginHandlers.js +391 -0
  367. package/demo/platforms/ios/cordova/lib/prepare.js +1190 -0
  368. package/demo/platforms/ios/cordova/lib/projectFile.js +134 -0
  369. package/demo/platforms/ios/cordova/lib/run.js +263 -0
  370. package/demo/platforms/ios/cordova/lib/spawn.js +51 -0
  371. package/demo/platforms/ios/cordova/lib/start-emulator +30 -0
  372. package/demo/platforms/ios/cordova/lib/versions.js +179 -0
  373. package/demo/platforms/ios/cordova/log +23 -0
  374. package/demo/platforms/ios/cordova/log.bat +19 -0
  375. package/demo/platforms/ios/cordova/loggingHelper.js +30 -0
  376. package/demo/platforms/ios/cordova/run +63 -0
  377. package/demo/platforms/ios/cordova/run.bat +19 -0
  378. package/demo/platforms/ios/cordova/version +35 -0
  379. package/demo/platforms/ios/cordova/version.bat +26 -0
  380. package/demo/platforms/ios/frameworks.json +7 -0
  381. package/demo/platforms/ios/ios.json +402 -0
  382. package/demo/platforms/ios/platform_www/cordova-js-src/.eslintrc.yml +4 -0
  383. package/demo/platforms/ios/platform_www/cordova-js-src/exec.js +262 -0
  384. package/demo/platforms/ios/platform_www/cordova-js-src/platform.js +31 -0
  385. package/demo/platforms/ios/platform_www/cordova-js-src/plugin/ios/console.js +186 -0
  386. package/demo/platforms/ios/platform_www/cordova-js-src/plugin/ios/logger.js +349 -0
  387. package/demo/platforms/ios/platform_www/cordova.js +2188 -0
  388. package/demo/platforms/ios/platform_www/cordova_plugins.js +302 -0
  389. package/demo/platforms/ios/platform_www/plugins/cordova-idensic-mobile-sdk-plugin/dist/SNSMobileSDK.js +3 -0
  390. package/demo/platforms/ios/pods-debug.xcconfig +2 -0
  391. package/demo/platforms/ios/pods-release.xcconfig +2 -0
  392. package/demo/platforms/ios/pods.json +20 -0
  393. package/demo/plugins/android.json +47 -0
  394. package/demo/plugins/cordova-idensic-mobile-sdk-plugin/dist/SNSMobileSDK.js +1 -0
  395. package/demo/plugins/cordova-idensic-mobile-sdk-plugin/package.json +48 -0
  396. package/demo/plugins/cordova-idensic-mobile-sdk-plugin/plugin.xml +82 -0
  397. package/demo/plugins/cordova-idensic-mobile-sdk-plugin/src/android/build-extras.gradle +20 -0
  398. package/demo/plugins/cordova-idensic-mobile-sdk-plugin/src/android/build.gradle +54 -0
  399. package/demo/plugins/cordova-idensic-mobile-sdk-plugin/src/android/dependencies.gradle +122 -0
  400. package/demo/plugins/cordova-idensic-mobile-sdk-plugin/src/android/gradlew +172 -0
  401. package/demo/plugins/cordova-idensic-mobile-sdk-plugin/src/android/gradlew.bat +84 -0
  402. package/demo/plugins/cordova-idensic-mobile-sdk-plugin/src/android/src/main/java/com/sumsub/msdk/plugins/cordova/SNSMobileSdkCordovaPlugin.java +328 -0
  403. package/demo/plugins/cordova-idensic-mobile-sdk-plugin/src/ios/SNSMobileSdkCordovaPlugin.h +12 -0
  404. package/demo/plugins/cordova-idensic-mobile-sdk-plugin/src/ios/SNSMobileSdkCordovaPlugin.m +263 -0
  405. package/demo/plugins/cordova-plugin-advanced-http/.editorconfig +19 -0
  406. package/demo/plugins/cordova-plugin-advanced-http/.github/ISSUE_TEMPLATE/--bug-report.md +33 -0
  407. package/demo/plugins/cordova-plugin-advanced-http/.github/ISSUE_TEMPLATE/--feature-request.md +21 -0
  408. package/demo/plugins/cordova-plugin-advanced-http/.github/ISSUE_TEMPLATE/--support-question.md +18 -0
  409. package/demo/plugins/cordova-plugin-advanced-http/.github/workflows/ci.yml +65 -0
  410. package/demo/plugins/cordova-plugin-advanced-http/.travis.yml +61 -0
  411. package/demo/plugins/cordova-plugin-advanced-http/.vscode/settings.json +3 -0
  412. package/demo/plugins/cordova-plugin-advanced-http/CHANGELOG.md +347 -0
  413. package/demo/plugins/cordova-plugin-advanced-http/CONTRIBUTING.md +82 -0
  414. package/demo/plugins/cordova-plugin-advanced-http/LICENSE +23 -0
  415. package/demo/plugins/cordova-plugin-advanced-http/README.md +483 -0
  416. package/demo/plugins/cordova-plugin-advanced-http/package.json +114 -0
  417. package/demo/plugins/cordova-plugin-advanced-http/plugin.xml +96 -0
  418. package/demo/plugins/cordova-plugin-advanced-http/src/android/com/silkimen/cordovahttp/CordovaClientAuth.java +113 -0
  419. package/demo/plugins/cordova-plugin-advanced-http/src/android/com/silkimen/cordovahttp/CordovaHttpBase.java +225 -0
  420. package/demo/plugins/cordova-plugin-advanced-http/src/android/com/silkimen/cordovahttp/CordovaHttpDownload.java +41 -0
  421. package/demo/plugins/cordova-plugin-advanced-http/src/android/com/silkimen/cordovahttp/CordovaHttpOperation.java +24 -0
  422. package/demo/plugins/cordova-plugin-advanced-http/src/android/com/silkimen/cordovahttp/CordovaHttpPlugin.java +240 -0
  423. package/demo/plugins/cordova-plugin-advanced-http/src/android/com/silkimen/cordovahttp/CordovaHttpResponse.java +100 -0
  424. package/demo/plugins/cordova-plugin-advanced-http/src/android/com/silkimen/cordovahttp/CordovaHttpUpload.java +91 -0
  425. package/demo/plugins/cordova-plugin-advanced-http/src/android/com/silkimen/cordovahttp/CordovaObservableCallbackContext.java +58 -0
  426. package/demo/plugins/cordova-plugin-advanced-http/src/android/com/silkimen/cordovahttp/CordovaServerTrust.java +124 -0
  427. package/demo/plugins/cordova-plugin-advanced-http/src/android/com/silkimen/http/HttpBodyDecoder.java +55 -0
  428. package/demo/plugins/cordova-plugin-advanced-http/src/android/com/silkimen/http/HttpRequest.java +3095 -0
  429. package/demo/plugins/cordova-plugin-advanced-http/src/android/com/silkimen/http/JsonUtils.java +58 -0
  430. package/demo/plugins/cordova-plugin-advanced-http/src/android/com/silkimen/http/KeyChainKeyManager.java +57 -0
  431. package/demo/plugins/cordova-plugin-advanced-http/src/android/com/silkimen/http/TLSConfiguration.java +63 -0
  432. package/demo/plugins/cordova-plugin-advanced-http/src/android/com/silkimen/http/TLSSocketFactory.java +63 -0
  433. package/demo/plugins/cordova-plugin-advanced-http/src/browser/cordova-http-plugin.js +323 -0
  434. package/demo/plugins/cordova-plugin-advanced-http/src/ios/AFNetworking/AFHTTPSessionManager.h +353 -0
  435. package/demo/plugins/cordova-plugin-advanced-http/src/ios/AFNetworking/AFHTTPSessionManager.m +464 -0
  436. package/demo/plugins/cordova-plugin-advanced-http/src/ios/AFNetworking/AFNetworkReachabilityManager.h +206 -0
  437. package/demo/plugins/cordova-plugin-advanced-http/src/ios/AFNetworking/AFNetworkReachabilityManager.m +263 -0
  438. package/demo/plugins/cordova-plugin-advanced-http/src/ios/AFNetworking/AFNetworking.h +41 -0
  439. package/demo/plugins/cordova-plugin-advanced-http/src/ios/AFNetworking/AFSecurityPolicy.h +154 -0
  440. package/demo/plugins/cordova-plugin-advanced-http/src/ios/AFNetworking/AFSecurityPolicy.m +353 -0
  441. package/demo/plugins/cordova-plugin-advanced-http/src/ios/AFNetworking/AFURLRequestSerialization.h +479 -0
  442. package/demo/plugins/cordova-plugin-advanced-http/src/ios/AFNetworking/AFURLRequestSerialization.m +1355 -0
  443. package/demo/plugins/cordova-plugin-advanced-http/src/ios/AFNetworking/AFURLResponseSerialization.h +318 -0
  444. package/demo/plugins/cordova-plugin-advanced-http/src/ios/AFNetworking/AFURLResponseSerialization.m +806 -0
  445. package/demo/plugins/cordova-plugin-advanced-http/src/ios/AFNetworking/AFURLSessionManager.h +500 -0
  446. package/demo/plugins/cordova-plugin-advanced-http/src/ios/AFNetworking/AFURLSessionManager.m +1239 -0
  447. package/demo/plugins/cordova-plugin-advanced-http/src/ios/BinaryRequestSerializer.h +8 -0
  448. package/demo/plugins/cordova-plugin-advanced-http/src/ios/BinaryRequestSerializer.m +53 -0
  449. package/demo/plugins/cordova-plugin-advanced-http/src/ios/BinaryResponseSerializer.h +8 -0
  450. package/demo/plugins/cordova-plugin-advanced-http/src/ios/BinaryResponseSerializer.m +126 -0
  451. package/demo/plugins/cordova-plugin-advanced-http/src/ios/CordovaHttpPlugin.h +20 -0
  452. package/demo/plugins/cordova-plugin-advanced-http/src/ios/CordovaHttpPlugin.m +639 -0
  453. package/demo/plugins/cordova-plugin-advanced-http/src/ios/SDNetworkActivityIndicator/LICENSE +20 -0
  454. package/demo/plugins/cordova-plugin-advanced-http/src/ios/SDNetworkActivityIndicator/README.md +52 -0
  455. package/demo/plugins/cordova-plugin-advanced-http/src/ios/SDNetworkActivityIndicator/SDNetworkActivityIndicator.h +18 -0
  456. package/demo/plugins/cordova-plugin-advanced-http/src/ios/SDNetworkActivityIndicator/SDNetworkActivityIndicator.m +70 -0
  457. package/demo/plugins/cordova-plugin-advanced-http/src/ios/TextRequestSerializer.h +8 -0
  458. package/demo/plugins/cordova-plugin-advanced-http/src/ios/TextRequestSerializer.m +53 -0
  459. package/demo/plugins/cordova-plugin-advanced-http/src/ios/TextResponseSerializer.h +8 -0
  460. package/demo/plugins/cordova-plugin-advanced-http/src/ios/TextResponseSerializer.m +145 -0
  461. package/demo/plugins/cordova-plugin-androidx/README.md +55 -0
  462. package/demo/plugins/cordova-plugin-androidx/package.json +47 -0
  463. package/demo/plugins/cordova-plugin-androidx/plugin.xml +20 -0
  464. package/demo/plugins/cordova-plugin-androidx/scripts/apply-to-gradle.properties.js +49 -0
  465. package/demo/plugins/cordova-plugin-androidx-adapter/README.md +67 -0
  466. package/demo/plugins/cordova-plugin-androidx-adapter/apply.js +101 -0
  467. package/demo/plugins/cordova-plugin-androidx-adapter/artifact-mappings.json +105 -0
  468. package/demo/plugins/cordova-plugin-androidx-adapter/class-mappings.json +1938 -0
  469. package/demo/plugins/cordova-plugin-androidx-adapter/package.json +43 -0
  470. package/demo/plugins/cordova-plugin-androidx-adapter/plugin.xml +20 -0
  471. package/demo/plugins/cordova-plugin-console/.appveyor.yml +29 -0
  472. package/demo/plugins/cordova-plugin-console/.github/PULL_REQUEST_TEMPLATE.md +22 -0
  473. package/demo/plugins/cordova-plugin-console/.jshintrc +17 -0
  474. package/demo/plugins/cordova-plugin-console/.travis.yml +82 -0
  475. package/demo/plugins/cordova-plugin-console/CONTRIBUTING.md +37 -0
  476. package/demo/plugins/cordova-plugin-console/LICENSE +202 -0
  477. package/demo/plugins/cordova-plugin-console/NOTICE +5 -0
  478. package/demo/plugins/cordova-plugin-console/README.md +116 -0
  479. package/demo/plugins/cordova-plugin-console/RELEASENOTES.md +126 -0
  480. package/demo/plugins/cordova-plugin-console/doc/de/README.md +43 -0
  481. package/demo/plugins/cordova-plugin-console/doc/de/index.md +41 -0
  482. package/demo/plugins/cordova-plugin-console/doc/es/README.md +41 -0
  483. package/demo/plugins/cordova-plugin-console/doc/es/index.md +39 -0
  484. package/demo/plugins/cordova-plugin-console/doc/fr/README.md +41 -0
  485. package/demo/plugins/cordova-plugin-console/doc/fr/index.md +39 -0
  486. package/demo/plugins/cordova-plugin-console/doc/it/README.md +43 -0
  487. package/demo/plugins/cordova-plugin-console/doc/it/index.md +41 -0
  488. package/demo/plugins/cordova-plugin-console/doc/ja/README.md +43 -0
  489. package/demo/plugins/cordova-plugin-console/doc/ja/index.md +41 -0
  490. package/demo/plugins/cordova-plugin-console/doc/ko/README.md +43 -0
  491. package/demo/plugins/cordova-plugin-console/doc/ko/index.md +41 -0
  492. package/demo/plugins/cordova-plugin-console/doc/pl/README.md +43 -0
  493. package/demo/plugins/cordova-plugin-console/doc/pl/index.md +41 -0
  494. package/demo/plugins/cordova-plugin-console/doc/ru/index.md +31 -0
  495. package/demo/plugins/cordova-plugin-console/doc/zh/README.md +43 -0
  496. package/demo/plugins/cordova-plugin-console/doc/zh/index.md +41 -0
  497. package/demo/plugins/cordova-plugin-console/package.json +82 -0
  498. package/demo/plugins/cordova-plugin-console/plugin.xml +132 -0
  499. package/demo/plugins/cordova-plugin-console/src/ios/CDVLogger.h +26 -0
  500. package/demo/plugins/cordova-plugin-console/src/ios/CDVLogger.m +38 -0
  501. package/demo/plugins/cordova-plugin-console/src/ubuntu/console.cpp +29 -0
  502. package/demo/plugins/cordova-plugin-console/src/ubuntu/console.h +43 -0
  503. package/demo/plugins/cordova-plugin-console/src/wp/DebugConsole.cs +47 -0
  504. package/demo/plugins/cordova-plugin-console/tests/package.json +14 -0
  505. package/demo/plugins/cordova-plugin-console/tests/plugin.xml +31 -0
  506. package/demo/plugins/cordova-plugin-console/tests/tests.js +43 -0
  507. package/demo/plugins/cordova-plugin-enable-multidex/.editorconfig +20 -0
  508. package/demo/plugins/cordova-plugin-enable-multidex/.eslintrc.json +11 -0
  509. package/demo/plugins/cordova-plugin-enable-multidex/.prettierrc.json +10 -0
  510. package/demo/plugins/cordova-plugin-enable-multidex/.travis.yml +52 -0
  511. package/demo/plugins/cordova-plugin-enable-multidex/LICENSE +21 -0
  512. package/demo/plugins/cordova-plugin-enable-multidex/README.md +25 -0
  513. package/demo/plugins/cordova-plugin-enable-multidex/package.json +79 -0
  514. package/demo/plugins/cordova-plugin-enable-multidex/plugin.xml +18 -0
  515. package/demo/plugins/cordova-plugin-enable-multidex/scripts/android/editManifest.js +38 -0
  516. package/demo/plugins/cordova-plugin-enable-multidex/src/android/build.gradle +9 -0
  517. package/demo/plugins/cordova-plugin-file/.jshintrc +30 -0
  518. package/demo/plugins/cordova-plugin-file/.ratignore +1 -0
  519. package/demo/plugins/cordova-plugin-file/CONTRIBUTING.md +37 -0
  520. package/demo/plugins/cordova-plugin-file/LICENSE +202 -0
  521. package/demo/plugins/cordova-plugin-file/NOTICE +5 -0
  522. package/demo/plugins/cordova-plugin-file/README.md +833 -0
  523. package/demo/plugins/cordova-plugin-file/RELEASENOTES.md +496 -0
  524. package/demo/plugins/cordova-plugin-file/doc/plugins.md +120 -0
  525. package/demo/plugins/cordova-plugin-file/package.json +86 -0
  526. package/demo/plugins/cordova-plugin-file/plugin.xml +260 -0
  527. package/demo/plugins/cordova-plugin-file/src/android/AssetFilesystem.java +294 -0
  528. package/demo/plugins/cordova-plugin-file/src/android/ContentFilesystem.java +223 -0
  529. package/demo/plugins/cordova-plugin-file/src/android/DirectoryManager.java +134 -0
  530. package/demo/plugins/cordova-plugin-file/src/android/EncodingException.java +29 -0
  531. package/demo/plugins/cordova-plugin-file/src/android/FileExistsException.java +29 -0
  532. package/demo/plugins/cordova-plugin-file/src/android/FileUtils.java +1225 -0
  533. package/demo/plugins/cordova-plugin-file/src/android/Filesystem.java +331 -0
  534. package/demo/plugins/cordova-plugin-file/src/android/InvalidModificationException.java +30 -0
  535. package/demo/plugins/cordova-plugin-file/src/android/LocalFilesystem.java +513 -0
  536. package/demo/plugins/cordova-plugin-file/src/android/LocalFilesystemURL.java +64 -0
  537. package/demo/plugins/cordova-plugin-file/src/android/NoModificationAllowedException.java +29 -0
  538. package/demo/plugins/cordova-plugin-file/src/android/PendingRequests.java +94 -0
  539. package/demo/plugins/cordova-plugin-file/src/android/TypeMismatchException.java +30 -0
  540. package/demo/plugins/cordova-plugin-file/src/android/build-extras.gradle +47 -0
  541. package/demo/plugins/cordova-plugin-file/src/browser/FileProxy.js +1059 -0
  542. package/demo/plugins/cordova-plugin-file/src/ios/CDVAssetLibraryFilesystem.h +30 -0
  543. package/demo/plugins/cordova-plugin-file/src/ios/CDVAssetLibraryFilesystem.m +253 -0
  544. package/demo/plugins/cordova-plugin-file/src/ios/CDVFile.h +157 -0
  545. package/demo/plugins/cordova-plugin-file/src/ios/CDVFile.m +1119 -0
  546. package/demo/plugins/cordova-plugin-file/src/ios/CDVLocalFilesystem.h +32 -0
  547. package/demo/plugins/cordova-plugin-file/src/ios/CDVLocalFilesystem.m +750 -0
  548. package/demo/plugins/cordova-plugin-file/src/osx/CDVFile.h +189 -0
  549. package/demo/plugins/cordova-plugin-file/src/osx/CDVFile.m +1056 -0
  550. package/demo/plugins/cordova-plugin-file/src/osx/CDVLocalFilesystem.h +32 -0
  551. package/demo/plugins/cordova-plugin-file/src/osx/CDVLocalFilesystem.m +733 -0
  552. package/demo/plugins/cordova-plugin-file/src/windows/FileProxy.js +1190 -0
  553. package/demo/plugins/cordova-plugin-file/tests/package.json +17 -0
  554. package/demo/plugins/cordova-plugin-file/tests/plugin.xml +43 -0
  555. package/demo/plugins/cordova-plugin-file/tests/src/android/TestContentProvider.java +93 -0
  556. package/demo/plugins/cordova-plugin-file/tests/tests.js +4163 -0
  557. package/demo/plugins/cordova-plugin-file/types/index.d.ts +378 -0
  558. package/demo/plugins/cordova-plugin-qr-barcode-scanner/.editorconfig +16 -0
  559. package/demo/plugins/cordova-plugin-qr-barcode-scanner/.github/CONTRIBUTING.md +72 -0
  560. package/demo/plugins/cordova-plugin-qr-barcode-scanner/.github/ISSUE_TEMPLATE.md +24 -0
  561. package/demo/plugins/cordova-plugin-qr-barcode-scanner/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  562. package/demo/plugins/cordova-plugin-qr-barcode-scanner/.github/lock.yml +25 -0
  563. package/demo/plugins/cordova-plugin-qr-barcode-scanner/.github/stale.yml +20 -0
  564. package/demo/plugins/cordova-plugin-qr-barcode-scanner/.travis.yml +11 -0
  565. package/demo/plugins/cordova-plugin-qr-barcode-scanner/CHANGELOG.md +448 -0
  566. package/demo/plugins/cordova-plugin-qr-barcode-scanner/LICENSE.txt +22 -0
  567. package/demo/plugins/cordova-plugin-qr-barcode-scanner/README.md +197 -0
  568. package/demo/plugins/cordova-plugin-qr-barcode-scanner/buttons.psd +0 -0
  569. package/demo/plugins/cordova-plugin-qr-barcode-scanner/hooks/windows/check-arch.js +52 -0
  570. package/demo/plugins/cordova-plugin-qr-barcode-scanner/package.json +89 -0
  571. package/demo/plugins/cordova-plugin-qr-barcode-scanner/plugin.xml +74 -0
  572. package/demo/plugins/cordova-plugin-qr-barcode-scanner/spec/helper/cordova.js +83 -0
  573. package/demo/plugins/cordova-plugin-qr-barcode-scanner/spec/index.spec.js +78 -0
  574. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/README.md +1 -0
  575. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/AndroidManifest.xml +14 -0
  576. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/R.txt +1398 -0
  577. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/aapt/AndroidManifest.xml +14 -0
  578. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html/apache-license.txt +201 -0
  579. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-de/about1d.html +15 -0
  580. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-de/about2d.html +28 -0
  581. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-de/index.html +23 -0
  582. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-de/license.html +30 -0
  583. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-de/scanning.html +19 -0
  584. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-de/sharing.html +14 -0
  585. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-de/whatsnew.html +14 -0
  586. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-en/about1d.html +15 -0
  587. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-en/about2d.html +28 -0
  588. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-en/index.html +23 -0
  589. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-en/license.html +42 -0
  590. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-en/scanning.html +19 -0
  591. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-en/sharing.html +14 -0
  592. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-en/whatsnew.html +14 -0
  593. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-es/about1d.html +18 -0
  594. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-es/about2d.html +30 -0
  595. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-es/index.html +24 -0
  596. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-es/license.html +39 -0
  597. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-es/scanning.html +18 -0
  598. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-es/sharing.html +13 -0
  599. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-es/whatsnew.html +14 -0
  600. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-fr/about1d.html +15 -0
  601. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-fr/about2d.html +26 -0
  602. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-fr/index.html +23 -0
  603. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-fr/license.html +30 -0
  604. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-fr/scanning.html +19 -0
  605. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-fr/sharing.html +14 -0
  606. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-fr/whatsnew.html +14 -0
  607. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-it/about1d.html +15 -0
  608. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-it/about2d.html +28 -0
  609. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-it/index.html +23 -0
  610. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-it/license.html +30 -0
  611. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-it/scanning.html +19 -0
  612. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-it/sharing.html +14 -0
  613. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-it/whatsnew.html +14 -0
  614. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-ja/about1d.html +15 -0
  615. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-ja/about2d.html +28 -0
  616. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-ja/index.html +22 -0
  617. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-ja/license.html +29 -0
  618. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-ja/scanning.html +19 -0
  619. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-ja/sharing.html +14 -0
  620. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-ja/whatsnew.html +14 -0
  621. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-ko/about1d.html +15 -0
  622. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-ko/about2d.html +28 -0
  623. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-ko/index.html +23 -0
  624. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-ko/license.html +30 -0
  625. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-ko/scanning.html +19 -0
  626. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-ko/sharing.html +14 -0
  627. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-ko/whatsnew.html +14 -0
  628. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-nl/about1d.html +15 -0
  629. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-nl/about2d.html +28 -0
  630. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-nl/index.html +23 -0
  631. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-nl/license.html +30 -0
  632. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-nl/scanning.html +19 -0
  633. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-nl/sharing.html +14 -0
  634. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-nl/whatsnew.html +14 -0
  635. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-pt/about1d.html +15 -0
  636. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-pt/about2d.html +28 -0
  637. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-pt/index.html +23 -0
  638. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-pt/license.html +30 -0
  639. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-pt/scanning.html +19 -0
  640. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-pt/sharing.html +14 -0
  641. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-pt/whatsnew.html +14 -0
  642. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-ru/about1d.html +15 -0
  643. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-ru/about2d.html +28 -0
  644. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-ru/index.html +23 -0
  645. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-ru/license.html +30 -0
  646. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-ru/scanning.html +19 -0
  647. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-ru/sharing.html +14 -0
  648. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-ru/whatsnew.html +14 -0
  649. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-uk/about1d.html +15 -0
  650. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-uk/about2d.html +28 -0
  651. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-uk/index.html +23 -0
  652. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-uk/license.html +29 -0
  653. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-uk/scanning.html +19 -0
  654. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-uk/sharing.html +14 -0
  655. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-uk/whatsnew.html +14 -0
  656. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-zh-rCN/about1d.html +15 -0
  657. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-zh-rCN/about2d.html +29 -0
  658. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-zh-rCN/index.html +23 -0
  659. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-zh-rCN/license.html +30 -0
  660. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-zh-rCN/scanning.html +19 -0
  661. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-zh-rCN/sharing.html +13 -0
  662. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-zh-rCN/whatsnew.html +14 -0
  663. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-zh-rHK/about1d.html +15 -0
  664. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-zh-rHK/about2d.html +28 -0
  665. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-zh-rHK/index.html +23 -0
  666. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-zh-rHK/license.html +31 -0
  667. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-zh-rHK/scanning.html +21 -0
  668. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-zh-rHK/sharing.html +14 -0
  669. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-zh-rHK/whatsnew.html +14 -0
  670. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-zh-rTW/about1d.html +15 -0
  671. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-zh-rTW/about2d.html +28 -0
  672. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-zh-rTW/index.html +23 -0
  673. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-zh-rTW/license.html +31 -0
  674. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-zh-rTW/scanning.html +21 -0
  675. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-zh-rTW/sharing.html +14 -0
  676. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/html-zh-rTW/whatsnew.html +14 -0
  677. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/images/big-1d.png +0 -0
  678. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/images/big-aztec.png +0 -0
  679. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/images/big-datamatrix.png +0 -0
  680. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/images/big-pdf417.png +0 -0
  681. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/images/big-qr.png +0 -0
  682. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/images/contact-results-screen.jpg +0 -0
  683. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/images/demo-no.png +0 -0
  684. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/images/demo-yes.png +0 -0
  685. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/images/scan-example.png +0 -0
  686. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/images/scan-from-phone.png +0 -0
  687. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/images/search-book-contents.jpg +0 -0
  688. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/assets/style.css +28 -0
  689. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/classes.jar +0 -0
  690. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/drawable/flip_camera.png +0 -0
  691. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/drawable/launcher_icon.png +0 -0
  692. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/drawable/share_via_barcode.png +0 -0
  693. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/drawable/toggle_torch.png +0 -0
  694. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/drawable-hdpi/launcher_icon.png +0 -0
  695. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/drawable-xhdpi/launcher_icon.png +0 -0
  696. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/drawable-xxhdpi/launcher_icon.png +0 -0
  697. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/layout/app_picker_list_item.xml +39 -0
  698. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/layout/bookmark_picker_list_item.xml +39 -0
  699. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/layout/capture.xml +229 -0
  700. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/layout/encode.xml +54 -0
  701. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/layout/help.xml +21 -0
  702. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/layout/history_list_item.xml +38 -0
  703. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/layout/search_book_contents.xml +55 -0
  704. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/layout/search_book_contents_header.xml +25 -0
  705. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/layout/search_book_contents_list_item.xml +41 -0
  706. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/layout/share.xml +95 -0
  707. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/layout-land/encode.xml +53 -0
  708. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/layout-land/share.xml +91 -0
  709. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/layout-ldpi/capture.xml +219 -0
  710. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/menu/capture.xml +38 -0
  711. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/menu/encode.xml +28 -0
  712. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/menu/history.xml +28 -0
  713. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/raw/beep.ogg +0 -0
  714. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/values/values.xml +221 -0
  715. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/values-ar/values-ar.xml +129 -0
  716. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/values-bg/values-bg.xml +129 -0
  717. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/values-ca/values-ca.xml +129 -0
  718. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/values-cs/values-cs.xml +129 -0
  719. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/values-da/values-da.xml +129 -0
  720. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/values-de/values-de.xml +129 -0
  721. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/values-el/values-el.xml +129 -0
  722. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/values-es/values-es.xml +129 -0
  723. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/values-eu/values-eu.xml +129 -0
  724. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/values-fi/values-fi.xml +129 -0
  725. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/values-fr/values-fr.xml +129 -0
  726. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/values-he/values-he.xml +129 -0
  727. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/values-hi/values-hi.xml +129 -0
  728. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/values-hu/values-hu.xml +129 -0
  729. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/values-id/values-id.xml +129 -0
  730. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/values-it/values-it.xml +129 -0
  731. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/values-iw/values-iw.xml +129 -0
  732. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/values-ja/values-ja.xml +129 -0
  733. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/values-ko/values-ko.xml +129 -0
  734. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/values-nl/values-nl.xml +129 -0
  735. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/values-pl/values-pl.xml +129 -0
  736. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/values-pt/values-pt.xml +129 -0
  737. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/values-ro/values-ro.xml +129 -0
  738. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/values-ru/values-ru.xml +129 -0
  739. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/values-sk/values-sk.xml +129 -0
  740. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/values-sl/values-sl.xml +129 -0
  741. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/values-sv/values-sv.xml +129 -0
  742. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/values-th/values-th.xml +129 -0
  743. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/values-tr/values-tr.xml +129 -0
  744. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/values-uk/values-uk.xml +129 -0
  745. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/values-zh-rCN/values-zh-rCN.xml +129 -0
  746. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/values-zh-rHK/values-zh-rHK.xml +129 -0
  747. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/values-zh-rTW/values-zh-rTW.xml +129 -0
  748. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5/res/xml/preferences.xml +136 -0
  749. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner-release-2.1.5.aar +0 -0
  750. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/barcodescanner.gradle +17 -0
  751. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/android/com/phonegap/plugins/barcodescanner/BarcodeScanner.java +328 -0
  752. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/browser/BarcodeScannerProxy.js +24 -0
  753. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/ios/CDVBarcodeScanner.bundle/beep.caf +0 -0
  754. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/ios/CDVBarcodeScanner.bundle/torch.png +0 -0
  755. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/ios/CDVBarcodeScanner.bundle/torch@2x.png +0 -0
  756. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/ios/CDVBarcodeScanner.bundle/torch@3x.png +0 -0
  757. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/ios/CDVBarcodeScanner.mm +1067 -0
  758. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/ios/scannerOverlay.xib +185 -0
  759. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/windows/BarcodeScannerProxy.js +738 -0
  760. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/windows/assets/plugin-barcodeScanner.css +89 -0
  761. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/windows/lib/Properties/AssemblyInfo.cs +39 -0
  762. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/windows/lib/Reader.cs +173 -0
  763. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/windows/lib/WinRTBarcodeReader.csproj +137 -0
  764. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/windows/lib/ZXing.winmd +0 -0
  765. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/windows/lib.UW/ANY/ZXing.winmd +0 -0
  766. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/windows/lib.UW/ARM/ZXing.winmd +0 -0
  767. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/windows/lib.UW/x64/ZXing.winmd +0 -0
  768. package/demo/plugins/cordova-plugin-qr-barcode-scanner/src/windows/lib.UW/x86/ZXing.winmd +0 -0
  769. package/demo/plugins/cordova-plugin-timer/.appveyor.yml +28 -0
  770. package/demo/plugins/cordova-plugin-timer/.github/PULL_REQUEST_TEMPLATE.md +22 -0
  771. package/demo/plugins/cordova-plugin-timer/.jshintignore +1 -0
  772. package/demo/plugins/cordova-plugin-timer/.jshintrc +16 -0
  773. package/demo/plugins/cordova-plugin-timer/.travis.yml +98 -0
  774. package/demo/plugins/cordova-plugin-timer/LICENSE +204 -0
  775. package/demo/plugins/cordova-plugin-timer/README.md +88 -0
  776. package/demo/plugins/cordova-plugin-timer/RELEASENOTES.md +0 -0
  777. package/demo/plugins/cordova-plugin-timer/package.json +87 -0
  778. package/demo/plugins/cordova-plugin-timer/plugin.xml +68 -0
  779. package/demo/plugins/cordova-plugin-timer/src/android/Consumer.java +22 -0
  780. package/demo/plugins/cordova-plugin-timer/src/android/NativeTimerAdapter.java +27 -0
  781. package/demo/plugins/cordova-plugin-timer/src/android/NativeTimerAdapterImpl.java +123 -0
  782. package/demo/plugins/cordova-plugin-timer/src/android/NativeTimerPlugin.java +163 -0
  783. package/demo/plugins/cordova-plugin-timer/src/ios/NativeTimerAdapter.h +35 -0
  784. package/demo/plugins/cordova-plugin-timer/src/ios/NativeTimerAdapter.m +76 -0
  785. package/demo/plugins/cordova-plugin-timer/src/ios/NativeTimerPlugin.h +28 -0
  786. package/demo/plugins/cordova-plugin-timer/src/ios/NativeTimerPlugin.m +158 -0
  787. package/demo/plugins/cordova-plugin-timer/types/index.d.ts +21 -0
  788. package/demo/plugins/cordova-plugin-whitelist/CONTRIBUTING.md +37 -0
  789. package/demo/plugins/cordova-plugin-whitelist/LICENSE +202 -0
  790. package/demo/plugins/cordova-plugin-whitelist/NOTICE +5 -0
  791. package/demo/plugins/cordova-plugin-whitelist/README.md +167 -0
  792. package/demo/plugins/cordova-plugin-whitelist/RELEASENOTES.md +87 -0
  793. package/demo/plugins/cordova-plugin-whitelist/package.json +70 -0
  794. package/demo/plugins/cordova-plugin-whitelist/plugin.xml +44 -0
  795. package/demo/plugins/cordova-plugin-whitelist/src/android/WhitelistPlugin.java +161 -0
  796. package/demo/plugins/cordova-plugin-whitelist/tests/README.md +53 -0
  797. package/demo/plugins/cordova-plugin-whitelist/tests/package.json +15 -0
  798. package/demo/plugins/cordova-plugin-whitelist/tests/plugin.xml +56 -0
  799. package/demo/plugins/cordova-plugin-whitelist/tests/scripts/remove-access.js +19 -0
  800. package/demo/plugins/cordova-plugin-whitelist/tests/src/android/WhitelistAPI.java +90 -0
  801. package/demo/plugins/cordova-plugin-whitelist/tests/tests.js +214 -0
  802. package/demo/plugins/cordova-plugin-wkwebview-engine/CONTRIBUTING.md +32 -0
  803. package/demo/plugins/cordova-plugin-wkwebview-engine/LICENSE +202 -0
  804. package/demo/plugins/cordova-plugin-wkwebview-engine/NOTICE +5 -0
  805. package/demo/plugins/cordova-plugin-wkwebview-engine/README.md +123 -0
  806. package/demo/plugins/cordova-plugin-wkwebview-engine/RELEASENOTES.md +121 -0
  807. package/demo/plugins/cordova-plugin-wkwebview-engine/package.json +72 -0
  808. package/demo/plugins/cordova-plugin-wkwebview-engine/plugin.xml +63 -0
  809. package/demo/plugins/cordova-plugin-wkwebview-engine/src/ios/CDVWKProcessPoolFactory.h +27 -0
  810. package/demo/plugins/cordova-plugin-wkwebview-engine/src/ios/CDVWKProcessPoolFactory.m +49 -0
  811. package/demo/plugins/cordova-plugin-wkwebview-engine/src/ios/CDVWKWebViewEngine.h +29 -0
  812. package/demo/plugins/cordova-plugin-wkwebview-engine/src/ios/CDVWKWebViewEngine.m +494 -0
  813. package/demo/plugins/cordova-plugin-wkwebview-engine/src/ios/CDVWKWebViewUIDelegate.h +28 -0
  814. package/demo/plugins/cordova-plugin-wkwebview-engine/src/ios/CDVWKWebViewUIDelegate.m +123 -0
  815. package/demo/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest/CDVWKWebViewEngineLibTests/CDVWKWebViewEngineTest.m +240 -0
  816. package/demo/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest/CDVWKWebViewEngineLibTests/Info.plist +24 -0
  817. package/demo/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest/CDVWKWebViewEngineTest.xcodeproj/project.pbxproj +559 -0
  818. package/demo/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest/CDVWKWebViewEngineTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  819. package/demo/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest/CDVWKWebViewEngineTest.xcodeproj/project.xcworkspace/xcshareddata/CDVWKWebViewEngineTest.xccheckout +41 -0
  820. package/demo/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest/CDVWKWebViewEngineTest.xcodeproj/xcshareddata/xcschemes/CDVWKWebViewEngineLib.xcscheme +80 -0
  821. package/demo/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest/CDVWKWebViewEngineTest.xcodeproj/xcshareddata/xcschemes/CDVWKWebViewEngineLibTests.xcscheme +104 -0
  822. package/demo/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest.xcworkspace/contents.xcworkspacedata +7 -0
  823. package/demo/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest.xcworkspace/xcshareddata/CDVWKWebViewEngineTest.xccheckout +41 -0
  824. package/demo/plugins/cordova-plugin-wkwebview-engine/tests/ios/CDVWKWebViewEngineTest.xcworkspace/xcshareddata/xcschemes/CordovaLib.xcscheme +80 -0
  825. package/demo/plugins/cordova-plugin-wkwebview-engine/tests/ios/README.md +40 -0
  826. package/demo/plugins/cordova-plugin-wkwebview-engine/tests/ios/package.json +13 -0
  827. package/demo/plugins/cordova-plugin-wkwebview-engine/tests/ios/test.xcconfig +20 -0
  828. package/demo/plugins/cordova-plugin-wkwebview-engine/tests/package.json +14 -0
  829. package/demo/plugins/cordova-plugin-wkwebview-engine/tests/plugin.xml +29 -0
  830. package/demo/plugins/cordova-plugin-wkwebview-engine/tests/tests.js +44 -0
  831. package/demo/plugins/ios.json +46 -0
  832. package/dist/SNSMobileSDK.js +1 -0
  833. package/package.json +48 -0
  834. package/plugin.xml +82 -0
  835. package/src/android/build-extras.gradle +22 -0
  836. package/src/android/build.gradle +54 -0
  837. package/src/android/dependencies.gradle +122 -0
  838. package/src/android/gradlew +172 -0
  839. package/src/android/gradlew.bat +84 -0
  840. package/src/android/src/main/java/com/sumsub/msdk/plugins/cordova/SNSMobileSdkCordovaPlugin.java +339 -0
  841. package/src/ios/SNSMobileSdkCordovaPlugin.h +12 -0
  842. package/src/ios/SNSMobileSdkCordovaPlugin.m +263 -0
  843. package/webpack.config.js +42 -0
@@ -0,0 +1,3095 @@
1
+ /*
2
+ * Copyright (c) 2014 Kevin Sawicki <kevinsawicki@gmail.com>
3
+ * modified by contributors of cordova-plugin-advanced-http
4
+ *
5
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ * of this software and associated documentation files (the "Software"), to
7
+ * deal in the Software without restriction, including without limitation the
8
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
9
+ * sell copies of the Software, and to permit persons to whom the Software is
10
+ * furnished to do so, subject to the following conditions:
11
+ *
12
+ * The above copyright notice and this permission notice shall be included in
13
+ * all copies or substantial portions of the Software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21
+ * IN THE SOFTWARE.
22
+ */
23
+ package com.silkimen.http;
24
+
25
+ import static java.net.HttpURLConnection.HTTP_BAD_REQUEST;
26
+ import static java.net.HttpURLConnection.HTTP_CREATED;
27
+ import static java.net.HttpURLConnection.HTTP_INTERNAL_ERROR;
28
+ import static java.net.HttpURLConnection.HTTP_NO_CONTENT;
29
+ import static java.net.HttpURLConnection.HTTP_NOT_FOUND;
30
+ import static java.net.HttpURLConnection.HTTP_NOT_MODIFIED;
31
+ import static java.net.HttpURLConnection.HTTP_OK;
32
+ import static java.net.Proxy.Type.HTTP;
33
+
34
+ import java.io.BufferedInputStream;
35
+ import java.io.BufferedOutputStream;
36
+ import java.io.BufferedReader;
37
+ import java.io.ByteArrayInputStream;
38
+ import java.io.ByteArrayOutputStream;
39
+ import java.io.Closeable;
40
+ import java.io.File;
41
+ import java.io.FileInputStream;
42
+ import java.io.FileNotFoundException;
43
+ import java.io.FileOutputStream;
44
+ import java.io.Flushable;
45
+ import java.io.IOException;
46
+ import java.io.InputStream;
47
+ import java.io.InputStreamReader;
48
+ import java.io.OutputStream;
49
+ import java.io.OutputStreamWriter;
50
+ import java.io.PrintStream;
51
+ import java.io.Reader;
52
+ import java.io.UnsupportedEncodingException;
53
+ import java.io.Writer;
54
+ import java.net.HttpURLConnection;
55
+ import java.net.InetSocketAddress;
56
+ import java.net.MalformedURLException;
57
+ import java.net.Proxy;
58
+ import java.net.URI;
59
+ import java.net.URISyntaxException;
60
+ import java.net.URL;
61
+ import java.net.URLEncoder;
62
+ import java.nio.ByteBuffer;
63
+ import java.nio.CharBuffer;
64
+ import java.nio.charset.Charset;
65
+ import java.nio.charset.CharsetEncoder;
66
+ import java.security.AccessController;
67
+ import java.security.GeneralSecurityException;
68
+ import java.security.PrivilegedAction;
69
+ import java.security.SecureRandom;
70
+ import java.security.cert.X509Certificate;
71
+ import java.util.ArrayList;
72
+ import java.util.Arrays;
73
+ import java.util.Collections;
74
+ import java.util.Iterator;
75
+ import java.util.LinkedHashMap;
76
+ import java.util.List;
77
+ import java.util.Map;
78
+ import java.util.Map.Entry;
79
+ import java.util.concurrent.Callable;
80
+ import java.util.concurrent.atomic.AtomicInteger;
81
+ import java.util.concurrent.atomic.AtomicReference;
82
+ import java.util.zip.GZIPInputStream;
83
+
84
+ import javax.net.ssl.HostnameVerifier;
85
+ import javax.net.ssl.HttpsURLConnection;
86
+ import javax.net.ssl.SSLContext;
87
+ import javax.net.ssl.SSLSession;
88
+ import javax.net.ssl.SSLSocketFactory;
89
+ import javax.net.ssl.TrustManager;
90
+ import javax.net.ssl.X509TrustManager;
91
+
92
+ /**
93
+ * A fluid interface for making HTTP requests using an underlying
94
+ * {@link HttpURLConnection} (or sub-class).
95
+ * <p>
96
+ * Each instance supports making a single request and cannot be reused for
97
+ * further requests.
98
+ */
99
+ public class HttpRequest {
100
+
101
+ /**
102
+ * 'UTF-8' charset name
103
+ */
104
+ public static final String CHARSET_UTF8 = "UTF-8";
105
+
106
+ /**
107
+ * 'application/x-www-form-urlencoded' content type header value
108
+ */
109
+ public static final String CONTENT_TYPE_FORM = "application/x-www-form-urlencoded";
110
+
111
+ /**
112
+ * 'application/json' content type header value
113
+ */
114
+ public static final String CONTENT_TYPE_JSON = "application/json";
115
+
116
+ /**
117
+ * 'gzip' encoding header value
118
+ */
119
+ public static final String ENCODING_GZIP = "gzip";
120
+
121
+ /**
122
+ * 'Accept' header name
123
+ */
124
+ public static final String HEADER_ACCEPT = "Accept";
125
+
126
+ /**
127
+ * 'Accept-Charset' header name
128
+ */
129
+ public static final String HEADER_ACCEPT_CHARSET = "Accept-Charset";
130
+
131
+ /**
132
+ * 'Accept-Encoding' header name
133
+ */
134
+ public static final String HEADER_ACCEPT_ENCODING = "Accept-Encoding";
135
+
136
+ /**
137
+ * 'Authorization' header name
138
+ */
139
+ public static final String HEADER_AUTHORIZATION = "Authorization";
140
+
141
+ /**
142
+ * 'Cache-Control' header name
143
+ */
144
+ public static final String HEADER_CACHE_CONTROL = "Cache-Control";
145
+
146
+ /**
147
+ * 'Content-Encoding' header name
148
+ */
149
+ public static final String HEADER_CONTENT_ENCODING = "Content-Encoding";
150
+
151
+ /**
152
+ * 'Content-Length' header name
153
+ */
154
+ public static final String HEADER_CONTENT_LENGTH = "Content-Length";
155
+
156
+ /**
157
+ * 'Content-Type' header name
158
+ */
159
+ public static final String HEADER_CONTENT_TYPE = "Content-Type";
160
+
161
+ /**
162
+ * 'Date' header name
163
+ */
164
+ public static final String HEADER_DATE = "Date";
165
+
166
+ /**
167
+ * 'ETag' header name
168
+ */
169
+ public static final String HEADER_ETAG = "ETag";
170
+
171
+ /**
172
+ * 'Expires' header name
173
+ */
174
+ public static final String HEADER_EXPIRES = "Expires";
175
+
176
+ /**
177
+ * 'If-None-Match' header name
178
+ */
179
+ public static final String HEADER_IF_NONE_MATCH = "If-None-Match";
180
+
181
+ /**
182
+ * 'Last-Modified' header name
183
+ */
184
+ public static final String HEADER_LAST_MODIFIED = "Last-Modified";
185
+
186
+ /**
187
+ * 'Location' header name
188
+ */
189
+ public static final String HEADER_LOCATION = "Location";
190
+
191
+ /**
192
+ * 'Proxy-Authorization' header name
193
+ */
194
+ public static final String HEADER_PROXY_AUTHORIZATION = "Proxy-Authorization";
195
+
196
+ /**
197
+ * 'Referer' header name
198
+ */
199
+ public static final String HEADER_REFERER = "Referer";
200
+
201
+ /**
202
+ * 'Server' header name
203
+ */
204
+ public static final String HEADER_SERVER = "Server";
205
+
206
+ /**
207
+ * 'User-Agent' header name
208
+ */
209
+ public static final String HEADER_USER_AGENT = "User-Agent";
210
+
211
+ /**
212
+ * 'DELETE' request method
213
+ */
214
+ public static final String METHOD_DELETE = "DELETE";
215
+
216
+ /**
217
+ * 'GET' request method
218
+ */
219
+ public static final String METHOD_GET = "GET";
220
+
221
+ /**
222
+ * 'HEAD' request method
223
+ */
224
+ public static final String METHOD_HEAD = "HEAD";
225
+
226
+ /**
227
+ * 'OPTIONS' options method
228
+ */
229
+ public static final String METHOD_OPTIONS = "OPTIONS";
230
+
231
+ /**
232
+ * 'POST' request method
233
+ */
234
+ public static final String METHOD_POST = "POST";
235
+
236
+ /**
237
+ * 'PUT' request method
238
+ */
239
+ public static final String METHOD_PUT = "PUT";
240
+
241
+ /**
242
+ * 'TRACE' request method
243
+ */
244
+ public static final String METHOD_TRACE = "TRACE";
245
+
246
+ /**
247
+ * 'charset' header value parameter
248
+ */
249
+ public static final String PARAM_CHARSET = "charset";
250
+
251
+ private static final String BOUNDARY = "00content0boundary00";
252
+
253
+ private static final String CONTENT_TYPE_MULTIPART = "multipart/form-data; boundary=" + BOUNDARY;
254
+
255
+ private static final String CRLF = "\r\n";
256
+
257
+ private static final String[] EMPTY_STRINGS = new String[0];
258
+
259
+ private static String getValidCharset(final String charset) {
260
+ if (charset != null && charset.length() > 0)
261
+ return charset;
262
+ else
263
+ return CHARSET_UTF8;
264
+ }
265
+
266
+ private static StringBuilder addPathSeparator(final String baseUrl, final StringBuilder result) {
267
+ // Add trailing slash if the base URL doesn't have any path segments.
268
+ //
269
+ // The following test is checking for the last slash not being part of
270
+ // the protocol to host separator: '://'.
271
+ if (baseUrl.indexOf(':') + 2 == baseUrl.lastIndexOf('/'))
272
+ result.append('/');
273
+ return result;
274
+ }
275
+
276
+ private static StringBuilder addParamPrefix(final String baseUrl, final StringBuilder result) {
277
+ // Add '?' if missing and add '&' if params already exist in base url
278
+ final int queryStart = baseUrl.indexOf('?');
279
+ final int lastChar = result.length() - 1;
280
+ if (queryStart == -1)
281
+ result.append('?');
282
+ else if (queryStart < lastChar && baseUrl.charAt(lastChar) != '&')
283
+ result.append('&');
284
+ return result;
285
+ }
286
+
287
+ private static StringBuilder addParam(final Object key, Object value, final StringBuilder result) {
288
+ if (value != null && value.getClass().isArray())
289
+ value = arrayToList(value);
290
+
291
+ if (value instanceof Iterable<?>) {
292
+ Iterator<?> iterator = ((Iterable<?>) value).iterator();
293
+ while (iterator.hasNext()) {
294
+ result.append(key);
295
+ result.append("[]=");
296
+ Object element = iterator.next();
297
+ if (element != null)
298
+ result.append(element);
299
+ if (iterator.hasNext())
300
+ result.append("&");
301
+ }
302
+ } else {
303
+ result.append(key);
304
+ result.append("=");
305
+ if (value != null)
306
+ result.append(value);
307
+ }
308
+
309
+ return result;
310
+ }
311
+
312
+ /**
313
+ * Creates {@link HttpURLConnection HTTP connections} for {@link URL urls}.
314
+ */
315
+ public interface ConnectionFactory {
316
+ /**
317
+ * Open an {@link HttpURLConnection} for the specified {@link URL}.
318
+ *
319
+ * @throws IOException
320
+ */
321
+ HttpURLConnection create(URL url) throws IOException;
322
+
323
+ /**
324
+ * Open an {@link HttpURLConnection} for the specified {@link URL} and
325
+ * {@link Proxy}.
326
+ *
327
+ * @throws IOException
328
+ */
329
+ HttpURLConnection create(URL url, Proxy proxy) throws IOException;
330
+
331
+ /**
332
+ * A {@link ConnectionFactory} which uses the built-in
333
+ * {@link URL#openConnection()}
334
+ */
335
+ ConnectionFactory DEFAULT = new ConnectionFactory() {
336
+ public HttpURLConnection create(URL url) throws IOException {
337
+ return (HttpURLConnection) url.openConnection();
338
+ }
339
+
340
+ public HttpURLConnection create(URL url, Proxy proxy) throws IOException {
341
+ return (HttpURLConnection) url.openConnection(proxy);
342
+ }
343
+ };
344
+ }
345
+
346
+ private static ConnectionFactory CONNECTION_FACTORY = ConnectionFactory.DEFAULT;
347
+
348
+ /**
349
+ * Specify the {@link ConnectionFactory} used to create new requests.
350
+ */
351
+ public static void setConnectionFactory(final ConnectionFactory connectionFactory) {
352
+ if (connectionFactory == null)
353
+ CONNECTION_FACTORY = ConnectionFactory.DEFAULT;
354
+ else
355
+ CONNECTION_FACTORY = connectionFactory;
356
+ }
357
+
358
+ /**
359
+ * Callback interface for reporting upload progress for a request.
360
+ */
361
+ public interface UploadProgress {
362
+ /**
363
+ * Callback invoked as data is uploaded by the request.
364
+ *
365
+ * @param uploaded The number of bytes already uploaded
366
+ * @param total The total number of bytes that will be uploaded or -1 if the
367
+ * length is unknown.
368
+ */
369
+ void onUpload(long uploaded, long total);
370
+
371
+ UploadProgress DEFAULT = new UploadProgress() {
372
+ public void onUpload(long uploaded, long total) {
373
+ }
374
+ };
375
+ }
376
+
377
+ /**
378
+ * <p>
379
+ * Encodes and decodes to and from Base64 notation.
380
+ * </p>
381
+ * <p>
382
+ * I am placing this code in the Public Domain. Do with it as you will. This
383
+ * software comes with no guarantees or warranties but with plenty of
384
+ * well-wishing instead! Please visit
385
+ * <a href="http://iharder.net/base64">http://iharder.net/base64</a>
386
+ * periodically to check for updates or to contribute improvements.
387
+ * </p>
388
+ *
389
+ * @author Robert Harder
390
+ * @author rob@iharder.net
391
+ * @version 2.3.7
392
+ */
393
+ public static class Base64 {
394
+
395
+ /** The equals sign (=) as a byte. */
396
+ private final static byte EQUALS_SIGN = (byte) '=';
397
+
398
+ /** Preferred encoding. */
399
+ private final static String PREFERRED_ENCODING = "US-ASCII";
400
+
401
+ /** The 64 valid Base64 values. */
402
+ private final static byte[] _STANDARD_ALPHABET = { (byte) 'A', (byte) 'B', (byte) 'C', (byte) 'D', (byte) 'E',
403
+ (byte) 'F', (byte) 'G', (byte) 'H', (byte) 'I', (byte) 'J', (byte) 'K', (byte) 'L', (byte) 'M', (byte) 'N',
404
+ (byte) 'O', (byte) 'P', (byte) 'Q', (byte) 'R', (byte) 'S', (byte) 'T', (byte) 'U', (byte) 'V', (byte) 'W',
405
+ (byte) 'X', (byte) 'Y', (byte) 'Z', (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd', (byte) 'e', (byte) 'f',
406
+ (byte) 'g', (byte) 'h', (byte) 'i', (byte) 'j', (byte) 'k', (byte) 'l', (byte) 'm', (byte) 'n', (byte) 'o',
407
+ (byte) 'p', (byte) 'q', (byte) 'r', (byte) 's', (byte) 't', (byte) 'u', (byte) 'v', (byte) 'w', (byte) 'x',
408
+ (byte) 'y', (byte) 'z', (byte) '0', (byte) '1', (byte) '2', (byte) '3', (byte) '4', (byte) '5', (byte) '6',
409
+ (byte) '7', (byte) '8', (byte) '9', (byte) '+', (byte) '/' };
410
+
411
+ /** Defeats instantiation. */
412
+ private Base64() {
413
+ }
414
+
415
+ /**
416
+ * <p>
417
+ * Encodes up to three bytes of the array <var>source</var> and writes the
418
+ * resulting four Base64 bytes to <var>destination</var>. The source and
419
+ * destination arrays can be manipulated anywhere along their length by
420
+ * specifying <var>srcOffset</var> and <var>destOffset</var>. This method does
421
+ * not check to make sure your arrays are large enough to accomodate
422
+ * <var>srcOffset</var> + 3 for the <var>source</var> array or
423
+ * <var>destOffset</var> + 4 for the <var>destination</var> array. The actual
424
+ * number of significant bytes in your array is given by <var>numSigBytes</var>.
425
+ * </p>
426
+ * <p>
427
+ * This is the lowest level of the encoding methods with all possible
428
+ * parameters.
429
+ * </p>
430
+ *
431
+ * @param source the array to convert
432
+ * @param srcOffset the index where conversion begins
433
+ * @param numSigBytes the number of significant bytes in your array
434
+ * @param destination the array to hold the conversion
435
+ * @param destOffset the index where output will be put
436
+ * @return the <var>destination</var> array
437
+ * @since 1.3
438
+ */
439
+ private static byte[] encode3to4(byte[] source, int srcOffset, int numSigBytes, byte[] destination,
440
+ int destOffset) {
441
+
442
+ byte[] ALPHABET = _STANDARD_ALPHABET;
443
+
444
+ int inBuff = (numSigBytes > 0 ? ((source[srcOffset] << 24) >>> 8) : 0)
445
+ | (numSigBytes > 1 ? ((source[srcOffset + 1] << 24) >>> 16) : 0)
446
+ | (numSigBytes > 2 ? ((source[srcOffset + 2] << 24) >>> 24) : 0);
447
+
448
+ switch (numSigBytes) {
449
+ case 3:
450
+ destination[destOffset] = ALPHABET[(inBuff >>> 18)];
451
+ destination[destOffset + 1] = ALPHABET[(inBuff >>> 12) & 0x3f];
452
+ destination[destOffset + 2] = ALPHABET[(inBuff >>> 6) & 0x3f];
453
+ destination[destOffset + 3] = ALPHABET[(inBuff) & 0x3f];
454
+ return destination;
455
+
456
+ case 2:
457
+ destination[destOffset] = ALPHABET[(inBuff >>> 18)];
458
+ destination[destOffset + 1] = ALPHABET[(inBuff >>> 12) & 0x3f];
459
+ destination[destOffset + 2] = ALPHABET[(inBuff >>> 6) & 0x3f];
460
+ destination[destOffset + 3] = EQUALS_SIGN;
461
+ return destination;
462
+
463
+ case 1:
464
+ destination[destOffset] = ALPHABET[(inBuff >>> 18)];
465
+ destination[destOffset + 1] = ALPHABET[(inBuff >>> 12) & 0x3f];
466
+ destination[destOffset + 2] = EQUALS_SIGN;
467
+ destination[destOffset + 3] = EQUALS_SIGN;
468
+ return destination;
469
+
470
+ default:
471
+ return destination;
472
+ }
473
+ }
474
+
475
+ /**
476
+ * Encode string as a byte array in Base64 annotation.
477
+ *
478
+ * @param string
479
+ * @return The Base64-encoded data as a string
480
+ */
481
+ public static String encode(String string) {
482
+ byte[] bytes;
483
+ try {
484
+ bytes = string.getBytes(PREFERRED_ENCODING);
485
+ } catch (UnsupportedEncodingException e) {
486
+ bytes = string.getBytes();
487
+ }
488
+ return encodeBytes(bytes);
489
+ }
490
+
491
+ /**
492
+ * Encodes a byte array into Base64 notation.
493
+ *
494
+ * @param source The data to convert
495
+ * @return The Base64-encoded data as a String
496
+ * @throws NullPointerException if source array is null
497
+ * @throws IllegalArgumentException if source array, offset, or length are
498
+ * invalid
499
+ * @since 2.0
500
+ */
501
+ public static String encodeBytes(byte[] source) {
502
+ return encodeBytes(source, 0, source.length);
503
+ }
504
+
505
+ /**
506
+ * Encodes a byte array into Base64 notation.
507
+ *
508
+ * @param source The data to convert
509
+ * @param off Offset in array where conversion should begin
510
+ * @param len Length of data to convert
511
+ * @return The Base64-encoded data as a String
512
+ * @throws NullPointerException if source array is null
513
+ * @throws IllegalArgumentException if source array, offset, or length are
514
+ * invalid
515
+ * @since 2.0
516
+ */
517
+ public static String encodeBytes(byte[] source, int off, int len) {
518
+ byte[] encoded = encodeBytesToBytes(source, off, len);
519
+ try {
520
+ return new String(encoded, PREFERRED_ENCODING);
521
+ } catch (UnsupportedEncodingException uue) {
522
+ return new String(encoded);
523
+ }
524
+ }
525
+
526
+ /**
527
+ * Similar to {@link #encodeBytes(byte[], int, int)} but returns a byte array
528
+ * instead of instantiating a String. This is more efficient if you're working
529
+ * with I/O streams and have large data sets to encode.
530
+ *
531
+ *
532
+ * @param source The data to convert
533
+ * @param off Offset in array where conversion should begin
534
+ * @param len Length of data to convert
535
+ * @return The Base64-encoded data as a String if there is an error
536
+ * @throws NullPointerException if source array is null
537
+ * @throws IllegalArgumentException if source array, offset, or length are
538
+ * invalid
539
+ * @since 2.3.1
540
+ */
541
+ public static byte[] encodeBytesToBytes(byte[] source, int off, int len) {
542
+
543
+ if (source == null)
544
+ throw new NullPointerException("Cannot serialize a null array.");
545
+
546
+ if (off < 0)
547
+ throw new IllegalArgumentException("Cannot have negative offset: " + off);
548
+
549
+ if (len < 0)
550
+ throw new IllegalArgumentException("Cannot have length offset: " + len);
551
+
552
+ if (off + len > source.length)
553
+ throw new IllegalArgumentException(String
554
+ .format("Cannot have offset of %d and length of %d with array of length %d", off, len, source.length));
555
+
556
+ // Bytes needed for actual encoding
557
+ int encLen = (len / 3) * 4 + (len % 3 > 0 ? 4 : 0);
558
+
559
+ byte[] outBuff = new byte[encLen];
560
+
561
+ int d = 0;
562
+ int e = 0;
563
+ int len2 = len - 2;
564
+ for (; d < len2; d += 3, e += 4)
565
+ encode3to4(source, d + off, 3, outBuff, e);
566
+
567
+ if (d < len) {
568
+ encode3to4(source, d + off, len - d, outBuff, e);
569
+ e += 4;
570
+ }
571
+
572
+ if (e <= outBuff.length - 1) {
573
+ byte[] finalOut = new byte[e];
574
+ System.arraycopy(outBuff, 0, finalOut, 0, e);
575
+ return finalOut;
576
+ } else
577
+ return outBuff;
578
+ }
579
+ }
580
+
581
+ /**
582
+ * HTTP request exception whose cause is always an {@link IOException}
583
+ */
584
+ public static class HttpRequestException extends RuntimeException {
585
+
586
+ private static final long serialVersionUID = -1170466989781746231L;
587
+
588
+ /**
589
+ * Create a new HttpRequestException with the given cause
590
+ *
591
+ * @param cause
592
+ */
593
+ public HttpRequestException(final IOException cause) {
594
+ super(cause);
595
+ }
596
+
597
+ /**
598
+ * Get {@link IOException} that triggered this request exception
599
+ *
600
+ * @return {@link IOException} cause
601
+ */
602
+ @Override
603
+ public IOException getCause() {
604
+ return (IOException) super.getCause();
605
+ }
606
+ }
607
+
608
+ /**
609
+ * Operation that handles executing a callback once complete and handling nested
610
+ * exceptions
611
+ *
612
+ * @param <V>
613
+ */
614
+ protected static abstract class Operation<V> implements Callable<V> {
615
+
616
+ /**
617
+ * Run operation
618
+ *
619
+ * @return result
620
+ * @throws HttpRequestException
621
+ * @throws IOException
622
+ */
623
+ protected abstract V run() throws HttpRequestException, IOException;
624
+
625
+ /**
626
+ * Operation complete callback
627
+ *
628
+ * @throws IOException
629
+ */
630
+ protected abstract void done() throws IOException;
631
+
632
+ public V call() throws HttpRequestException {
633
+ boolean thrown = false;
634
+ try {
635
+ return run();
636
+ } catch (HttpRequestException e) {
637
+ thrown = true;
638
+ throw e;
639
+ } catch (IOException e) {
640
+ thrown = true;
641
+ throw new HttpRequestException(e);
642
+ } finally {
643
+ try {
644
+ done();
645
+ } catch (IOException e) {
646
+ if (!thrown)
647
+ throw new HttpRequestException(e);
648
+ }
649
+ }
650
+ }
651
+ }
652
+
653
+ /**
654
+ * Class that ensures a {@link Closeable} gets closed with proper exception
655
+ * handling.
656
+ *
657
+ * @param <V>
658
+ */
659
+ protected static abstract class CloseOperation<V> extends Operation<V> {
660
+
661
+ private final Closeable closeable;
662
+
663
+ private final boolean ignoreCloseExceptions;
664
+
665
+ /**
666
+ * Create closer for operation
667
+ *
668
+ * @param closeable
669
+ * @param ignoreCloseExceptions
670
+ */
671
+ protected CloseOperation(final Closeable closeable, final boolean ignoreCloseExceptions) {
672
+ this.closeable = closeable;
673
+ this.ignoreCloseExceptions = ignoreCloseExceptions;
674
+ }
675
+
676
+ @Override
677
+ protected void done() throws IOException {
678
+ if (closeable instanceof Flushable)
679
+ ((Flushable) closeable).flush();
680
+ if (ignoreCloseExceptions)
681
+ try {
682
+ closeable.close();
683
+ } catch (IOException e) {
684
+ // Ignored
685
+ }
686
+ else
687
+ closeable.close();
688
+ }
689
+ }
690
+
691
+ /**
692
+ * Class that and ensures a {@link Flushable} gets flushed with proper exception
693
+ * handling.
694
+ *
695
+ * @param <V>
696
+ */
697
+ protected static abstract class FlushOperation<V> extends Operation<V> {
698
+
699
+ private final Flushable flushable;
700
+
701
+ /**
702
+ * Create flush operation
703
+ *
704
+ * @param flushable
705
+ */
706
+ protected FlushOperation(final Flushable flushable) {
707
+ this.flushable = flushable;
708
+ }
709
+
710
+ @Override
711
+ protected void done() throws IOException {
712
+ flushable.flush();
713
+ }
714
+ }
715
+
716
+ /**
717
+ * Request output stream
718
+ */
719
+ public static class RequestOutputStream extends BufferedOutputStream {
720
+
721
+ private final CharsetEncoder encoder;
722
+
723
+ /**
724
+ * Create request output stream
725
+ *
726
+ * @param stream
727
+ * @param charset
728
+ * @param bufferSize
729
+ */
730
+ public RequestOutputStream(final OutputStream stream, final String charset, final int bufferSize) {
731
+ super(stream, bufferSize);
732
+
733
+ encoder = Charset.forName(getValidCharset(charset)).newEncoder();
734
+ }
735
+
736
+ /**
737
+ * Write string to stream
738
+ *
739
+ * @param value
740
+ * @return this stream
741
+ * @throws IOException
742
+ */
743
+ public RequestOutputStream write(final String value) throws IOException {
744
+ final ByteBuffer bytes = encoder.encode(CharBuffer.wrap(value));
745
+
746
+ super.write(bytes.array(), 0, bytes.limit());
747
+
748
+ return this;
749
+ }
750
+ }
751
+
752
+ /**
753
+ * Represents array of any type as list of objects so we can easily iterate over
754
+ * it
755
+ *
756
+ * @param array of elements
757
+ * @return list with the same elements
758
+ */
759
+ private static List<Object> arrayToList(final Object array) {
760
+ if (array instanceof Object[])
761
+ return Arrays.asList((Object[]) array);
762
+
763
+ List<Object> result = new ArrayList<Object>();
764
+ // Arrays of the primitive types can't be cast to array of Object, so this:
765
+ if (array instanceof int[])
766
+ for (int value : (int[]) array)
767
+ result.add(value);
768
+ else if (array instanceof boolean[])
769
+ for (boolean value : (boolean[]) array)
770
+ result.add(value);
771
+ else if (array instanceof long[])
772
+ for (long value : (long[]) array)
773
+ result.add(value);
774
+ else if (array instanceof float[])
775
+ for (float value : (float[]) array)
776
+ result.add(value);
777
+ else if (array instanceof double[])
778
+ for (double value : (double[]) array)
779
+ result.add(value);
780
+ else if (array instanceof short[])
781
+ for (short value : (short[]) array)
782
+ result.add(value);
783
+ else if (array instanceof byte[])
784
+ for (byte value : (byte[]) array)
785
+ result.add(value);
786
+ else if (array instanceof char[])
787
+ for (char value : (char[]) array)
788
+ result.add(value);
789
+ return result;
790
+ }
791
+
792
+ /**
793
+ * Encode the given URL as an ASCII {@link String}
794
+ * <p>
795
+ * This method ensures the path and query segments of the URL are properly
796
+ * encoded such as ' ' characters being encoded to '%20' or any UTF-8 characters
797
+ * that are non-ASCII. No encoding of URLs is done by default by the
798
+ * {@link HttpRequest} constructors and so if URL encoding is needed this method
799
+ * should be called before calling the {@link HttpRequest} constructor.
800
+ *
801
+ * @param url
802
+ * @return encoded URL
803
+ * @throws HttpRequestException
804
+ */
805
+ public static String encode(final CharSequence url) throws HttpRequestException {
806
+ URL parsed;
807
+ try {
808
+ parsed = new URL(url.toString());
809
+ } catch (IOException e) {
810
+ throw new HttpRequestException(e);
811
+ }
812
+
813
+ String host = parsed.getHost();
814
+ int port = parsed.getPort();
815
+ if (port != -1)
816
+ host = host + ':' + Integer.toString(port);
817
+
818
+ try {
819
+ String encoded = new URI(parsed.getProtocol(), host, parsed.getPath(), parsed.getQuery(), null).toASCIIString();
820
+ int paramsStart = encoded.indexOf('?');
821
+ if (paramsStart > 0 && paramsStart + 1 < encoded.length())
822
+ encoded = encoded.substring(0, paramsStart + 1) + encoded.substring(paramsStart + 1).replace("+", "%2B");
823
+ return encoded;
824
+ } catch (URISyntaxException e) {
825
+ IOException io = new IOException("Parsing URI failed");
826
+ io.initCause(e);
827
+ throw new HttpRequestException(io);
828
+ }
829
+ }
830
+
831
+ /**
832
+ * Append given map as query parameters to the base URL
833
+ * <p>
834
+ * Each map entry's key will be a parameter name and the value's
835
+ * {@link Object#toString()} will be the parameter value.
836
+ *
837
+ * @param url
838
+ * @param params
839
+ * @return URL with appended query params
840
+ */
841
+ public static String append(final CharSequence url, final Map<?, ?> params) {
842
+ final String baseUrl = url.toString();
843
+ if (params == null || params.isEmpty())
844
+ return baseUrl;
845
+
846
+ final StringBuilder result = new StringBuilder(baseUrl);
847
+
848
+ addPathSeparator(baseUrl, result);
849
+ addParamPrefix(baseUrl, result);
850
+
851
+ Entry<?, ?> entry;
852
+ Iterator<?> iterator = params.entrySet().iterator();
853
+ entry = (Entry<?, ?>) iterator.next();
854
+ addParam(entry.getKey().toString(), entry.getValue(), result);
855
+
856
+ while (iterator.hasNext()) {
857
+ result.append('&');
858
+ entry = (Entry<?, ?>) iterator.next();
859
+ addParam(entry.getKey().toString(), entry.getValue(), result);
860
+ }
861
+
862
+ return result.toString();
863
+ }
864
+
865
+ /**
866
+ * Append given name/value pairs as query parameters to the base URL
867
+ * <p>
868
+ * The params argument is interpreted as a sequence of name/value pairs so the
869
+ * given number of params must be divisible by 2.
870
+ *
871
+ * @param url
872
+ * @param params name/value pairs
873
+ * @return URL with appended query params
874
+ */
875
+ public static String append(final CharSequence url, final Object... params) {
876
+ final String baseUrl = url.toString();
877
+ if (params == null || params.length == 0)
878
+ return baseUrl;
879
+
880
+ if (params.length % 2 != 0)
881
+ throw new IllegalArgumentException("Must specify an even number of parameter names/values");
882
+
883
+ final StringBuilder result = new StringBuilder(baseUrl);
884
+
885
+ addPathSeparator(baseUrl, result);
886
+ addParamPrefix(baseUrl, result);
887
+
888
+ addParam(params[0], params[1], result);
889
+
890
+ for (int i = 2; i < params.length; i += 2) {
891
+ result.append('&');
892
+ addParam(params[i], params[i + 1], result);
893
+ }
894
+
895
+ return result.toString();
896
+ }
897
+
898
+ /**
899
+ * Start a 'GET' request to the given URL
900
+ *
901
+ * @param url
902
+ * @return request
903
+ * @throws HttpRequestException
904
+ */
905
+ public static HttpRequest get(final CharSequence url) throws HttpRequestException {
906
+ return new HttpRequest(url, METHOD_GET);
907
+ }
908
+
909
+ /**
910
+ * Start a 'GET' request to the given URL
911
+ *
912
+ * @param url
913
+ * @return request
914
+ * @throws HttpRequestException
915
+ */
916
+ public static HttpRequest get(final URL url) throws HttpRequestException {
917
+ return new HttpRequest(url, METHOD_GET);
918
+ }
919
+
920
+ /**
921
+ * Start a 'GET' request to the given URL along with the query params
922
+ *
923
+ * @param baseUrl
924
+ * @param params The query parameters to include as part of the baseUrl
925
+ * @param encode true to encode the full URL
926
+ *
927
+ * @see #append(CharSequence, Map)
928
+ * @see #encode(CharSequence)
929
+ *
930
+ * @return request
931
+ */
932
+ public static HttpRequest get(final CharSequence baseUrl, final Map<?, ?> params, final boolean encode) {
933
+ String url = append(baseUrl, params);
934
+ return get(encode ? encode(url) : url);
935
+ }
936
+
937
+ /**
938
+ * Start a 'GET' request to the given URL along with the query params
939
+ *
940
+ * @param baseUrl
941
+ * @param encode true to encode the full URL
942
+ * @param params the name/value query parameter pairs to include as part of the
943
+ * baseUrl
944
+ *
945
+ * @see #append(CharSequence, Object...)
946
+ * @see #encode(CharSequence)
947
+ *
948
+ * @return request
949
+ */
950
+ public static HttpRequest get(final CharSequence baseUrl, final boolean encode, final Object... params) {
951
+ String url = append(baseUrl, params);
952
+ return get(encode ? encode(url) : url);
953
+ }
954
+
955
+ /**
956
+ * Start a 'POST' request to the given URL
957
+ *
958
+ * @param url
959
+ * @return request
960
+ * @throws HttpRequestException
961
+ */
962
+ public static HttpRequest post(final CharSequence url) throws HttpRequestException {
963
+ return new HttpRequest(url, METHOD_POST);
964
+ }
965
+
966
+ /**
967
+ * Start a 'POST' request to the given URL
968
+ *
969
+ * @param url
970
+ * @return request
971
+ * @throws HttpRequestException
972
+ */
973
+ public static HttpRequest post(final URL url) throws HttpRequestException {
974
+ return new HttpRequest(url, METHOD_POST);
975
+ }
976
+
977
+ /**
978
+ * Start a 'POST' request to the given URL along with the query params
979
+ *
980
+ * @param baseUrl
981
+ * @param params the query parameters to include as part of the baseUrl
982
+ * @param encode true to encode the full URL
983
+ *
984
+ * @see #append(CharSequence, Map)
985
+ * @see #encode(CharSequence)
986
+ *
987
+ * @return request
988
+ */
989
+ public static HttpRequest post(final CharSequence baseUrl, final Map<?, ?> params, final boolean encode) {
990
+ String url = append(baseUrl, params);
991
+ return post(encode ? encode(url) : url);
992
+ }
993
+
994
+ /**
995
+ * Start a 'POST' request to the given URL along with the query params
996
+ *
997
+ * @param baseUrl
998
+ * @param encode true to encode the full URL
999
+ * @param params the name/value query parameter pairs to include as part of the
1000
+ * baseUrl
1001
+ *
1002
+ * @see #append(CharSequence, Object...)
1003
+ * @see #encode(CharSequence)
1004
+ *
1005
+ * @return request
1006
+ */
1007
+ public static HttpRequest post(final CharSequence baseUrl, final boolean encode, final Object... params) {
1008
+ String url = append(baseUrl, params);
1009
+ return post(encode ? encode(url) : url);
1010
+ }
1011
+
1012
+ /**
1013
+ * Start a 'PUT' request to the given URL
1014
+ *
1015
+ * @param url
1016
+ * @return request
1017
+ * @throws HttpRequestException
1018
+ */
1019
+ public static HttpRequest put(final CharSequence url) throws HttpRequestException {
1020
+ return new HttpRequest(url, METHOD_PUT);
1021
+ }
1022
+
1023
+ /**
1024
+ * Start a 'PUT' request to the given URL
1025
+ *
1026
+ * @param url
1027
+ * @return request
1028
+ * @throws HttpRequestException
1029
+ */
1030
+ public static HttpRequest put(final URL url) throws HttpRequestException {
1031
+ return new HttpRequest(url, METHOD_PUT);
1032
+ }
1033
+
1034
+ /**
1035
+ * Start a 'PUT' request to the given URL along with the query params
1036
+ *
1037
+ * @param baseUrl
1038
+ * @param params the query parameters to include as part of the baseUrl
1039
+ * @param encode true to encode the full URL
1040
+ *
1041
+ * @see #append(CharSequence, Map)
1042
+ * @see #encode(CharSequence)
1043
+ *
1044
+ * @return request
1045
+ */
1046
+ public static HttpRequest put(final CharSequence baseUrl, final Map<?, ?> params, final boolean encode) {
1047
+ String url = append(baseUrl, params);
1048
+ return put(encode ? encode(url) : url);
1049
+ }
1050
+
1051
+ /**
1052
+ * Start a 'PUT' request to the given URL along with the query params
1053
+ *
1054
+ * @param baseUrl
1055
+ * @param encode true to encode the full URL
1056
+ * @param params the name/value query parameter pairs to include as part of the
1057
+ * baseUrl
1058
+ *
1059
+ * @see #append(CharSequence, Object...)
1060
+ * @see #encode(CharSequence)
1061
+ *
1062
+ * @return request
1063
+ */
1064
+ public static HttpRequest put(final CharSequence baseUrl, final boolean encode, final Object... params) {
1065
+ String url = append(baseUrl, params);
1066
+ return put(encode ? encode(url) : url);
1067
+ }
1068
+
1069
+ /**
1070
+ * Start a 'DELETE' request to the given URL
1071
+ *
1072
+ * @param url
1073
+ * @return request
1074
+ * @throws HttpRequestException
1075
+ */
1076
+ public static HttpRequest delete(final CharSequence url) throws HttpRequestException {
1077
+ return new HttpRequest(url, METHOD_DELETE);
1078
+ }
1079
+
1080
+ /**
1081
+ * Start a 'DELETE' request to the given URL
1082
+ *
1083
+ * @param url
1084
+ * @return request
1085
+ * @throws HttpRequestException
1086
+ */
1087
+ public static HttpRequest delete(final URL url) throws HttpRequestException {
1088
+ return new HttpRequest(url, METHOD_DELETE);
1089
+ }
1090
+
1091
+ /**
1092
+ * Start a 'DELETE' request to the given URL along with the query params
1093
+ *
1094
+ * @param baseUrl
1095
+ * @param params The query parameters to include as part of the baseUrl
1096
+ * @param encode true to encode the full URL
1097
+ *
1098
+ * @see #append(CharSequence, Map)
1099
+ * @see #encode(CharSequence)
1100
+ *
1101
+ * @return request
1102
+ */
1103
+ public static HttpRequest delete(final CharSequence baseUrl, final Map<?, ?> params, final boolean encode) {
1104
+ String url = append(baseUrl, params);
1105
+ return delete(encode ? encode(url) : url);
1106
+ }
1107
+
1108
+ /**
1109
+ * Start a 'DELETE' request to the given URL along with the query params
1110
+ *
1111
+ * @param baseUrl
1112
+ * @param encode true to encode the full URL
1113
+ * @param params the name/value query parameter pairs to include as part of the
1114
+ * baseUrl
1115
+ *
1116
+ * @see #append(CharSequence, Object...)
1117
+ * @see #encode(CharSequence)
1118
+ *
1119
+ * @return request
1120
+ */
1121
+ public static HttpRequest delete(final CharSequence baseUrl, final boolean encode, final Object... params) {
1122
+ String url = append(baseUrl, params);
1123
+ return delete(encode ? encode(url) : url);
1124
+ }
1125
+
1126
+ /**
1127
+ * Start a 'HEAD' request to the given URL
1128
+ *
1129
+ * @param url
1130
+ * @return request
1131
+ * @throws HttpRequestException
1132
+ */
1133
+ public static HttpRequest head(final CharSequence url) throws HttpRequestException {
1134
+ return new HttpRequest(url, METHOD_HEAD);
1135
+ }
1136
+
1137
+ /**
1138
+ * Start a 'HEAD' request to the given URL
1139
+ *
1140
+ * @param url
1141
+ * @return request
1142
+ * @throws HttpRequestException
1143
+ */
1144
+ public static HttpRequest head(final URL url) throws HttpRequestException {
1145
+ return new HttpRequest(url, METHOD_HEAD);
1146
+ }
1147
+
1148
+ /**
1149
+ * Start a 'HEAD' request to the given URL along with the query params
1150
+ *
1151
+ * @param baseUrl
1152
+ * @param params The query parameters to include as part of the baseUrl
1153
+ * @param encode true to encode the full URL
1154
+ *
1155
+ * @see #append(CharSequence, Map)
1156
+ * @see #encode(CharSequence)
1157
+ *
1158
+ * @return request
1159
+ */
1160
+ public static HttpRequest head(final CharSequence baseUrl, final Map<?, ?> params, final boolean encode) {
1161
+ String url = append(baseUrl, params);
1162
+ return head(encode ? encode(url) : url);
1163
+ }
1164
+
1165
+ /**
1166
+ * Start a 'GET' request to the given URL along with the query params
1167
+ *
1168
+ * @param baseUrl
1169
+ * @param encode true to encode the full URL
1170
+ * @param params the name/value query parameter pairs to include as part of the
1171
+ * baseUrl
1172
+ *
1173
+ * @see #append(CharSequence, Object...)
1174
+ * @see #encode(CharSequence)
1175
+ *
1176
+ * @return request
1177
+ */
1178
+ public static HttpRequest head(final CharSequence baseUrl, final boolean encode, final Object... params) {
1179
+ String url = append(baseUrl, params);
1180
+ return head(encode ? encode(url) : url);
1181
+ }
1182
+
1183
+ /**
1184
+ * Start an 'OPTIONS' request to the given URL
1185
+ *
1186
+ * @param url
1187
+ * @return request
1188
+ * @throws HttpRequestException
1189
+ */
1190
+ public static HttpRequest options(final CharSequence url) throws HttpRequestException {
1191
+ return new HttpRequest(url, METHOD_OPTIONS);
1192
+ }
1193
+
1194
+ /**
1195
+ * Start an 'OPTIONS' request to the given URL
1196
+ *
1197
+ * @param url
1198
+ * @return request
1199
+ * @throws HttpRequestException
1200
+ */
1201
+ public static HttpRequest options(final URL url) throws HttpRequestException {
1202
+ return new HttpRequest(url, METHOD_OPTIONS);
1203
+ }
1204
+
1205
+ /**
1206
+ * Start a 'TRACE' request to the given URL
1207
+ *
1208
+ * @param url
1209
+ * @return request
1210
+ * @throws HttpRequestException
1211
+ */
1212
+ public static HttpRequest trace(final CharSequence url) throws HttpRequestException {
1213
+ return new HttpRequest(url, METHOD_TRACE);
1214
+ }
1215
+
1216
+ /**
1217
+ * Start a 'TRACE' request to the given URL
1218
+ *
1219
+ * @param url
1220
+ * @return request
1221
+ * @throws HttpRequestException
1222
+ */
1223
+ public static HttpRequest trace(final URL url) throws HttpRequestException {
1224
+ return new HttpRequest(url, METHOD_TRACE);
1225
+ }
1226
+
1227
+ /**
1228
+ * Set the 'http.keepAlive' property to the given value.
1229
+ * <p>
1230
+ * This setting will apply to all requests.
1231
+ *
1232
+ * @param keepAlive
1233
+ */
1234
+ public static void keepAlive(final boolean keepAlive) {
1235
+ setProperty("http.keepAlive", Boolean.toString(keepAlive));
1236
+ }
1237
+
1238
+ /**
1239
+ * Set the 'http.maxConnections' property to the given value.
1240
+ * <p>
1241
+ * This setting will apply to all requests.
1242
+ *
1243
+ * @param maxConnections
1244
+ */
1245
+ public static void maxConnections(final int maxConnections) {
1246
+ setProperty("http.maxConnections", Integer.toString(maxConnections));
1247
+ }
1248
+
1249
+ /**
1250
+ * Set the 'http.proxyHost' and 'https.proxyHost' properties to the given host
1251
+ * value.
1252
+ * <p>
1253
+ * This setting will apply to all requests.
1254
+ *
1255
+ * @param host
1256
+ */
1257
+ public static void proxyHost(final String host) {
1258
+ setProperty("http.proxyHost", host);
1259
+ setProperty("https.proxyHost", host);
1260
+ }
1261
+
1262
+ /**
1263
+ * Set the 'http.proxyPort' and 'https.proxyPort' properties to the given port
1264
+ * number.
1265
+ * <p>
1266
+ * This setting will apply to all requests.
1267
+ *
1268
+ * @param port
1269
+ */
1270
+ public static void proxyPort(final int port) {
1271
+ final String portValue = Integer.toString(port);
1272
+ setProperty("http.proxyPort", portValue);
1273
+ setProperty("https.proxyPort", portValue);
1274
+ }
1275
+
1276
+ /**
1277
+ * Set the 'http.nonProxyHosts' property to the given host values.
1278
+ * <p>
1279
+ * Hosts will be separated by a '|' character.
1280
+ * <p>
1281
+ * This setting will apply to all requests.
1282
+ *
1283
+ * @param hosts
1284
+ */
1285
+ public static void nonProxyHosts(final String... hosts) {
1286
+ if (hosts != null && hosts.length > 0) {
1287
+ StringBuilder separated = new StringBuilder();
1288
+ int last = hosts.length - 1;
1289
+ for (int i = 0; i < last; i++)
1290
+ separated.append(hosts[i]).append('|');
1291
+ separated.append(hosts[last]);
1292
+ setProperty("http.nonProxyHosts", separated.toString());
1293
+ } else
1294
+ setProperty("http.nonProxyHosts", null);
1295
+ }
1296
+
1297
+ /**
1298
+ * Set property to given value.
1299
+ * <p>
1300
+ * Specifying a null value will cause the property to be cleared
1301
+ *
1302
+ * @param name
1303
+ * @param value
1304
+ * @return previous value
1305
+ */
1306
+ private static String setProperty(final String name, final String value) {
1307
+ final PrivilegedAction<String> action;
1308
+ if (value != null)
1309
+ action = new PrivilegedAction<String>() {
1310
+
1311
+ public String run() {
1312
+ return System.setProperty(name, value);
1313
+ }
1314
+ };
1315
+ else
1316
+ action = new PrivilegedAction<String>() {
1317
+
1318
+ public String run() {
1319
+ return System.clearProperty(name);
1320
+ }
1321
+ };
1322
+ return AccessController.doPrivileged(action);
1323
+ }
1324
+
1325
+ private HttpURLConnection connection = null;
1326
+
1327
+ private final URL url;
1328
+
1329
+ private final String requestMethod;
1330
+
1331
+ private RequestOutputStream output;
1332
+
1333
+ private boolean multipart;
1334
+
1335
+ private boolean form;
1336
+
1337
+ private boolean ignoreCloseExceptions = true;
1338
+
1339
+ private boolean uncompress = false;
1340
+
1341
+ private int bufferSize = 8192;
1342
+
1343
+ private long totalSize = -1;
1344
+
1345
+ private long totalWritten = 0;
1346
+
1347
+ private String httpProxyHost;
1348
+
1349
+ private int httpProxyPort;
1350
+
1351
+ private UploadProgress progress = UploadProgress.DEFAULT;
1352
+
1353
+ /**
1354
+ * Create HTTP connection wrapper
1355
+ *
1356
+ * @param url Remote resource URL.
1357
+ * @param method HTTP request method (e.g., "GET", "POST").
1358
+ * @throws HttpRequestException
1359
+ */
1360
+ public HttpRequest(final CharSequence url, final String method) throws HttpRequestException {
1361
+ try {
1362
+ this.url = new URL(url.toString());
1363
+ } catch (MalformedURLException e) {
1364
+ throw new HttpRequestException(e);
1365
+ }
1366
+ this.requestMethod = method;
1367
+ }
1368
+
1369
+ /**
1370
+ * Create HTTP connection wrapper
1371
+ *
1372
+ * @param url Remote resource URL.
1373
+ * @param method HTTP request method (e.g., "GET", "POST").
1374
+ * @throws HttpRequestException
1375
+ */
1376
+ public HttpRequest(final URL url, final String method) throws HttpRequestException {
1377
+ this.url = url;
1378
+ this.requestMethod = method;
1379
+ }
1380
+
1381
+ private Proxy createProxy() {
1382
+ return new Proxy(HTTP, new InetSocketAddress(httpProxyHost, httpProxyPort));
1383
+ }
1384
+
1385
+ private HttpURLConnection createConnection() {
1386
+ try {
1387
+ final HttpURLConnection connection;
1388
+ if (httpProxyHost != null)
1389
+ connection = CONNECTION_FACTORY.create(url, createProxy());
1390
+ else
1391
+ connection = CONNECTION_FACTORY.create(url);
1392
+ connection.setRequestMethod(requestMethod);
1393
+ return connection;
1394
+ } catch (IOException e) {
1395
+ throw new HttpRequestException(e);
1396
+ }
1397
+ }
1398
+
1399
+ @Override
1400
+ public String toString() {
1401
+ return method() + ' ' + url();
1402
+ }
1403
+
1404
+ /**
1405
+ * Get underlying connection
1406
+ *
1407
+ * @return connection
1408
+ */
1409
+ public HttpURLConnection getConnection() {
1410
+ if (connection == null)
1411
+ connection = createConnection();
1412
+ return connection;
1413
+ }
1414
+
1415
+ /**
1416
+ * Set whether or not to ignore exceptions that occur from calling
1417
+ * {@link Closeable#close()}
1418
+ * <p>
1419
+ * The default value of this setting is <code>true</code>
1420
+ *
1421
+ * @param ignore
1422
+ * @return this request
1423
+ */
1424
+ public HttpRequest ignoreCloseExceptions(final boolean ignore) {
1425
+ ignoreCloseExceptions = ignore;
1426
+ return this;
1427
+ }
1428
+
1429
+ /**
1430
+ * Get whether or not exceptions thrown by {@link Closeable#close()} are ignored
1431
+ *
1432
+ * @return true if ignoring, false if throwing
1433
+ */
1434
+ public boolean ignoreCloseExceptions() {
1435
+ return ignoreCloseExceptions;
1436
+ }
1437
+
1438
+ /**
1439
+ * Get the status code of the response
1440
+ *
1441
+ * @return the response code
1442
+ * @throws HttpRequestException
1443
+ */
1444
+ public int code() throws HttpRequestException {
1445
+ try {
1446
+ closeOutput();
1447
+ return getConnection().getResponseCode();
1448
+ } catch (IOException e) {
1449
+ throw new HttpRequestException(e);
1450
+ }
1451
+ }
1452
+
1453
+ /**
1454
+ * Set the value of the given {@link AtomicInteger} to the status code of the
1455
+ * response
1456
+ *
1457
+ * @param output
1458
+ * @return this request
1459
+ * @throws HttpRequestException
1460
+ */
1461
+ public HttpRequest code(final AtomicInteger output) throws HttpRequestException {
1462
+ output.set(code());
1463
+ return this;
1464
+ }
1465
+
1466
+ /**
1467
+ * Is the response code a 200 OK?
1468
+ *
1469
+ * @return true if 200, false otherwise
1470
+ * @throws HttpRequestException
1471
+ */
1472
+ public boolean ok() throws HttpRequestException {
1473
+ return HTTP_OK == code();
1474
+ }
1475
+
1476
+ /**
1477
+ * Is the response code a 201 Created?
1478
+ *
1479
+ * @return true if 201, false otherwise
1480
+ * @throws HttpRequestException
1481
+ */
1482
+ public boolean created() throws HttpRequestException {
1483
+ return HTTP_CREATED == code();
1484
+ }
1485
+
1486
+ /**
1487
+ * Is the response code a 204 No Content?
1488
+ *
1489
+ * @return true if 204, false otherwise
1490
+ * @throws HttpRequestException
1491
+ */
1492
+ public boolean noContent() throws HttpRequestException {
1493
+ return HTTP_NO_CONTENT == code();
1494
+ }
1495
+
1496
+ /**
1497
+ * Is the response code a 500 Internal Server Error?
1498
+ *
1499
+ * @return true if 500, false otherwise
1500
+ * @throws HttpRequestException
1501
+ */
1502
+ public boolean serverError() throws HttpRequestException {
1503
+ return HTTP_INTERNAL_ERROR == code();
1504
+ }
1505
+
1506
+ /**
1507
+ * Is the response code a 400 Bad Request?
1508
+ *
1509
+ * @return true if 400, false otherwise
1510
+ * @throws HttpRequestException
1511
+ */
1512
+ public boolean badRequest() throws HttpRequestException {
1513
+ return HTTP_BAD_REQUEST == code();
1514
+ }
1515
+
1516
+ /**
1517
+ * Is the response code a 404 Not Found?
1518
+ *
1519
+ * @return true if 404, false otherwise
1520
+ * @throws HttpRequestException
1521
+ */
1522
+ public boolean notFound() throws HttpRequestException {
1523
+ return HTTP_NOT_FOUND == code();
1524
+ }
1525
+
1526
+ /**
1527
+ * Is the response code a 304 Not Modified?
1528
+ *
1529
+ * @return true if 304, false otherwise
1530
+ * @throws HttpRequestException
1531
+ */
1532
+ public boolean notModified() throws HttpRequestException {
1533
+ return HTTP_NOT_MODIFIED == code();
1534
+ }
1535
+
1536
+ /**
1537
+ * Get status message of the response
1538
+ *
1539
+ * @return message
1540
+ * @throws HttpRequestException
1541
+ */
1542
+ public String message() throws HttpRequestException {
1543
+ try {
1544
+ closeOutput();
1545
+ return getConnection().getResponseMessage();
1546
+ } catch (IOException e) {
1547
+ throw new HttpRequestException(e);
1548
+ }
1549
+ }
1550
+
1551
+ /**
1552
+ * Disconnect the connection
1553
+ *
1554
+ * @return this request
1555
+ */
1556
+ public HttpRequest disconnect() {
1557
+ getConnection().disconnect();
1558
+ return this;
1559
+ }
1560
+
1561
+ /**
1562
+ * Set chunked streaming mode to the given size
1563
+ *
1564
+ * @param size
1565
+ * @return this request
1566
+ */
1567
+ public HttpRequest chunk(final int size) {
1568
+ getConnection().setChunkedStreamingMode(size);
1569
+ return this;
1570
+ }
1571
+
1572
+ /**
1573
+ * Set the size used when buffering and copying between streams
1574
+ * <p>
1575
+ * This size is also used for send and receive buffers created for both char and
1576
+ * byte arrays
1577
+ * <p>
1578
+ * The default buffer size is 8,192 bytes
1579
+ *
1580
+ * @param size
1581
+ * @return this request
1582
+ */
1583
+ public HttpRequest bufferSize(final int size) {
1584
+ if (size < 1)
1585
+ throw new IllegalArgumentException("Size must be greater than zero");
1586
+ bufferSize = size;
1587
+ return this;
1588
+ }
1589
+
1590
+ /**
1591
+ * Get the configured buffer size
1592
+ * <p>
1593
+ * The default buffer size is 8,192 bytes
1594
+ *
1595
+ * @return buffer size
1596
+ */
1597
+ public int bufferSize() {
1598
+ return bufferSize;
1599
+ }
1600
+
1601
+ /**
1602
+ * Set whether or not the response body should be automatically uncompressed
1603
+ * when read from.
1604
+ * <p>
1605
+ * This will only affect requests that have the 'Content-Encoding' response
1606
+ * header set to 'gzip'.
1607
+ * <p>
1608
+ * This causes all receive methods to use a {@link GZIPInputStream} when
1609
+ * applicable so that higher level streams and readers can read the data
1610
+ * uncompressed.
1611
+ * <p>
1612
+ * Setting this option does not cause any request headers to be set
1613
+ * automatically so {@link #acceptGzipEncoding()} should be used in conjunction
1614
+ * with this setting to tell the server to gzip the response.
1615
+ *
1616
+ * @param uncompress
1617
+ * @return this request
1618
+ */
1619
+ public HttpRequest uncompress(final boolean uncompress) {
1620
+ this.uncompress = uncompress;
1621
+ return this;
1622
+ }
1623
+
1624
+ /**
1625
+ * Create byte array output stream
1626
+ *
1627
+ * @return stream
1628
+ */
1629
+ protected ByteArrayOutputStream byteStream() {
1630
+ final int size = contentLength();
1631
+ if (size > 0)
1632
+ return new ByteArrayOutputStream(size);
1633
+ else
1634
+ return new ByteArrayOutputStream();
1635
+ }
1636
+
1637
+ /**
1638
+ * Get response as {@link String} in given character set
1639
+ * <p>
1640
+ * This will fall back to using the UTF-8 character set if the given charset is
1641
+ * null
1642
+ *
1643
+ * @param charset
1644
+ * @return string
1645
+ * @throws HttpRequestException
1646
+ */
1647
+ public String body(final String charset) throws HttpRequestException {
1648
+ final ByteArrayOutputStream output = byteStream();
1649
+ try {
1650
+ copy(buffer(), output);
1651
+ return output.toString(getValidCharset(charset));
1652
+ } catch (IOException e) {
1653
+ throw new HttpRequestException(e);
1654
+ }
1655
+ }
1656
+
1657
+ /**
1658
+ * Get response as {@link String} using character set returned from
1659
+ * {@link #charset()}
1660
+ *
1661
+ * @return string
1662
+ * @throws HttpRequestException
1663
+ */
1664
+ public String body() throws HttpRequestException {
1665
+ return body(charset());
1666
+ }
1667
+
1668
+ /**
1669
+ * Get the response body as a {@link String} and set it as the value of the
1670
+ * given reference.
1671
+ *
1672
+ * @param output
1673
+ * @return this request
1674
+ * @throws HttpRequestException
1675
+ */
1676
+ public HttpRequest body(final AtomicReference<String> output) throws HttpRequestException {
1677
+ output.set(body());
1678
+ return this;
1679
+ }
1680
+
1681
+ /**
1682
+ * Get the response body as a {@link String} and set it as the value of the
1683
+ * given reference.
1684
+ *
1685
+ * @param output
1686
+ * @param charset
1687
+ * @return this request
1688
+ * @throws HttpRequestException
1689
+ */
1690
+ public HttpRequest body(final AtomicReference<String> output, final String charset) throws HttpRequestException {
1691
+ output.set(body(charset));
1692
+ return this;
1693
+ }
1694
+
1695
+ /**
1696
+ * Is the response body empty?
1697
+ *
1698
+ * @return true if the Content-Length response header is 0, false otherwise
1699
+ * @throws HttpRequestException
1700
+ */
1701
+ public boolean isBodyEmpty() throws HttpRequestException {
1702
+ return contentLength() == 0;
1703
+ }
1704
+
1705
+ /**
1706
+ * Get response as byte array
1707
+ *
1708
+ * @return byte array
1709
+ * @throws HttpRequestException
1710
+ */
1711
+ public byte[] bytes() throws HttpRequestException {
1712
+ final ByteArrayOutputStream output = byteStream();
1713
+ try {
1714
+ copy(buffer(), output);
1715
+ } catch (IOException e) {
1716
+ throw new HttpRequestException(e);
1717
+ }
1718
+ return output.toByteArray();
1719
+ }
1720
+
1721
+ /**
1722
+ * Get response in a buffered stream
1723
+ *
1724
+ * @see #bufferSize(int)
1725
+ * @return stream
1726
+ * @throws HttpRequestException
1727
+ */
1728
+ public BufferedInputStream buffer() throws HttpRequestException {
1729
+ return new BufferedInputStream(stream(), bufferSize);
1730
+ }
1731
+
1732
+ /**
1733
+ * Get stream to response body
1734
+ *
1735
+ * @return stream
1736
+ * @throws HttpRequestException
1737
+ */
1738
+ public InputStream stream() throws HttpRequestException {
1739
+ InputStream stream;
1740
+ if (code() < HTTP_BAD_REQUEST)
1741
+ try {
1742
+ stream = getConnection().getInputStream();
1743
+ } catch (IOException e) {
1744
+ throw new HttpRequestException(e);
1745
+ }
1746
+ else {
1747
+ stream = getConnection().getErrorStream();
1748
+ if (stream == null)
1749
+ try {
1750
+ stream = getConnection().getInputStream();
1751
+ } catch (IOException e) {
1752
+ if (contentLength() > 0)
1753
+ throw new HttpRequestException(e);
1754
+ else
1755
+ stream = new ByteArrayInputStream(new byte[0]);
1756
+ }
1757
+ }
1758
+
1759
+ if (!uncompress || !ENCODING_GZIP.equals(contentEncoding()))
1760
+ return stream;
1761
+ else
1762
+ try {
1763
+ return new GZIPInputStream(stream);
1764
+ } catch (IOException e) {
1765
+ throw new HttpRequestException(e);
1766
+ }
1767
+ }
1768
+
1769
+ /**
1770
+ * Get reader to response body using given character set.
1771
+ * <p>
1772
+ * This will fall back to using the UTF-8 character set if the given charset is
1773
+ * null
1774
+ *
1775
+ * @param charset
1776
+ * @return reader
1777
+ * @throws HttpRequestException
1778
+ */
1779
+ public InputStreamReader reader(final String charset) throws HttpRequestException {
1780
+ try {
1781
+ return new InputStreamReader(stream(), getValidCharset(charset));
1782
+ } catch (UnsupportedEncodingException e) {
1783
+ throw new HttpRequestException(e);
1784
+ }
1785
+ }
1786
+
1787
+ /**
1788
+ * Get reader to response body using the character set returned from
1789
+ * {@link #charset()}
1790
+ *
1791
+ * @return reader
1792
+ * @throws HttpRequestException
1793
+ */
1794
+ public InputStreamReader reader() throws HttpRequestException {
1795
+ return reader(charset());
1796
+ }
1797
+
1798
+ /**
1799
+ * Get buffered reader to response body using the given character set r and the
1800
+ * configured buffer size
1801
+ *
1802
+ *
1803
+ * @see #bufferSize(int)
1804
+ * @param charset
1805
+ * @return reader
1806
+ * @throws HttpRequestException
1807
+ */
1808
+ public BufferedReader bufferedReader(final String charset) throws HttpRequestException {
1809
+ return new BufferedReader(reader(charset), bufferSize);
1810
+ }
1811
+
1812
+ /**
1813
+ * Get buffered reader to response body using the character set returned from
1814
+ * {@link #charset()} and the configured buffer size
1815
+ *
1816
+ * @see #bufferSize(int)
1817
+ * @return reader
1818
+ * @throws HttpRequestException
1819
+ */
1820
+ public BufferedReader bufferedReader() throws HttpRequestException {
1821
+ return bufferedReader(charset());
1822
+ }
1823
+
1824
+ /**
1825
+ * Stream response body to file
1826
+ *
1827
+ * @param file
1828
+ * @return this request
1829
+ * @throws HttpRequestException
1830
+ */
1831
+ public HttpRequest receive(final File file) throws HttpRequestException {
1832
+ final OutputStream output;
1833
+ try {
1834
+ output = new BufferedOutputStream(new FileOutputStream(file), bufferSize);
1835
+ } catch (FileNotFoundException e) {
1836
+ throw new HttpRequestException(e);
1837
+ }
1838
+ return new CloseOperation<HttpRequest>(output, ignoreCloseExceptions) {
1839
+
1840
+ @Override
1841
+ protected HttpRequest run() throws HttpRequestException, IOException {
1842
+ return receive(output);
1843
+ }
1844
+ }.call();
1845
+ }
1846
+
1847
+ /**
1848
+ * Stream response to given output stream
1849
+ *
1850
+ * @param output
1851
+ * @return this request
1852
+ * @throws HttpRequestException
1853
+ */
1854
+ public HttpRequest receive(final OutputStream output) throws HttpRequestException {
1855
+ try {
1856
+ return copy(buffer(), output);
1857
+ } catch (IOException e) {
1858
+ throw new HttpRequestException(e);
1859
+ }
1860
+ }
1861
+
1862
+ /**
1863
+ * Stream response to given print stream
1864
+ *
1865
+ * @param output
1866
+ * @return this request
1867
+ * @throws HttpRequestException
1868
+ */
1869
+ public HttpRequest receive(final PrintStream output) throws HttpRequestException {
1870
+ return receive((OutputStream) output);
1871
+ }
1872
+
1873
+ /**
1874
+ * Receive response into the given appendable
1875
+ *
1876
+ * @param appendable
1877
+ * @return this request
1878
+ * @throws HttpRequestException
1879
+ */
1880
+ public HttpRequest receive(final Appendable appendable) throws HttpRequestException {
1881
+ final BufferedReader reader = bufferedReader();
1882
+ return new CloseOperation<HttpRequest>(reader, ignoreCloseExceptions) {
1883
+
1884
+ @Override
1885
+ public HttpRequest run() throws IOException {
1886
+ final CharBuffer buffer = CharBuffer.allocate(bufferSize);
1887
+ int read;
1888
+ while ((read = reader.read(buffer)) != -1) {
1889
+ buffer.rewind();
1890
+ appendable.append(buffer, 0, read);
1891
+ buffer.rewind();
1892
+ }
1893
+ return HttpRequest.this;
1894
+ }
1895
+ }.call();
1896
+ }
1897
+
1898
+ /**
1899
+ * Receive response into the given writer
1900
+ *
1901
+ * @param writer
1902
+ * @return this request
1903
+ * @throws HttpRequestException
1904
+ */
1905
+ public HttpRequest receive(final Writer writer) throws HttpRequestException {
1906
+ final BufferedReader reader = bufferedReader();
1907
+ return new CloseOperation<HttpRequest>(reader, ignoreCloseExceptions) {
1908
+
1909
+ @Override
1910
+ public HttpRequest run() throws IOException {
1911
+ return copy(reader, writer);
1912
+ }
1913
+ }.call();
1914
+ }
1915
+
1916
+ /**
1917
+ * Set read timeout on connection to given value
1918
+ *
1919
+ * @param timeout
1920
+ * @return this request
1921
+ */
1922
+ public HttpRequest readTimeout(final int timeout) {
1923
+ getConnection().setReadTimeout(timeout);
1924
+ return this;
1925
+ }
1926
+
1927
+ /**
1928
+ * Set connect timeout on connection to given value
1929
+ *
1930
+ * @param timeout
1931
+ * @return this request
1932
+ */
1933
+ public HttpRequest connectTimeout(final int timeout) {
1934
+ getConnection().setConnectTimeout(timeout);
1935
+ return this;
1936
+ }
1937
+
1938
+ /**
1939
+ * Set header name to given value
1940
+ *
1941
+ * @param name
1942
+ * @param value
1943
+ * @return this request
1944
+ */
1945
+ public HttpRequest header(final String name, final String value) {
1946
+ getConnection().setRequestProperty(name, value);
1947
+ return this;
1948
+ }
1949
+
1950
+ /**
1951
+ * Set header name to given value
1952
+ *
1953
+ * @param name
1954
+ * @param value
1955
+ * @return this request
1956
+ */
1957
+ public HttpRequest header(final String name, final Number value) {
1958
+ return header(name, value != null ? value.toString() : null);
1959
+ }
1960
+
1961
+ /**
1962
+ * Set all headers found in given map where the keys are the header names and
1963
+ * the values are the header values
1964
+ *
1965
+ * @param headers
1966
+ * @return this request
1967
+ */
1968
+ public HttpRequest headers(final Map<String, String> headers) {
1969
+ if (!headers.isEmpty())
1970
+ for (Entry<String, String> header : headers.entrySet())
1971
+ header(header);
1972
+ return this;
1973
+ }
1974
+
1975
+ /**
1976
+ * Set header to have given entry's key as the name and value as the value
1977
+ *
1978
+ * @param header
1979
+ * @return this request
1980
+ */
1981
+ public HttpRequest header(final Entry<String, String> header) {
1982
+ return header(header.getKey(), header.getValue());
1983
+ }
1984
+
1985
+ /**
1986
+ * Get a response header
1987
+ *
1988
+ * @param name
1989
+ * @return response header
1990
+ * @throws HttpRequestException
1991
+ */
1992
+ public String header(final String name) throws HttpRequestException {
1993
+ closeOutputQuietly();
1994
+ return getConnection().getHeaderField(name);
1995
+ }
1996
+
1997
+ /**
1998
+ * Get all the response headers
1999
+ *
2000
+ * @return map of response header names to their value(s)
2001
+ * @throws HttpRequestException
2002
+ */
2003
+ public Map<String, List<String>> headers() throws HttpRequestException {
2004
+ closeOutputQuietly();
2005
+ return getConnection().getHeaderFields();
2006
+ }
2007
+
2008
+ /**
2009
+ * Get a date header from the response falling back to returning -1 if the
2010
+ * header is missing or parsing fails
2011
+ *
2012
+ * @param name
2013
+ * @return date, -1 on failures
2014
+ * @throws HttpRequestException
2015
+ */
2016
+ public long dateHeader(final String name) throws HttpRequestException {
2017
+ return dateHeader(name, -1L);
2018
+ }
2019
+
2020
+ /**
2021
+ * Get a date header from the response falling back to returning the given
2022
+ * default value if the header is missing or parsing fails
2023
+ *
2024
+ * @param name
2025
+ * @param defaultValue
2026
+ * @return date, default value on failures
2027
+ * @throws HttpRequestException
2028
+ */
2029
+ public long dateHeader(final String name, final long defaultValue) throws HttpRequestException {
2030
+ closeOutputQuietly();
2031
+ return getConnection().getHeaderFieldDate(name, defaultValue);
2032
+ }
2033
+
2034
+ /**
2035
+ * Get an integer header from the response falling back to returning -1 if the
2036
+ * header is missing or parsing fails
2037
+ *
2038
+ * @param name
2039
+ * @return header value as an integer, -1 when missing or parsing fails
2040
+ * @throws HttpRequestException
2041
+ */
2042
+ public int intHeader(final String name) throws HttpRequestException {
2043
+ return intHeader(name, -1);
2044
+ }
2045
+
2046
+ /**
2047
+ * Get an integer header value from the response falling back to the given
2048
+ * default value if the header is missing or if parsing fails
2049
+ *
2050
+ * @param name
2051
+ * @param defaultValue
2052
+ * @return header value as an integer, default value when missing or parsing
2053
+ * fails
2054
+ * @throws HttpRequestException
2055
+ */
2056
+ public int intHeader(final String name, final int defaultValue) throws HttpRequestException {
2057
+ closeOutputQuietly();
2058
+ return getConnection().getHeaderFieldInt(name, defaultValue);
2059
+ }
2060
+
2061
+ /**
2062
+ * Get all values of the given header from the response
2063
+ *
2064
+ * @param name
2065
+ * @return non-null but possibly empty array of {@link String} header values
2066
+ */
2067
+ public String[] headers(final String name) {
2068
+ final Map<String, List<String>> headers = headers();
2069
+ if (headers == null || headers.isEmpty())
2070
+ return EMPTY_STRINGS;
2071
+
2072
+ final List<String> values = headers.get(name);
2073
+ if (values != null && !values.isEmpty())
2074
+ return values.toArray(new String[values.size()]);
2075
+ else
2076
+ return EMPTY_STRINGS;
2077
+ }
2078
+
2079
+ /**
2080
+ * Get parameter with given name from header value in response
2081
+ *
2082
+ * @param headerName
2083
+ * @param paramName
2084
+ * @return parameter value or null if missing
2085
+ */
2086
+ public String parameter(final String headerName, final String paramName) {
2087
+ return getParam(header(headerName), paramName);
2088
+ }
2089
+
2090
+ /**
2091
+ * Get all parameters from header value in response
2092
+ * <p>
2093
+ * This will be all key=value pairs after the first ';' that are separated by a
2094
+ * ';'
2095
+ *
2096
+ * @param headerName
2097
+ * @return non-null but possibly empty map of parameter headers
2098
+ */
2099
+ public Map<String, String> parameters(final String headerName) {
2100
+ return getParams(header(headerName));
2101
+ }
2102
+
2103
+ /**
2104
+ * Get parameter values from header value
2105
+ *
2106
+ * @param header
2107
+ * @return parameter value or null if none
2108
+ */
2109
+ protected Map<String, String> getParams(final String header) {
2110
+ if (header == null || header.length() == 0)
2111
+ return Collections.emptyMap();
2112
+
2113
+ final int headerLength = header.length();
2114
+ int start = header.indexOf(';') + 1;
2115
+ if (start == 0 || start == headerLength)
2116
+ return Collections.emptyMap();
2117
+
2118
+ int end = header.indexOf(';', start);
2119
+ if (end == -1)
2120
+ end = headerLength;
2121
+
2122
+ Map<String, String> params = new LinkedHashMap<String, String>();
2123
+ while (start < end) {
2124
+ int nameEnd = header.indexOf('=', start);
2125
+ if (nameEnd != -1 && nameEnd < end) {
2126
+ String name = header.substring(start, nameEnd).trim();
2127
+ if (name.length() > 0) {
2128
+ String value = header.substring(nameEnd + 1, end).trim();
2129
+ int length = value.length();
2130
+ if (length != 0)
2131
+ if (length > 2 && '"' == value.charAt(0) && '"' == value.charAt(length - 1))
2132
+ params.put(name, value.substring(1, length - 1));
2133
+ else
2134
+ params.put(name, value);
2135
+ }
2136
+ }
2137
+
2138
+ start = end + 1;
2139
+ end = header.indexOf(';', start);
2140
+ if (end == -1)
2141
+ end = headerLength;
2142
+ }
2143
+
2144
+ return params;
2145
+ }
2146
+
2147
+ /**
2148
+ * Get parameter value from header value
2149
+ *
2150
+ * @param value
2151
+ * @param paramName
2152
+ * @return parameter value or null if none
2153
+ */
2154
+ protected String getParam(final String value, final String paramName) {
2155
+ if (value == null || value.length() == 0)
2156
+ return null;
2157
+
2158
+ final int length = value.length();
2159
+ int start = value.indexOf(';') + 1;
2160
+ if (start == 0 || start == length)
2161
+ return null;
2162
+
2163
+ int end = value.indexOf(';', start);
2164
+ if (end == -1)
2165
+ end = length;
2166
+
2167
+ while (start < end) {
2168
+ int nameEnd = value.indexOf('=', start);
2169
+ if (nameEnd != -1 && nameEnd < end && paramName.equals(value.substring(start, nameEnd).trim())) {
2170
+ String paramValue = value.substring(nameEnd + 1, end).trim();
2171
+ int valueLength = paramValue.length();
2172
+ if (valueLength != 0)
2173
+ if (valueLength > 2 && '"' == paramValue.charAt(0) && '"' == paramValue.charAt(valueLength - 1))
2174
+ return paramValue.substring(1, valueLength - 1);
2175
+ else
2176
+ return paramValue;
2177
+ }
2178
+
2179
+ start = end + 1;
2180
+ end = value.indexOf(';', start);
2181
+ if (end == -1)
2182
+ end = length;
2183
+ }
2184
+
2185
+ return null;
2186
+ }
2187
+
2188
+ /**
2189
+ * Get 'charset' parameter from 'Content-Type' response header
2190
+ *
2191
+ * @return charset or null if none
2192
+ */
2193
+ public String charset() {
2194
+ return parameter(HEADER_CONTENT_TYPE, PARAM_CHARSET);
2195
+ }
2196
+
2197
+ /**
2198
+ * Set the 'User-Agent' header to given value
2199
+ *
2200
+ * @param userAgent
2201
+ * @return this request
2202
+ */
2203
+ public HttpRequest userAgent(final String userAgent) {
2204
+ return header(HEADER_USER_AGENT, userAgent);
2205
+ }
2206
+
2207
+ /**
2208
+ * Set the 'Referer' header to given value
2209
+ *
2210
+ * @param referer
2211
+ * @return this request
2212
+ */
2213
+ public HttpRequest referer(final String referer) {
2214
+ return header(HEADER_REFERER, referer);
2215
+ }
2216
+
2217
+ /**
2218
+ * Set value of {@link HttpURLConnection#setUseCaches(boolean)}
2219
+ *
2220
+ * @param useCaches
2221
+ * @return this request
2222
+ */
2223
+ public HttpRequest useCaches(final boolean useCaches) {
2224
+ getConnection().setUseCaches(useCaches);
2225
+ return this;
2226
+ }
2227
+
2228
+ /**
2229
+ * Set the 'Accept-Encoding' header to given value
2230
+ *
2231
+ * @param acceptEncoding
2232
+ * @return this request
2233
+ */
2234
+ public HttpRequest acceptEncoding(final String acceptEncoding) {
2235
+ return header(HEADER_ACCEPT_ENCODING, acceptEncoding);
2236
+ }
2237
+
2238
+ /**
2239
+ * Set the 'Accept-Encoding' header to 'gzip'
2240
+ *
2241
+ * @see #uncompress(boolean)
2242
+ * @return this request
2243
+ */
2244
+ public HttpRequest acceptGzipEncoding() {
2245
+ return acceptEncoding(ENCODING_GZIP);
2246
+ }
2247
+
2248
+ /**
2249
+ * Set the 'Accept-Charset' header to given value
2250
+ *
2251
+ * @param acceptCharset
2252
+ * @return this request
2253
+ */
2254
+ public HttpRequest acceptCharset(final String acceptCharset) {
2255
+ return header(HEADER_ACCEPT_CHARSET, acceptCharset);
2256
+ }
2257
+
2258
+ /**
2259
+ * Get the 'Content-Encoding' header from the response
2260
+ *
2261
+ * @return this request
2262
+ */
2263
+ public String contentEncoding() {
2264
+ return header(HEADER_CONTENT_ENCODING);
2265
+ }
2266
+
2267
+ /**
2268
+ * Get the 'Server' header from the response
2269
+ *
2270
+ * @return server
2271
+ */
2272
+ public String server() {
2273
+ return header(HEADER_SERVER);
2274
+ }
2275
+
2276
+ /**
2277
+ * Get the 'Date' header from the response
2278
+ *
2279
+ * @return date value, -1 on failures
2280
+ */
2281
+ public long date() {
2282
+ return dateHeader(HEADER_DATE);
2283
+ }
2284
+
2285
+ /**
2286
+ * Get the 'Cache-Control' header from the response
2287
+ *
2288
+ * @return cache control
2289
+ */
2290
+ public String cacheControl() {
2291
+ return header(HEADER_CACHE_CONTROL);
2292
+ }
2293
+
2294
+ /**
2295
+ * Get the 'ETag' header from the response
2296
+ *
2297
+ * @return entity tag
2298
+ */
2299
+ public String eTag() {
2300
+ return header(HEADER_ETAG);
2301
+ }
2302
+
2303
+ /**
2304
+ * Get the 'Expires' header from the response
2305
+ *
2306
+ * @return expires value, -1 on failures
2307
+ */
2308
+ public long expires() {
2309
+ return dateHeader(HEADER_EXPIRES);
2310
+ }
2311
+
2312
+ /**
2313
+ * Get the 'Last-Modified' header from the response
2314
+ *
2315
+ * @return last modified value, -1 on failures
2316
+ */
2317
+ public long lastModified() {
2318
+ return dateHeader(HEADER_LAST_MODIFIED);
2319
+ }
2320
+
2321
+ /**
2322
+ * Get the 'Location' header from the response
2323
+ *
2324
+ * @return location
2325
+ */
2326
+ public String location() {
2327
+ return header(HEADER_LOCATION);
2328
+ }
2329
+
2330
+ /**
2331
+ * Set the 'Authorization' header to given value
2332
+ *
2333
+ * @param authorization
2334
+ * @return this request
2335
+ */
2336
+ public HttpRequest authorization(final String authorization) {
2337
+ return header(HEADER_AUTHORIZATION, authorization);
2338
+ }
2339
+
2340
+ /**
2341
+ * Set the 'Proxy-Authorization' header to given value
2342
+ *
2343
+ * @param proxyAuthorization
2344
+ * @return this request
2345
+ */
2346
+ public HttpRequest proxyAuthorization(final String proxyAuthorization) {
2347
+ return header(HEADER_PROXY_AUTHORIZATION, proxyAuthorization);
2348
+ }
2349
+
2350
+ /**
2351
+ * Set the 'Authorization' header to given values in Basic authentication format
2352
+ *
2353
+ * @param name
2354
+ * @param password
2355
+ * @return this request
2356
+ */
2357
+ public HttpRequest basic(final String name, final String password) {
2358
+ return authorization("Basic " + Base64.encode(name + ':' + password));
2359
+ }
2360
+
2361
+ /**
2362
+ * Set the 'Proxy-Authorization' header to given values in Basic authentication
2363
+ * format
2364
+ *
2365
+ * @param name
2366
+ * @param password
2367
+ * @return this request
2368
+ */
2369
+ public HttpRequest proxyBasic(final String name, final String password) {
2370
+ return proxyAuthorization("Basic " + Base64.encode(name + ':' + password));
2371
+ }
2372
+
2373
+ /**
2374
+ * Set the 'If-Modified-Since' request header to the given value
2375
+ *
2376
+ * @param ifModifiedSince
2377
+ * @return this request
2378
+ */
2379
+ public HttpRequest ifModifiedSince(final long ifModifiedSince) {
2380
+ getConnection().setIfModifiedSince(ifModifiedSince);
2381
+ return this;
2382
+ }
2383
+
2384
+ /**
2385
+ * Set the 'If-None-Match' request header to the given value
2386
+ *
2387
+ * @param ifNoneMatch
2388
+ * @return this request
2389
+ */
2390
+ public HttpRequest ifNoneMatch(final String ifNoneMatch) {
2391
+ return header(HEADER_IF_NONE_MATCH, ifNoneMatch);
2392
+ }
2393
+
2394
+ /**
2395
+ * Set the 'Content-Type' request header to the given value
2396
+ *
2397
+ * @param contentType
2398
+ * @return this request
2399
+ */
2400
+ public HttpRequest contentType(final String contentType) {
2401
+ return contentType(contentType, null);
2402
+ }
2403
+
2404
+ /**
2405
+ * Set the 'Content-Type' request header to the given value and charset
2406
+ *
2407
+ * @param contentType
2408
+ * @param charset
2409
+ * @return this request
2410
+ */
2411
+ public HttpRequest contentType(final String contentType, final String charset) {
2412
+ if (charset != null && charset.length() > 0) {
2413
+ final String separator = "; " + PARAM_CHARSET + '=';
2414
+ return header(HEADER_CONTENT_TYPE, contentType + separator + charset);
2415
+ } else
2416
+ return header(HEADER_CONTENT_TYPE, contentType);
2417
+ }
2418
+
2419
+ /**
2420
+ * Get the 'Content-Type' header from the response
2421
+ *
2422
+ * @return response header value
2423
+ */
2424
+ public String contentType() {
2425
+ return header(HEADER_CONTENT_TYPE);
2426
+ }
2427
+
2428
+ /**
2429
+ * Get the 'Content-Length' header from the response
2430
+ *
2431
+ * @return response header value
2432
+ */
2433
+ public int contentLength() {
2434
+ return intHeader(HEADER_CONTENT_LENGTH);
2435
+ }
2436
+
2437
+ /**
2438
+ * Set the 'Content-Length' request header to the given value
2439
+ *
2440
+ * @param contentLength
2441
+ * @return this request
2442
+ */
2443
+ public HttpRequest contentLength(final String contentLength) {
2444
+ return contentLength(Integer.parseInt(contentLength));
2445
+ }
2446
+
2447
+ /**
2448
+ * Set the 'Content-Length' request header to the given value
2449
+ *
2450
+ * @param contentLength
2451
+ * @return this request
2452
+ */
2453
+ public HttpRequest contentLength(final int contentLength) {
2454
+ getConnection().setFixedLengthStreamingMode(contentLength);
2455
+ return this;
2456
+ }
2457
+
2458
+ /**
2459
+ * Set the 'Accept' header to given value
2460
+ *
2461
+ * @param accept
2462
+ * @return this request
2463
+ */
2464
+ public HttpRequest accept(final String accept) {
2465
+ return header(HEADER_ACCEPT, accept);
2466
+ }
2467
+
2468
+ /**
2469
+ * Set the 'Accept' header to 'application/json'
2470
+ *
2471
+ * @return this request
2472
+ */
2473
+ public HttpRequest acceptJson() {
2474
+ return accept(CONTENT_TYPE_JSON);
2475
+ }
2476
+
2477
+ /**
2478
+ * Copy from input stream to output stream
2479
+ *
2480
+ * @param input
2481
+ * @param output
2482
+ * @return this request
2483
+ * @throws IOException
2484
+ */
2485
+ protected HttpRequest copy(final InputStream input, final OutputStream output) throws IOException {
2486
+ return new CloseOperation<HttpRequest>(input, ignoreCloseExceptions) {
2487
+
2488
+ @Override
2489
+ public HttpRequest run() throws IOException {
2490
+ final byte[] buffer = new byte[bufferSize];
2491
+ int read;
2492
+ while ((read = input.read(buffer)) != -1) {
2493
+ output.write(buffer, 0, read);
2494
+ totalWritten += read;
2495
+ progress.onUpload(totalWritten, totalSize);
2496
+ }
2497
+ return HttpRequest.this;
2498
+ }
2499
+ }.call();
2500
+ }
2501
+
2502
+ /**
2503
+ * Copy from reader to writer
2504
+ *
2505
+ * @param input
2506
+ * @param output
2507
+ * @return this request
2508
+ * @throws IOException
2509
+ */
2510
+ protected HttpRequest copy(final Reader input, final Writer output) throws IOException {
2511
+ return new CloseOperation<HttpRequest>(input, ignoreCloseExceptions) {
2512
+
2513
+ @Override
2514
+ public HttpRequest run() throws IOException {
2515
+ final char[] buffer = new char[bufferSize];
2516
+ int read;
2517
+ while ((read = input.read(buffer)) != -1) {
2518
+ output.write(buffer, 0, read);
2519
+ totalWritten += read;
2520
+ progress.onUpload(totalWritten, -1);
2521
+ }
2522
+ return HttpRequest.this;
2523
+ }
2524
+ }.call();
2525
+ }
2526
+
2527
+ /**
2528
+ * Set the UploadProgress callback for this request
2529
+ *
2530
+ * @param callback
2531
+ * @return this request
2532
+ */
2533
+ public HttpRequest progress(final UploadProgress callback) {
2534
+ if (callback == null)
2535
+ progress = UploadProgress.DEFAULT;
2536
+ else
2537
+ progress = callback;
2538
+ return this;
2539
+ }
2540
+
2541
+ private HttpRequest incrementTotalSize(final long size) {
2542
+ if (totalSize == -1)
2543
+ totalSize = 0;
2544
+ totalSize += size;
2545
+ return this;
2546
+ }
2547
+
2548
+ /**
2549
+ * Close output stream
2550
+ *
2551
+ * @return this request
2552
+ * @throws HttpRequestException
2553
+ * @throws IOException
2554
+ */
2555
+ protected HttpRequest closeOutput() throws IOException {
2556
+ progress(null);
2557
+ if (output == null)
2558
+ return this;
2559
+ if (multipart)
2560
+ output.write(CRLF + "--" + BOUNDARY + "--" + CRLF);
2561
+ if (ignoreCloseExceptions)
2562
+ try {
2563
+ output.close();
2564
+ } catch (IOException ignored) {
2565
+ // Ignored
2566
+ }
2567
+ else
2568
+ output.close();
2569
+ output = null;
2570
+ return this;
2571
+ }
2572
+
2573
+ /**
2574
+ * Call {@link #closeOutput()} and re-throw a caught {@link IOException}s as an
2575
+ * {@link HttpRequestException}
2576
+ *
2577
+ * @return this request
2578
+ * @throws HttpRequestException
2579
+ */
2580
+ protected HttpRequest closeOutputQuietly() throws HttpRequestException {
2581
+ try {
2582
+ return closeOutput();
2583
+ } catch (IOException e) {
2584
+ throw new HttpRequestException(e);
2585
+ }
2586
+ }
2587
+
2588
+ /**
2589
+ * Open output stream
2590
+ *
2591
+ * @return this request
2592
+ * @throws IOException
2593
+ */
2594
+ protected HttpRequest openOutput() throws IOException {
2595
+ if (output != null)
2596
+ return this;
2597
+ getConnection().setDoOutput(true);
2598
+ final String charset = getParam(getConnection().getRequestProperty(HEADER_CONTENT_TYPE), PARAM_CHARSET);
2599
+ output = new RequestOutputStream(getConnection().getOutputStream(), charset, bufferSize);
2600
+ return this;
2601
+ }
2602
+
2603
+ /**
2604
+ * Start part of a multipart
2605
+ *
2606
+ * @return this request
2607
+ * @throws IOException
2608
+ */
2609
+ protected HttpRequest startPart() throws IOException {
2610
+ if (!multipart) {
2611
+ multipart = true;
2612
+ contentType(CONTENT_TYPE_MULTIPART).openOutput();
2613
+ output.write("--" + BOUNDARY + CRLF);
2614
+ } else
2615
+ output.write(CRLF + "--" + BOUNDARY + CRLF);
2616
+ return this;
2617
+ }
2618
+
2619
+ /**
2620
+ * Write part header
2621
+ *
2622
+ * @param name
2623
+ * @param filename
2624
+ * @return this request
2625
+ * @throws IOException
2626
+ */
2627
+ protected HttpRequest writePartHeader(final String name, final String filename) throws IOException {
2628
+ return writePartHeader(name, filename, null);
2629
+ }
2630
+
2631
+ /**
2632
+ * Write part header
2633
+ *
2634
+ * @param name
2635
+ * @param filename
2636
+ * @param contentType
2637
+ * @return this request
2638
+ * @throws IOException
2639
+ */
2640
+ protected HttpRequest writePartHeader(final String name, final String filename, final String contentType)
2641
+ throws IOException {
2642
+ final StringBuilder partBuffer = new StringBuilder();
2643
+ partBuffer.append("form-data; name=\"").append(name);
2644
+ if (filename != null)
2645
+ partBuffer.append("\"; filename=\"").append(filename);
2646
+ partBuffer.append('"');
2647
+ partHeader("Content-Disposition", partBuffer.toString());
2648
+ if (contentType != null)
2649
+ partHeader(HEADER_CONTENT_TYPE, contentType);
2650
+ return send(CRLF);
2651
+ }
2652
+
2653
+ /**
2654
+ * Write part of a multipart request to the request body
2655
+ *
2656
+ * @param name
2657
+ * @param part
2658
+ * @return this request
2659
+ */
2660
+ public HttpRequest part(final String name, final String part) {
2661
+ return part(name, null, part);
2662
+ }
2663
+
2664
+ /**
2665
+ * Write part of a multipart request to the request body
2666
+ *
2667
+ * @param name
2668
+ * @param filename
2669
+ * @param part
2670
+ * @return this request
2671
+ * @throws HttpRequestException
2672
+ */
2673
+ public HttpRequest part(final String name, final String filename, final String part) throws HttpRequestException {
2674
+ return part(name, filename, null, part);
2675
+ }
2676
+
2677
+ /**
2678
+ * Write part of a multipart request to the request body
2679
+ *
2680
+ * @param name
2681
+ * @param filename
2682
+ * @param contentType value of the Content-Type part header
2683
+ * @param part
2684
+ * @return this request
2685
+ * @throws HttpRequestException
2686
+ */
2687
+ public HttpRequest part(final String name, final String filename, final String contentType, final String part)
2688
+ throws HttpRequestException {
2689
+ try {
2690
+ startPart();
2691
+ writePartHeader(name, filename, contentType);
2692
+ output.write(part);
2693
+ } catch (IOException e) {
2694
+ throw new HttpRequestException(e);
2695
+ }
2696
+ return this;
2697
+ }
2698
+
2699
+ /**
2700
+ * Write part of a multipart request to the request body
2701
+ *
2702
+ * @param name
2703
+ * @param part
2704
+ * @return this request
2705
+ * @throws HttpRequestException
2706
+ */
2707
+ public HttpRequest part(final String name, final Number part) throws HttpRequestException {
2708
+ return part(name, null, part);
2709
+ }
2710
+
2711
+ /**
2712
+ * Write part of a multipart request to the request body
2713
+ *
2714
+ * @param name
2715
+ * @param filename
2716
+ * @param part
2717
+ * @return this request
2718
+ * @throws HttpRequestException
2719
+ */
2720
+ public HttpRequest part(final String name, final String filename, final Number part) throws HttpRequestException {
2721
+ return part(name, filename, part != null ? part.toString() : null);
2722
+ }
2723
+
2724
+ /**
2725
+ * Write part of a multipart request to the request body
2726
+ *
2727
+ * @param name
2728
+ * @param part
2729
+ * @return this request
2730
+ * @throws HttpRequestException
2731
+ */
2732
+ public HttpRequest part(final String name, final File part) throws HttpRequestException {
2733
+ return part(name, null, part);
2734
+ }
2735
+
2736
+ /**
2737
+ * Write part of a multipart request to the request body
2738
+ *
2739
+ * @param name
2740
+ * @param filename
2741
+ * @param part
2742
+ * @return this request
2743
+ * @throws HttpRequestException
2744
+ */
2745
+ public HttpRequest part(final String name, final String filename, final File part) throws HttpRequestException {
2746
+ return part(name, filename, null, part);
2747
+ }
2748
+
2749
+ /**
2750
+ * Write part of a multipart request to the request body
2751
+ *
2752
+ * @param name
2753
+ * @param filename
2754
+ * @param contentType value of the Content-Type part header
2755
+ * @param part
2756
+ * @return this request
2757
+ * @throws HttpRequestException
2758
+ */
2759
+ public HttpRequest part(final String name, final String filename, final String contentType, final File part)
2760
+ throws HttpRequestException {
2761
+ final InputStream stream;
2762
+ try {
2763
+ stream = new BufferedInputStream(new FileInputStream(part));
2764
+ incrementTotalSize(part.length());
2765
+ } catch (IOException e) {
2766
+ throw new HttpRequestException(e);
2767
+ }
2768
+ return part(name, filename, contentType, stream);
2769
+ }
2770
+
2771
+ /**
2772
+ * Write part of a multipart request to the request body
2773
+ *
2774
+ * @param name
2775
+ * @param part
2776
+ * @return this request
2777
+ * @throws HttpRequestException
2778
+ */
2779
+ public HttpRequest part(final String name, final InputStream part) throws HttpRequestException {
2780
+ return part(name, null, null, part);
2781
+ }
2782
+
2783
+ /**
2784
+ * Write part of a multipart request to the request body
2785
+ *
2786
+ * @param name
2787
+ * @param filename
2788
+ * @param contentType value of the Content-Type part header
2789
+ * @param part
2790
+ * @return this request
2791
+ * @throws HttpRequestException
2792
+ */
2793
+ public HttpRequest part(final String name, final String filename, final String contentType, final InputStream part)
2794
+ throws HttpRequestException {
2795
+ try {
2796
+ startPart();
2797
+ writePartHeader(name, filename, contentType);
2798
+ copy(part, output);
2799
+ } catch (IOException e) {
2800
+ throw new HttpRequestException(e);
2801
+ }
2802
+ return this;
2803
+ }
2804
+
2805
+ /**
2806
+ * Write a multipart header to the response body
2807
+ *
2808
+ * @param name
2809
+ * @param value
2810
+ * @return this request
2811
+ * @throws HttpRequestException
2812
+ */
2813
+ public HttpRequest partHeader(final String name, final String value) throws HttpRequestException {
2814
+ return send(name).send(": ").send(value).send(CRLF);
2815
+ }
2816
+
2817
+ /**
2818
+ * Write contents of file to request body
2819
+ *
2820
+ * @param input
2821
+ * @return this request
2822
+ * @throws HttpRequestException
2823
+ */
2824
+ public HttpRequest send(final File input) throws HttpRequestException {
2825
+ final InputStream stream;
2826
+ try {
2827
+ stream = new BufferedInputStream(new FileInputStream(input));
2828
+ incrementTotalSize(input.length());
2829
+ } catch (FileNotFoundException e) {
2830
+ throw new HttpRequestException(e);
2831
+ }
2832
+ return send(stream);
2833
+ }
2834
+
2835
+ /**
2836
+ * Write byte array to request body
2837
+ *
2838
+ * @param input
2839
+ * @return this request
2840
+ * @throws HttpRequestException
2841
+ */
2842
+ public HttpRequest send(final byte[] input) throws HttpRequestException {
2843
+ if (input != null)
2844
+ incrementTotalSize(input.length);
2845
+ return send(new ByteArrayInputStream(input));
2846
+ }
2847
+
2848
+ /**
2849
+ * Write stream to request body
2850
+ * <p>
2851
+ * The given stream will be closed once sending completes
2852
+ *
2853
+ * @param input
2854
+ * @return this request
2855
+ * @throws HttpRequestException
2856
+ */
2857
+ public HttpRequest send(final InputStream input) throws HttpRequestException {
2858
+ try {
2859
+ openOutput();
2860
+ copy(input, output);
2861
+ } catch (IOException e) {
2862
+ throw new HttpRequestException(e);
2863
+ }
2864
+ return this;
2865
+ }
2866
+
2867
+ /**
2868
+ * Write reader to request body
2869
+ * <p>
2870
+ * The given reader will be closed once sending completes
2871
+ *
2872
+ * @param input
2873
+ * @return this request
2874
+ * @throws HttpRequestException
2875
+ */
2876
+ public HttpRequest send(final Reader input) throws HttpRequestException {
2877
+ try {
2878
+ openOutput();
2879
+ } catch (IOException e) {
2880
+ throw new HttpRequestException(e);
2881
+ }
2882
+ final Writer writer = new OutputStreamWriter(output, output.encoder.charset());
2883
+ return new FlushOperation<HttpRequest>(writer) {
2884
+
2885
+ @Override
2886
+ protected HttpRequest run() throws IOException {
2887
+ return copy(input, writer);
2888
+ }
2889
+ }.call();
2890
+ }
2891
+
2892
+ /**
2893
+ * Write char sequence to request body
2894
+ * <p>
2895
+ * The charset configured via {@link #contentType(String)} will be used and
2896
+ * UTF-8 will be used if it is unset.
2897
+ *
2898
+ * @param value
2899
+ * @return this request
2900
+ * @throws HttpRequestException
2901
+ */
2902
+ public HttpRequest send(final CharSequence value) throws HttpRequestException {
2903
+ try {
2904
+ openOutput();
2905
+ output.write(value.toString());
2906
+ } catch (IOException e) {
2907
+ throw new HttpRequestException(e);
2908
+ }
2909
+ return this;
2910
+ }
2911
+
2912
+ /**
2913
+ * Create writer to request output stream
2914
+ *
2915
+ * @return writer
2916
+ * @throws HttpRequestException
2917
+ */
2918
+ public OutputStreamWriter writer() throws HttpRequestException {
2919
+ try {
2920
+ openOutput();
2921
+ return new OutputStreamWriter(output, output.encoder.charset());
2922
+ } catch (IOException e) {
2923
+ throw new HttpRequestException(e);
2924
+ }
2925
+ }
2926
+
2927
+ /**
2928
+ * Write the values in the map as form data to the request body
2929
+ * <p>
2930
+ * The pairs specified will be URL-encoded in UTF-8 and sent with the
2931
+ * 'application/x-www-form-urlencoded' content-type
2932
+ *
2933
+ * @param values
2934
+ * @return this request
2935
+ * @throws HttpRequestException
2936
+ */
2937
+ public HttpRequest form(final Map<?, ?> values) throws HttpRequestException {
2938
+ return form(values, CHARSET_UTF8);
2939
+ }
2940
+
2941
+ /**
2942
+ * Write the key and value in the entry as form data to the request body
2943
+ * <p>
2944
+ * The pair specified will be URL-encoded in UTF-8 and sent with the
2945
+ * 'application/x-www-form-urlencoded' content-type
2946
+ *
2947
+ * @param entry
2948
+ * @return this request
2949
+ * @throws HttpRequestException
2950
+ */
2951
+ public HttpRequest form(final Entry<?, ?> entry) throws HttpRequestException {
2952
+ return form(entry, CHARSET_UTF8);
2953
+ }
2954
+
2955
+ /**
2956
+ * Write the key and value in the entry as form data to the request body
2957
+ * <p>
2958
+ * The pair specified will be URL-encoded and sent with the
2959
+ * 'application/x-www-form-urlencoded' content-type
2960
+ *
2961
+ * @param entry
2962
+ * @param charset
2963
+ * @return this request
2964
+ * @throws HttpRequestException
2965
+ */
2966
+ public HttpRequest form(final Entry<?, ?> entry, final String charset) throws HttpRequestException {
2967
+ return form(entry.getKey(), entry.getValue(), charset);
2968
+ }
2969
+
2970
+ /**
2971
+ * Write the name/value pair as form data to the request body
2972
+ * <p>
2973
+ * The pair specified will be URL-encoded in UTF-8 and sent with the
2974
+ * 'application/x-www-form-urlencoded' content-type
2975
+ *
2976
+ * @param name
2977
+ * @param value
2978
+ * @return this request
2979
+ * @throws HttpRequestException
2980
+ */
2981
+ public HttpRequest form(final Object name, final Object value) throws HttpRequestException {
2982
+ return form(name, value, CHARSET_UTF8);
2983
+ }
2984
+
2985
+ /**
2986
+ * Write the name/value pair as form data to the request body
2987
+ * <p>
2988
+ * The values specified will be URL-encoded and sent with the
2989
+ * 'application/x-www-form-urlencoded' content-type
2990
+ *
2991
+ * @param name
2992
+ * @param value
2993
+ * @param charset
2994
+ * @return this request
2995
+ * @throws HttpRequestException
2996
+ */
2997
+ public HttpRequest form(final Object name, final Object value, String charset) throws HttpRequestException {
2998
+ final boolean first = !form;
2999
+ if (first) {
3000
+ contentType(CONTENT_TYPE_FORM, charset);
3001
+ form = true;
3002
+ }
3003
+ charset = getValidCharset(charset);
3004
+ try {
3005
+ openOutput();
3006
+ if (!first)
3007
+ output.write('&');
3008
+ output.write(URLEncoder.encode(name.toString(), charset));
3009
+ output.write('=');
3010
+ if (value != null)
3011
+ output.write(URLEncoder.encode(value.toString(), charset));
3012
+ } catch (IOException e) {
3013
+ throw new HttpRequestException(e);
3014
+ }
3015
+ return this;
3016
+ }
3017
+
3018
+ /**
3019
+ * Write the values in the map as encoded form data to the request body
3020
+ *
3021
+ * @param values
3022
+ * @param charset
3023
+ * @return this request
3024
+ * @throws HttpRequestException
3025
+ */
3026
+ public HttpRequest form(final Map<?, ?> values, final String charset) throws HttpRequestException {
3027
+ if (!values.isEmpty())
3028
+ for (Entry<?, ?> entry : values.entrySet())
3029
+ form(entry, charset);
3030
+ return this;
3031
+ }
3032
+
3033
+ public HttpRequest setSSLSocketFactory(SSLSocketFactory socketFactory) throws HttpRequestException {
3034
+ final HttpURLConnection connection = getConnection();
3035
+ if (connection instanceof HttpsURLConnection)
3036
+ ((HttpsURLConnection) connection).setSSLSocketFactory(socketFactory);
3037
+ return this;
3038
+ }
3039
+
3040
+ public HttpRequest setHostnameVerifier(HostnameVerifier verifier) {
3041
+ final HttpURLConnection connection = getConnection();
3042
+ if (connection instanceof HttpsURLConnection)
3043
+ ((HttpsURLConnection) connection).setHostnameVerifier(verifier);
3044
+ return this;
3045
+ }
3046
+
3047
+ /**
3048
+ * Get the {@link URL} of this request's connection
3049
+ *
3050
+ * @return request URL
3051
+ */
3052
+ public URL url() {
3053
+ return getConnection().getURL();
3054
+ }
3055
+
3056
+ /**
3057
+ * Get the HTTP method of this request
3058
+ *
3059
+ * @return method
3060
+ */
3061
+ public String method() {
3062
+ return getConnection().getRequestMethod();
3063
+ }
3064
+
3065
+ /**
3066
+ * Configure an HTTP proxy on this connection. Use
3067
+ * {{@link #proxyBasic(String, String)} if this proxy requires basic
3068
+ * authentication.
3069
+ *
3070
+ * @param proxyHost
3071
+ * @param proxyPort
3072
+ * @return this request
3073
+ */
3074
+ public HttpRequest useProxy(final String proxyHost, final int proxyPort) {
3075
+ if (connection != null)
3076
+ throw new IllegalStateException(
3077
+ "The connection has already been created. This method must be called before reading or writing to the request.");
3078
+
3079
+ this.httpProxyHost = proxyHost;
3080
+ this.httpProxyPort = proxyPort;
3081
+ return this;
3082
+ }
3083
+
3084
+ /**
3085
+ * Set whether or not the underlying connection should follow redirects in the
3086
+ * response.
3087
+ *
3088
+ * @param followRedirects - true fo follow redirects, false to not.
3089
+ * @return this request
3090
+ */
3091
+ public HttpRequest followRedirects(final boolean followRedirects) {
3092
+ getConnection().setInstanceFollowRedirects(followRedirects);
3093
+ return this;
3094
+ }
3095
+ }