48 lines
1.7 KiB
Go
48 lines
1.7 KiB
Go
//go:build linux || freebsd
|
|||
|
|
// +build linux freebsd
|
||
|
|
|
||
|
|
// Package register provides a single registration point for all built-in goget protocols.
|
||
|
|
// Both CLI (cmd/goget) and library API (pkg/api) call RegisterAll to avoid
|
||
|
|
// duplicating the protocol registration list across packages.
|
||
|
|
package register
|
||
|
|
|
||
|
|
import (
|
||
|
|
"codeberg.org/petrbalvin/goget/internal/core"
|
||
|
|
"codeberg.org/petrbalvin/goget/internal/protocol"
|
||
|
|
"codeberg.org/petrbalvin/goget/internal/protocol/dataurl"
|
||
|
|
"codeberg.org/petrbalvin/goget/internal/protocol/file"
|
||
|
|
"codeberg.org/petrbalvin/goget/internal/protocol/ftp"
|
||
|
|
"codeberg.org/petrbalvin/goget/internal/protocol/gemini"
|
||
|
|
"codeberg.org/petrbalvin/goget/internal/protocol/gopher"
|
||
|
|
"codeberg.org/petrbalvin/goget/internal/protocol/http"
|
||
|
|
"codeberg.org/petrbalvin/goget/internal/protocol/sftp"
|
||
|
|
"codeberg.org/petrbalvin/goget/internal/protocol/webdav"
|
||
|
|
)
|
||
|
|
|
||
|
|
// RegisterAll registers all built-in protocols on the given registry.
|
||
|
|
// Protocols that are already registered are silently skipped, making this
|
||
|
|
// safe to call from both CLI and API initialization.
|
||
|
|
// Returns the HTTP protocol handler for further configuration (e.g., HSTS).
|
||
|
|
func RegisterAll(r *protocol.Registry) (*http.Client, error) {
|
||
|
|
registerIfMissing := func(p core.Protocol) {
|
||
|
|
if r.Supports(p.Scheme()) {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
_ = r.Register(p)
|
||
|
|
}
|
||
|
|
|
||
|
|
httpClient, err := http.NewClient(http.DefaultConfig())
|
||
|
|
if err != nil {
|
||
|
|
return nil, err
|
||
|
|
}
|
||
|
|
registerIfMissing(httpClient)
|
||
|
|
registerIfMissing(ftp.NewProtocol())
|
||
|
|
registerIfMissing(file.NewProtocol())
|
||
|
|
registerIfMissing(dataurl.NewProtocol())
|
||
|
|
registerIfMissing(gopher.NewProtocol())
|
||
|
|
registerIfMissing(gemini.NewProtocol())
|
||
|
|
registerIfMissing(sftp.NewProtocol())
|
||
|
|
registerIfMissing(webdav.NewProtocol())
|
||
|
|
return httpClient, nil
|
||
|
|
}
|