Skip to content

Commit a27d918

Browse files
authored
Openapi: adding privileges (#4434) (#4521)
* adding privileges to openapi export * privileges in description * update output format * rebase * restore recent changes, better rusting * rebase
1 parent 0cf92ee commit a27d918

File tree

7 files changed

+937
-820
lines changed

7 files changed

+937
-820
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
@@ -8,7 +8,7 @@ publish = false
88
clients_schema = {path="../clients_schema"}
99

1010
serde_json = { workspace = true }
11-
serde_ignored = { workspace = true }
11+
itertools = { workspace = true }
1212
icu_segmenter = { workspace = true }
1313
openapiv3 = { workspace = true }
1414
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
@@ -250,6 +251,13 @@ pub fn add_endpoint(
250251
parameters.append(&mut query_params.clone());
251252

252253
let sum_desc = split_summary_desc(&endpoint.description);
254+
255+
let privilege_desc = add_privileges(&endpoint.privileges);
256+
257+
let full_desc = match (sum_desc.description, privilege_desc) {
258+
(Some(a), Some(b)) => Some(a+ &b),
259+
(opt_a, opt_b) => opt_a.or(opt_b)
260+
};
253261

254262
// Create the operation, it will be repeated if we have several methods
255263
let operation = openapiv3::Operation {
@@ -259,7 +267,7 @@ pub fn add_endpoint(
259267
vec![namespace.to_string()]
260268
},
261269
summary: sum_desc.summary,
262-
description: sum_desc.description,
270+
description: full_desc,
263271
external_docs: tac.convert_external_docs(endpoint),
264272
// external_docs: None, // Need values that differ from client purposes
265273
operation_id: None, // set in clone_operation below with operation_counter
@@ -403,6 +411,26 @@ fn split_summary_desc(desc: &str) -> SplitDesc{
403411
}
404412
}
405413

414+
fn add_privileges(privileges: &Option<Privileges>) -> Option<String>{
415+
if let Some(privs) = privileges {
416+
let mut result = "\n ##Required authorization\n".to_string();
417+
if !privs.index.is_empty() {
418+
result += "* Index privileges: ";
419+
result += &privs.index.iter()
420+
.map(|a| format!("`{a}`"))
421+
.join(",");
422+
}
423+
if !privs.cluster.is_empty() {
424+
result += "* Cluster privileges: ";
425+
result += &privs.cluster.iter()
426+
.map(|a| format!("`{a}`"))
427+
.join(",");
428+
}
429+
return Some(result)
430+
}
431+
None
432+
}
433+
406434
#[derive(PartialEq,Debug)]
407435
struct SplitDesc {
408436
summary: Option<String>,
Binary file not shown.

output/openapi/elasticsearch-openapi.json

Lines changed: 615 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: 289 additions & 259 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)