Private Relay 提供生成的电子邮件地址来代替个人电子邮件地址。
收件人仍然会收到电子邮件,但 Private Relay 会防止他们的个人电子邮件地址被收集,然后被购买、出售、交易或与其他数据结合起来以个人识别、跟踪和/或定位他们。
请参阅我们的代码风格、命名约定和其他方法的编码标准。
sudo apt install postgresql libpq-dev python3-dev
brew install postgresql libpq
sudo dnf install libpq-devel python3-devel
克隆并更改到目录:
git clone --recurse-submodules https://github.com/mozilla/fx-private-relay.git
cd fx-private-relay
创建并激活虚拟环境:
基于 Unix 的系统:
virtualenv env
source env/bin/activate
视窗:
python -m venv env
source env/Scripts/activate
如果您不在 Windows 上使用 Git Bash,请键入.envScriptsactivate
,而不是键入source env/Scripts/activate
。
注意:如果您在 Windows 上运行并收到一条错误消息,指出计算机上已禁用执行脚本,请进入 Windows powershell 并键入Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted
,然后重试。
安装 Python 和 Node 要求:
pip install -r requirements.txt
cd frontend
npm install
cd ../
注意:如果您在 Windows 上运行,则可能会遇到在 npm 脚本中使用环境变量的问题。您可以强制 npm 使用 git-bash: npm config set script-shell "C:\Program Files\Git\bin\bash.exe"
。这是默认位置,您的安装可能会有所不同。
复制.env
文件以进行decouple
配置:
cp .env-dist .env
将SECRET_KEY
值添加到.env
:
SECRET_KEY =secret-key-should-be-different-for-every-install
迁移数据库:
python manage.py migrate
创建超级用户:
python manage.py createsuperuser
运行后端:
python manage.py runserver
并在不同的终端中构建前端:
cd frontend
npm run watch
以下文档将帮助您开始开发,包括创建要翻译的新字符串。有关中继本地化的一般信息,请参阅翻译和本地化。
我们使用 git 子模块来翻译消息文件。安装的--recurse-submodules
步骤应该已经将消息文件带入您的工作目录中,但您可能还想在安装后更新翻译。最简单的方法是:
git submodule update --remote
要在运行git pull
或其他命令时自动更新子模块:
git config --global submodule.recurse true
privaterelay/locales
目录是一个与其他目录一样的 git 存储库,因此要更改消息:
工作时在privaterelay/locales/en
中进行所需的任何更改。
cd privaterelay/locales/en
git branch message-updates-yyyymmdd
git push -u origin message-updates-yyyymmdd
然后,您可以打开从message-updates-yyyymmdd
分支到 l10n 存储库main
分支的拉取请求。
如果您还没有准备好提交一些字符串进行翻译,您可以暂时将它们添加到frontend/pendingTranslations.ftl
。该文件中的字符串将一直显示,直到具有相同 ID 的字符串被添加到 l10n 存储库中。
同样,有一个可存储临时后端区域设置字符串的pending_locales/pending.ftl
。一旦 l10n 存储库中拉取请求中的字符串合并到 Relay 存储库中,需要从pending_locales/pending.ftl
中删除这些相应的字符串,以避免 CircleCI 测试失败。
要提交对应用程序翻译的更新(例如,在发布之前),我们需要提交此子模块更新。因此,如果更新的翻译已准备好提交到应用程序中,您可以像任何其他文件一样git add
子模块:
git add privaterelay/locales
然后,您可以提交并推送以将应用程序存储库设置为翻译子模块的更新版本:
git push
自动化流程每天更新子模块,引入本地化团队的任何新更改和翻译。
要在本地服务器上启用 Mozilla 帐户身份验证,您可以使用accounts.stage.mozaws.net 上的“Firefox Private Relay local dev”OAuth 应用程序。
为此:
在.env
文件中设置ADMIN_ENABLED=True
如果服务器正在运行,请关闭服务器,并使用以下命令添加管理表:
python manage.py migrate
现在使用/admin
端点运行服务器:
python manage.py runserver
转到 django 管理页面更改默认站点。
将example.com
更改为127.0.0.1:8000
,然后单击“保存”。
转到 django-allauth 社交应用程序管理页面,使用您在上面创建的超级用户帐户登录,然后为 Firefox 帐户添加社交应用程序:
场地 | 价值 |
---|---|
提供者 | Mozilla 帐户 |
姓名 | accounts.stage.mozaws.net |
客户编号 | 9ebfe2c2f9ea3c58 |
秘钥 | 从#fx-private-relay-eng Slack 频道请求此内容 |
站点 | 127.0.0.1:8000 -> 选择的站点 |
现在您可以使用 FxA 登录 http://127.0.0.1:8000/。
注意:该附加组件位于单独的存储库中。有关入门的更多信息,请参阅它。
该插件添加了 Firefox UI 以在网络上生成和自动填写电子邮件地址。在本地运行插件允许它与本地服务器( 127.0.0.1:8000
)而不是生产服务器( relay.firefox.com
)进行通信。
npm run watch
监视frontend/src
目录并在检测到更改时构建前端。然而,创建生产版本非常耗时,足以中断您的开发流程。因此,也可以在单独的服务器上运行前端,该服务器仅重新编译更改的模块,而不应用生产优化。为此,请运行npm run dev
,而不是npm run watch
。
前端现在可以在 http://localhost:3000 上使用。请记住,这确实会使您的本地开发环境与生产环境不太相似;特别是,身份验证通常绑定到后端服务器,因此在单独的服务器上运行前端时需要进行模拟。如果您进行与身份验证相关的任何更改,请确保也使用npm run watch
对其进行测试。
注意:任何电子邮件地址以mozilla.com
、 getpocket.com
或mozillafoundation.org
结尾的用户都会自动启用高级功能(请参阅emails/models.py
中的PREMIUM_DOMAINS
)。为了模仿客户的体验,建议遵循以下过程。
为了启用高级中继功能,我们与 FXA 订阅平台集成。在较高层面上,为了设置 Relay 高级订阅,我们:
如上所述启用 Mozilla 帐户身份验证。
在我们的 Stripe 仪表板中创建产品和价格。 (在 #subscription-platform Slack 频道中询问以访问我们的 Stripe 仪表板。)
将 Relay 的免费用户链接到适当的 SubPlat 购买流程。
检查用户的 FXA 配置文件 json 中的subscriptions
字段,看看他们是否可以访问仅限订阅的高级功能。
详细:
如上所述启用 Mozilla 帐户身份验证。
转到我们的 Stripe 仪表板。 (在 #subscription-platform Slack 频道中询问以访问我们的 Stripe 仪表板。)
在 Stripe 中创建新产品。
添加所有必需的product:
元数据。
product:
前缀。因此,例如, webIconURL
必须输入为product:webIconURL
。添加capabilities:
元数据。
capabilities:
,并且该值是一个自由格式的字符串,用于描述购买订阅为用户提供的“功能”。例如, capabilities:9ebfe2c2f9ea3c58
其值为premium-relay
。使用上述步骤中的值设置一些环境变量:
瓦尔 | 价值 |
---|---|
FXA_SUBSCRIPTIONS_URL | https://accounts.stage.mozaws.net/subscriptions |
PERIODICAL_PREMIUM_PROD_ID | prod_KEq0LXqs7vysQT (来自 Stripe) |
PREMIUM_PLAN_ID_US_MONTHLY | price_1LiMjeKb9q6OnNsLzwixHuRz (来自 Stripe) |
PREMIUM_PLAN_ID_US_YEARLY | price_1LiMlBKb9q6OnNsL7tvrtI7y (来自 Stripe) |
PHONE_PROD_ID | prod_LviM2I0paxH1DZ (来自 Stripe) |
PHONE_PLAN_ID_US_MONTHLY | price_1LDqw3Kb9q6OnNsL6XIDst28 (来自 Stripe) |
PHONE_PLAN_ID_US_YEARLY | price_1Lhd35Kb9q6OnNsL9bAxjUGq (来自 Stripe) |
BUNDLE_PROD_ID | prod_MQ9Zf1cyI81XS2 (来自 Stripe) |
BUNDLE_PLAN_ID_US | price_1Lwp7uKb9q6OnNsLQYzpzUs5 (来自 Stripe) |
SUBSCRIPTIONS_WITH_UNLIMITED | "premium-relay" (与您在 Stripe 中使用的capabilities 值匹配) |
SUBSCRIPTIONS_WITH_PHONE | "relay-phones" (与您在 Stripe 中使用的capabilities 值匹配) |
在frontend/
中,运行npm run build
时设置ANALYZE=true
以生成详细说明哪些模块占用了大部分包大小的报告。将为前端的客户端和服务器部分生成一份报告,但由于我们只使用客户端,因此我们实际上只对此感兴趣。报告将自动在您的浏览器中打开,也可以在/frontend/.next/analyze/
中找到。
ANALYZE=true npm run build
有一个用于购买高级继电器的综合测试用例文档。
您可以使用 Stripe 的测试信用卡详细信息进行付款。
华夫旗phones
进一步保护了手机的功能。在阶段中,您需要一个 SRE 来将标志添加到您的测试用户。在开发服务器上,开发人员可以添加该标志。
除了开发环境的要求外,生产环境还应该使用:
生产环境还应该设置一些额外的环境变量:
DATABASE_URL=postgresql://:@:/
DJANGO_SECURE_HSTS_SECONDS=15768000
DJANGO_SECURE_SSL_REDIRECT=True