Remove some unnecessary errors

This commit is contained in:
Adnan Maolood 2020-11-04 23:46:05 -05:00
parent 95716296b4
commit cec1f118fb
4 changed files with 12 additions and 18 deletions

View File

@ -128,7 +128,7 @@ func (c *Client) do(req *Request, via []*Request) (*Response, error) {
req.Certificate = &cert req.Certificate = &cert
return c.do(req, via) return c.do(req, via)
} }
return resp, ErrCertificateRequired return resp, nil
case resp.Status.Class() == StatusClassInput: case resp.Status.Class() == StatusClassInput:
if c.GetInput != nil { if c.GetInput != nil {
@ -139,7 +139,7 @@ func (c *Client) do(req *Request, via []*Request) (*Response, error) {
return c.do(req, via) return c.do(req, via)
} }
} }
return resp, ErrInputRequired return resp, nil
case resp.Status.Class() == StatusClassRedirect: case resp.Status.Class() == StatusClassRedirect:
if via == nil { if via == nil {
@ -151,12 +151,13 @@ func (c *Client) do(req *Request, via []*Request) (*Response, error) {
if err != nil { if err != nil {
return resp, err return resp, err
} }
target = req.URL.ResolveReference(target) target = req.URL.ResolveReference(target)
redirect, err := NewRequestFromURL(target) if target.Scheme != "" && target.Scheme != "gemini" {
if err != nil { return resp, nil
return resp, err
} }
redirect := NewRequestFromURL(target)
if c.CheckRedirect != nil { if c.CheckRedirect != nil {
if err := c.CheckRedirect(redirect, via); err != nil { if err := c.CheckRedirect(redirect, via); err != nil {
return resp, err return resp, err

4
fs.go
View File

@ -96,9 +96,9 @@ func openFile(p string) (File, error) {
if stat.Mode().IsRegular() { if stat.Mode().IsRegular() {
return f, nil return f, nil
} }
return nil, ErrNotAFile return nil, os.ErrNotExist
} else if !stat.Mode().IsRegular() { } else if !stat.Mode().IsRegular() {
return nil, ErrNotAFile return nil, os.ErrNotExist
} }
} }
return f, nil return f, nil

View File

@ -14,12 +14,8 @@ var (
ErrCertificateExpired = errors.New("gemini: certificate expired") ErrCertificateExpired = errors.New("gemini: certificate expired")
ErrCertificateNotFound = errors.New("gemini: certificate not found") ErrCertificateNotFound = errors.New("gemini: certificate not found")
ErrCertificateNotTrusted = errors.New("gemini: certificate not trusted") ErrCertificateNotTrusted = errors.New("gemini: certificate not trusted")
ErrCertificateRequired = errors.New("gemini: certificate required") ErrBodyNotAllowed = errors.New("gemini: response body not allowed")
ErrNotAFile = errors.New("gemini: not a file")
ErrNotAGeminiURL = errors.New("gemini: not a Gemini URL")
ErrBodyNotAllowed = errors.New("gemini: response status code does not allow for body")
ErrTooManyRedirects = errors.New("gemini: too many redirects") ErrTooManyRedirects = errors.New("gemini: too many redirects")
ErrInputRequired = errors.New("gemini: input required")
) )
// defaultClient is the default client. It is used by Get and Do. // defaultClient is the default client. It is used by Get and Do.

View File

@ -41,15 +41,12 @@ func NewRequest(rawurl string) (*Request, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
return NewRequestFromURL(u) return NewRequestFromURL(u), nil
} }
// NewRequestFromURL returns a new request for the given URL. // NewRequestFromURL returns a new request for the given URL.
// The host is inferred from the URL. // The host is inferred from the URL.
func NewRequestFromURL(url *url.URL) (*Request, error) { func NewRequestFromURL(url *url.URL) *Request {
if url.Scheme != "" && url.Scheme != "gemini" {
return nil, ErrNotAGeminiURL
}
host := url.Host host := url.Host
if url.Port() == "" { if url.Port() == "" {
host += ":1965" host += ":1965"
@ -57,7 +54,7 @@ func NewRequestFromURL(url *url.URL) (*Request, error) {
return &Request{ return &Request{
URL: url, URL: url,
Host: host, Host: host,
}, nil }
} }
// write writes the Gemini request to the provided buffered writer. // write writes the Gemini request to the provided buffered writer.