Skip to content

Commit d736fc7

Browse files
api-clients-generation-pipeline[bot]ci.datadog-api-spec
andauthored
Add OpenAPI spec for Dashboard Secure Embed endpoints (#3214)
Co-authored-by: ci.datadog-api-spec <packages@datadoghq.com>
1 parent 29642fa commit d736fc7

39 files changed

Lines changed: 4381 additions & 2 deletions

.generator/schemas/v2/openapi.yaml

Lines changed: 697 additions & 1 deletion
Large diffs are not rendered by default.
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# Create a secure embed for a dashboard returns "OK" response
2+
3+
require "datadog_api_client"
4+
DatadogAPIClient.configure do |config|
5+
config.unstable_operations["v2.create_dashboard_secure_embed".to_sym] = true
6+
end
7+
api_instance = DatadogAPIClient::V2::DashboardSecureEmbedAPI.new
8+
9+
body = DatadogAPIClient::V2::SecureEmbedCreateRequest.new({
10+
data: DatadogAPIClient::V2::SecureEmbedCreateRequestData.new({
11+
attributes: DatadogAPIClient::V2::SecureEmbedCreateRequestAttributes.new({
12+
global_time: DatadogAPIClient::V2::SecureEmbedGlobalTime.new({
13+
live_span: DatadogAPIClient::V2::SecureEmbedGlobalTimeLiveSpan::PAST_ONE_HOUR,
14+
}),
15+
global_time_selectable: true,
16+
selectable_template_vars: [
17+
DatadogAPIClient::V2::SecureEmbedSelectableTemplateVariable.new({
18+
default_values: [
19+
"1",
20+
],
21+
name: "org_id",
22+
prefix: "org_id",
23+
visible_tags: [
24+
"1",
25+
],
26+
}),
27+
],
28+
status: DatadogAPIClient::V2::SecureEmbedStatus::ACTIVE,
29+
title: "Q1 Metrics Dashboard",
30+
viewing_preferences: DatadogAPIClient::V2::SecureEmbedViewingPreferences.new({
31+
high_density: false,
32+
theme: DatadogAPIClient::V2::SecureEmbedViewingPreferencesTheme::SYSTEM,
33+
}),
34+
}),
35+
type: DatadogAPIClient::V2::SecureEmbedRequestType::SECURE_EMBED_REQUEST,
36+
}),
37+
})
38+
p api_instance.create_dashboard_secure_embed("dashboard_id", body)
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# Delete a secure embed for a dashboard returns "No Content" response
2+
3+
require "datadog_api_client"
4+
DatadogAPIClient.configure do |config|
5+
config.unstable_operations["v2.delete_dashboard_secure_embed".to_sym] = true
6+
end
7+
api_instance = DatadogAPIClient::V2::DashboardSecureEmbedAPI.new
8+
api_instance.delete_dashboard_secure_embed("dashboard_id", "token")
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# Get a secure embed for a dashboard returns "OK" response
2+
3+
require "datadog_api_client"
4+
DatadogAPIClient.configure do |config|
5+
config.unstable_operations["v2.get_dashboard_secure_embed".to_sym] = true
6+
end
7+
api_instance = DatadogAPIClient::V2::DashboardSecureEmbedAPI.new
8+
p api_instance.get_dashboard_secure_embed("dashboard_id", "token")
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# Update a secure embed for a dashboard returns "OK" response
2+
3+
require "datadog_api_client"
4+
DatadogAPIClient.configure do |config|
5+
config.unstable_operations["v2.update_dashboard_secure_embed".to_sym] = true
6+
end
7+
api_instance = DatadogAPIClient::V2::DashboardSecureEmbedAPI.new
8+
9+
body = DatadogAPIClient::V2::SecureEmbedUpdateRequest.new({
10+
data: DatadogAPIClient::V2::SecureEmbedUpdateRequestData.new({
11+
attributes: DatadogAPIClient::V2::SecureEmbedUpdateRequestAttributes.new({
12+
global_time: DatadogAPIClient::V2::SecureEmbedGlobalTime.new({
13+
live_span: DatadogAPIClient::V2::SecureEmbedGlobalTimeLiveSpan::PAST_ONE_HOUR,
14+
}),
15+
global_time_selectable: true,
16+
selectable_template_vars: [
17+
DatadogAPIClient::V2::SecureEmbedSelectableTemplateVariable.new({
18+
default_values: [
19+
"1",
20+
],
21+
name: "org_id",
22+
prefix: "org_id",
23+
visible_tags: [
24+
"1",
25+
],
26+
}),
27+
],
28+
status: DatadogAPIClient::V2::SecureEmbedStatus::ACTIVE,
29+
title: "Q1 Metrics Dashboard (Updated)",
30+
viewing_preferences: DatadogAPIClient::V2::SecureEmbedViewingPreferences.new({
31+
high_density: false,
32+
theme: DatadogAPIClient::V2::SecureEmbedViewingPreferencesTheme::SYSTEM,
33+
}),
34+
}),
35+
type: DatadogAPIClient::V2::SecureEmbedUpdateRequestType::SECURE_EMBED_UPDATE_REQUEST,
36+
}),
37+
})
38+
p api_instance.update_dashboard_secure_embed("dashboard_id", "token", body)

features/scenarios_model_mapping.rb

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2043,6 +2043,23 @@
20432043
"dashboard_list_id" => "Integer",
20442044
"body" => "DashboardListUpdateItemsRequest",
20452045
},
2046+
"v2.CreateDashboardSecureEmbed" => {
2047+
"dashboard_id" => "String",
2048+
"body" => "SecureEmbedCreateRequest",
2049+
},
2050+
"v2.DeleteDashboardSecureEmbed" => {
2051+
"dashboard_id" => "String",
2052+
"token" => "String",
2053+
},
2054+
"v2.GetDashboardSecureEmbed" => {
2055+
"dashboard_id" => "String",
2056+
"token" => "String",
2057+
},
2058+
"v2.UpdateDashboardSecureEmbed" => {
2059+
"dashboard_id" => "String",
2060+
"token" => "String",
2061+
"body" => "SecureEmbedUpdateRequest",
2062+
},
20462063
"v2.CreateDataset" => {
20472064
"body" => "DatasetCreateRequest",
20482065
},
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
@endpoint(dashboard-secure-embed) @endpoint(dashboard-secure-embed-v2) @endpoint(https://api.datadoghq.com) @endpoint(https://api.datadoghq.eu) @endpoint(https://api.ddog-gov.com) @endpoint(https://api.us5.datadoghq.com)
2+
Feature: Dashboard Secure Embed
3+
Manage securely embedded Datadog dashboards. Secure embeds use HMAC-SHA256
4+
signed sessions for authentication, enabling customers to embed dashboards
5+
in their own applications with server-side auth control. Unlike public
6+
dashboards (open URL) or invite dashboards (email-based access), secure
7+
embeds provide programmatic access control. **Requirements:** - Org
8+
setting: SharedDashboards > Embed sharing must be enabled. - AuthN:
9+
Datadog API key and application key. - Read operations require
10+
`dashboards_read` permission. - Write operations require
11+
`dashboards_embed_share` permission.
12+
13+
Background:
14+
Given a valid "apiKeyAuth" key in the system
15+
And a valid "appKeyAuth" key in the system
16+
And an instance of "DashboardSecureEmbed" API
17+
18+
@generated @skip @team:DataDog/dashboardsnotebooks-backend
19+
Scenario: Create a secure embed for a dashboard returns "Conflict — max 1000 share URLs per dashboard exceeded" response
20+
Given operation "CreateDashboardSecureEmbed" enabled
21+
And new "CreateDashboardSecureEmbed" request
22+
And request contains "dashboard_id" parameter from "REPLACE.ME"
23+
And body with value {"data": {"attributes": {"global_time": {"live_span": "1h"}, "global_time_selectable": true, "selectable_template_vars": [{"default_values": ["1"], "name": "org_id", "prefix": "org_id", "visible_tags": ["1"]}], "status": "active", "title": "Q1 Metrics Dashboard", "viewing_preferences": {"high_density": false, "theme": "system"}}, "type": "secure_embed_request"}}
24+
When the request is sent
25+
Then the response status is 409 Conflict — max 1000 share URLs per dashboard exceeded
26+
27+
@generated @skip @team:DataDog/dashboardsnotebooks-backend
28+
Scenario: Create a secure embed for a dashboard returns "Dashboard Not Found" response
29+
Given operation "CreateDashboardSecureEmbed" enabled
30+
And new "CreateDashboardSecureEmbed" request
31+
And request contains "dashboard_id" parameter from "REPLACE.ME"
32+
And body with value {"data": {"attributes": {"global_time": {"live_span": "1h"}, "global_time_selectable": true, "selectable_template_vars": [{"default_values": ["1"], "name": "org_id", "prefix": "org_id", "visible_tags": ["1"]}], "status": "active", "title": "Q1 Metrics Dashboard", "viewing_preferences": {"high_density": false, "theme": "system"}}, "type": "secure_embed_request"}}
33+
When the request is sent
34+
Then the response status is 404 Dashboard Not Found
35+
36+
@generated @skip @team:DataDog/dashboardsnotebooks-backend
37+
Scenario: Create a secure embed for a dashboard returns "OK" response
38+
Given operation "CreateDashboardSecureEmbed" enabled
39+
And new "CreateDashboardSecureEmbed" request
40+
And request contains "dashboard_id" parameter from "REPLACE.ME"
41+
And body with value {"data": {"attributes": {"global_time": {"live_span": "1h"}, "global_time_selectable": true, "selectable_template_vars": [{"default_values": ["1"], "name": "org_id", "prefix": "org_id", "visible_tags": ["1"]}], "status": "active", "title": "Q1 Metrics Dashboard", "viewing_preferences": {"high_density": false, "theme": "system"}}, "type": "secure_embed_request"}}
42+
When the request is sent
43+
Then the response status is 200 OK
44+
45+
@generated @skip @team:DataDog/dashboardsnotebooks-backend
46+
Scenario: Delete a secure embed for a dashboard returns "No Content" response
47+
Given operation "DeleteDashboardSecureEmbed" enabled
48+
And new "DeleteDashboardSecureEmbed" request
49+
And request contains "dashboard_id" parameter from "REPLACE.ME"
50+
And request contains "token" parameter from "REPLACE.ME"
51+
When the request is sent
52+
Then the response status is 204 No Content
53+
54+
@generated @skip @team:DataDog/dashboardsnotebooks-backend
55+
Scenario: Delete a secure embed for a dashboard returns "Not Found" response
56+
Given operation "DeleteDashboardSecureEmbed" enabled
57+
And new "DeleteDashboardSecureEmbed" request
58+
And request contains "dashboard_id" parameter from "REPLACE.ME"
59+
And request contains "token" parameter from "REPLACE.ME"
60+
When the request is sent
61+
Then the response status is 404 Not Found
62+
63+
@generated @skip @team:DataDog/dashboardsnotebooks-backend
64+
Scenario: Get a secure embed for a dashboard returns "Not Found" response
65+
Given operation "GetDashboardSecureEmbed" enabled
66+
And new "GetDashboardSecureEmbed" request
67+
And request contains "dashboard_id" parameter from "REPLACE.ME"
68+
And request contains "token" parameter from "REPLACE.ME"
69+
When the request is sent
70+
Then the response status is 404 Not Found
71+
72+
@generated @skip @team:DataDog/dashboardsnotebooks-backend
73+
Scenario: Get a secure embed for a dashboard returns "OK" response
74+
Given operation "GetDashboardSecureEmbed" enabled
75+
And new "GetDashboardSecureEmbed" request
76+
And request contains "dashboard_id" parameter from "REPLACE.ME"
77+
And request contains "token" parameter from "REPLACE.ME"
78+
When the request is sent
79+
Then the response status is 200 OK
80+
81+
@generated @skip @team:DataDog/dashboardsnotebooks-backend
82+
Scenario: Update a secure embed for a dashboard returns "Not Found" response
83+
Given operation "UpdateDashboardSecureEmbed" enabled
84+
And new "UpdateDashboardSecureEmbed" request
85+
And request contains "dashboard_id" parameter from "REPLACE.ME"
86+
And request contains "token" parameter from "REPLACE.ME"
87+
And body with value {"data": {"attributes": {"global_time": {"live_span": "1h"}, "global_time_selectable": true, "selectable_template_vars": [{"default_values": ["1"], "name": "org_id", "prefix": "org_id", "visible_tags": ["1"]}], "status": "active", "title": "Q1 Metrics Dashboard (Updated)", "viewing_preferences": {"high_density": false, "theme": "system"}}, "type": "secure_embed_update_request"}}
88+
When the request is sent
89+
Then the response status is 404 Not Found
90+
91+
@generated @skip @team:DataDog/dashboardsnotebooks-backend
92+
Scenario: Update a secure embed for a dashboard returns "OK" response
93+
Given operation "UpdateDashboardSecureEmbed" enabled
94+
And new "UpdateDashboardSecureEmbed" request
95+
And request contains "dashboard_id" parameter from "REPLACE.ME"
96+
And request contains "token" parameter from "REPLACE.ME"
97+
And body with value {"data": {"attributes": {"global_time": {"live_span": "1h"}, "global_time_selectable": true, "selectable_template_vars": [{"default_values": ["1"], "name": "org_id", "prefix": "org_id", "visible_tags": ["1"]}], "status": "active", "title": "Q1 Metrics Dashboard (Updated)", "viewing_preferences": {"high_density": false, "theme": "system"}}, "type": "secure_embed_update_request"}}
98+
When the request is sent
99+
Then the response status is 200 OK

features/v2/undo.json

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1500,6 +1500,41 @@
15001500
"type": "safe"
15011501
}
15021502
},
1503+
"CreateDashboardSecureEmbed": {
1504+
"tag": "Dashboard Secure Embed",
1505+
"undo": {
1506+
"operationId": "DeleteDashboardSecureEmbed",
1507+
"parameters": [
1508+
{
1509+
"name": "dashboard_id",
1510+
"source": "data.attributes.dashboard_id"
1511+
},
1512+
{
1513+
"name": "token",
1514+
"source": "data.attributes.token"
1515+
}
1516+
],
1517+
"type": "unsafe"
1518+
}
1519+
},
1520+
"DeleteDashboardSecureEmbed": {
1521+
"tag": "Dashboard Secure Embed",
1522+
"undo": {
1523+
"type": "idempotent"
1524+
}
1525+
},
1526+
"GetDashboardSecureEmbed": {
1527+
"tag": "Dashboard Secure Embed",
1528+
"undo": {
1529+
"type": "safe"
1530+
}
1531+
},
1532+
"UpdateDashboardSecureEmbed": {
1533+
"tag": "Dashboard Secure Embed",
1534+
"undo": {
1535+
"type": "idempotent"
1536+
}
1537+
},
15031538
"GetAllDatasets": {
15041539
"tag": "Datasets",
15051540
"undo": {

lib/datadog_api_client/configuration.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,10 @@ def initialize
259259
"v2.search_security_monitoring_histsignals": false,
260260
"v2.get_code_coverage_branch_summary": false,
261261
"v2.get_code_coverage_commit_summary": false,
262+
"v2.create_dashboard_secure_embed": false,
263+
"v2.delete_dashboard_secure_embed": false,
264+
"v2.get_dashboard_secure_embed": false,
265+
"v2.update_dashboard_secure_embed": false,
262266
"v2.create_dataset": false,
263267
"v2.delete_dataset": false,
264268
"v2.get_all_datasets": false,

lib/datadog_api_client/inflector.rb

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4844,6 +4844,33 @@ def overrides
48444844
"v2.secret_rule_data_attributes_match_validation_invalid_http_status_code_items" => "SecretRuleDataAttributesMatchValidationInvalidHttpStatusCodeItems",
48454845
"v2.secret_rule_data_attributes_match_validation_valid_http_status_code_items" => "SecretRuleDataAttributesMatchValidationValidHttpStatusCodeItems",
48464846
"v2.secret_rule_data_type" => "SecretRuleDataType",
4847+
"v2.secure_embed_create_request" => "SecureEmbedCreateRequest",
4848+
"v2.secure_embed_create_request_attributes" => "SecureEmbedCreateRequestAttributes",
4849+
"v2.secure_embed_create_request_data" => "SecureEmbedCreateRequestData",
4850+
"v2.secure_embed_create_response" => "SecureEmbedCreateResponse",
4851+
"v2.secure_embed_create_response_attributes" => "SecureEmbedCreateResponseAttributes",
4852+
"v2.secure_embed_create_response_data" => "SecureEmbedCreateResponseData",
4853+
"v2.secure_embed_create_response_type" => "SecureEmbedCreateResponseType",
4854+
"v2.secure_embed_get_response" => "SecureEmbedGetResponse",
4855+
"v2.secure_embed_get_response_attributes" => "SecureEmbedGetResponseAttributes",
4856+
"v2.secure_embed_get_response_data" => "SecureEmbedGetResponseData",
4857+
"v2.secure_embed_get_response_type" => "SecureEmbedGetResponseType",
4858+
"v2.secure_embed_global_time" => "SecureEmbedGlobalTime",
4859+
"v2.secure_embed_global_time_live_span" => "SecureEmbedGlobalTimeLiveSpan",
4860+
"v2.secure_embed_request_type" => "SecureEmbedRequestType",
4861+
"v2.secure_embed_selectable_template_variable" => "SecureEmbedSelectableTemplateVariable",
4862+
"v2.secure_embed_share_type" => "SecureEmbedShareType",
4863+
"v2.secure_embed_status" => "SecureEmbedStatus",
4864+
"v2.secure_embed_update_request" => "SecureEmbedUpdateRequest",
4865+
"v2.secure_embed_update_request_attributes" => "SecureEmbedUpdateRequestAttributes",
4866+
"v2.secure_embed_update_request_data" => "SecureEmbedUpdateRequestData",
4867+
"v2.secure_embed_update_request_type" => "SecureEmbedUpdateRequestType",
4868+
"v2.secure_embed_update_response" => "SecureEmbedUpdateResponse",
4869+
"v2.secure_embed_update_response_attributes" => "SecureEmbedUpdateResponseAttributes",
4870+
"v2.secure_embed_update_response_data" => "SecureEmbedUpdateResponseData",
4871+
"v2.secure_embed_update_response_type" => "SecureEmbedUpdateResponseType",
4872+
"v2.secure_embed_viewing_preferences" => "SecureEmbedViewingPreferences",
4873+
"v2.secure_embed_viewing_preferences_theme" => "SecureEmbedViewingPreferencesTheme",
48474874
"v2.security_entity_config_risks" => "SecurityEntityConfigRisks",
48484875
"v2.security_entity_metadata" => "SecurityEntityMetadata",
48494876
"v2.security_entity_risk_score" => "SecurityEntityRiskScore",
@@ -6045,6 +6072,7 @@ def overrides
60456072
"v2.csm_coverage_analysis_api" => "CSMCoverageAnalysisAPI",
60466073
"v2.csm_threats_api" => "CSMThreatsAPI",
60476074
"v2.dashboard_lists_api" => "DashboardListsAPI",
6075+
"v2.dashboard_secure_embed_api" => "DashboardSecureEmbedAPI",
60486076
"v2.data_deletion_api" => "DataDeletionAPI",
60496077
"v2.datasets_api" => "DatasetsAPI",
60506078
"v2.deployment_gates_api" => "DeploymentGatesAPI",

0 commit comments

Comments
 (0)