VPSでビルド用のサーバーを動かしているという話を書いたかと思います。

自分しか使わないのでベーシック認証を書ける形に変更しています。

その前に:echoについてちょっと

雑にいうと、expressとかsinatraとかっぽい書き方でサーバーを書けるGoのライブラリっぽいです。

最小に近いサンプルはこんな感じで、e.GETにパスとリクエストハンドラみたいなのを書いてあげればOKというシンプルな感じです。

 1func main() {
 2	e := echo.New()
 3	e.GET("/hello", func(c echo.Context) error {
 4		return c.String(http.StatusOK, "Hello")
 5	})
 6	e.GET("/world", func(c echo.Context) error {
 7		return c.String(http.StatusOK, "World")
 8	})
 9	e.Logger.Fatal(e.Start(":1323"))
10}

実際、Advertising API用のコードもかなりシンプルです。

↓は参考にさせてもらった元のコードです。この部分でasinを受け取るリクエストを処理してます。

main.go · master · longkey1 / amazon-product-json · GitLab

ベーシック認証

公式にドキュメントにちゃんと書いてあります。めちゃくちゃシンプル。

Basic Auth Middleware | Echo - High performance, minimalist Go web framework

まず、importにmiddlewareを使うべく一行追加。

1import (
2	// 略
3	"github.com/labstack/echo"
4	"github.com/labstack/echo/middleware" // この行
5)

続いてmainでmiddlewareを使う旨と、usernameやパスワードを書いておいてあげます。

 1func main() {
 2	e := echo.New()
 3	// 略
 4	e.Use(middleware.BasicAuth(func(username, password string, c echo.Context) (bool, error) {
 5		if username == "joe" && password == "secret" {
 6			return true, nil
 7		}
 8		return false, nil
 9	}))
10	// 略
11}

という感じで設定できましたー。

あとは使う側がusername:password@hostnameでアクセスすれば良いです。