From 0ad2687f162b8349a3263eae85cff6a5b1ea7789 Mon Sep 17 00:00:00 2001 From: syumai Date: Fri, 20 May 2022 00:28:02 +0900 Subject: [PATCH] add Basic-Auth example --- examples/basic-auth-server/.gitignore | 1 + examples/basic-auth-server/Makefile | 12 +++++++++ examples/basic-auth-server/README.md | 10 ++++++++ examples/basic-auth-server/go.mod | 7 ++++++ examples/basic-auth-server/go.sum | 2 ++ examples/basic-auth-server/main.go | 31 ++++++++++++++++++++++++ examples/basic-auth-server/worker.mjs | 17 +++++++++++++ examples/basic-auth-server/wrangler.toml | 9 +++++++ 8 files changed, 89 insertions(+) create mode 100644 examples/basic-auth-server/.gitignore create mode 100644 examples/basic-auth-server/Makefile create mode 100644 examples/basic-auth-server/README.md create mode 100644 examples/basic-auth-server/go.mod create mode 100644 examples/basic-auth-server/go.sum create mode 100644 examples/basic-auth-server/main.go create mode 100644 examples/basic-auth-server/worker.mjs create mode 100644 examples/basic-auth-server/wrangler.toml diff --git a/examples/basic-auth-server/.gitignore b/examples/basic-auth-server/.gitignore new file mode 100644 index 0000000..53c37a1 --- /dev/null +++ b/examples/basic-auth-server/.gitignore @@ -0,0 +1 @@ +dist \ No newline at end of file diff --git a/examples/basic-auth-server/Makefile b/examples/basic-auth-server/Makefile new file mode 100644 index 0000000..320ddc3 --- /dev/null +++ b/examples/basic-auth-server/Makefile @@ -0,0 +1,12 @@ +.PHONY: dev +dev: + wrangler dev + +.PHONY: build +build: + mkdir -p dist + tinygo build -o ./dist/app.wasm -target wasm ./... + +.PHONY: publish +publish: + wrangler publish diff --git a/examples/basic-auth-server/README.md b/examples/basic-auth-server/README.md new file mode 100644 index 0000000..77ba7ad --- /dev/null +++ b/examples/basic-auth-server/README.md @@ -0,0 +1,10 @@ +# basic-auth-server + +* This is an example of an HTTP server with Basic-Auth . + +## Demo + +* https://basic-auth-server.syumai.workers.dev/ + +userName: `user` +password: `password` \ No newline at end of file diff --git a/examples/basic-auth-server/go.mod b/examples/basic-auth-server/go.mod new file mode 100644 index 0000000..76a88e7 --- /dev/null +++ b/examples/basic-auth-server/go.mod @@ -0,0 +1,7 @@ +module github.com/syumai/basic-auth-server + +go 1.18 + +require github.com/syumai/workers v0.0.0 + +replace github.com/syumai/workers => ../../ \ No newline at end of file diff --git a/examples/basic-auth-server/go.sum b/examples/basic-auth-server/go.sum new file mode 100644 index 0000000..8c27871 --- /dev/null +++ b/examples/basic-auth-server/go.sum @@ -0,0 +1,2 @@ +github.com/syumai/workers v0.1.0 h1:z5QfQR2X+PCKzom7RodpI5J4D5YF7NT7Qwzb9AM9dgY= +github.com/syumai/workers v0.1.0/go.mod h1:alXIDhTyeTwSzh0ZgQ3cb9HQPyyYfIejupE4Z3efr14= diff --git a/examples/basic-auth-server/main.go b/examples/basic-auth-server/main.go new file mode 100644 index 0000000..4fd0e64 --- /dev/null +++ b/examples/basic-auth-server/main.go @@ -0,0 +1,31 @@ +package main + +import ( + "net/http" + + "github.com/syumai/workers" +) + +const ( + userName = "user" + userPassword = "password" +) + +func authenticate(req *http.Request) bool { + username, password, ok := req.BasicAuth() + return ok && username == userName && password == userPassword +} + +func handleRequest(w http.ResponseWriter, req *http.Request) { + if !authenticate(req) { + w.Header().Add("WWW-Authenticate", `Basic realm="login is required"`) + w.WriteHeader(http.StatusUnauthorized) + w.Write([]byte("Unauthorized\n")) + return + } + w.Write([]byte("Authorized!\n")) +} + +func main() { + workers.Serve(http.HandlerFunc(handleRequest)) +} diff --git a/examples/basic-auth-server/worker.mjs b/examples/basic-auth-server/worker.mjs new file mode 100644 index 0000000..a0bb726 --- /dev/null +++ b/examples/basic-auth-server/worker.mjs @@ -0,0 +1,17 @@ +import "../assets/polyfill_performance.js"; +import "../assets/wasm_exec.js"; +import mod from "./dist/app.wasm"; + +const go = new Go(); + +const load = WebAssembly.instantiate(mod, go.importObject).then((instance) => { + go.run(instance); + return instance; +}); + +export default { + async fetch(req) { + await load; + return handleRequest(req); + }, +}; diff --git a/examples/basic-auth-server/wrangler.toml b/examples/basic-auth-server/wrangler.toml new file mode 100644 index 0000000..b4716ee --- /dev/null +++ b/examples/basic-auth-server/wrangler.toml @@ -0,0 +1,9 @@ +name = "basic-auth-server" +main = "./worker.mjs" +compatibility_date = "2022-05-13" +compatibility_flags = [ + "streams_enable_constructors" +] + +[build] +command = "make build"