1
0
mirror of https://github.com/makew0rld/amfora.git synced 2024-07-03 20:25:24 +00:00
amfora/client/client.go

45 lines
964 B
Go
Raw Normal View History

2020-06-18 20:54:48 +00:00
// Package client retrieves data over Gemini and implements a TOFU system.
package client
import (
"net"
"net/url"
2020-06-18 20:54:48 +00:00
"github.com/makeworld-the-better-one/go-gemini"
)
// Fetch returns response data and an error.
// The error text is human friendly and should be displayed.
func Fetch(u string) (*gemini.Response, error) {
2020-08-28 02:40:40 +00:00
res, err := gemini.Fetch(u)
2020-06-18 20:54:48 +00:00
if err != nil {
2020-06-19 18:05:05 +00:00
return nil, err
2020-06-18 20:54:48 +00:00
}
parsed, _ := url.Parse(u)
ok := handleTofu(parsed.Hostname(), parsed.Port(), res.Cert)
2020-06-18 20:54:48 +00:00
if !ok {
return res, ErrTofu
2020-06-18 20:54:48 +00:00
}
return res, err
2020-06-18 20:54:48 +00:00
}
// FetchWithProxy is the same as Fetch, but uses a proxy.
func FetchWithProxy(proxyHostname, proxyPort, u string) (*gemini.Response, error) {
res, err := gemini.FetchWithHost(net.JoinHostPort(proxyHostname, proxyPort), u)
if err != nil {
return nil, err
}
// Only associate the returned cert with the proxy
ok := handleTofu(proxyHostname, proxyPort, res.Cert)
if !ok {
return res, ErrTofu
}
return res, nil
}