Skip to content

Commit

Permalink
feat: multiple securities
Browse files Browse the repository at this point in the history
* move "legacy" http security normalization to map-std, so that core input surface doesn't increase
  • Loading branch information
TheEdward162 committed Jan 15, 2025
1 parent 4540e1b commit 32c0743
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 21 deletions.
6 changes: 4 additions & 2 deletions core/core/src/sf_core/map_std_impl/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -90,9 +90,11 @@ impl MapStdUnstable for MapStdImpl {
}
}

fn http_call(&mut self, mut params: MapHttpRequest, security: MapHttpRequestSecurity) -> Result<Handle, MapHttpCallError> {
fn http_call(&mut self, mut params: MapHttpRequest, security: Option<MapHttpRequestSecurity>) -> Result<Handle, MapHttpCallError> {
let security_map = self.security.as_ref().unwrap();
resolve_security(security_map, &mut params, &security)?;
if let Some(ref security) = security {
resolve_security(security_map, &mut params, security)?;
}

// IDEA: add profile, provider info as well?
params
Expand Down
24 changes: 6 additions & 18 deletions core/core_to_map_std/src/unstable/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,9 @@ macro_rules! map_value {
};
}

#[derive(Deserialize)]
#[serde(tag = "kind", content = "ids")]
#[serde(rename_all = "kebab-case")]
pub enum HttpRequestSecurity {
FirstValid(Vec<String>),
All(Vec<String>),
Expand Down Expand Up @@ -305,7 +308,7 @@ pub trait MapStdUnstable {
fn stream_close(&mut self, handle: Handle) -> std::io::Result<()>;

// http
fn http_call(&mut self, params: HttpRequest, security: HttpRequestSecurity) -> Result<Handle, HttpCallError>;
fn http_call(&mut self, params: HttpRequest, security: Option<HttpRequestSecurity>) -> Result<Handle, HttpCallError>;
fn http_call_head(&mut self, handle: Handle) -> Result<HttpResponse, HttpCallHeadError>;

// input and output
Expand All @@ -318,16 +321,6 @@ pub trait MapStdUnstable {
// MESSAGES //
//////////////

#[derive(Deserialize)]
#[serde(tag = "kind", content = "ids")]
#[serde(rename_all = "kebab-case")]
enum HttpRequestSecuritySettingMessage {
FirstValid(Vec<String>),
All(Vec<String>),
#[serde(untagged)]
Legacy(Option<String>)
}

define_exchange_map_to_core! {
let state: MapStdUnstable;
enum RequestUnstable {
Expand All @@ -337,7 +330,7 @@ define_exchange_map_to_core! {
url: String,
headers: HeadersMultiMap,
query: MultiMap,
security: HttpRequestSecuritySettingMessage,
security: Option<HttpRequestSecurity>,
body: Option<Vec<u8>>,
} -> enum Response {
Ok {
Expand All @@ -355,12 +348,7 @@ define_exchange_map_to_core! {
headers,
query,
body,
}, match security {
HttpRequestSecuritySettingMessage::FirstValid(v) => HttpRequestSecurity::FirstValid(v),
HttpRequestSecuritySettingMessage::All(v) => HttpRequestSecurity::All(v),
// Turns Option<String> into Vec<String>, the vec being empty on None
HttpRequestSecuritySettingMessage::Legacy(maybe_v) => HttpRequestSecurity::FirstValid(maybe_v.into_iter().collect()),
});
}, security);

match handle {
Ok(handle) => Response::Ok {
Expand Down
7 changes: 6 additions & 1 deletion core_js/map-std/src/unstable.ts
Original file line number Diff line number Diff line change
Expand Up @@ -203,14 +203,19 @@ export function fetch(url: string, options: FetchOptions): HttpRequest {
finalBody = Array.from(bodyBuffer.inner.data);
}

let security = options.security
if (typeof security === "string") {
security = { kind: "first-valid", ids: [security] }
}

const response = messageExchange({
kind: 'http-call',
method: options.method ?? 'GET',
url,
headers,
query: ensureMultimap(options.query ?? {}),
body: finalBody,
security: options.security,
security,
});

if (response.kind === 'ok') {
Expand Down

0 comments on commit 32c0743

Please sign in to comment.