pub struct OpenWhiskPlugin {
api_host: Template,
authorization: String,
namespace: Template,
package: Option<Template>,
action: Template,
result: bool,
ssl_verify: bool,
timeout: Duration,
timeout_ms: u64,
client: Arc<OutboundClient>,
}Expand description
Invokes an OpenWhisk action and maps its reply into Context.response.
Fields§
§api_host: TemplateSupports {{namespace.path}} references — resolved per request when
building the endpoint URL. No legacy $var interpolation (endpoint
fields never supported it, so this sweep must not start).
Warning: unlike namespace/package/action, the rendered value
is spliced into the URL unencoded (it’s the origin + scheme, not a
path segment — percent-encoding would corrupt it). Templating this
field from request-controlled data lets a client redirect the entire
outbound call to an arbitrary host (SSRF); prefer a static value or
one derived only from {{env.*}}.
Pre-computed Basic <base64(service_token)> header value. Never
templated — a credential, not an endpoint field.
namespace: TemplateSupports {{namespace.path}} references, same as api_host. Unlike
api_host, the rendered value is percent-encoded
(encode_path_segment) before insertion into the URL path — safe
to template from request data.
package: Option<Template>Supports {{namespace.path}} references, same as namespace
(percent-encoded at render time).
action: TemplateSupports {{namespace.path}} references, same as namespace
(percent-encoded at render time).
result: bool§ssl_verify: bool§timeout: Duration§timeout_ms: u64timeout in milliseconds, passed through as the action query param.
client: Arc<OutboundClient>Implementations§
Source§impl OpenWhiskPlugin
impl OpenWhiskPlugin
Sourcepub fn from_config(
config: &HashMap<String, Value>,
resources: &Arc<PluginResources>,
) -> Result<Self, String>
pub fn from_config( config: &HashMap<String, Value>, resources: &Arc<PluginResources>, ) -> Result<Self, String>
Builds the plugin from node config.
Accepted keys:
api_host(string, required): the OpenWhisk API host (e.g.https://ow.example.com). Missing/empty is a config error. Supports{{namespace.path}}references, rendered per request when building the endpoint URL (a trailing/is trimmed after render).service_token(string, required):user:passaction token, sent base64-encoded as HTTP Basic auth. Missing/empty is a config error. Never templated — a credential, not an endpoint field.action(string, required): the action name to invoke; supports{{namespace.path}}references.namespace(string, default_): the OpenWhisk namespace; supports{{namespace.path}}references.package(string, optional): the package the action belongs to; supports{{namespace.path}}references.result(bool, defaulttrue): requestresult=true(inline the action result rather than the full activation record).ssl_verify(bool, defaulttrue): verify TLS certificates.timeout(integer ms, default3000): whole-call deadline, also passed as the actiontimeoutquery parameter.
type: openwhisk
config:
api_host: https://ow.example.com
service_token: ${OPENWHISK_TOKEN}
namespace: guest
action: hello
result: true
ssl_verify: true
timeout: 3000Sourcefn endpoint(&self, ctx: &Context) -> String
fn endpoint(&self, ctx: &Context) -> String
Builds the OpenWhisk action-invocation URL, rendering api_host /
namespace / package / action against ctx so each field’s
{{namespace.path}} references resolve per request.
namespace/package/action are percent-encoded
(encode_path_segment) after rendering: since these fields are
templatable from request data (e.g. a header), an unescaped / or
? in the rendered value would otherwise break out of its path
segment or inject extra query parameters ahead of the plugin’s own
blocking/result/timeout. api_host is deliberately not
encoded — see the warning on its field doc.
Sourcefn build_request(&self, ctx: &Context) -> OutboundRequest
fn build_request(&self, ctx: &Context) -> OutboundRequest
Builds the outbound POST request carrying the client body as the action parameters.
Trait Implementations§
Source§impl Plugin for OpenWhiskPlugin
impl Plugin for OpenWhiskPlugin
Source§fn plugin_type(&self) -> &str
fn plugin_type(&self) -> &str
Source§fn execute<'life0, 'async_trait>(
&'life0 self,
ctx: Context,
) -> Pin<Box<dyn Future<Output = Result<PluginOutput, PluginExecutionError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn execute<'life0, 'async_trait>(
&'life0 self,
ctx: Context,
) -> Pin<Box<dyn Future<Output = Result<PluginOutput, PluginExecutionError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn reads_response_body(&self) -> bool
fn reads_response_body(&self) -> bool
context.response.body. Read moreSource§fn cache_target(&self) -> Option<CacheTarget>
fn cache_target(&self) -> Option<CacheTarget>
proxy-cache half. Read moreAuto Trait Implementations§
impl !RefUnwindSafe for OpenWhiskPlugin
impl !UnwindSafe for OpenWhiskPlugin
impl Freeze for OpenWhiskPlugin
impl Send for OpenWhiskPlugin
impl Sync for OpenWhiskPlugin
impl Unpin for OpenWhiskPlugin
impl UnsafeUnpin for OpenWhiskPlugin
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more