Skip to main content
Version: 1.x

Rust HTTP Password Checker

This repository contains a WebAssembly Component written in Rust, which:

  • Implements a wasi:http-compliant HTTP handler
  • Uses the httpserver provider to serve requests
  • Provides APIs for checking a password from a secret store, or from the incoming request
  • Can be declaratively provisioned with wadm

Dependencies

This relies on the following installed software:

NameDescription
cargoRust package installer (part of the Rust toolchain)
washWasmcloud Shell controls your wasmcloud host instances and enables building components

Quickstart

To get started developing this repository quickly, clone the repo and run wash dev:

console
wash dev

wash dev does many things for you:

  • Starts the wasmCloud host that can run your WebAssembly component
  • Builds this project
  • Builds a declarative WADM manifest consisting of:
    • Your locally built component
    • A HTTP server provider which will receive requests from the outside world (on port 8000 by default)
    • Necessary links between providers and your component so your component can handle web traffic
  • Deploys the built manifest (i.e all dependencies to run this application) locally
  • Watches your code for changes and re-deploys when necessary.

Send a request to the running component

Once wash dev is serving your component, to send a request to the running component (via the HTTP server provider):

console
curl localhost:8000/api/v1/check --data '{"value": "test"}'

You should see a JSON response like:

json
{
  "status": "success",
  "data": {
    "strength": "very-weak",
    "length": 4,
    "contains": [
      "lowercase"
    ]
}

Adding Capabilities

To learn how to extend this example with additional capabilities, see the Adding Capabilities section of the wasmCloud documentation.

Issues/ FAQ

curl produces a "failed to invoke" error

If curling produces

➜ curl localhost:8000
failed to invoke `wrpc:http/incoming-handler.handle`: failed to invoke `wrpc:http/incoming-handler@0.1.0.handle`: failed to shutdown synchronous parameter channel: not connected%

You may need to just wait a little bit -- the HTTP server takes a second or two to start up.

If the issue persists, you may have a lingering HTTP server provider running on your system. You can use pgrep to find it:

console
❯ pgrep -la ghcr_io
4007604 /tmp/wasmcloudcache/NBCBQOZPJXTJEZDV2VNY32KGEMTLFVP2XJRZJ5FWEJJOXESJXXR2RO46/ghcr_io_wasmcloud_http_server_0_23_1