Skip to content

Commit 1f197b5

Browse files
authored
Openapi: adding privileges (#4434) (#4520)
* adding privileges to openapi export * privileges in description * update output format * rebase * restore recent changes, better rusting * rebase
1 parent 423edaf commit 1f197b5

File tree

7 files changed

+940
-824
lines changed

7 files changed

+940
-824
lines changed

compiler-rs/Cargo.lock

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

compiler-rs/clients_schema/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ pub struct Availability {
264264
pub visibility: Option<Visibility>,
265265
}
266266

267-
/// The availability of an
267+
/// The availability of an endpoint, field or parameter
268268
pub type Availabilities = IndexMap<Flavor, Availability>;
269269

270270
pub trait AvailabilityFilter: Fn(&Option<Availabilities>) -> bool {}

compiler-rs/clients_schema_to_openapi/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ clients_schema = {path="../clients_schema"}
1010
argh = { workspace = true }
1111
derive_more = { version = "2", features = ["from_str"] }
1212
serde_json = { workspace = true }
13-
serde_ignored = { workspace = true }
13+
itertools = { workspace = true }
1414
icu_segmenter = { workspace = true }
1515
openapiv3 = { workspace = true }
1616
anyhow = { workspace = true }

compiler-rs/clients_schema_to_openapi/src/paths.rs

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,11 @@ use std::collections::HashMap;
1919
use std::fmt::Write;
2020

2121
use anyhow::{anyhow, bail};
22-
use clients_schema::Property;
22+
use clients_schema::{Privileges, Property};
2323
use indexmap::IndexMap;
2424
use indexmap::indexmap;
2525
use icu_segmenter::SentenceSegmenter;
26+
use itertools::Itertools;
2627
use openapiv3::{
2728
MediaType, Parameter, ParameterData, ParameterSchemaOrContent, PathItem, PathStyle, Paths, QueryStyle, ReferenceOr,
2829
RequestBody, Response, Responses, StatusCode, Example
@@ -313,6 +314,13 @@ pub fn add_endpoint(
313314
parameters.append(&mut query_params.clone());
314315

315316
let sum_desc = split_summary_desc(&endpoint.description);
317+
318+
let privilege_desc = add_privileges(&endpoint.privileges);
319+
320+
let full_desc = match (sum_desc.description, privilege_desc) {
321+
(Some(a), Some(b)) => Some(a+ &b),
322+
(opt_a, opt_b) => opt_a.or(opt_b)
323+
};
316324

317325
// add the x-state extension for availability
318326
let mut extensions = crate::availability_as_extensions(&endpoint.availability);
@@ -343,7 +351,7 @@ pub fn add_endpoint(
343351
vec![namespace.to_string()]
344352
},
345353
summary: sum_desc.summary,
346-
description: sum_desc.description,
354+
description: full_desc,
347355
external_docs: tac.convert_external_docs(endpoint),
348356
// external_docs: None, // Need values that differ from client purposes
349357
operation_id: None, // set in clone_operation below with operation_counter
@@ -487,6 +495,26 @@ fn split_summary_desc(desc: &str) -> SplitDesc{
487495
}
488496
}
489497

498+
fn add_privileges(privileges: &Option<Privileges>) -> Option<String>{
499+
if let Some(privs) = privileges {
500+
let mut result = "\n ##Required authorization\n".to_string();
501+
if !privs.index.is_empty() {
502+
result += "* Index privileges: ";
503+
result += &privs.index.iter()
504+
.map(|a| format!("`{a}`"))
505+
.join(",");
506+
}
507+
if !privs.cluster.is_empty() {
508+
result += "* Cluster privileges: ";
509+
result += &privs.cluster.iter()
510+
.map(|a| format!("`{a}`"))
511+
.join(",");
512+
}
513+
return Some(result)
514+
}
515+
None
516+
}
517+
490518
#[derive(PartialEq,Debug)]
491519
struct SplitDesc {
492520
summary: Option<String>,
Binary file not shown.

output/openapi/elasticsearch-openapi.json

Lines changed: 614 additions & 556 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

output/openapi/elasticsearch-serverless-openapi.json

Lines changed: 293 additions & 263 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)