From cec1f118fbcf7aea5b524171a19bc324518f248c Mon Sep 17 00:00:00 2001 From: Adnan Maolood Date: Wed, 4 Nov 2020 23:46:05 -0500 Subject: [PATCH] Remove some unnecessary errors --- client.go | 11 ++++++----- fs.go | 4 ++-- gemini.go | 6 +----- request.go | 9 +++------ 4 files changed, 12 insertions(+), 18 deletions(-) diff --git a/client.go b/client.go index f357e56..306e758 100644 --- a/client.go +++ b/client.go @@ -128,7 +128,7 @@ func (c *Client) do(req *Request, via []*Request) (*Response, error) { req.Certificate = &cert return c.do(req, via) } - return resp, ErrCertificateRequired + return resp, nil case resp.Status.Class() == StatusClassInput: if c.GetInput != nil { @@ -139,7 +139,7 @@ func (c *Client) do(req *Request, via []*Request) (*Response, error) { return c.do(req, via) } } - return resp, ErrInputRequired + return resp, nil case resp.Status.Class() == StatusClassRedirect: if via == nil { @@ -151,12 +151,13 @@ func (c *Client) do(req *Request, via []*Request) (*Response, error) { if err != nil { return resp, err } + target = req.URL.ResolveReference(target) - redirect, err := NewRequestFromURL(target) - if err != nil { - return resp, err + if target.Scheme != "" && target.Scheme != "gemini" { + return resp, nil } + redirect := NewRequestFromURL(target) if c.CheckRedirect != nil { if err := c.CheckRedirect(redirect, via); err != nil { return resp, err diff --git a/fs.go b/fs.go index cc852b6..e44556c 100644 --- a/fs.go +++ b/fs.go @@ -96,9 +96,9 @@ func openFile(p string) (File, error) { if stat.Mode().IsRegular() { return f, nil } - return nil, ErrNotAFile + return nil, os.ErrNotExist } else if !stat.Mode().IsRegular() { - return nil, ErrNotAFile + return nil, os.ErrNotExist } } return f, nil diff --git a/gemini.go b/gemini.go index e1340ef..3cfd379 100644 --- a/gemini.go +++ b/gemini.go @@ -14,12 +14,8 @@ var ( ErrCertificateExpired = errors.New("gemini: certificate expired") ErrCertificateNotFound = errors.New("gemini: certificate not found") ErrCertificateNotTrusted = errors.New("gemini: certificate not trusted") - ErrCertificateRequired = errors.New("gemini: certificate required") - 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") + ErrBodyNotAllowed = errors.New("gemini: response body not allowed") 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. diff --git a/request.go b/request.go index f55f569..0154ab3 100644 --- a/request.go +++ b/request.go @@ -41,15 +41,12 @@ func NewRequest(rawurl string) (*Request, error) { if err != nil { return nil, err } - return NewRequestFromURL(u) + return NewRequestFromURL(u), nil } // NewRequestFromURL returns a new request for the given URL. // The host is inferred from the URL. -func NewRequestFromURL(url *url.URL) (*Request, error) { - if url.Scheme != "" && url.Scheme != "gemini" { - return nil, ErrNotAGeminiURL - } +func NewRequestFromURL(url *url.URL) *Request { host := url.Host if url.Port() == "" { host += ":1965" @@ -57,7 +54,7 @@ func NewRequestFromURL(url *url.URL) (*Request, error) { return &Request{ URL: url, Host: host, - }, nil + } } // write writes the Gemini request to the provided buffered writer.