diff --git a/src/controllers/krate/snapshots/crates_io__controllers__krate__delete__tests__happy_path_new_crate-3.snap b/src/controllers/krate/snapshots/crates_io__controllers__krate__delete__tests__happy_path_new_crate-3.snap index 6cada063152..1b1443d59e8 100644 --- a/src/controllers/krate/snapshots/crates_io__controllers__krate__delete__tests__happy_path_new_crate-3.snap +++ b/src/controllers/krate/snapshots/crates_io__controllers__krate__delete__tests__happy_path_new_crate-3.snap @@ -8,11 +8,15 @@ Subject: crates.io: Successfully published foo@1.0.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable + Hello foo! A new version of the package foo (1.0.0) was published by your account (https://crates.io/users/foo) at [0000-00-00T00:00:00Z]. If you have questions or security concerns, you can contact us at help@crates.io. If you would like to stop receiving these security notifications, you can disable them in your account settings. + +-- +The crates.io Team ---------------------------------------- To: foo@example.com @@ -21,8 +25,12 @@ Subject: crates.io: Deleted "foo" crate Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable + Hi foo, Your "foo" crate has been deleted, per your request. If you did not initiate this deletion, your account may have been compromised. Please contact us at help@crates.io. + +-- +The crates.io Team diff --git a/src/controllers/krate/snapshots/crates_io__controllers__krate__delete__tests__happy_path_old_crate-3.snap b/src/controllers/krate/snapshots/crates_io__controllers__krate__delete__tests__happy_path_old_crate-3.snap index 6cada063152..1b1443d59e8 100644 --- a/src/controllers/krate/snapshots/crates_io__controllers__krate__delete__tests__happy_path_old_crate-3.snap +++ b/src/controllers/krate/snapshots/crates_io__controllers__krate__delete__tests__happy_path_old_crate-3.snap @@ -8,11 +8,15 @@ Subject: crates.io: Successfully published foo@1.0.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable + Hello foo! A new version of the package foo (1.0.0) was published by your account (https://crates.io/users/foo) at [0000-00-00T00:00:00Z]. If you have questions or security concerns, you can contact us at help@crates.io. If you would like to stop receiving these security notifications, you can disable them in your account settings. + +-- +The crates.io Team ---------------------------------------- To: foo@example.com @@ -21,8 +25,12 @@ Subject: crates.io: Deleted "foo" crate Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable + Hi foo, Your "foo" crate has been deleted, per your request. If you did not initiate this deletion, your account may have been compromised. Please contact us at help@crates.io. + +-- +The crates.io Team diff --git a/src/controllers/krate/snapshots/crates_io__controllers__krate__delete__tests__happy_path_really_old_crate-3.snap b/src/controllers/krate/snapshots/crates_io__controllers__krate__delete__tests__happy_path_really_old_crate-3.snap index 6cada063152..1b1443d59e8 100644 --- a/src/controllers/krate/snapshots/crates_io__controllers__krate__delete__tests__happy_path_really_old_crate-3.snap +++ b/src/controllers/krate/snapshots/crates_io__controllers__krate__delete__tests__happy_path_really_old_crate-3.snap @@ -8,11 +8,15 @@ Subject: crates.io: Successfully published foo@1.0.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable + Hello foo! A new version of the package foo (1.0.0) was published by your account (https://crates.io/users/foo) at [0000-00-00T00:00:00Z]. If you have questions or security concerns, you can contact us at help@crates.io. If you would like to stop receiving these security notifications, you can disable them in your account settings. + +-- +The crates.io Team ---------------------------------------- To: foo@example.com @@ -21,8 +25,12 @@ Subject: crates.io: Deleted "foo" crate Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable + Hi foo, Your "foo" crate has been deleted, per your request. If you did not initiate this deletion, your account may have been compromised. Please contact us at help@crates.io. + +-- +The crates.io Team diff --git a/src/controllers/trustpub/github_configs/create/snapshots/crates_io__controllers__trustpub__github_configs__create__tests__happy_path-3.snap b/src/controllers/trustpub/github_configs/create/snapshots/crates_io__controllers__trustpub__github_configs__create__tests__happy_path-3.snap index dadd5bc2434..fa30fc4759b 100644 --- a/src/controllers/trustpub/github_configs/create/snapshots/crates_io__controllers__trustpub__github_configs__create__tests__happy_path-3.snap +++ b/src/controllers/trustpub/github_configs/create/snapshots/crates_io__controllers__trustpub__github_configs__create__tests__happy_path-3.snap @@ -8,9 +8,10 @@ Subject: crates.io: Trusted Publishing configuration added to foo Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable + Hello foo! -crates.io user foo added a new "Trusted Publishing" configuration for GitHub Actions to a crate that you manage (foo). Trusted publishers act as trusted users and can publish new versions of the crate automatically. +crates.io user foo added a new "Trusted Publishing" configuration for GitHub Actions to a crate that you manage ("foo"). Trusted publishers act as trusted users and can publish new versions of the crate automatically. Trusted Publishing configuration: @@ -21,4 +22,7 @@ Trusted Publishing configuration: If you did not make this change and you think it was made maliciously, you can remove the configuration from the crate via the "Settings" tab on the crate's page. -If you are unable to revert the change and need to do so, you can email help@crates.io to communicate with the crates.io support team. +If you are unable to revert the change and need to do so, you can email help@crates.io for assistance. + +-- +The crates.io Team diff --git a/src/controllers/trustpub/github_configs/delete/snapshots/crates_io__controllers__trustpub__github_configs__delete__tests__happy_path-2.snap b/src/controllers/trustpub/github_configs/delete/snapshots/crates_io__controllers__trustpub__github_configs__delete__tests__happy_path-2.snap index 8f5b1e18aae..22ebee4aecd 100644 --- a/src/controllers/trustpub/github_configs/delete/snapshots/crates_io__controllers__trustpub__github_configs__delete__tests__happy_path-2.snap +++ b/src/controllers/trustpub/github_configs/delete/snapshots/crates_io__controllers__trustpub__github_configs__delete__tests__happy_path-2.snap @@ -8,9 +8,10 @@ Subject: crates.io: Trusted Publishing configuration removed from foo Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable + Hello foo! -crates.io user foo removed a "Trusted Publishing" configuration for GitHub Actions from a crate that you manage (foo). +crates.io user foo removed a "Trusted Publishing" configuration for GitHub Actions from a crate that you manage ("foo"). Trusted Publishing configuration: @@ -19,4 +20,7 @@ Trusted Publishing configuration: - Workflow filename: publish.yml - Environment: (not set) -If you did not make this change and you think it was made maliciously, you can email help@crates.io to communicate with the crates.io support team. +If you did not make this change and you think it was made maliciously, you can email help@crates.io for assistance. + +-- +The crates.io Team diff --git a/src/controllers/user/snapshots/crates_io__controllers__user__email_verification__tests__happy_path-3.snap b/src/controllers/user/snapshots/crates_io__controllers__user__email_verification__tests__happy_path-3.snap index 92add204a00..4c337f7743c 100644 --- a/src/controllers/user/snapshots/crates_io__controllers__user__email_verification__tests__happy_path-3.snap +++ b/src/controllers/user/snapshots/crates_io__controllers__user__email_verification__tests__happy_path-3.snap @@ -6,9 +6,16 @@ To: foo@example.com From: crates.io Subject: crates.io: Please confirm your email address Content-Type: text/plain; charset=utf-8 -Content-Transfer-Encoding: 7bit +Content-Transfer-Encoding: quoted-printable -Hello foo! Welcome to crates.io. Please click the -link below to verify your email address. Thank you! + +Hello foo! + +Welcome to crates.io. Please click the link below to verify your email address: https://crates.io/confirm/[confirm-token] + +Thank you! + +-- +The crates.io Team diff --git a/src/email.rs b/src/email.rs index 2545c0955ea..717a8c32371 100644 --- a/src/email.rs +++ b/src/email.rs @@ -16,24 +16,40 @@ use std::sync::LazyLock; static EMAIL_ENV: LazyLock> = LazyLock::new(|| { let mut env = Environment::new(); - // Load templates from each email directory + // Load templates from the templates directory let entries = std::fs::read_dir("src/email/templates"); let entries = entries.expect("Failed to read email templates directory"); for entry in entries { let entry = entry.expect("Failed to read directory entry"); + let path = entry.path(); let file_type = entry.file_type().expect("Failed to get file type"); + + // Handle base template files + if file_type.is_file() && path.extension().and_then(|s| s.to_str()) == Some("j2") { + let template_name = entry.file_name(); + let template_name = template_name.to_str(); + let template_name = template_name.expect("Invalid UTF-8 in template filename"); + + let template_contents = std::fs::read_to_string(&path) + .unwrap_or_else(|error| panic!("Failed to read template {template_name}: {error}")); + + env.add_template_owned(template_name.to_string(), template_contents) + .expect("Failed to add template"); + } + if !file_type.is_dir() { continue; } + // Handle email template directories let dir_name = entry.file_name(); let email_name = dir_name.to_str(); let email_name = email_name.expect("Invalid UTF-8 in email template directory name"); // Load subject.txt.j2 file - let subject_path = entry.path().join("subject.txt.j2"); + let subject_path = path.join("subject.txt.j2"); let subject_contents = std::fs::read_to_string(&subject_path).unwrap_or_else(|error| { panic!("Failed to read subject template for {email_name}: {error}") }); @@ -42,7 +58,7 @@ static EMAIL_ENV: LazyLock> = LazyLock::new(|| { .expect("Failed to add subject template"); // Load body.txt.j2 file - let body_path = entry.path().join("body.txt.j2"); + let body_path = path.join("body.txt.j2"); let body_contents = std::fs::read_to_string(&body_path).unwrap_or_else(|error| { panic!("Failed to read body template for {email_name}: {error}") }); @@ -234,6 +250,35 @@ pub struct StoredEmail { mod tests { use super::*; use claims::{assert_err, assert_ok}; + use minijinja::context; + + #[test] + fn test_user_confirm_template_inheritance() { + // Test that the `user_confirm` template inherits properly from the base template + let result = render_template( + "user_confirm/body.txt.j2", + context! { + domain => "crates.io", + user_name => "testuser", + token => "abc123" + }, + ); + assert_ok!(&result); + + let content = result.unwrap(); + insta::assert_snapshot!(content, @r" + Hello testuser! + + Welcome to crates.io. Please click the link below to verify your email address: + + https://crates.io/confirm/abc123 + + Thank you! + + -- + The crates.io Team + "); + } #[tokio::test] async fn sending_to_invalid_email_fails() { diff --git a/src/email/templates/admin_account/body.txt.j2 b/src/email/templates/admin_account/body.txt.j2 index e54a230c8c5..b15be0cf23c 100644 --- a/src/email/templates/admin_account/body.txt.j2 +++ b/src/email/templates/admin_account/body.txt.j2 @@ -1,3 +1,6 @@ +{% extends "base.txt.j2" %} + +{% block content %} {% if added_admins -%} Granted admin access: @@ -10,4 +13,5 @@ Revoked admin access: {% for admin in removed_admins -%} - {{ admin }} {% endfor -%} -{% endif %} \ No newline at end of file +{% endif %} +{% endblock %} diff --git a/src/email/templates/base.txt.j2 b/src/email/templates/base.txt.j2 new file mode 100644 index 00000000000..c47064b1cba --- /dev/null +++ b/src/email/templates/base.txt.j2 @@ -0,0 +1,3 @@ +{% block content %}{% endblock %} +-- +The crates.io Team diff --git a/src/email/templates/config_created/body.txt.j2 b/src/email/templates/config_created/body.txt.j2 index 20be3dbd452..372a71affdc 100644 --- a/src/email/templates/config_created/body.txt.j2 +++ b/src/email/templates/config_created/body.txt.j2 @@ -1,6 +1,9 @@ +{% extends "base.txt.j2" %} + +{% block content %} Hello {{ recipient }}! -crates.io user {{ user }} added a new "Trusted Publishing" configuration for GitHub Actions to a crate that you manage ({{ krate }}). Trusted publishers act as trusted users and can publish new versions of the crate automatically. +crates.io user {{ user }} added a new "Trusted Publishing" configuration for GitHub Actions to a crate that you manage ("{{ krate }}"). Trusted publishers act as trusted users and can publish new versions of the crate automatically. Trusted Publishing configuration: @@ -11,4 +14,5 @@ Trusted Publishing configuration: If you did not make this change and you think it was made maliciously, you can remove the configuration from the crate via the "Settings" tab on the crate's page. -If you are unable to revert the change and need to do so, you can email help@crates.io to communicate with the crates.io support team. +If you are unable to revert the change and need to do so, you can email help@crates.io for assistance. +{% endblock %} diff --git a/src/email/templates/config_deleted/body.txt.j2 b/src/email/templates/config_deleted/body.txt.j2 index 61beaee55df..4857d0e9e39 100644 --- a/src/email/templates/config_deleted/body.txt.j2 +++ b/src/email/templates/config_deleted/body.txt.j2 @@ -1,6 +1,9 @@ +{% extends "base.txt.j2" %} + +{% block content %} Hello {{ recipient }}! -crates.io user {{ user }} removed a "Trusted Publishing" configuration for GitHub Actions from a crate that you manage ({{ krate }}). +crates.io user {{ user }} removed a "Trusted Publishing" configuration for GitHub Actions from a crate that you manage ("{{ krate }}"). Trusted Publishing configuration: @@ -9,4 +12,5 @@ Trusted Publishing configuration: - Workflow filename: {{ workflow_filename }} - Environment: {{ environment or "(not set)" }} -If you did not make this change and you think it was made maliciously, you can email help@crates.io to communicate with the crates.io support team. +If you did not make this change and you think it was made maliciously, you can email help@crates.io for assistance. +{% endblock %} diff --git a/src/email/templates/crate_deletion/body.txt.j2 b/src/email/templates/crate_deletion/body.txt.j2 index 674a874890d..530795386c7 100644 --- a/src/email/templates/crate_deletion/body.txt.j2 +++ b/src/email/templates/crate_deletion/body.txt.j2 @@ -1,5 +1,9 @@ +{% extends "base.txt.j2" %} + +{% block content %} Hi {{ user }}, Your "{{ krate }}" crate has been deleted, per your request. -If you did not initiate this deletion, your account may have been compromised. Please contact us at help@crates.io. \ No newline at end of file +If you did not initiate this deletion, your account may have been compromised. Please contact us at help@crates.io. +{% endblock %} diff --git a/src/email/templates/expiry_notification/body.txt.j2 b/src/email/templates/expiry_notification/body.txt.j2 index 0391952e7a1..287fc14392a 100644 --- a/src/email/templates/expiry_notification/body.txt.j2 +++ b/src/email/templates/expiry_notification/body.txt.j2 @@ -1,8 +1,9 @@ +{% extends "base.txt.j2" %} + +{% block content %} Hi {{ name }}, -We noticed your token "{{ token_name }}" will expire on {{ expiry_date }}. +We noticed that your token "{{ token_name }}" will expire on {{ expiry_date }}. If this token is still needed, visit https://crates.io/settings/tokens/new?from={{ token_id }} to generate a new one. - -Thanks, -The crates.io team \ No newline at end of file +{% endblock %} \ No newline at end of file diff --git a/src/email/templates/new_token/body.txt.j2 b/src/email/templates/new_token/body.txt.j2 index 19d0785f063..8aca9f7b7eb 100644 --- a/src/email/templates/new_token/body.txt.j2 +++ b/src/email/templates/new_token/body.txt.j2 @@ -1,5 +1,9 @@ +{% extends "base.txt.j2" %} + +{% block content %} Hello {{ user_name }}! A new API token with the name "{{ token_name }}" was recently added to your {{ domain }} account. -If this wasn't you, you should revoke the token immediately: https://{{ domain }}/settings/tokens \ No newline at end of file +If you did not create this token, you should revoke it immediately: https://{{ domain }}/settings/tokens. +{% endblock %} diff --git a/src/email/templates/owner_invite/body.txt.j2 b/src/email/templates/owner_invite/body.txt.j2 index 21c047ca37e..5e382ce6428 100644 --- a/src/email/templates/owner_invite/body.txt.j2 +++ b/src/email/templates/owner_invite/body.txt.j2 @@ -1,4 +1,9 @@ +{% extends "base.txt.j2" %} + +{% block content %} {{ inviter }} has invited you to become an owner of the crate {{ crate_name }}! -Visit https://{{ domain }}/accept-invite/{{ token }} to accept this invitation, -or go to https://{{ domain }}/me/pending-invites to manage all of your crate ownership invitations. \ No newline at end of file +Visit https://{{ domain }}/accept-invite/{{ token }} to accept this invitation. + +You can also go to https://{{ domain }}/me/pending-invites to manage all of your crate ownership invitations. +{% endblock %} diff --git a/src/email/templates/possible_typosquat/body.txt.j2 b/src/email/templates/possible_typosquat/body.txt.j2 index 20adc0160d3..a7b7c4540b4 100644 --- a/src/email/templates/possible_typosquat/body.txt.j2 +++ b/src/email/templates/possible_typosquat/body.txt.j2 @@ -1,3 +1,6 @@ +{% extends "base.txt.j2" %} + +{% block content %} New crate {{ crate_name }} may be typosquatting one or more other crates. Visit https://{{ domain }}/crates/{{ crate_name }} to see the offending crate. @@ -6,4 +9,5 @@ Specific squat checks that triggered: {% for squat in squats -%} - {{ squat.display }} (https://{{ domain }}/crates/{{ squat.package }}) -{% endfor %} \ No newline at end of file +{% endfor %} +{% endblock %} diff --git a/src/email/templates/publish_notification/body.txt.j2 b/src/email/templates/publish_notification/body.txt.j2 index 04d25e77151..d4c03031836 100644 --- a/src/email/templates/publish_notification/body.txt.j2 +++ b/src/email/templates/publish_notification/body.txt.j2 @@ -1,5 +1,9 @@ +{% extends "base.txt.j2" %} + +{% block content %} Hello {{ recipient }}! A new version of the package {{ krate }} ({{ version }}) was published{{ publisher_info }} at {{ publish_time }}. -If you have questions or security concerns, you can contact us at help@crates.io. If you would like to stop receiving these security notifications, you can disable them in your account settings. \ No newline at end of file +If you have questions or security concerns, you can contact us at help@crates.io. If you would like to stop receiving these security notifications, you can disable them in your account settings. +{% endblock %} diff --git a/src/email/templates/token_exposed/body.txt.j2 b/src/email/templates/token_exposed/body.txt.j2 index 3332c874ac5..5d17d57c904 100644 --- a/src/email/templates/token_exposed/body.txt.j2 +++ b/src/email/templates/token_exposed/body.txt.j2 @@ -1,3 +1,6 @@ +{% extends "base.txt.j2" %} + +{% block content %} {{ reporter }} has notified us that your crates.io API token {{ token_name }} has been exposed publicly. We have revoked this token as a precaution. Please review your account at https://{{ domain }} to confirm that no unexpected changes have been made to your settings or crates. @@ -7,5 +10,6 @@ Source type: {{ source }} {% if url -%} URL where the token was found: {{ url }} {%- else -%} -We were not informed of the URL where the token was found. +We were not provided with the URL where the token was found. {%- endif %} +{% endblock %} diff --git a/src/email/templates/trustpub_token_exposed/body.txt.j2 b/src/email/templates/trustpub_token_exposed/body.txt.j2 index b6c5178d5c1..e9d8b391044 100644 --- a/src/email/templates/trustpub_token_exposed/body.txt.j2 +++ b/src/email/templates/trustpub_token_exposed/body.txt.j2 @@ -1,3 +1,6 @@ +{% extends "base.txt.j2" %} + +{% block content %} {{ reporter }} has notified us that one of your crates.io Trusted Publishing tokens has been exposed publicly. We have revoked this token as a precaution. {% if crate_names | length == 1 -%} @@ -13,7 +16,8 @@ Source type: {{ source }} {% if url -%} URL where the token was found: {{ url }} {%- else -%} -We were not informed of the URL where the token was found. +We were not provided with the URL where the token was found. {%- endif %} -Trusted Publishing tokens are temporary and used for automated publishing from GitHub Actions. If this exposure was unexpected, please review your repository's workflow files and secrets. \ No newline at end of file +Trusted Publishing tokens are temporary and used for automated publishing from GitHub Actions. If this exposure was unexpected, please review your repository's workflow files and secrets. +{% endblock %} diff --git a/src/email/templates/unsubscribe_notifications/body.txt.j2 b/src/email/templates/unsubscribe_notifications/body.txt.j2 index 034efab0d4d..6d78269dc51 100644 --- a/src/email/templates/unsubscribe_notifications/body.txt.j2 +++ b/src/email/templates/unsubscribe_notifications/body.txt.j2 @@ -1,5 +1,9 @@ +{% extends "base.txt.j2" %} + +{% block content %} Hello {{ user_name }}! You have been unsubscribed from publish notifications. -If you would like to resubscribe, please visit https://{{ domain }}/settings/profile \ No newline at end of file +If you would like to resubscribe, please visit https://{{ domain }}/settings/profile. +{% endblock %} diff --git a/src/email/templates/user_confirm/body.txt.j2 b/src/email/templates/user_confirm/body.txt.j2 index 0135821d181..7c0553d20c7 100644 --- a/src/email/templates/user_confirm/body.txt.j2 +++ b/src/email/templates/user_confirm/body.txt.j2 @@ -1,4 +1,11 @@ -Hello {{ user_name }}! Welcome to crates.io. Please click the -link below to verify your email address. Thank you! +{% extends "base.txt.j2" %} -https://{{ domain }}/confirm/{{ token }} \ No newline at end of file +{% block content %} +Hello {{ user_name }}! + +Welcome to crates.io. Please click the link below to verify your email address: + +https://{{ domain }}/confirm/{{ token }} + +Thank you! +{% endblock %} diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__basics__new_krate-5.snap b/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__basics__new_krate-5.snap index bfd0b86b7fe..6e0259a0569 100644 --- a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__basics__new_krate-5.snap +++ b/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__basics__new_krate-5.snap @@ -8,8 +8,12 @@ Subject: crates.io: Successfully published foo_new@1.0.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable + Hello foo! A new version of the package foo_new (1.0.0) was published by your account (https://crates.io/users/foo) at [0000-00-00T00:00:00Z]. If you have questions or security concerns, you can contact us at help@crates.io. If you would like to stop receiving these security notifications, you can disable them in your account settings. + +-- +The crates.io Team diff --git a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__trustpub__full_flow-11.snap b/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__trustpub__full_flow-11.snap index 9d6aa6ebeb5..9cb1eb46aa3 100644 --- a/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__trustpub__full_flow-11.snap +++ b/src/tests/krate/publish/snapshots/crates_io__tests__krate__publish__trustpub__full_flow-11.snap @@ -8,11 +8,15 @@ Subject: crates.io: Successfully published foo@1.0.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable + Hello foo! A new version of the package foo (1.0.0) was published by your account (https://crates.io/users/foo) at [0000-00-00T00:00:00Z]. If you have questions or security concerns, you can contact us at help@crates.io. If you would like to stop receiving these security notifications, you can disable them in your account settings. + +-- +The crates.io Team ---------------------------------------- To: foo@example.com @@ -21,9 +25,10 @@ Subject: crates.io: Trusted Publishing configuration added to foo Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable + Hello foo! -crates.io user foo added a new "Trusted Publishing" configuration for GitHub Actions to a crate that you manage (foo). Trusted publishers act as trusted users and can publish new versions of the crate automatically. +crates.io user foo added a new "Trusted Publishing" configuration for GitHub Actions to a crate that you manage ("foo"). Trusted publishers act as trusted users and can publish new versions of the crate automatically. Trusted Publishing configuration: @@ -34,7 +39,10 @@ Trusted Publishing configuration: If you did not make this change and you think it was made maliciously, you can remove the configuration from the crate via the "Settings" tab on the crate's page. -If you are unable to revert the change and need to do so, you can email help@crates.io to communicate with the crates.io support team. +If you are unable to revert the change and need to do so, you can email help@crates.io for assistance. + +-- +The crates.io Team ---------------------------------------- To: foo@example.com @@ -43,8 +51,12 @@ Subject: crates.io: Successfully published foo@1.1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable + Hello foo! A new version of the package foo (1.1.0) was published at [0000-00-00T00:00:00Z]. If you have questions or security concerns, you can contact us at help@crates.io. If you would like to stop receiving these security notifications, you can disable them in your account settings. + +-- +The crates.io Team diff --git a/src/tests/routes/me/tokens/snapshots/crates_io__tests__routes__me__tokens__create__create_token_success-3.snap b/src/tests/routes/me/tokens/snapshots/crates_io__tests__routes__me__tokens__create__create_token_success-3.snap index 4c3cc750688..71e1e96dd25 100644 --- a/src/tests/routes/me/tokens/snapshots/crates_io__tests__routes__me__tokens__create__create_token_success-3.snap +++ b/src/tests/routes/me/tokens/snapshots/crates_io__tests__routes__me__tokens__create__create_token_success-3.snap @@ -8,8 +8,12 @@ Subject: crates.io: New API token "bar" created Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable + Hello foo! A new API token with the name "bar" was recently added to your crates.io account. -If this wasn't you, you should revoke the token immediately: https://crates.io/settings/tokens +If you did not create this token, you should revoke it immediately: https://crates.io/settings/tokens. + +-- +The crates.io Team diff --git a/src/tests/routes/me/tokens/snapshots/crates_io__tests__routes__me__tokens__create__create_token_with_expiry_date-3.snap b/src/tests/routes/me/tokens/snapshots/crates_io__tests__routes__me__tokens__create__create_token_with_expiry_date-3.snap index 4c3cc750688..71e1e96dd25 100644 --- a/src/tests/routes/me/tokens/snapshots/crates_io__tests__routes__me__tokens__create__create_token_with_expiry_date-3.snap +++ b/src/tests/routes/me/tokens/snapshots/crates_io__tests__routes__me__tokens__create__create_token_with_expiry_date-3.snap @@ -8,8 +8,12 @@ Subject: crates.io: New API token "bar" created Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable + Hello foo! A new API token with the name "bar" was recently added to your crates.io account. -If this wasn't you, you should revoke the token immediately: https://crates.io/settings/tokens +If you did not create this token, you should revoke it immediately: https://crates.io/settings/tokens. + +-- +The crates.io Team diff --git a/src/tests/routes/me/tokens/snapshots/crates_io__tests__routes__me__tokens__create__create_token_with_null_scopes-3.snap b/src/tests/routes/me/tokens/snapshots/crates_io__tests__routes__me__tokens__create__create_token_with_null_scopes-3.snap index 4c3cc750688..71e1e96dd25 100644 --- a/src/tests/routes/me/tokens/snapshots/crates_io__tests__routes__me__tokens__create__create_token_with_null_scopes-3.snap +++ b/src/tests/routes/me/tokens/snapshots/crates_io__tests__routes__me__tokens__create__create_token_with_null_scopes-3.snap @@ -8,8 +8,12 @@ Subject: crates.io: New API token "bar" created Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable + Hello foo! A new API token with the name "bar" was recently added to your crates.io account. -If this wasn't you, you should revoke the token immediately: https://crates.io/settings/tokens +If you did not create this token, you should revoke it immediately: https://crates.io/settings/tokens. + +-- +The crates.io Team diff --git a/src/tests/routes/me/tokens/snapshots/crates_io__tests__routes__me__tokens__create__create_token_with_scopes-3.snap b/src/tests/routes/me/tokens/snapshots/crates_io__tests__routes__me__tokens__create__create_token_with_scopes-3.snap index 4c3cc750688..71e1e96dd25 100644 --- a/src/tests/routes/me/tokens/snapshots/crates_io__tests__routes__me__tokens__create__create_token_with_scopes-3.snap +++ b/src/tests/routes/me/tokens/snapshots/crates_io__tests__routes__me__tokens__create__create_token_with_scopes-3.snap @@ -8,8 +8,12 @@ Subject: crates.io: New API token "bar" created Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable + Hello foo! A new API token with the name "bar" was recently added to your crates.io account. -If this wasn't you, you should revoke the token immediately: https://crates.io/settings/tokens +If you did not create this token, you should revoke it immediately: https://crates.io/settings/tokens. + +-- +The crates.io Team diff --git a/src/tests/routes/users/update/snapshots/crates_io__tests__routes__users__update__publish_notifications__unsubscribe_and_resubscribe-11.snap b/src/tests/routes/users/update/snapshots/crates_io__tests__routes__users__update__publish_notifications__unsubscribe_and_resubscribe-11.snap index 9b60db87230..200c3aff74a 100644 --- a/src/tests/routes/users/update/snapshots/crates_io__tests__routes__users__update__publish_notifications__unsubscribe_and_resubscribe-11.snap +++ b/src/tests/routes/users/update/snapshots/crates_io__tests__routes__users__update__publish_notifications__unsubscribe_and_resubscribe-11.snap @@ -8,11 +8,15 @@ Subject: crates.io: Successfully published foo@1.0.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable + Hello foo! A new version of the package foo (1.0.0) was published by your account (https://crates.io/users/foo) at [0000-00-00T00:00:00Z]. If you have questions or security concerns, you can contact us at help@crates.io. If you would like to stop receiving these security notifications, you can disable them in your account settings. + +-- +The crates.io Team ---------------------------------------- To: foo@example.com @@ -21,11 +25,15 @@ Subject: crates.io: Unsubscribed from publish notifications Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable + Hello foo! You have been unsubscribed from publish notifications. -If you would like to resubscribe, please visit https://crates.io/settings/profile +If you would like to resubscribe, please visit https://crates.io/settings/profile. + +-- +The crates.io Team ---------------------------------------- To: foo@example.com @@ -34,8 +42,12 @@ Subject: crates.io: Successfully published foo@1.2.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable + Hello foo! A new version of the package foo (1.2.0) was published by your account (https://crates.io/users/foo) at [0000-00-00T00:00:00Z]. If you have questions or security concerns, you can contact us at help@crates.io. If you would like to stop receiving these security notifications, you can disable them in your account settings. + +-- +The crates.io Team diff --git a/src/tests/routes/users/update/snapshots/crates_io__tests__routes__users__update__publish_notifications__unsubscribe_and_resubscribe-2.snap b/src/tests/routes/users/update/snapshots/crates_io__tests__routes__users__update__publish_notifications__unsubscribe_and_resubscribe-2.snap index 9e116d04d78..ff2b348ee3a 100644 --- a/src/tests/routes/users/update/snapshots/crates_io__tests__routes__users__update__publish_notifications__unsubscribe_and_resubscribe-2.snap +++ b/src/tests/routes/users/update/snapshots/crates_io__tests__routes__users__update__publish_notifications__unsubscribe_and_resubscribe-2.snap @@ -8,8 +8,12 @@ Subject: crates.io: Successfully published foo@1.0.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable + Hello foo! A new version of the package foo (1.0.0) was published by your account (https://crates.io/users/foo) at [0000-00-00T00:00:00Z]. If you have questions or security concerns, you can contact us at help@crates.io. If you would like to stop receiving these security notifications, you can disable them in your account settings. + +-- +The crates.io Team diff --git a/src/tests/routes/users/update/snapshots/crates_io__tests__routes__users__update__publish_notifications__unsubscribe_and_resubscribe-5.snap b/src/tests/routes/users/update/snapshots/crates_io__tests__routes__users__update__publish_notifications__unsubscribe_and_resubscribe-5.snap index 15d48e5bba6..abfa2608912 100644 --- a/src/tests/routes/users/update/snapshots/crates_io__tests__routes__users__update__publish_notifications__unsubscribe_and_resubscribe-5.snap +++ b/src/tests/routes/users/update/snapshots/crates_io__tests__routes__users__update__publish_notifications__unsubscribe_and_resubscribe-5.snap @@ -8,11 +8,15 @@ Subject: crates.io: Successfully published foo@1.0.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable + Hello foo! A new version of the package foo (1.0.0) was published by your account (https://crates.io/users/foo) at [0000-00-00T00:00:00Z]. If you have questions or security concerns, you can contact us at help@crates.io. If you would like to stop receiving these security notifications, you can disable them in your account settings. + +-- +The crates.io Team ---------------------------------------- To: foo@example.com @@ -21,8 +25,12 @@ Subject: crates.io: Unsubscribed from publish notifications Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable + Hello foo! You have been unsubscribed from publish notifications. -If you would like to resubscribe, please visit https://crates.io/settings/profile +If you would like to resubscribe, please visit https://crates.io/settings/profile. + +-- +The crates.io Team diff --git a/src/tests/routes/users/update/snapshots/crates_io__tests__routes__users__update__publish_notifications__unsubscribe_and_resubscribe-7.snap b/src/tests/routes/users/update/snapshots/crates_io__tests__routes__users__update__publish_notifications__unsubscribe_and_resubscribe-7.snap index 15d48e5bba6..abfa2608912 100644 --- a/src/tests/routes/users/update/snapshots/crates_io__tests__routes__users__update__publish_notifications__unsubscribe_and_resubscribe-7.snap +++ b/src/tests/routes/users/update/snapshots/crates_io__tests__routes__users__update__publish_notifications__unsubscribe_and_resubscribe-7.snap @@ -8,11 +8,15 @@ Subject: crates.io: Successfully published foo@1.0.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable + Hello foo! A new version of the package foo (1.0.0) was published by your account (https://crates.io/users/foo) at [0000-00-00T00:00:00Z]. If you have questions or security concerns, you can contact us at help@crates.io. If you would like to stop receiving these security notifications, you can disable them in your account settings. + +-- +The crates.io Team ---------------------------------------- To: foo@example.com @@ -21,8 +25,12 @@ Subject: crates.io: Unsubscribed from publish notifications Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable + Hello foo! You have been unsubscribed from publish notifications. -If you would like to resubscribe, please visit https://crates.io/settings/profile +If you would like to resubscribe, please visit https://crates.io/settings/profile. + +-- +The crates.io Team diff --git a/src/tests/snapshots/crates_io__tests__github_secret_scanning__github_secret_alert_revokes_token-3.snap b/src/tests/snapshots/crates_io__tests__github_secret_scanning__github_secret_alert_revokes_token-3.snap index a5cd0c30663..88a611664b0 100644 --- a/src/tests/snapshots/crates_io__tests__github_secret_scanning__github_secret_alert_revokes_token-3.snap +++ b/src/tests/snapshots/crates_io__tests__github_secret_scanning__github_secret_alert_revokes_token-3.snap @@ -8,6 +8,7 @@ Subject: crates.io: Your API token "bar" has been revoked Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable + GitHub has notified us that your crates.io API token bar has been exposed publicly. We have revoked this token as a precaution. Please review your account at https://crates.io to confirm that no unexpected changes have been made to your settings or crates. @@ -15,3 +16,6 @@ Please review your account at https://crates.io to confirm that no unexpected ch Source type: some_source URL where the token was found: some_url + +-- +The crates.io Team diff --git a/src/tests/snapshots/crates_io__tests__github_secret_scanning__github_secret_alert_revokes_trustpub_token-3.snap b/src/tests/snapshots/crates_io__tests__github_secret_scanning__github_secret_alert_revokes_trustpub_token-3.snap index df6bd5175fb..5dc4cb0b4b5 100644 --- a/src/tests/snapshots/crates_io__tests__github_secret_scanning__github_secret_alert_revokes_trustpub_token-3.snap +++ b/src/tests/snapshots/crates_io__tests__github_secret_scanning__github_secret_alert_revokes_trustpub_token-3.snap @@ -8,6 +8,7 @@ Subject: crates.io: Your Trusted Publishing token has been revoked Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable + GitHub has notified us that one of your crates.io Trusted Publishing tokens has been exposed publicly. We have revoked this token as a precaution. This token was only authorized to publish the "foo" crate. @@ -19,3 +20,6 @@ Source type: some_source URL where the token was found: some_url Trusted Publishing tokens are temporary and used for automated publishing from GitHub Actions. If this exposure was unexpected, please review your repository's workflow files and secrets. + +-- +The crates.io Team diff --git a/src/tests/snapshots/crates_io__tests__github_secret_scanning__github_secret_alert_revokes_trustpub_token_multiple_users-3.snap b/src/tests/snapshots/crates_io__tests__github_secret_scanning__github_secret_alert_revokes_trustpub_token_multiple_users-3.snap index 4e12cfaabc5..7cf86ad2064 100644 --- a/src/tests/snapshots/crates_io__tests__github_secret_scanning__github_secret_alert_revokes_trustpub_token_multiple_users-3.snap +++ b/src/tests/snapshots/crates_io__tests__github_secret_scanning__github_secret_alert_revokes_trustpub_token_multiple_users-3.snap @@ -8,6 +8,7 @@ Subject: crates.io: Your Trusted Publishing token has been revoked Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable + GitHub has notified us that one of your crates.io Trusted Publishing tokens has been exposed publicly. We have revoked this token as a precaution. This token was authorized to publish the following crates: "crate1", "crate2". @@ -19,6 +20,9 @@ Source type: some_source URL where the token was found: some_url Trusted Publishing tokens are temporary and used for automated publishing from GitHub Actions. If this exposure was unexpected, please review your repository's workflow files and secrets. + +-- +The crates.io Team ---------------------------------------- To: user2@example.com @@ -27,6 +31,7 @@ Subject: crates.io: Your Trusted Publishing token has been revoked Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable + GitHub has notified us that one of your crates.io Trusted Publishing tokens has been exposed publicly. We have revoked this token as a precaution. This token was only authorized to publish the "crate2" crate. @@ -38,3 +43,6 @@ Source type: some_source URL where the token was found: some_url Trusted Publishing tokens are temporary and used for automated publishing from GitHub Actions. If this exposure was unexpected, please review your repository's workflow files and secrets. + +-- +The crates.io Team diff --git a/src/tests/snapshots/crates_io__tests__owners__modify_multiple_owners-10.snap b/src/tests/snapshots/crates_io__tests__owners__modify_multiple_owners-10.snap index 512603419b3..3854fefc89a 100644 --- a/src/tests/snapshots/crates_io__tests__owners__modify_multiple_owners-10.snap +++ b/src/tests/snapshots/crates_io__tests__owners__modify_multiple_owners-10.snap @@ -8,10 +8,15 @@ Subject: crates.io: Ownership invitation for "owners_multiple" Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable + foo has invited you to become an owner of the crate owners_multiple! -Visit https://crates.io/accept-invite/[invite-token] to accept this invitation, -or go to https://crates.io/me/pending-invites to manage all of your crate ownership invitations. +Visit https://crates.io/accept-invite/[invite-token] to accept this invitation. + +You can also go to https://crates.io/me/pending-invites to manage all of your crate ownership invitations. + +-- +The crates.io Team ---------------------------------------- To: user3@example.com @@ -20,10 +25,15 @@ Subject: crates.io: Ownership invitation for "owners_multiple" Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable + foo has invited you to become an owner of the crate owners_multiple! -Visit https://crates.io/accept-invite/[invite-token] to accept this invitation, -or go to https://crates.io/me/pending-invites to manage all of your crate ownership invitations. +Visit https://crates.io/accept-invite/[invite-token] to accept this invitation. + +You can also go to https://crates.io/me/pending-invites to manage all of your crate ownership invitations. + +-- +The crates.io Team ---------------------------------------- To: user2@example.com @@ -32,10 +42,15 @@ Subject: crates.io: Ownership invitation for "owners_multiple" Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable + foo has invited you to become an owner of the crate owners_multiple! -Visit https://crates.io/accept-invite/[invite-token] to accept this invitation, -or go to https://crates.io/me/pending-invites to manage all of your crate ownership invitations. +Visit https://crates.io/accept-invite/[invite-token] to accept this invitation. + +You can also go to https://crates.io/me/pending-invites to manage all of your crate ownership invitations. + +-- +The crates.io Team ---------------------------------------- To: user3@example.com @@ -44,7 +59,12 @@ Subject: crates.io: Ownership invitation for "owners_multiple" Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable + foo has invited you to become an owner of the crate owners_multiple! -Visit https://crates.io/accept-invite/[invite-token] to accept this invitation, -or go to https://crates.io/me/pending-invites to manage all of your crate ownership invitations. +Visit https://crates.io/accept-invite/[invite-token] to accept this invitation. + +You can also go to https://crates.io/me/pending-invites to manage all of your crate ownership invitations. + +-- +The crates.io Team diff --git a/src/tests/snapshots/crates_io__tests__owners__modify_multiple_owners.snap b/src/tests/snapshots/crates_io__tests__owners__modify_multiple_owners.snap index 7f369477377..bdb9878fb5b 100644 --- a/src/tests/snapshots/crates_io__tests__owners__modify_multiple_owners.snap +++ b/src/tests/snapshots/crates_io__tests__owners__modify_multiple_owners.snap @@ -8,10 +8,15 @@ Subject: crates.io: Ownership invitation for "owners_multiple" Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable + foo has invited you to become an owner of the crate owners_multiple! -Visit https://crates.io/accept-invite/[invite-token] to accept this invitation, -or go to https://crates.io/me/pending-invites to manage all of your crate ownership invitations. +Visit https://crates.io/accept-invite/[invite-token] to accept this invitation. + +You can also go to https://crates.io/me/pending-invites to manage all of your crate ownership invitations. + +-- +The crates.io Team ---------------------------------------- To: user3@example.com @@ -20,7 +25,12 @@ Subject: crates.io: Ownership invitation for "owners_multiple" Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable + foo has invited you to become an owner of the crate owners_multiple! -Visit https://crates.io/accept-invite/[invite-token] to accept this invitation, -or go to https://crates.io/me/pending-invites to manage all of your crate ownership invitations. +Visit https://crates.io/accept-invite/[invite-token] to accept this invitation. + +You can also go to https://crates.io/me/pending-invites to manage all of your crate ownership invitations. + +-- +The crates.io Team diff --git a/src/tests/snapshots/crates_io__tests__owners__new_crate_owner-2.snap b/src/tests/snapshots/crates_io__tests__owners__new_crate_owner-2.snap index ebefa8d6550..ffdda591775 100644 --- a/src/tests/snapshots/crates_io__tests__owners__new_crate_owner-2.snap +++ b/src/tests/snapshots/crates_io__tests__owners__new_crate_owner-2.snap @@ -8,11 +8,15 @@ Subject: crates.io: Successfully published foo_owner@1.0.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable + Hello foo! A new version of the package foo_owner (1.0.0) was published by your account (https://crates.io/users/foo) at [0000-00-00T00:00:00Z]. If you have questions or security concerns, you can contact us at help@crates.io. If you would like to stop receiving these security notifications, you can disable them in your account settings. + +-- +The crates.io Team ---------------------------------------- To: Bar@example.com @@ -21,10 +25,15 @@ Subject: crates.io: Ownership invitation for "foo_owner" Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable + foo has invited you to become an owner of the crate foo_owner! -Visit https://crates.io/accept-invite/[invite-token] to accept this invitation, -or go to https://crates.io/me/pending-invites to manage all of your crate ownership invitations. +Visit https://crates.io/accept-invite/[invite-token] to accept this invitation. + +You can also go to https://crates.io/me/pending-invites to manage all of your crate ownership invitations. + +-- +The crates.io Team ---------------------------------------- To: foo@example.com @@ -33,11 +42,15 @@ Subject: crates.io: Successfully published foo_owner@2.0.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable + Hello foo! A new version of the package foo_owner (2.0.0) was published by Bar (https://crates.io/users/Bar) at [0000-00-00T00:00:00Z]. If you have questions or security concerns, you can contact us at help@crates.io. If you would like to stop receiving these security notifications, you can disable them in your account settings. + +-- +The crates.io Team ---------------------------------------- To: Bar@example.com @@ -46,8 +59,12 @@ Subject: crates.io: Successfully published foo_owner@2.0.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable + Hello Bar! A new version of the package foo_owner (2.0.0) was published by your account (https://crates.io/users/Bar) at [0000-00-00T00:00:00Z]. If you have questions or security concerns, you can contact us at help@crates.io. If you would like to stop receiving these security notifications, you can disable them in your account settings. + +-- +The crates.io Team diff --git a/src/tests/snapshots/crates_io__tests__owners__new_crate_owner.snap b/src/tests/snapshots/crates_io__tests__owners__new_crate_owner.snap index 114219fb0c5..f3bc6c0907c 100644 --- a/src/tests/snapshots/crates_io__tests__owners__new_crate_owner.snap +++ b/src/tests/snapshots/crates_io__tests__owners__new_crate_owner.snap @@ -8,11 +8,15 @@ Subject: crates.io: Successfully published foo_owner@1.0.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable + Hello foo! A new version of the package foo_owner (1.0.0) was published by your account (https://crates.io/users/foo) at [0000-00-00T00:00:00Z]. If you have questions or security concerns, you can contact us at help@crates.io. If you would like to stop receiving these security notifications, you can disable them in your account settings. + +-- +The crates.io Team ---------------------------------------- To: Bar@example.com @@ -21,7 +25,12 @@ Subject: crates.io: Ownership invitation for "foo_owner" Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable + foo has invited you to become an owner of the crate foo_owner! -Visit https://crates.io/accept-invite/[invite-token] to accept this invitation, -or go to https://crates.io/me/pending-invites to manage all of your crate ownership invitations. +Visit https://crates.io/accept-invite/[invite-token] to accept this invitation. + +You can also go to https://crates.io/me/pending-invites to manage all of your crate ownership invitations. + +-- +The crates.io Team diff --git a/src/tests/snapshots/crates_io__tests__team__publish_owned.snap b/src/tests/snapshots/crates_io__tests__team__publish_owned.snap index aaf6a3e9e42..1ee1e1d8798 100644 --- a/src/tests/snapshots/crates_io__tests__team__publish_owned.snap +++ b/src/tests/snapshots/crates_io__tests__team__publish_owned.snap @@ -8,8 +8,12 @@ Subject: crates.io: Successfully published foo_team_owned@2.0.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable + Hello user-all-teams! A new version of the package foo_team_owned (2.0.0) was published by user-one-team (https://crates.io/users/user-one-team) at [0000-00-00T00:00:00Z]. If you have questions or security concerns, you can contact us at help@crates.io. If you would like to stop receiving these security notifications, you can disable them in your account settings. + +-- +The crates.io Team diff --git a/src/tests/worker/snapshots/crates_io__tests__worker__sync_admins__sync_admins_job.snap b/src/tests/worker/snapshots/crates_io__tests__worker__sync_admins__sync_admins_job.snap index 4d488a8beb0..1170ec9dbb8 100644 --- a/src/tests/worker/snapshots/crates_io__tests__worker__sync_admins__sync_admins_job.snap +++ b/src/tests/worker/snapshots/crates_io__tests__worker__sync_admins__sync_admins_job.snap @@ -8,6 +8,7 @@ Subject: crates.io: Admin account changes Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit + Granted admin access: - new-admin (github_id: 3) @@ -15,6 +16,9 @@ Granted admin access: Revoked admin access: - obsolete-admin (github_id: 2) + +-- +The crates.io Team ---------------------------------------- To: obsolete-admin@crates.io @@ -23,9 +27,14 @@ Subject: crates.io: Admin account changes Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit + Granted admin access: - new-admin (github_id: 3) Revoked admin access: - obsolete-admin (github_id: 2) + + +-- +The crates.io Team