Bitwarden 贡献文档
⮐ Bitwarden Contributing Documentation我的博客联系我
  • 关于
  • 入门
    • 概述
    • 工具
    • 服务器
      • 设置指南
      • 高级服务器设置
      • 数据库
        • MSSQL
        • 实体框架
      • 事件日志
      • Ingress 隧道
      • SCIM
      • 自托管指南
      • 系统管理门户
      • 单点登录 (SSO)
        • 本地 IdP
        • Okta
      • 故障排除
      • 用户机密
      • 公共 API
    • 网页客户端
      • 网页密码库
        • WebAuthn
      • 浏览器端
        • 生物识别解锁
        • Firefox 隐私模式
      • 桌面端
        • Mac App Store Dev
        • Microsoft Store
        • Native Messaging Test Runner
        • 更新测试
      • CLI
      • 故障排除
    • 移动端
      • Android
        • F-Droid
      • iOS
      • .NET MAUI (legacy)
        • Android
        • iOS
        • watchOS
    • SDK
      • 内部 SDK
      • Secrets Manager
        • Integrations
          • Kubernetes
    • 业务 App
      • 目录连接器
        • JumpCloud
        • OpenLDAP Docker 服务器
      • Key Connector
      • Splunk App
  • 贡献
    • 贡献
    • 代码样式
      • =Android & Kotlin
      • Angular & TypeScript
      • C#
      • =Rust
      • T-SQL
      • =Swift
      • Tailwind
    • 数据库迁移
      • 进化数据库设计
    • 提交签名
    • 拉取请求
      • =贡献审查程序
      • 分支
      • 代码审查
      • UI 审查 - Chromatic
    • 无障碍
    • 依赖管理
    • 功能标记
    • 模板存储库
    • 测试
      • =数据库集成测试
      • 负载测试
      • 单元测试
        • 命名约定
        • 测试结构
    • 修改用户机密
  • 架构
    • 架构
    • 架构决策记录 (ADR)
      • 0001 - Angular Reactive Forms
      • 0002 - Public API for modules
      • 0003 - Adopt Observable Data Services for Angular
      • 0004 - Refactor State Service
      • 0005 - Refactor Api Service
      • 0006 - Clients: Use Jest Mocks
      • 0007 - Manifest V3 sync Observables
      • 0008 - Server: Adopt CQRS
      • 0009 - Composition over inheritance
      • 0010 - Angular Modules
      • 0011 - Scalable Angular Clients folder structure
      • 0012 - Angular Filename convention
      • 0013 - Avoid layered folder structure for request/response models
      • 0014 - Adopt Typescript Strict flag
      • 0015 - Short Lived Browser Services
      • 0016 - Move Decryption and Encryption to Views
      • 0017 - Use Swift to build watchOS app
      • 0018 - Feature management
      • 0019 - Adoption of Web Push
      • 0020 - Observability with OpenTelemetry
      • 0021 - Logging to Standard Output
      • =0022 - Authorization
      • =0023 - Identifying Integrated Clients
    • 移动客户端架构
      • =Android
      • =iOS
        • =推送通知故障排除提示
      • =.NET MAUI (legacy)
        • =概述
        • watchOS
    • =SDK 架构
      • =数据模型
      • =依赖
      • Password Manager
        • Web
          • =互操作性
      • =Secrets Manager
      • =服务器绑定
      • =版本控制和破坏性更改
    • 网络客户端架构
      • 概述
      • 数据模型
      • 表示层
        • Angular
        • CLI
      • =依赖注入
      • 服务层
        • Vision
        • 实现
    • 服务器架构
    • 深度剖析
      • 身份验证
        • 双重身份验证
      • =授权
      • =浏览器自动填充
        • 收集页面详细信息
        • 生成并执行填充脚本
        • 表单提交检测
        • Shadow DOM
        • =内联自动填充菜单
      • Captcha
      • =只读数据库副本
      • 事件日志
      • =FIDO2 和通行密钥
        • =凭据
        • =操作
        • =命名惯例
        • =实现
          • =提供程序
            • =浏览器扩展
          • =依赖方
            • =用于解密的通行密钥
        • =术语表
      • 推送通知
        • 移动端推送通知
        • 其他客户端推送通知
      • =SSH 密钥和代理
        • =SSH 代理
      • =状态提供程序框架
        • =派生状态
    • =安全
      • =定义
      • =原则
        • =P01 - 锁定的密码库是安全的
        • =P02 - 半受损设备密码库的有限安全性
        • =P03 - 完全损坏的系统没有安全性
        • =P04 - 控制密码库数据的访问权限
        • =P05 - 将安全漏洞的影响降至最低
      • =要求
由 GitBook 提供支持
在本页
  • 入门
  • 架构和结构
  • 命令
  • IPCService
  • NativeMessageService
  • 其他
  • 故障排除
  1. 入门
  2. 网页客户端
  3. 桌面端

Native Messaging Test Runner

上一页Microsoft Store下一页更新测试

最后更新于1年前

对应的

Native Messaging Test Runner 是一个 Node 应用程序,用于测试桌面端中的 Native Messaging 功能,特别是从 DuckDuckGo 浏览器接收到的命令。它使用进程间通信 (IPC) 与桌面应用程序进行通信。它的创建是为了支持对本机消息传递本身进行开发,并使 QA 能够测试这些命令。它被放置于 bitwarden/clients 存储库中桌面应用程序的根目录的。

入门

1、克隆 存储库

2、按照说明在本地运行桌面应用程序

3、在正在运行的桌面应用程序中,转到 Preferences 然后打开 Allow DuckDuckGo browser integration 设置:

4、在另一个终端中,导航到 apps/desktop/native-messaging-test-runner

5、运行 npm ci

6、选择一个命令然后运行它!一个好的开始是 status。完整的命令列表可以在本文档的 Commands 部分中看到。有的命令带有参数,例如 create。运行这些命令时,通过在所有参数前加上两个破折号的方式传递参数:npm run create -- --name NewLogin!。注意,您需要在每个命令之前接受桌面应用程序中的提示。这肯定是一个需要改进的地方。

这些命令针对您本地正在运行的桌面实例以及您在那里拥有的任何帐户运行的。您需要预先设置您的帐户和密码库,以正确测试这些命令。

架构和结构

命令

命令文件夹包含可运行的节点脚本/命令。当前,每个本机消息传递命令都有一个文件用于测试。

  1. handshake 发送 bw-handshake 命令并与桌面应用程序中的本机消息服务建立通信

    • 参数:无

    • 示例用法:npm run handshake

  2. status 发送 bw-status 命令并返回桌面应用程序中配置的帐户数组。

    • 参数:无

    • 示例用法:npm run status

  3. create 发送 bw-credential-create 命令并使用提供的名称和其他字段的测试数据创建新的登录

    • 参数:--name

    • 示例用法:npm run create -- --name NewLoginFromTestRunner

  4. update 发送 bw-credential-update 命令并使用提供的字段更新凭证

    • 参数:--name,--username,--password,--uri,--credentialId

    • 示例用法:npm run update -- --name UpdateLoginFromTestRunner --username rmaccallum --password dolphin123 --uri google.com --credentialId 8fdd5921-4b10-4c47-9f92-af2b0106d63a

  5. retrieve 发送 bw-credential-retrieval 命令并返回与提供的 uri 匹配的凭据列表

    • 参数:--uri

    • 示例用法:npm run retrieve -- --uri google.com

  6. generate 发送 bw-generate-password 命令并使用传递给它的 userId 的设置返回密码/密码短语

    • 参数:--userId

    • 示例用法:npm run generate -- --userId fe2af956-a6a6-468c-bc8c-ae6600e48bdd

IPCService

该服务管理与套接字的连接以及在该套接字上的消息发送和消息接收。

NativeMessageService

该服务使用 IPCService 连接到本地运行的 Bitwarden 桌面应用程序的 IPC 代理服务。它使用 Bitwarden 的加密服务和功能来处理消息的加密和解密。它使用位于 /native-messaging-test-runner/src/variables.ts 文件中的测试公钥/私钥对。

其他

我以为 Node 使用了 JavaScript?我们如何使用 TypeScript 类,包括来自 libs 的类?

好问题!用一点魔法✨我们将这些 TypeSript 文件编译成 Node 熟悉和喜爱的 JavaScript。它通过以下几个机制来完成:

  • tsconfig.json:在该文件的 paths 节点中,将提供的 paths 中的文件编译成纯 JavaScript,然后放在 dist 文件夹中。

  • package.json:安装了 module_alias,它允许我们将 TypeScript 文件中使用的任何服务映射到它们编译的 JavaScript 等价物。在任何命令文件中直接使用的文件的路径被定义在 package.json 的 "_moduleAliases" 节点中。

Deferred

覆盖 JavaScript Promise 接口的 resolve 和 reject 方法的默认实现的类,以允许我们等待对通过 IPC 发送的消息的响应。

logUtils

在整个应用程序中为 console.log() 添加漂亮的颜色格式的 Utils 类。

race

IPCService 在创建允许在等待消息时使用超时的承诺时使用的实用程序。我们不能保证我们会从桌面应用程序中获得响应,因此如果没有及时收到响应,我们可以优雅地取消。

故障排除

  • 如果您在测试运行程序使用的服务或编辑命令时看到意外行为,请删除 native-messaging-test-runner 顶层的 dist 文件夹并重新运行该命令。

  • 在运行命令时,如果您正在添加/编辑命令文件时收到 MODULE_NOT_FOUND 错误,请确保您已在你的命令文件中 import "module-alias/register";。这会将已编译的 JavaScript 类映射到 Typescript 文件中使用的类。

官方页面地址
此处
bitwarden/clients
这些