Documentation
¶
Overview ¶
Package agentapi はエージェント用 API(仕様 5 節)。公開で、登録と stream だけを受ける。 TLS 証明書は初回起動で作る有効期限 10 年の自己署名で、秘密鍵ごと SQLite に保存する。 エージェントは CA ではなく証明書の SHA-256(接続文字列に入っている)で検証する。
Index ¶
- func Fingerprint(c tls.Certificate) [32]byte
- func LoadOrCreateCert(st *store.Store) (tls.Certificate, error)
- type Backend
- type RegisterRequest
- type RegisterResponse
- type Server
- func (s *Server) Allow(remoteAddr string) bool
- func (s *Server) Fingerprint() [32]byte
- func (s *Server) Handle(pattern string, h http.HandlerFunc)
- func (s *Server) Listen(addr string) (net.Listener, error)
- func (s *Server) Serve(addr string) error
- func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request)
- func (s *Server) ServeListener(ln net.Listener) error
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 ¶
RegisterRequest / RegisterResponse は登録の JSON(仕様 5.1 節)。name は任意。
type RegisterResponse ¶
type Server ¶
type Server struct {
// contains filtered or unexported fields
}
Server はエージェント用 API。
func (*Server) Fingerprint ¶
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
Listen は addr の TCP で待ち受けを開く。TLS は ServeListener が掛ける。待ち受けを開くところまでを 応答と分けるのは、vpsd が全部の待ち受けを開けてから起動完了のログを出すため(仕様 10.4 節)。
Click to show internal directories.
Click to hide internal directories.