Skip to content

Commit ad158b6

Browse files
Merge pull request #695 from srosenthal-dd/stephen.rosenthal/feature-flags-scopes
feature-flags: request required scopes by default | DAL-929
2 parents 7cff361 + 3034927 commit ad158b6

2 files changed

Lines changed: 39 additions & 1 deletion

File tree

src/auth/types.rs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ pub fn read_only_scopes() -> Vec<&'static str> {
6464
"dbm_read",
6565
"error_tracking_read",
6666
"events_read",
67+
"feature_flag_config_read",
68+
"feature_flag_environment_config_read",
6769
"gcp_configuration_read",
6870
"disaster_recovery_status_read",
6971
"hosts_read",
@@ -161,6 +163,11 @@ pub fn default_scopes() -> Vec<&'static str> {
161163
"error_tracking_read",
162164
// Events
163165
"events_read",
166+
// Feature Flags
167+
"feature_flag_config_read",
168+
"feature_flag_config_write",
169+
"feature_flag_environment_config_read",
170+
"feature_flag_environment_config_write",
164171
// GCP
165172
"gcp_configuration_read",
166173
// HAMR (disaster recovery)
@@ -338,6 +345,28 @@ mod tests {
338345
assert!(scopes.contains(&"logs_write_pipelines"));
339346
}
340347

348+
#[test]
349+
fn test_default_scopes_feature_flags() {
350+
let scopes = default_scopes();
351+
assert!(scopes.contains(&"feature_flag_config_read"));
352+
assert!(scopes.contains(&"feature_flag_config_write"));
353+
assert!(scopes.contains(&"feature_flag_environment_config_read"));
354+
assert!(scopes.contains(&"feature_flag_environment_config_write"));
355+
// No pup command exposes require-approval, so this scope shouldn't
356+
// be requested by default.
357+
assert!(!scopes.contains(&"feature_flag_approvals_override"));
358+
}
359+
360+
#[test]
361+
fn test_read_only_scopes_feature_flags() {
362+
let ro = read_only_scopes();
363+
assert!(ro.contains(&"feature_flag_config_read"));
364+
assert!(ro.contains(&"feature_flag_environment_config_read"));
365+
assert!(!ro.contains(&"feature_flag_config_write"));
366+
assert!(!ro.contains(&"feature_flag_environment_config_write"));
367+
assert!(!ro.contains(&"feature_flag_approvals_override"));
368+
}
369+
341370
#[test]
342371
fn test_read_only_scopes_no_write_or_manage() {
343372
let ro = read_only_scopes();

src/main.rs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1380,7 +1380,16 @@ enum Commands {
13801380
///
13811381
/// AUTHENTICATION:
13821382
/// Requires either OAuth2 authentication (pup auth login) or API keys
1383-
/// (DD_API_KEY and DD_APP_KEY environment variables).
1383+
/// (DD_API_KEY and DD_APP_KEY environment variables). All 4 scopes
1384+
/// below are requested by default.
1385+
/// flags list/get, allocations list -- feature_flag_config_read +
1386+
/// feature_flag_environment_config_read
1387+
/// flags create/update/archive/unarchive/delete, enable/disable,
1388+
/// allocations create/update, exposure schedule actions --
1389+
/// feature_flag_config_write +
1390+
/// feature_flag_environment_config_read
1391+
/// environments list/get -- feature_flag_environment_config_read
1392+
/// environments create/update/delete -- feature_flag_environment_config_write
13841393
#[command(name = "feature-flags", verbatim_doc_comment)]
13851394
FeatureFlags {
13861395
#[command(subcommand)]

0 commit comments

Comments
 (0)