Skip to content

Commit bc78d02

Browse files
authored
[communication email] Use safe secrets (Azure#33691)
This PR eliminates secrets saved on disk as follows: - Retrieves the connection string dynamically from the resource - Updates the samples to use Entra ID auth Live tests runs: - https://dev.azure.com/azure-sdk/internal/_build/results?buildId=4725038&view=results
1 parent 6ae6fa3 commit bc78d02

34 files changed

+301
-134
lines changed

common/config/rush/pnpm-lock.yaml

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

sdk/communication/communication-email/assets.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
"AssetsRepo": "Azure/azure-sdk-assets",
33
"AssetsRepoPrefixPath": "js",
44
"TagPrefix": "js/communication/communication-email",
5-
"Tag": "js/communication/communication-email_585f390b9e"
5+
"Tag": "js/communication/communication-email_fed8b113e3"
66
}

sdk/communication/communication-email/package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,11 @@
5656
},
5757
"devDependencies": {
5858
"@azure-tools/test-recorder": "^4.1.0",
59-
"@azure-tools/test-utils-vitest": "^1.0.0",
59+
"@azure-tools/test-credential": "^2.0.0",
60+
"@azure/arm-communication": "^4.1.0",
6061
"@azure/dev-tool": "^1.0.0",
6162
"@azure/eslint-plugin-azure-sdk": "^3.0.0",
62-
"@azure/identity": "^4.5.0",
63+
"@azure/identity": "^4.8.0",
6364
"@types/node": "^18.0.0",
6465
"@vitest/browser": "^3.0.9",
6566
"@vitest/coverage-istanbul": "^3.0.9",

sdk/communication/communication-email/sample.env

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
# Retrieve this value from a Communication Services resource with a linked domain.
2-
COMMUNICATION_CONNECTION_STRING="endpoint=https://<resource name>.communication.azure.net/;accessKey=<key>"
1+
COMMUNICATION_ENDPOINT=https://<your-resource-name>.communication.azure.com
32

43
# Retrieve this value from an Email Services Domain resource that has been linked to the Communication Services resource.
54
SENDER_ADDRESS=[email protected]

sdk/communication/communication-email/samples-dev/sendEmailMultipleRecipients.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,19 @@
77

88
import type { EmailMessage } from "@azure/communication-email";
99
import { EmailClient } from "@azure/communication-email";
10+
import { DefaultAzureCredential } from "@azure/identity";
1011

1112
// Load the .env file (you will need to set these environment variables)
1213
import "dotenv/config";
1314

14-
const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || "";
15+
const endpoint = process.env["COMMUNICATION_ENDPOINT"] || "";
1516
const senderAddress = process.env["SENDER_ADDRESS"] || "";
1617
const recipientAddress = process.env["RECIPIENT_ADDRESS"] || "";
1718
const secondRecipientAddress = process.env["SECOND_RECIPIENT_ADDRESS"] || "";
1819

1920
const sendEmailMultipleRecipients = async (): Promise<void> => {
2021
// Create the Email Client
21-
const emailClient: EmailClient = new EmailClient(connectionString);
22+
const emailClient: EmailClient = new EmailClient(endpoint, new DefaultAzureCredential());
2223

2324
// Create the Email Message to be sent
2425
const message: EmailMessage = {

sdk/communication/communication-email/samples-dev/sendEmailSingleRecipient.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,18 @@
77

88
import type { EmailMessage } from "@azure/communication-email";
99
import { EmailClient } from "@azure/communication-email";
10+
import { DefaultAzureCredential } from "@azure/identity";
1011

1112
// Load the .env file (you will need to set these environment variables)
1213
import "dotenv/config";
1314

14-
const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || "";
15+
const endpoint = process.env["COMMUNICATION_ENDPOINT"] || "";
1516
const senderAddress = process.env["SENDER_ADDRESS"] || "";
1617
const recipientAddress = process.env["RECIPIENT_ADDRESS"] || "";
1718

1819
const sendSingleEmail = async (): Promise<void> => {
1920
// Create the Email Client
20-
const emailClient: EmailClient = new EmailClient(connectionString);
21+
const emailClient: EmailClient = new EmailClient(endpoint, new DefaultAzureCredential());
2122

2223
// Create the Email Message to be sent
2324
const message: EmailMessage = {

sdk/communication/communication-email/samples-dev/sendEmailWithAttachments.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,18 @@
77

88
import type { EmailMessage } from "@azure/communication-email";
99
import { EmailClient } from "@azure/communication-email";
10+
import { DefaultAzureCredential } from "@azure/identity";
1011

1112
// Load the .env file (you will need to set these environment variables)
1213
import "dotenv/config";
1314

14-
const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || "";
15+
const endpoint = process.env["COMMUNICATION_ENDPOINT"] || "";
1516
const senderAddress = process.env["SENDER_ADDRESS"] || "";
1617
const recipientAddress = process.env["RECIPIENT_ADDRESS"] || "";
1718

1819
const sendEmailWithAttachments = async (): Promise<void> => {
1920
// Create the Email Client
20-
const emailClient: EmailClient = new EmailClient(connectionString);
21+
const emailClient: EmailClient = new EmailClient(endpoint, new DefaultAzureCredential());
2122

2223
// Create the Email Message to be sent
2324
const message: EmailMessage = {

sdk/communication/communication-email/samples-dev/sendEmailWithInlineAttachments.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,18 @@
77

88
import type { EmailMessage } from "@azure/communication-email";
99
import { EmailClient } from "@azure/communication-email";
10+
import { DefaultAzureCredential } from "@azure/identity";
1011

1112
// Load the .env file (you will need to set these environment variables)
1213
import "dotenv/config";
1314

14-
const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || "";
15+
const endpoint = process.env["COMMUNICATION_ENDPOINT"] || "";
1516
const senderAddress = process.env["SENDER_ADDRESS"] || "";
1617
const recipientAddress = process.env["RECIPIENT_ADDRESS"] || "";
1718

1819
const sendEmailWithAttachments = async (): Promise<void> => {
1920
// Create the Email Client
20-
const emailClient: EmailClient = new EmailClient(connectionString);
21+
const emailClient: EmailClient = new EmailClient(endpoint, new DefaultAzureCredential());
2122

2223
// Create the Email Message to be sent
2324
const message: EmailMessage = {

sdk/communication/communication-email/samples/v1-beta/javascript/README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Azure Communication Services - Email client library samples for JavaScript
1+
# Azure Communication Services - Email client library samples for JavaScript (Beta)
22

33
These sample programs show how to use the JavaScript client libraries for Azure Communication Services - Email in some common scenarios.
44

@@ -43,7 +43,7 @@ node sendEmailMultipleRecipients.js
4343
Alternatively, run a single sample with the correct environment variables set (setting up the `.env` file is not required if you do this), for example (cross-platform):
4444

4545
```bash
46-
npx dev-tool run vendored cross-env COMMUNICATION_CONNECTION_STRING="<communication connection string>" SENDER_ADDRESS="<sender address>" RECIPIENT_ADDRESS="<recipient address>" SECOND_RECIPIENT_ADDRESS="<second recipient address>" node sendEmailMultipleRecipients.js
46+
npx dev-tool run vendored cross-env COMMUNICATION_ENDPOINT="<communication endpoint>" SENDER_ADDRESS="<sender address>" RECIPIENT_ADDRESS="<recipient address>" SECOND_RECIPIENT_ADDRESS="<second recipient address>" node sendEmailMultipleRecipients.js
4747
```
4848

4949
## Next Steps
@@ -54,7 +54,7 @@ Take a look at our [API Documentation][apiref] for more information about the AP
5454
[sendemailsinglerecipient]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-email/samples/v1-beta/javascript/sendEmailSingleRecipient.js
5555
[sendemailwithattachments]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-email/samples/v1-beta/javascript/sendEmailWithAttachments.js
5656
[sendemailwithinlineattachments]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-email/samples/v1-beta/javascript/sendEmailWithInlineAttachments.js
57-
[apiref]: https://learn.microsoft.com/javascript/api/@azure/communication-email
57+
[apiref]: https://learn.microsoft.com/javascript/api/@azure/communication-email?view=azure-node-preview
5858
[freesub]: https://azure.microsoft.com/free/
5959
[createinstance_azurecommunicationservicesresource]: https://learn.microsoft.com/azure/communication-services/quickstarts/create-communication-resource
6060
[createinstance_emailcommunicationservicesresource]: https://aka.ms/acsemail/createemailresource

sdk/communication/communication-email/samples/v1-beta/javascript/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
"homepage": "https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/communication/communication-email",
2626
"dependencies": {
2727
"@azure/communication-email": "next",
28-
"dotenv": "latest"
28+
"dotenv": "latest",
29+
"@azure/identity": "^4.8.0"
2930
}
3031
}

sdk/communication/communication-email/samples/v1-beta/javascript/sample.env

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
# Retrieve this value from a Communication Services resource with a linked domain.
2-
COMMUNICATION_CONNECTION_STRING="endpoint=https://<resource name>.communication.azure.net/;accessKey=<key>"
1+
COMMUNICATION_ENDPOINT=https://<your-resource-name>.communication.azure.com
32

43
# Retrieve this value from an Email Services Domain resource that has been linked to the Communication Services resource.
54
SENDER_ADDRESS=[email protected]

sdk/communication/communication-email/samples/v1-beta/javascript/sendEmailMultipleRecipients.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,19 @@
66
*/
77

88
const { EmailClient } = require("@azure/communication-email");
9+
const { DefaultAzureCredential } = require("@azure/identity");
910

1011
// Load the .env file (you will need to set these environment variables)
11-
require("dotenv").config();
12+
require("dotenv/config");
1213

13-
const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || "";
14+
const endpoint = process.env["COMMUNICATION_ENDPOINT"] || "";
1415
const senderAddress = process.env["SENDER_ADDRESS"] || "";
1516
const recipientAddress = process.env["RECIPIENT_ADDRESS"] || "";
1617
const secondRecipientAddress = process.env["SECOND_RECIPIENT_ADDRESS"] || "";
1718

1819
const sendEmailMultipleRecipients = async () => {
1920
// Create the Email Client
20-
const emailClient = new EmailClient(connectionString);
21+
const emailClient = new EmailClient(endpoint, new DefaultAzureCredential());
2122

2223
// Create the Email Message to be sent
2324
const message = {

sdk/communication/communication-email/samples/v1-beta/javascript/sendEmailSingleRecipient.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,18 @@
66
*/
77

88
const { EmailClient } = require("@azure/communication-email");
9+
const { DefaultAzureCredential } = require("@azure/identity");
910

1011
// Load the .env file (you will need to set these environment variables)
11-
require("dotenv").config();
12+
require("dotenv/config");
1213

13-
const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || "";
14+
const endpoint = process.env["COMMUNICATION_ENDPOINT"] || "";
1415
const senderAddress = process.env["SENDER_ADDRESS"] || "";
1516
const recipientAddress = process.env["RECIPIENT_ADDRESS"] || "";
1617

1718
const sendSingleEmail = async () => {
1819
// Create the Email Client
19-
const emailClient = new EmailClient(connectionString);
20+
const emailClient = new EmailClient(endpoint, new DefaultAzureCredential());
2021

2122
// Create the Email Message to be sent
2223
const message = {

sdk/communication/communication-email/samples/v1-beta/javascript/sendEmailWithAttachments.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,18 @@
66
*/
77

88
const { EmailClient } = require("@azure/communication-email");
9+
const { DefaultAzureCredential } = require("@azure/identity");
910

1011
// Load the .env file (you will need to set these environment variables)
11-
require("dotenv").config();
12+
require("dotenv/config");
1213

13-
const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || "";
14+
const endpoint = process.env["COMMUNICATION_ENDPOINT"] || "";
1415
const senderAddress = process.env["SENDER_ADDRESS"] || "";
1516
const recipientAddress = process.env["RECIPIENT_ADDRESS"] || "";
1617

1718
const sendEmailWithAttachments = async () => {
1819
// Create the Email Client
19-
const emailClient = new EmailClient(connectionString);
20+
const emailClient = new EmailClient(endpoint, new DefaultAzureCredential());
2021

2122
// Create the Email Message to be sent
2223
const message = {

sdk/communication/communication-email/samples/v1-beta/javascript/sendEmailWithInlineAttachments.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,18 @@
66
*/
77

88
const { EmailClient } = require("@azure/communication-email");
9+
const { DefaultAzureCredential } = require("@azure/identity");
910

1011
// Load the .env file (you will need to set these environment variables)
11-
require("dotenv").config();
12+
require("dotenv/config");
1213

13-
const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || "";
14+
const endpoint = process.env["COMMUNICATION_ENDPOINT"] || "";
1415
const senderAddress = process.env["SENDER_ADDRESS"] || "";
1516
const recipientAddress = process.env["RECIPIENT_ADDRESS"] || "";
1617

1718
const sendEmailWithAttachments = async () => {
1819
// Create the Email Client
19-
const emailClient = new EmailClient(connectionString);
20+
const emailClient = new EmailClient(endpoint, new DefaultAzureCredential());
2021

2122
// Create the Email Message to be sent
2223
const message = {

sdk/communication/communication-email/samples/v1-beta/typescript/README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Azure Communication Services - Email client library samples for TypeScript
1+
# Azure Communication Services - Email client library samples for TypeScript (Beta)
22

33
These sample programs show how to use the TypeScript client libraries for Azure Communication Services - Email in some common scenarios.
44

@@ -55,7 +55,7 @@ node dist/sendEmailMultipleRecipients.js
5555
Alternatively, run a single sample with the correct environment variables set (setting up the `.env` file is not required if you do this), for example (cross-platform):
5656

5757
```bash
58-
npx dev-tool run vendored cross-env COMMUNICATION_CONNECTION_STRING="<communication connection string>" SENDER_ADDRESS="<sender address>" RECIPIENT_ADDRESS="<recipient address>" SECOND_RECIPIENT_ADDRESS="<second recipient address>" node dist/sendEmailMultipleRecipients.js
58+
npx dev-tool run vendored cross-env COMMUNICATION_ENDPOINT="<communication endpoint>" SENDER_ADDRESS="<sender address>" RECIPIENT_ADDRESS="<recipient address>" SECOND_RECIPIENT_ADDRESS="<second recipient address>" node dist/sendEmailMultipleRecipients.js
5959
```
6060

6161
## Next Steps
@@ -66,7 +66,7 @@ Take a look at our [API Documentation][apiref] for more information about the AP
6666
[sendemailsinglerecipient]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-email/samples/v1-beta/typescript/src/sendEmailSingleRecipient.ts
6767
[sendemailwithattachments]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-email/samples/v1-beta/typescript/src/sendEmailWithAttachments.ts
6868
[sendemailwithinlineattachments]: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/communication/communication-email/samples/v1-beta/typescript/src/sendEmailWithInlineAttachments.ts
69-
[apiref]: https://learn.microsoft.com/javascript/api/@azure/communication-email
69+
[apiref]: https://learn.microsoft.com/javascript/api/@azure/communication-email?view=azure-node-preview
7070
[freesub]: https://azure.microsoft.com/free/
7171
[createinstance_azurecommunicationservicesresource]: https://learn.microsoft.com/azure/communication-services/quickstarts/create-communication-resource
7272
[createinstance_emailcommunicationservicesresource]: https://aka.ms/acsemail/createemailresource

sdk/communication/communication-email/samples/v1-beta/typescript/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@
2929
"homepage": "https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/communication/communication-email",
3030
"dependencies": {
3131
"@azure/communication-email": "next",
32-
"dotenv": "latest"
32+
"dotenv": "latest",
33+
"@azure/identity": "^4.8.0"
3334
},
3435
"devDependencies": {
3536
"@types/node": "^18.0.0",

sdk/communication/communication-email/samples/v1-beta/typescript/sample.env

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
# Retrieve this value from a Communication Services resource with a linked domain.
2-
COMMUNICATION_CONNECTION_STRING="endpoint=https://<resource name>.communication.azure.net/;accessKey=<key>"
1+
COMMUNICATION_ENDPOINT=https://<your-resource-name>.communication.azure.com
32

43
# Retrieve this value from an Email Services Domain resource that has been linked to the Communication Services resource.
54
SENDER_ADDRESS=[email protected]

sdk/communication/communication-email/samples/v1-beta/typescript/src/sendEmailMultipleRecipients.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,21 @@
55
* @summary Sends an email with multiple recipients
66
*/
77

8-
import { EmailClient, EmailMessage } from "@azure/communication-email";
8+
import type { EmailMessage } from "@azure/communication-email";
9+
import { EmailClient } from "@azure/communication-email";
10+
import { DefaultAzureCredential } from "@azure/identity";
911

1012
// Load the .env file (you will need to set these environment variables)
11-
import * as dotenv from "dotenv";
12-
dotenv.config();
13+
import "dotenv/config";
1314

14-
const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || "";
15+
const endpoint = process.env["COMMUNICATION_ENDPOINT"] || "";
1516
const senderAddress = process.env["SENDER_ADDRESS"] || "";
1617
const recipientAddress = process.env["RECIPIENT_ADDRESS"] || "";
1718
const secondRecipientAddress = process.env["SECOND_RECIPIENT_ADDRESS"] || "";
1819

1920
const sendEmailMultipleRecipients = async (): Promise<void> => {
2021
// Create the Email Client
21-
const emailClient: EmailClient = new EmailClient(connectionString);
22+
const emailClient: EmailClient = new EmailClient(endpoint, new DefaultAzureCredential());
2223

2324
// Create the Email Message to be sent
2425
const message: EmailMessage = {

sdk/communication/communication-email/samples/v1-beta/typescript/src/sendEmailSingleRecipient.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,20 @@
55
* @summary Sends an email with a single recipient
66
*/
77

8-
import { EmailClient, EmailMessage } from "@azure/communication-email";
8+
import type { EmailMessage } from "@azure/communication-email";
9+
import { EmailClient } from "@azure/communication-email";
10+
import { DefaultAzureCredential } from "@azure/identity";
911

1012
// Load the .env file (you will need to set these environment variables)
11-
import * as dotenv from "dotenv";
12-
dotenv.config();
13+
import "dotenv/config";
1314

14-
const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || "";
15+
const endpoint = process.env["COMMUNICATION_ENDPOINT"] || "";
1516
const senderAddress = process.env["SENDER_ADDRESS"] || "";
1617
const recipientAddress = process.env["RECIPIENT_ADDRESS"] || "";
1718

1819
const sendSingleEmail = async (): Promise<void> => {
1920
// Create the Email Client
20-
const emailClient: EmailClient = new EmailClient(connectionString);
21+
const emailClient: EmailClient = new EmailClient(endpoint, new DefaultAzureCredential());
2122

2223
// Create the Email Message to be sent
2324
const message: EmailMessage = {

sdk/communication/communication-email/samples/v1-beta/typescript/src/sendEmailWithAttachments.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,20 @@
55
* @summary Sends an email with a txt file attachment
66
*/
77

8-
import { EmailClient, EmailMessage } from "@azure/communication-email";
8+
import type { EmailMessage } from "@azure/communication-email";
9+
import { EmailClient } from "@azure/communication-email";
10+
import { DefaultAzureCredential } from "@azure/identity";
911

1012
// Load the .env file (you will need to set these environment variables)
11-
import * as dotenv from "dotenv";
12-
dotenv.config();
13+
import "dotenv/config";
1314

14-
const connectionString = process.env["COMMUNICATION_CONNECTION_STRING"] || "";
15+
const endpoint = process.env["COMMUNICATION_ENDPOINT"] || "";
1516
const senderAddress = process.env["SENDER_ADDRESS"] || "";
1617
const recipientAddress = process.env["RECIPIENT_ADDRESS"] || "";
1718

1819
const sendEmailWithAttachments = async (): Promise<void> => {
1920
// Create the Email Client
20-
const emailClient: EmailClient = new EmailClient(connectionString);
21+
const emailClient: EmailClient = new EmailClient(endpoint, new DefaultAzureCredential());
2122

2223
// Create the Email Message to be sent
2324
const message: EmailMessage = {

0 commit comments

Comments
 (0)