Skip to content

Commit b4e3369

Browse files
authored
Merge pull request #2451 from itowlson/bikeshed-private-endpoints
Bikeshed private endpoint UI
2 parents ad75fd3 + 95a548b commit b4e3369

File tree

4 files changed

+26
-7
lines changed

4 files changed

+26
-7
lines changed

crates/http/src/config.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,15 @@ pub struct HttpTriggerConfig {
1818
#[serde(untagged)]
1919
pub enum HttpTriggerRouteConfig {
2020
Route(String),
21-
IsRoutable(bool),
21+
Private(HttpPrivateEndpoint),
22+
}
23+
24+
/// Indicates that a trigger is a private endpoint (not routable).
25+
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
26+
#[serde(deny_unknown_fields)]
27+
pub struct HttpPrivateEndpoint {
28+
/// Whether the private endpoint is private. This must be true.
29+
pub private: bool,
2230
}
2331

2432
impl Default for HttpTriggerRouteConfig {

crates/http/src/routes.rs

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,11 @@ impl Router {
4343
HttpTriggerRouteConfig::Route(r) => {
4444
Some(Ok((RoutePattern::from(base, r), component_id.to_string())))
4545
}
46-
HttpTriggerRouteConfig::IsRoutable(false) => None,
47-
HttpTriggerRouteConfig::IsRoutable(true) => Some(Err(anyhow!("route must be a string pattern or 'false': component '{component_id}' has route = 'true'"))),
46+
HttpTriggerRouteConfig::Private(endpoint) => if endpoint.private {
47+
None
48+
} else {
49+
Some(Err(anyhow!("route must be a string pattern or '{{ private = true }}': component '{component_id}' has {{ private = false }}")))
50+
}
4851
}
4952
})
5053
.collect::<Result<Vec<_>>>()?;
@@ -217,6 +220,8 @@ impl fmt::Display for RoutePattern {
217220
mod route_tests {
218221
use spin_testing::init_tracing;
219222

223+
use crate::config::HttpPrivateEndpoint;
224+
220225
use super::*;
221226

222227
#[test]
@@ -502,7 +507,10 @@ mod route_tests {
502507
vec![
503508
("/", &"/".into()),
504509
("/foo", &"/foo".into()),
505-
("private", &HttpTriggerRouteConfig::IsRoutable(false)),
510+
(
511+
"private",
512+
&HttpTriggerRouteConfig::Private(HttpPrivateEndpoint { private: true }),
513+
),
506514
("/whee/...", &"/whee/...".into()),
507515
],
508516
)
@@ -519,7 +527,10 @@ mod route_tests {
519527
vec![
520528
("/", &"/".into()),
521529
("/foo", &"/foo".into()),
522-
("bad component", &HttpTriggerRouteConfig::IsRoutable(true)),
530+
(
531+
"bad component",
532+
&HttpTriggerRouteConfig::Private(HttpPrivateEndpoint { private: false }),
533+
),
523534
("/whee/...", &"/whee/...".into()),
524535
],
525536
)

crates/trigger-http/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ impl HttpTrigger {
272272

273273
let raw_route = match &trigger.route {
274274
HttpTriggerRouteConfig::Route(r) => r.as_str(),
275-
HttpTriggerRouteConfig::IsRoutable(_) => "/...",
275+
HttpTriggerRouteConfig::Private(_) => "/...",
276276
};
277277

278278
let res = match executor {

tests/runtime-tests/tests/internal-http/spin.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ source = "%{source=internal-http-front}"
1414
allowed_outbound_hosts = ["http://middle.spin.internal"]
1515

1616
[[trigger.http]]
17-
route = false
17+
route = { private = true }
1818
component = "middle"
1919

2020
[component.middle]

0 commit comments

Comments
 (0)