Skip to content

Commit 32c0743

Browse files
committed
feat: multiple securities
* move "legacy" http security normalization to map-std, so that core input surface doesn't increase
1 parent 4540e1b commit 32c0743

File tree

3 files changed

+16
-21
lines changed

3 files changed

+16
-21
lines changed

core/core/src/sf_core/map_std_impl/mod.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,11 @@ impl MapStdUnstable for MapStdImpl {
9090
}
9191
}
9292

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

9799
// IDEA: add profile, provider info as well?
98100
params

core/core_to_map_std/src/unstable/mod.rs

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,9 @@ macro_rules! map_value {
182182
};
183183
}
184184

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

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

311314
// input and output
@@ -318,16 +321,6 @@ pub trait MapStdUnstable {
318321
// MESSAGES //
319322
//////////////
320323

321-
#[derive(Deserialize)]
322-
#[serde(tag = "kind", content = "ids")]
323-
#[serde(rename_all = "kebab-case")]
324-
enum HttpRequestSecuritySettingMessage {
325-
FirstValid(Vec<String>),
326-
All(Vec<String>),
327-
#[serde(untagged)]
328-
Legacy(Option<String>)
329-
}
330-
331324
define_exchange_map_to_core! {
332325
let state: MapStdUnstable;
333326
enum RequestUnstable {
@@ -337,7 +330,7 @@ define_exchange_map_to_core! {
337330
url: String,
338331
headers: HeadersMultiMap,
339332
query: MultiMap,
340-
security: HttpRequestSecuritySettingMessage,
333+
security: Option<HttpRequestSecurity>,
341334
body: Option<Vec<u8>>,
342335
} -> enum Response {
343336
Ok {
@@ -355,12 +348,7 @@ define_exchange_map_to_core! {
355348
headers,
356349
query,
357350
body,
358-
}, match security {
359-
HttpRequestSecuritySettingMessage::FirstValid(v) => HttpRequestSecurity::FirstValid(v),
360-
HttpRequestSecuritySettingMessage::All(v) => HttpRequestSecurity::All(v),
361-
// Turns Option<String> into Vec<String>, the vec being empty on None
362-
HttpRequestSecuritySettingMessage::Legacy(maybe_v) => HttpRequestSecurity::FirstValid(maybe_v.into_iter().collect()),
363-
});
351+
}, security);
364352

365353
match handle {
366354
Ok(handle) => Response::Ok {

core_js/map-std/src/unstable.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,14 +203,19 @@ export function fetch(url: string, options: FetchOptions): HttpRequest {
203203
finalBody = Array.from(bodyBuffer.inner.data);
204204
}
205205

206+
let security = options.security
207+
if (typeof security === "string") {
208+
security = { kind: "first-valid", ids: [security] }
209+
}
210+
206211
const response = messageExchange({
207212
kind: 'http-call',
208213
method: options.method ?? 'GET',
209214
url,
210215
headers,
211216
query: ensureMultimap(options.query ?? {}),
212217
body: finalBody,
213-
security: options.security,
218+
security,
214219
});
215220

216221
if (response.kind === 'ok') {

0 commit comments

Comments
 (0)