agentapi

package
v1.1.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 24, 2026 License: MIT Imports: 22 Imported by: 0

Documentation

Overview

Package agentapi はエージェント用 API(仕様 5 節)。公開で、登録と stream だけを受ける。 TLS 証明書は初回起動で作る有効期限 10 年の自己署名で、秘密鍵ごと SQLite に保存する。 エージェントは CA ではなく証明書の SHA-256(接続文字列に入っている)で検証する。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Fingerprint

func Fingerprint(c tls.Certificate) [32]byte

Fingerprint は証明書(DER)の SHA-256。接続文字列に入れ、エージェントがピン留めに使う。

func LoadOrCreateCert

func LoadOrCreateCert(st *store.Store) (tls.Certificate, error)

LoadOrCreateCert は SQLite の証明書を読み、なければ作って保存する。

Types

type Backend

type Backend interface {
	// Register は登録トークンと任意の名前でエージェントを作り、恒久トークン、割り当てアドレス、
	// 確定した名前(name が空ならトークンに紐付いた名前)を返す。
	// トークンが無効(未知・期限切れ・使用済み)、または name がトークンに紐付いた名前と違うときは store.ErrInvalidToken
	// (理由は分けない。総当たりの手がかりにしない)。
	// トークンは有効だが、紐付いた名前のエージェントがすでにいるときは store.ErrAgentAlreadyRegistered
	// (こちらは正規のトークンを持つ側への応答なので、理由を分けて構わない)。
	Register(joinToken, name, from string) (permanentToken, confirmedName string, addr netip.Addr, err error)
}

Backend はエージェント用 API が呼ぶ vpsd 側の操作。

type RegisterRequest

type RegisterRequest struct {
	Token string `json:"token"`
	Name  string `json:"name,omitempty"`
}

RegisterRequest / RegisterResponse は登録の JSON(仕様 5.1 節)。name は任意。

type RegisterResponse

type RegisterResponse struct {
	PermanentToken string `json:"permanent_token"`
	Address        string `json:"address"`
	Name           string `json:"name"` // 確定した名前(name を送らなければトークンに紐付いた名前)
}

type Server

type Server struct {
	// contains filtered or unexported fields
}

Server はエージェント用 API。

func New

func New(st *store.Store, backend Backend) (*Server, error)

New は証明書を用意してハンドラを組み立てる。

func (*Server) Allow

func (s *Server) Allow(remoteAddr string) bool

Allow は送信元 IP のレート制限(stream のハンドラも使う)。

func (*Server) Fingerprint

func (s *Server) Fingerprint() [32]byte

Fingerprint は証明書の SHA-256(接続文字列用)。

func (*Server) Handle

func (s *Server) Handle(pattern string, h http.HandlerFunc)

Handle は stream など、後から足すエンドポイントを登録する。

func (*Server) Listen added in v0.4.0

func (s *Server) Listen(addr string) (net.Listener, error)

Listen は addr の TCP で待ち受けを開く。TLS は ServeListener が掛ける。待ち受けを開くところまでを 応答と分けるのは、vpsd が全部の待ち受けを開けてから起動完了のログを出すため(仕様 10.4 節)。

func (*Server) Serve

func (s *Server) Serve(addr string) error

Serve は TLS で待ち受け、そのまま応答を続ける(公開。Listen と ServeListener を続けて呼ぶ)。

func (*Server) ServeHTTP

func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request)

func (*Server) ServeListener added in v0.4.0

func (s *Server) ServeListener(ln net.Listener) error

ServeListener は Listen で開いた待ち受けで TLS の応答を続ける。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL