passbolt-browser-extension 5.9.0 → 5.10.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 (197) hide show
  1. package/Gruntfile.js +13 -3
  2. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager/AppDelegate.swift +37 -0
  3. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager/Assets.xcassets/AccentColor.colorset/Contents.json +11 -0
  4. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager/Assets.xcassets/AppIcon.appiconset/Contents.json +68 -0
  5. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager/Assets.xcassets/AppIcon.appiconset/mac-icon-128@1x.png +0 -0
  6. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager/Assets.xcassets/AppIcon.appiconset/mac-icon-128@2x.png +0 -0
  7. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager/Assets.xcassets/AppIcon.appiconset/mac-icon-16@1x.png +0 -0
  8. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager/Assets.xcassets/AppIcon.appiconset/mac-icon-16@2x.png +0 -0
  9. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager/Assets.xcassets/AppIcon.appiconset/mac-icon-256@1x.png +0 -0
  10. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager/Assets.xcassets/AppIcon.appiconset/mac-icon-256@2x.png +0 -0
  11. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager/Assets.xcassets/AppIcon.appiconset/mac-icon-32@1x.png +0 -0
  12. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager/Assets.xcassets/AppIcon.appiconset/mac-icon-32@2x.png +0 -0
  13. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager/Assets.xcassets/AppIcon.appiconset/mac-icon-512@1x.png +0 -0
  14. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager/Assets.xcassets/AppIcon.appiconset/mac-icon-512@2x.png +0 -0
  15. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager/Assets.xcassets/Contents.json +6 -0
  16. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager/Assets.xcassets/LargeIcon.imageset/Contents.json +20 -0
  17. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager/Base.lproj/Main.storyboard +125 -0
  18. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager/File.txt +1 -0
  19. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager/Info.plist +10 -0
  20. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager/Passbolt - password manager.entitlements +12 -0
  21. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager/Resources/Base.lproj/Main.html +19 -0
  22. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager/Resources/Icon.png +0 -0
  23. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager/Resources/Script.js +22 -0
  24. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager/Resources/Style.css +45 -0
  25. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager/ViewController.swift +73 -0
  26. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager Extension/Info.plist +20 -0
  27. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager Extension/Passbolt - password manager Extension.entitlements +12 -0
  28. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager Extension/SafariWebExtensionHandler.swift +97 -0
  29. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager Extension/controllers/AbstractController.swift +69 -0
  30. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager Extension/controllers/ErrorController.swift +47 -0
  31. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager Extension/controllers/FetchController.swift +57 -0
  32. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager Extension/controllers/OpenSafariSettingsController.swift +46 -0
  33. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager Extension/controllers/SaveFileController.swift +33 -0
  34. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager Extension/routes/Routes.swift +26 -0
  35. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager Extension/services/fetch/SecureProfileSessionManager.swift +195 -0
  36. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager Extension/services/fetch/fetchService.swift +94 -0
  37. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager Extension/services/file/SaveFileService.swift +120 -0
  38. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager Extension/utils/ErrorSerializer.swift +116 -0
  39. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager Extension/utils/LocatedError.swift +97 -0
  40. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager Tests/SafariWebExtensionHandlerTests.swift +51 -0
  41. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager Tests/controllers/AbstractControllerTests.swift +39 -0
  42. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager Tests/controllers/ErrorControllerTests.swift +34 -0
  43. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager Tests/controllers/FetchControllerTests.swift +34 -0
  44. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager Tests/controllers/OpenSafariSettingsControllerTests.swift +34 -0
  45. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager Tests/controllers/SaveFileControllerTests.swift +34 -0
  46. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager Tests/services/fetch/FetchServiceTests.swift +37 -0
  47. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager Tests/services/fetch/SecureProfileSessionManagerTests.swift +97 -0
  48. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager Tests/services/file/SaveFileServiceTests.swift +71 -0
  49. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager Tests/utils/ErrorSerializerTests.swift +155 -0
  50. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager Tests/utils/LocatedErrorTests.swift +92 -0
  51. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager.xcodeproj/project.pbxproj +795 -0
  52. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  53. package/build-safari-extension/Passbolt-Safari-Extension/Passbolt - password manager.xcodeproj/xcshareddata/xcschemes/Passbolt-Safari-Extension.xcscheme +100 -0
  54. package/package.json +8 -15
  55. package/src/all/background_page/controller/InformMenuController/InformMenuController.js +4 -7
  56. package/src/all/background_page/controller/autofill/AutofillController.js +4 -4
  57. package/src/all/background_page/controller/exportPolicies/findExportPoliciesSettingsController.js +53 -0
  58. package/src/all/background_page/controller/exportPolicies/findExportPoliciesSettingsController.test.js +48 -0
  59. package/src/all/background_page/controller/extension/isExtensionAllowedOnEveryWebsiteController.js +49 -0
  60. package/src/all/background_page/controller/extension/isExtensionAllowedOnEveryWebsiteController.test.js +57 -0
  61. package/src/all/background_page/controller/extension/openSafariExtensionSettingsController.js +49 -0
  62. package/src/all/background_page/controller/extension/openSafariExtensionSettingsController.test.js +46 -0
  63. package/src/all/background_page/controller/extension/startCheckingForPermissionUpdateController.js +49 -0
  64. package/src/all/background_page/controller/extension/startCheckingForPermissionUpdateController.test.js +50 -0
  65. package/src/all/background_page/controller/extension/stopCheckingForPermissionUpdateController.js +49 -0
  66. package/src/all/background_page/controller/extension/stopCheckingForPermissionUpdateController.test.js +48 -0
  67. package/src/all/background_page/controller/import/importResourcesFileController.test.js +2 -2
  68. package/src/all/background_page/controller/informCallToActionController/informCallToActionController.js +5 -7
  69. package/src/all/background_page/controller/mfaSetup/GetStartedWithDuoController.js +53 -0
  70. package/src/all/background_page/controller/mfaSetup/GetStartedWithDuoController.test.js +33 -0
  71. package/src/all/background_page/controller/sso/ssoAuthenticationController.js +1 -2
  72. package/src/all/background_page/controller/sso/ssoAuthenticationController.test.js +3 -4
  73. package/src/all/background_page/controller/tab/closeActiveTabController.js +48 -0
  74. package/src/all/background_page/controller/tab/closeActiveTabController.test.js +28 -0
  75. package/src/all/background_page/controller/tab/openAdministrationPageController.js +51 -0
  76. package/src/all/background_page/controller/tab/openAdministrationPageController.test.js +49 -0
  77. package/src/all/background_page/controller/tab/openTabController.js +51 -0
  78. package/src/all/background_page/controller/tab/openTabController.test.js +52 -0
  79. package/src/all/background_page/controller/tab/openTrustedDomainTabController.js +50 -0
  80. package/src/all/background_page/controller/tab/openTrustedDomainTabController.test.js +46 -0
  81. package/src/all/background_page/controller/tab/openWebsiteGettingStartedPageController.js +50 -0
  82. package/src/all/background_page/controller/tab/openWebsiteGettingStartedPageController.test.js +46 -0
  83. package/src/all/background_page/controller/tag/addTagsToResourcesController.js +111 -0
  84. package/src/all/background_page/controller/tag/addTagsToResourcesController.test.js +158 -0
  85. package/src/all/background_page/controller/tag/deleteTagController.js +59 -0
  86. package/src/all/background_page/controller/tag/deleteTagController.test.js +63 -0
  87. package/src/all/background_page/controller/tag/findTagsController.js +54 -0
  88. package/src/all/background_page/controller/tag/findTagsController.test.js +53 -0
  89. package/src/all/background_page/controller/tag/tagController.js +9 -11
  90. package/src/all/background_page/controller/tag/updateResourceTagsController.js +68 -0
  91. package/src/all/background_page/controller/tag/updateResourceTagsController.test.js +94 -0
  92. package/src/all/background_page/controller/tag/updateTagController.js +59 -0
  93. package/src/all/background_page/controller/tag/updateTagController.test.js +73 -0
  94. package/src/all/background_page/controller/webIntegration/webIntegrationController.js +2 -5
  95. package/src/all/background_page/event/appEvents.js +118 -1
  96. package/src/all/background_page/event/mfaEvents.js +6 -0
  97. package/src/all/background_page/event/recoverEvents.js +44 -0
  98. package/src/all/background_page/event/setupEvents.js +44 -0
  99. package/src/all/background_page/event/tabEvents.js +34 -0
  100. package/src/all/background_page/model/entity/tag/tagsCollection.js +25 -0
  101. package/src/all/background_page/model/entity/tag/tagsCollection.test.data.js +41 -0
  102. package/src/all/background_page/model/entity/tag/tagsCollection.test.js +105 -51
  103. package/src/all/background_page/model/resource/resourceModel.js +0 -70
  104. package/src/all/background_page/pagemod/appPagemod.js +0 -2
  105. package/src/all/background_page/pagemod/appPagemod.test.js +1 -5
  106. package/src/all/background_page/pagemod/quickAccessPagemod.js +0 -2
  107. package/src/all/background_page/pagemod/quickAccessPagemod.test.js +1 -5
  108. package/src/all/background_page/sdk/port/portManager.js +4 -4
  109. package/src/all/background_page/sdk/port/portManager.test.js +4 -4
  110. package/src/all/background_page/service/accountRecovery/parseAccountRecoveryUrlService.js +1 -2
  111. package/src/all/background_page/service/api/exportPolicies/exportPoliciesSettingsApiService.js +48 -0
  112. package/src/all/background_page/service/api/exportPolicies/exportPoliciesSettingsApiService.test.js +65 -0
  113. package/src/all/background_page/service/api/mfa/duoApiService.js +59 -0
  114. package/src/all/background_page/service/api/mfa/duoApiService.test.js +62 -0
  115. package/src/all/background_page/service/api/tag/{tagService.js → tagApiService.js} +36 -22
  116. package/src/all/background_page/service/api/tag/tagApiService.test.js +164 -0
  117. package/src/all/background_page/service/app/parseAppUrlService.js +1 -2
  118. package/src/all/background_page/service/authenticationStatusService.js +3 -2
  119. package/src/all/background_page/service/browser/browserService.js +7 -0
  120. package/src/all/background_page/service/browser/browserService.test.js +76 -0
  121. package/src/all/background_page/service/crypto/getGpgKeyInfoService.js +4 -4
  122. package/src/all/background_page/service/exportPolicies/findExportPoliciesSettingsService.js +45 -0
  123. package/src/all/background_page/service/exportPolicies/findExportPoliciesSettingsService.test.js +70 -0
  124. package/src/all/background_page/service/extension/checkForPermissionUpdateService.js +63 -0
  125. package/src/all/background_page/service/extension/checkForPermissionUpdateService.test.js +90 -0
  126. package/src/all/background_page/service/extension/extensionPermissionsService.js +24 -0
  127. package/src/all/background_page/service/extension/extensionPermissionsService.test.js +82 -0
  128. package/src/all/background_page/service/extension/openSafariExtensionSettingsService.js +28 -0
  129. package/src/all/background_page/service/extension/openSafariExtensionSettingsService.test.js +57 -0
  130. package/src/all/background_page/service/file/fileService.js +5 -4
  131. package/src/all/background_page/service/metadata/generateMetadataKeyService.js +1 -1
  132. package/src/all/background_page/service/mfa/duoUserSettingsService.js +67 -0
  133. package/src/all/background_page/service/mfa/duoUserSettingsService.test.js +69 -0
  134. package/src/all/background_page/service/passphrase/getPassphraseService.js +67 -19
  135. package/src/all/background_page/service/passphrase/getPassphraseService.test.js +1 -2
  136. package/src/all/background_page/service/recover/parseRecoverUrlService.js +1 -2
  137. package/src/all/background_page/service/resource/import/ImportResourcesService.js +7 -8
  138. package/src/all/background_page/service/resource/import/ImportResourcesService.test.js +4 -3
  139. package/src/all/background_page/service/setup/parseSetupUrlService.js +1 -2
  140. package/src/all/background_page/service/tab/tabService.js +53 -27
  141. package/src/all/background_page/service/tab/tabService.test.js +58 -0
  142. package/src/all/background_page/service/tag/deleteTagService.js +76 -0
  143. package/src/all/background_page/service/tag/deleteTagService.test.js +215 -0
  144. package/src/all/background_page/service/tag/findTagsService.js +47 -0
  145. package/src/all/background_page/service/tag/findTagsService.test.js +76 -0
  146. package/src/all/background_page/service/tag/updateResourceTagsService.js +273 -0
  147. package/src/all/background_page/service/tag/updateResourceTagsService.test.js +665 -0
  148. package/src/all/background_page/service/tag/updateTagService.js +91 -0
  149. package/src/all/background_page/service/tag/updateTagService.test.js +243 -0
  150. package/src/all/background_page/service/toolbar/toolbarService.js +49 -9
  151. package/src/all/background_page/service/toolbar/toolbarService.test.js +31 -0
  152. package/src/all/background_page/service/ui/browserTab.service.js +62 -1
  153. package/src/all/background_page/service/ui/browserTab.service.test.js +91 -0
  154. package/src/all/background_page/service/ui/openAdministrationApiPageService.js +60 -0
  155. package/src/all/background_page/service/ui/openAdministrationApiPageService.test.js +141 -0
  156. package/src/all/background_page/service/ui/openTrustedDomainTabService.js +29 -0
  157. package/src/all/background_page/service/ui/openTrustedDomainTabService.test.js +76 -0
  158. package/src/all/background_page/{model/entity/tag/tagCollection.test.data.js → service/ui/openWebsiteGettingStartedPageService.js} +12 -14
  159. package/src/all/background_page/service/ui/openWebsiteGettingStartedPageService.test.js +46 -0
  160. package/src/all/background_page/service/ui/quickAccess.service.js +53 -4
  161. package/src/all/background_page/service/webIntegration/parseWebIntegrationUrlService.js +1 -2
  162. package/src/all/background_page/utils/format/formDataUtils.js +16 -0
  163. package/src/all/background_page/utils/format/formDataUtils.test.data.js +7 -0
  164. package/src/all/background_page/utils/format/formDataUtils.test.js +33 -1
  165. package/src/all/background_page/utils/format/gpgUserIdParser.js +136 -0
  166. package/src/all/background_page/utils/format/{emailaddress.test.data.js → gpgUserIdParser.test.data.js} +107 -22
  167. package/src/all/background_page/utils/format/gpgUserIdParser.test.js +65 -0
  168. package/src/all/webAccessibleResources/js/app/QuickAccess.js +12 -5
  169. package/src/all/webAccessibleResources/js/lib/port.js +17 -0
  170. package/src/all/webAccessibleResources/js/themes/stylesheet.js +1 -2
  171. package/src/chrome/manifest.json +2 -2
  172. package/src/chrome-mv3/manifest.json +2 -2
  173. package/src/firefox/manifest.json +2 -2
  174. package/src/safari/background_page/index.js +124 -0
  175. package/src/safari/background_page/service/cookies/cookiesService.js +191 -0
  176. package/src/safari/background_page/service/cookies/cookiesService.test.data.js +82 -0
  177. package/src/safari/background_page/service/cookies/cookiesService.test.js +390 -0
  178. package/src/safari/background_page/service/file/fileService.js +63 -0
  179. package/src/safari/background_page/service/file/fileService.test.js +46 -0
  180. package/src/safari/background_page/service/nativeMessage/sendNativeMessageService.js +84 -0
  181. package/src/safari/background_page/service/nativeMessage/sendNativeMessageService.test.js +167 -0
  182. package/src/safari/common/polyfill/fetchPolyfill.js +120 -0
  183. package/src/safari/common/polyfill/fetchPolyfill.test.data.js +104 -0
  184. package/src/safari/common/polyfill/fetchPolyfill.test.js +172 -0
  185. package/src/safari/common/polyfill/onInstalledReasonPolyfill.js +37 -0
  186. package/src/safari/common/polyfill/safariBrowserPolyfill.js +37 -0
  187. package/src/safari/manifest.json +18 -21
  188. package/test/jest.setup.js +7 -7
  189. package/test/mocks/mockWebExtensionPolyfill.js +12 -1
  190. package/webpack.safari-background-page.config.js +65 -0
  191. package/src/all/background_page/controller/tabsController.js +0 -50
  192. package/src/all/background_page/event/tagEvents.js +0 -106
  193. package/src/all/background_page/model/tag/tagModel.js +0 -148
  194. package/src/all/background_page/model/toolbar.js +0 -32
  195. package/src/all/background_page/utils/format/emailaddress.js +0 -170
  196. package/src/all/background_page/utils/format/emailaddress.test.js +0 -51
  197. package/src/all/background_page/utils/format/string.js +0 -65
package/Gruntfile.js CHANGED
@@ -55,7 +55,7 @@ module.exports = function (grunt) {
55
55
  grunt.registerTask('bundle-firefox', ['copy:manifest_firefox', 'bundle']);
56
56
  grunt.registerTask('bundle-chromium-mv2', ['copy:manifest_chromium_mv2', 'bundle']);
57
57
  grunt.registerTask('bundle-chromium-mv3', ['copy:manifest_chromium_mv3', 'bundle-mv3']);
58
- grunt.registerTask('bundle-safari', ['copy:manifest_safari', 'bundle-mv3']);
58
+ grunt.registerTask('bundle-safari', ['copy:manifest_safari', 'bundle']);
59
59
 
60
60
  grunt.registerTask('build', ['build-firefox-prod', 'build-chromium-mv2-prod', 'build-chromium-mv3-prod']);
61
61
 
@@ -72,8 +72,8 @@ module.exports = function (grunt) {
72
72
  grunt.registerTask('build-chromium-mv3-prod', ['clean:build', 'pre-dist', 'copy:config_default', 'bundle-chromium-mv3', 'shell:build_service_worker_prod', 'shell:build_content_script_prod', 'shell:build_web_accessible_resources_prod', 'shell:build_chromium_mv3_prod']);
73
73
 
74
74
  grunt.registerTask('build-safari', ['build-safari-debug', 'build-safari-prod']);
75
- grunt.registerTask('build-safari-debug', ['clean:build', 'pre-dist', 'copy:config_debug', 'bundle-safari', 'shell:build_service_worker_debug', 'shell:build_content_script_debug', 'shell:build_web_accessible_resources_debug']);
76
- grunt.registerTask('build-safari-prod', ['clean:build', 'pre-dist', 'copy:config_default', 'bundle-safari', 'shell:build_service_worker_prod', 'shell:build_content_script_prod', 'shell:build_web_accessible_resources_prod']);
75
+ grunt.registerTask('build-safari-debug', ['clean:build', 'pre-dist', 'copy:config_debug', 'bundle-safari', 'shell:build_background_page_safari_debug', 'shell:build_content_script_debug', 'shell:build_web_accessible_resources_debug']);
76
+ grunt.registerTask('build-safari-prod', ['clean:build', 'pre-dist', 'copy:config_default', 'bundle-safari', 'shell:build_background_page_safari_prod', 'shell:build_content_script_prod', 'shell:build_web_accessible_resources_prod']);
77
77
 
78
78
  grunt.registerTask('externalize-locale-strings', ['shell:externalize']);
79
79
 
@@ -287,11 +287,21 @@ module.exports = function (grunt) {
287
287
  'npm run build:background-page'
288
288
  ].join(' && ')
289
289
  },
290
+ build_background_page_safari_prod: {
291
+ command: [
292
+ 'npm run build:safari:background-page'
293
+ ].join(' && ')
294
+ },
290
295
  build_background_page_debug: {
291
296
  command: [
292
297
  'npm run dev:build:background-page'
293
298
  ].join(' && ')
294
299
  },
300
+ build_background_page_safari_debug: {
301
+ command: [
302
+ 'npm run dev:build:safari:background-page'
303
+ ].join(' && ')
304
+ },
295
305
  /**
296
306
  * Build service worker.
297
307
  */
@@ -0,0 +1,37 @@
1
+ //
2
+ // Passbolt - Open source password manager for teams
3
+ // Copyright (c) Passbolt SA
4
+ //
5
+ // This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General
6
+ // Public License (AGPL) as published by the Free Software Foundation version 3.
7
+ //
8
+ // The name "Passbolt" is a registered trademark of Passbolt SA, and Passbolt SA hereby declines to grant a trademark
9
+ // license to "Passbolt" pursuant to the GNU Affero General Public License version 3 Section 7(e), without a separate
10
+ // agreement with Passbolt SA.
11
+ //
12
+ // This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
13
+ // warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See GNU Affero General Public License for more details.
14
+ //
15
+ // You should have received a copy of the GNU Affero General Public License along with this program. If not,
16
+ // see GNU Affero General Public License v3 (http://www.gnu.org/licenses/agpl-3.0.html).
17
+ //
18
+ // @copyright Copyright (c) Passbolt SA (https://www.passbolt.com)
19
+ // @license https://opensource.org/licenses/AGPL-3.0 AGPL License
20
+ // @link https://www.passbolt.com Passbolt (tm)
21
+ // @since v1.0
22
+ //
23
+
24
+ import Cocoa
25
+
26
+ @main
27
+ class AppDelegate: NSObject, NSApplicationDelegate {
28
+
29
+ func applicationDidFinishLaunching(_ notification: Notification) {
30
+ // Override point for customization after application launch.
31
+ }
32
+
33
+ func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
34
+ return true
35
+ }
36
+
37
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "colors" : [
3
+ {
4
+ "idiom" : "universal"
5
+ }
6
+ ],
7
+ "info" : {
8
+ "author" : "xcode",
9
+ "version" : 1
10
+ }
11
+ }
@@ -0,0 +1,68 @@
1
+ {
2
+ "images" : [
3
+ {
4
+ "size" : "16x16",
5
+ "idiom" : "mac",
6
+ "filename" : "mac-icon-16@1x.png",
7
+ "scale" : "1x"
8
+ },
9
+ {
10
+ "size" : "16x16",
11
+ "idiom" : "mac",
12
+ "filename" : "mac-icon-16@2x.png",
13
+ "scale" : "2x"
14
+ },
15
+ {
16
+ "size" : "32x32",
17
+ "idiom" : "mac",
18
+ "filename" : "mac-icon-32@1x.png",
19
+ "scale" : "1x"
20
+ },
21
+ {
22
+ "size" : "32x32",
23
+ "idiom" : "mac",
24
+ "filename" : "mac-icon-32@2x.png",
25
+ "scale" : "2x"
26
+ },
27
+ {
28
+ "size" : "128x128",
29
+ "idiom" : "mac",
30
+ "filename" : "mac-icon-128@1x.png",
31
+ "scale" : "1x"
32
+ },
33
+ {
34
+ "size" : "128x128",
35
+ "idiom" : "mac",
36
+ "filename" : "mac-icon-128@2x.png",
37
+ "scale" : "2x"
38
+ },
39
+ {
40
+ "size" : "256x256",
41
+ "idiom" : "mac",
42
+ "filename" : "mac-icon-256@1x.png",
43
+ "scale" : "1x"
44
+ },
45
+ {
46
+ "size" : "256x256",
47
+ "idiom" : "mac",
48
+ "filename" : "mac-icon-256@2x.png",
49
+ "scale" : "2x"
50
+ },
51
+ {
52
+ "size" : "512x512",
53
+ "idiom" : "mac",
54
+ "filename" : "mac-icon-512@1x.png",
55
+ "scale" : "1x"
56
+ },
57
+ {
58
+ "size" : "512x512",
59
+ "idiom" : "mac",
60
+ "filename" : "mac-icon-512@2x.png",
61
+ "scale" : "2x"
62
+ }
63
+ ],
64
+ "info" : {
65
+ "version" : 1,
66
+ "author" : "xcode"
67
+ }
68
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "images" : [
3
+ {
4
+ "idiom" : "universal",
5
+ "scale" : "1x"
6
+ },
7
+ {
8
+ "idiom" : "universal",
9
+ "scale" : "2x"
10
+ },
11
+ {
12
+ "idiom" : "universal",
13
+ "scale" : "3x"
14
+ }
15
+ ],
16
+ "info" : {
17
+ "author" : "xcode",
18
+ "version" : 1
19
+ }
20
+ }
@@ -0,0 +1,125 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <document type="com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB" version="3.0" toolsVersion="24127" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" initialViewController="B8D-0N-5wS">
3
+ <dependencies>
4
+ <deployment identifier="macosx"/>
5
+ <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="24127"/>
6
+ <plugIn identifier="com.apple.WebKit2IBPlugin" version="24127"/>
7
+ <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
8
+ </dependencies>
9
+ <scenes>
10
+ <!--Application-->
11
+ <scene sceneID="JPo-4y-FX3">
12
+ <objects>
13
+ <application id="hnw-xV-0zn" sceneMemberID="viewController">
14
+ <menu key="mainMenu" title="Main Menu" systemMenu="main" id="AYu-sK-qS6">
15
+ <items>
16
+ <menuItem title="Passbolt-Safari-Extension" id="1Xt-HY-uBw">
17
+ <modifierMask key="keyEquivalentModifierMask"/>
18
+ <menu key="submenu" title="Passbolt-Safari-Extension" systemMenu="apple" id="uQy-DD-JDr">
19
+ <items>
20
+ <menuItem title="About Passbolt-Safari-Extension" id="5kV-Vb-QxS">
21
+ <modifierMask key="keyEquivalentModifierMask"/>
22
+ <connections>
23
+ <action selector="orderFrontStandardAboutPanel:" target="Ady-hI-5gd" id="Exp-CZ-Vem"/>
24
+ </connections>
25
+ </menuItem>
26
+ <menuItem isSeparatorItem="YES" id="VOq-y0-SEH"/>
27
+ <menuItem title="Hide Passbolt-Safari-Extension" keyEquivalent="h" id="Olw-nP-bQN">
28
+ <connections>
29
+ <action selector="hide:" target="Ady-hI-5gd" id="PnN-Uc-m68"/>
30
+ </connections>
31
+ </menuItem>
32
+ <menuItem title="Hide Others" keyEquivalent="h" id="Vdr-fp-XzO">
33
+ <modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
34
+ <connections>
35
+ <action selector="hideOtherApplications:" target="Ady-hI-5gd" id="VT4-aY-XCT"/>
36
+ </connections>
37
+ </menuItem>
38
+ <menuItem title="Show All" id="Kd2-mp-pUS">
39
+ <modifierMask key="keyEquivalentModifierMask"/>
40
+ <connections>
41
+ <action selector="unhideAllApplications:" target="Ady-hI-5gd" id="Dhg-Le-xox"/>
42
+ </connections>
43
+ </menuItem>
44
+ <menuItem isSeparatorItem="YES" id="kCx-OE-vgT"/>
45
+ <menuItem title="Quit Passbolt-Safari-Extension" keyEquivalent="q" id="4sb-4s-VLi">
46
+ <connections>
47
+ <action selector="terminate:" target="Ady-hI-5gd" id="Te7-pn-YzF"/>
48
+ </connections>
49
+ </menuItem>
50
+ </items>
51
+ </menu>
52
+ </menuItem>
53
+ <menuItem title="Help" id="wpr-3q-Mcd">
54
+ <modifierMask key="keyEquivalentModifierMask"/>
55
+ <menu key="submenu" title="Help" systemMenu="help" id="F2S-fz-NVQ">
56
+ <items>
57
+ <menuItem title="Passbolt-Safari-Extension Help" keyEquivalent="?" id="FKE-Sm-Kum">
58
+ <connections>
59
+ <action selector="showHelp:" target="Ady-hI-5gd" id="y7X-2Q-9no"/>
60
+ </connections>
61
+ </menuItem>
62
+ </items>
63
+ </menu>
64
+ </menuItem>
65
+ </items>
66
+ </menu>
67
+ <connections>
68
+ <outlet property="delegate" destination="Voe-Tx-rLC" id="PrD-fu-P6m"/>
69
+ </connections>
70
+ </application>
71
+ <customObject id="Voe-Tx-rLC" customClass="AppDelegate" customModule="Passbolt___password_manager" customModuleProvider="target"/>
72
+ <customObject id="YLy-65-1bz" customClass="NSFontManager"/>
73
+ <customObject id="Ady-hI-5gd" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
74
+ </objects>
75
+ <point key="canvasLocation" x="76" y="-134"/>
76
+ </scene>
77
+ <!--Window Controller-->
78
+ <scene sceneID="R2V-B0-nI4">
79
+ <objects>
80
+ <windowController showSeguePresentationStyle="single" id="B8D-0N-5wS" sceneMemberID="viewController">
81
+ <window key="window" title="Passbolt-Safari-Extension" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" restorable="NO" releasedWhenClosed="NO" animationBehavior="default" id="IQv-IB-iLA">
82
+ <windowStyleMask key="styleMask" titled="YES" closable="YES"/>
83
+ <windowCollectionBehavior key="collectionBehavior" fullScreenNone="YES"/>
84
+ <rect key="contentRect" x="196" y="240" width="425" height="325"/>
85
+ <rect key="screenRect" x="0.0" y="0.0" width="1680" height="1027"/>
86
+ <connections>
87
+ <outlet property="delegate" destination="B8D-0N-5wS" id="98r-iN-zZc"/>
88
+ </connections>
89
+ </window>
90
+ <connections>
91
+ <segue destination="XfG-lQ-9wD" kind="relationship" relationship="window.shadowedContentViewController" id="cq2-FE-JQM"/>
92
+ </connections>
93
+ </windowController>
94
+ <customObject id="Oky-zY-oP4" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
95
+ </objects>
96
+ <point key="canvasLocation" x="75" y="250"/>
97
+ </scene>
98
+ <!--View Controller-->
99
+ <scene sceneID="hIz-AP-VOD">
100
+ <objects>
101
+ <viewController id="XfG-lQ-9wD" customClass="ViewController" customModule="Passbolt___password_manager" customModuleProvider="target" sceneMemberID="viewController">
102
+ <view key="view" id="m2S-Jp-Qdl">
103
+ <rect key="frame" x="0.0" y="0.0" width="425" height="325"/>
104
+ <autoresizingMask key="autoresizingMask"/>
105
+ <subviews>
106
+ <wkWebView wantsLayer="YES" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="eOr-cG-IQY">
107
+ <rect key="frame" x="0.0" y="0.0" width="425" height="325"/>
108
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
109
+ <wkWebViewConfiguration key="configuration">
110
+ <audiovisualMediaTypes key="mediaTypesRequiringUserActionForPlayback" none="YES"/>
111
+ <wkPreferences key="preferences"/>
112
+ </wkWebViewConfiguration>
113
+ </wkWebView>
114
+ </subviews>
115
+ </view>
116
+ <connections>
117
+ <outlet property="webView" destination="eOr-cG-IQY" id="GFe-mU-dBY"/>
118
+ </connections>
119
+ </viewController>
120
+ <customObject id="rPt-NT-nkU" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
121
+ </objects>
122
+ <point key="canvasLocation" x="75" y="655"/>
123
+ </scene>
124
+ </scenes>
125
+ </document>
@@ -0,0 +1 @@
1
+ Passbolt - Open source password manager
@@ -0,0 +1,10 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>SFSafariWebExtensionConverterVersion</key>
6
+ <string>16.1</string>
7
+ <key>ITSAppUsesNonExemptEncryption</key>
8
+ <false/>
9
+ </dict>
10
+ </plist>
@@ -0,0 +1,12 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>com.apple.security.app-sandbox</key>
6
+ <true/>
7
+ <key>com.apple.security.files.user-selected.read-only</key>
8
+ <true/>
9
+ <key>com.apple.security.network.client</key>
10
+ <true/>
11
+ </dict>
12
+ </plist>
@@ -0,0 +1,19 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
5
+ <meta http-equiv="Content-Security-Policy" content="default-src 'self'">
6
+
7
+ <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
8
+
9
+ <link rel="stylesheet" href="../Style.css">
10
+ <script src="../Script.js" defer></script>
11
+ </head>
12
+ <body>
13
+ <img src="../Icon.png" width="128" height="128" alt="Passbolt-Safari-Extension Icon">
14
+ <p class="state-unknown">You can turn on Passbolt-Safari-Extension’s extension in Safari Extensions preferences.</p>
15
+ <p class="state-on">Passbolt-Safari-Extension’s extension is currently on. You can turn it off in Safari Extensions preferences.</p>
16
+ <p class="state-off">Passbolt-Safari-Extension’s extension is currently off. You can turn it on in Safari Extensions preferences.</p>
17
+ <button class="open-preferences">Quit and Open Safari Extensions Preferences…</button>
18
+ </body>
19
+ </html>
@@ -0,0 +1,22 @@
1
+ function show(enabled, useSettingsInsteadOfPreferences) {
2
+ if (useSettingsInsteadOfPreferences) {
3
+ document.getElementsByClassName('state-on')[0].innerText = "Passbolt-Safari-Extension’s extension is currently on. You can turn it off in the Extensions section of Safari Settings.";
4
+ document.getElementsByClassName('state-off')[0].innerText = "Passbolt-Safari-Extension’s extension is currently off. You can turn it on in the Extensions section of Safari Settings.";
5
+ document.getElementsByClassName('state-unknown')[0].innerText = "You can turn on Passbolt-Safari-Extension’s extension in the Extensions section of Safari Settings.";
6
+ document.getElementsByClassName('open-preferences')[0].innerText = "Quit and Open Safari Settings…";
7
+ }
8
+
9
+ if (typeof enabled === "boolean") {
10
+ document.body.classList.toggle(`state-on`, enabled);
11
+ document.body.classList.toggle(`state-off`, !enabled);
12
+ } else {
13
+ document.body.classList.remove(`state-on`);
14
+ document.body.classList.remove(`state-off`);
15
+ }
16
+ }
17
+
18
+ function openPreferences() {
19
+ webkit.messageHandlers.controller.postMessage("open-preferences");
20
+ }
21
+
22
+ document.querySelector("button.open-preferences").addEventListener("click", openPreferences);
@@ -0,0 +1,45 @@
1
+ * {
2
+ -webkit-user-select: none;
3
+ -webkit-user-drag: none;
4
+ cursor: default;
5
+ }
6
+
7
+ :root {
8
+ color-scheme: light dark;
9
+
10
+ --spacing: 20px;
11
+ }
12
+
13
+ html {
14
+ height: 100%;
15
+ }
16
+
17
+ body {
18
+ display: flex;
19
+ align-items: center;
20
+ justify-content: center;
21
+ flex-direction: column;
22
+
23
+ gap: var(--spacing);
24
+ margin: 0 calc(var(--spacing) * 2);
25
+ height: 100%;
26
+
27
+ font: -apple-system-short-body;
28
+ text-align: center;
29
+ }
30
+
31
+ body:not(.state-on, .state-off) :is(.state-on, .state-off) {
32
+ display: none;
33
+ }
34
+
35
+ body.state-on :is(.state-off, .state-unknown) {
36
+ display: none;
37
+ }
38
+
39
+ body.state-off :is(.state-on, .state-unknown) {
40
+ display: none;
41
+ }
42
+
43
+ button {
44
+ font-size: 1em;
45
+ }
@@ -0,0 +1,73 @@
1
+ //
2
+ // Passbolt - Open source password manager for teams
3
+ // Copyright (c) Passbolt SA
4
+ //
5
+ // This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General
6
+ // Public License (AGPL) as published by the Free Software Foundation version 3.
7
+ //
8
+ // The name "Passbolt" is a registered trademark of Passbolt SA, and Passbolt SA hereby declines to grant a trademark
9
+ // license to "Passbolt" pursuant to the GNU Affero General Public License version 3 Section 7(e), without a separate
10
+ // agreement with Passbolt SA.
11
+ //
12
+ // This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
13
+ // warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See GNU Affero General Public License for more details.
14
+ //
15
+ // You should have received a copy of the GNU Affero General Public License along with this program. If not,
16
+ // see GNU Affero General Public License v3 (http://www.gnu.org/licenses/agpl-3.0.html).
17
+ //
18
+ // @copyright Copyright (c) Passbolt SA (https://www.passbolt.com)
19
+ // @license https://opensource.org/licenses/AGPL-3.0 AGPL License
20
+ // @link https://www.passbolt.com Passbolt (tm)
21
+ // @since v1.0
22
+ //
23
+
24
+ import Cocoa
25
+ import SafariServices
26
+ import WebKit
27
+
28
+ let extensionBundleIdentifier = "com.passbolt.safari.Extension"
29
+
30
+ class ViewController: NSViewController, WKNavigationDelegate, WKScriptMessageHandler {
31
+
32
+ @IBOutlet var webView: WKWebView!
33
+
34
+ override func viewDidLoad() {
35
+ super.viewDidLoad()
36
+
37
+ self.webView.navigationDelegate = self
38
+
39
+ self.webView.configuration.userContentController.add(self, name: "controller")
40
+
41
+ self.webView.loadFileURL(Bundle.main.url(forResource: "Main", withExtension: "html")!, allowingReadAccessTo: Bundle.main.resourceURL!)
42
+ }
43
+
44
+ func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
45
+ SFSafariExtensionManager.getStateOfSafariExtension(withIdentifier: extensionBundleIdentifier) { (state, error) in
46
+ guard let state = state, error == nil else {
47
+ // Insert code to inform the user that something went wrong.
48
+ return
49
+ }
50
+
51
+ DispatchQueue.main.async {
52
+ if #available(macOS 13, *) {
53
+ webView.evaluateJavaScript("show(\(state.isEnabled), true)")
54
+ } else {
55
+ webView.evaluateJavaScript("show(\(state.isEnabled), false)")
56
+ }
57
+ }
58
+ }
59
+ }
60
+
61
+ func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
62
+ guard let body = message.body as? String, body == "open-preferences" else {
63
+ return
64
+ }
65
+
66
+ SFSafariApplication.showPreferencesForExtension(withIdentifier: extensionBundleIdentifier) { error in
67
+ DispatchQueue.main.async {
68
+ NSApplication.shared.terminate(nil)
69
+ }
70
+ }
71
+ }
72
+
73
+ }
@@ -0,0 +1,20 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>ITSAppUsesNonExemptEncryption</key>
6
+ <false/>
7
+ <key>NSAppTransportSecurity</key>
8
+ <dict>
9
+ <key>NSAllowsArbitraryLoads</key>
10
+ <true/>
11
+ </dict>
12
+ <key>NSExtension</key>
13
+ <dict>
14
+ <key>NSExtensionPointIdentifier</key>
15
+ <string>com.apple.Safari.web-extension</string>
16
+ <key>NSExtensionPrincipalClass</key>
17
+ <string>$(PRODUCT_MODULE_NAME).SafariWebExtensionHandler</string>
18
+ </dict>
19
+ </dict>
20
+ </plist>
@@ -0,0 +1,12 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>com.apple.security.app-sandbox</key>
6
+ <true/>
7
+ <key>com.apple.security.files.downloads.read-write</key>
8
+ <true/>
9
+ <key>com.apple.security.files.user-selected.read-only</key>
10
+ <true/>
11
+ </dict>
12
+ </plist>