clients icon indicating copy to clipboard operation
clients copied to clipboard

[PM-8280] email forwarders

Open audreyality opened this issue 1 year ago â€ĸ 2 comments

đŸŽŸī¸ Tracking

https://bitwarden.atlassian.net/browse/PM-8280

📔 Objective

Add forwarder support to credential generator

  • Extends the UserStateSubject with classifier & encryptor support
    • Move generalized rx helpers to common so they can be used by UserStateSubject
    • Introduce ObjectKey to support encryption to POJOs in state storage
  • Extend CredentialGeneratorService with forwarder integration support:
    • Introduce { forwarder: IntegrationId } algorithm Id to model service integration
    • Include forwarder integration metadata in algorithms lists
    • Introduce ForwarderEngine to invoke RPCs in response to generator requests.
    • Introduce AlgorithmInfo to model localized credential generation metadata.
  • Add forwarder list and generation features to v2 generator components

🏁 Remaining tasks

  • [x] Define forwarder subject keys
  • [x] Add encryptor injection to credential generator service
  • ~~Use import configuration for settings migration~~ split to PM-13733
  • [x] Implement forwarder settings component(s)
  • [x] Address TODOs
  • [x] Unit test "classified" format support in UserStateSubject

đŸĻ• System Evolution

Switching to { 'engine': EngineId } for built-in generators could improve cohesion throughout the generator system. It also eliminates confusion between the 'username' category and the { engine: 'username' } engineId.

Promote ObjectKey to a class. Several of the methods in UserStateSubject, particularly those used before classification, properly belong in ObjectKey. ObjectKey should also provide an optional serializer for parity with its deserializer.

📸 Screenshots

image image image image

đŸĻŽ Reviewer guidelines

  • 👍 (:+1:) or similar for great changes
  • 📝 (:memo:) or â„šī¸ (:information_source:) for notes or general info
  • ❓ (:question:) for questions
  • 🤔 (:thinking:) or 💭 (:thought_balloon:) for more open inquiry that's not quite a confirmed issue and could potentially benefit from discussion
  • 🎨 (:art:) for suggestions / improvements
  • ❌ (:x:) or âš ī¸ (:warning:) for more significant problems or concerns needing attention
  • 🌱 (:seedling:) or â™ģī¸ (:recycle:) for future improvements or indications of technical debt
  • ⛏ (:pick:) for minor or nitpick changes

audreyality avatar Oct 15 '24 18:10 audreyality

Codecov Report

Attention: Patch coverage is 70.49689% with 95 lines in your changes missing coverage. Please review.

Project coverage is 33.37%. Comparing base (c4fcd53) to head (f8310d7). Report is 3 commits behind head on main.

:white_check_mark: All tests successful. No failed tests found.

Files with missing lines Patch % Lines
libs/tools/generator/core/src/engine/forwarder.ts 16.66% 20 Missing :warning:
libs/common/src/tools/state/user-state-subject.ts 83.49% 12 Missing and 5 partials :warning:
libs/common/src/tools/public-classifier.ts 0.00% 12 Missing :warning:
libs/tools/generator/core/src/data/generators.ts 33.33% 10 Missing :warning:
libs/common/src/tools/state/object-key.ts 50.00% 4 Missing and 2 partials :warning:
...s/tools/generator/core/src/types/generator-type.ts 33.33% 6 Missing :warning:
.../core/src/services/credential-generator.service.ts 92.59% 4 Missing :warning:
...ols/send/send-ui/src/send-form/send-form.module.ts 0.00% 3 Missing :warning:
libs/common/src/tools/private-classifier.ts 85.71% 0 Missing and 2 partials :warning:
libs/tools/generator/core/src/data/integrations.ts 66.66% 1 Missing and 1 partial :warning:
... and 7 more
Additional details and impacted files
@@            Coverage Diff             @@
##             main   #11563      +/-   ##
==========================================
+ Coverage   33.30%   33.37%   +0.07%     
==========================================
  Files        2788     2794       +6     
  Lines       86639    86852     +213     
  Branches    16527    16560      +33     
==========================================
+ Hits        28852    28985     +133     
- Misses      55484    55554      +70     
- Partials     2303     2313      +10     

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

codecov[bot] avatar Oct 15 '24 18:10 codecov[bot]

Logo Checkmarx One – Scan Summary & Details – b80aa2d6-0fc9-4c8d-85ba-8bdfcd9136ca

New Issues

Severity Issue Source File / Package Checkmarx Insight
MEDIUM Client_Privacy_Violation /apps/browser/src/vault/popup/components/vault/add-edit.component.ts: 69 Attack Vector
MEDIUM Client_Privacy_Violation /apps/browser/src/vault/popup/components/vault-v2/vault-list-items-container/vault-list-items-container.component.html: 14 Attack Vector

Fixed Issues

Severity Issue Source File / Package
MEDIUM Client_Privacy_Violation /apps/browser/src/vault/popup/components/vault-v2/vault-list-items-container/vault-list-items-container.component.html: 15
MEDIUM Client_Privacy_Violation /apps/browser/src/autofill/popup/settings/autofill-v1.component.ts: 101
MEDIUM Client_Privacy_Violation /apps/desktop/src/vault/app/vault/view.component.html: 212
MEDIUM Client_Privacy_Violation /apps/desktop/src/vault/app/vault/view.component.html: 209
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.html: 3
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 76
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 76
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 76
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 76
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 76
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 76
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 76
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 76
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 76
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 101
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/components/vault-items/vault-cipher-row.component.html: 31
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/components/vault-items/vault-cipher-row.component.html: 53
MEDIUM Client_Privacy_Violation /apps/browser/src/autofill/popup/settings/autofill-v1.component.ts: 101
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 101
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 101
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 101
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 101
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 101
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 101
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 101
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 101
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 101
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 101
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 101
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 101
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 101
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 101
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 101
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 101
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 101
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 101
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 101
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 101
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 101
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 101
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 101
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 101
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 101
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 101
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 101
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 101
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 101
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 101
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 101
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 101
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 101
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 101
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 76
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 76
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 76
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 76
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 76
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 76
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 76
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 76
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 76
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 76
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 76
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 76
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 76
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 76
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 76
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 76
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 76
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 76
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 76
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 76
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 76
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 76
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 76
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 76
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 76
MEDIUM Client_Privacy_Violation /apps/web/src/app/vault/individual-vault/view.component.ts: 76
MEDIUM Client_Privacy_Violation /libs/tools/generator/components/src/username-generator.component.html: 3

github-actions[bot] avatar Oct 15 '24 18:10 github-actions[bot]