// Copyright 2024 Matthew Rich . All rights reserved. package transport import ( _ "errors" "io" _ "os" "net/url" "net/http" "context" "path/filepath" "fmt" ) type HTTPReader struct { *HTTP get *HTTPConnection } func NewHTTPReader(u *url.URL, ctx context.Context) (h *HTTPReader, err error) { h = &HTTPReader { HTTP: &HTTP { ctx: ctx, uri: u, path: filepath.Join(u.Hostname(), u.RequestURI()), Client: http.DefaultClient, }, get: NewHTTPConnection(http.DefaultClient), } h.extension() h.DetectGzip() err = h.get.NewGetRequest(h.ctx, h.uri.String()) return } func (h *HTTPReader) Signature() (documentSignature string) { if h.get.Response() != nil { documentSignature = h.get.Response().Header.Get("Signature") if documentSignature == "" { signatureResp, signatureErr := h.Client.Get(fmt.Sprintf("%s.sig", h.uri.String())) if signatureErr == nil { defer signatureResp.Body.Close() readSignatureBody, readSignatureErr := io.ReadAll(signatureResp.Body) if readSignatureErr == nil { documentSignature = string(readSignatureBody) } } } } return documentSignature } func (h *HTTPReader) ContentType() (contenttype string) { contenttype = h.get.Response().Header.Get("Content-Type") switch contenttype { case "application/octet-stream": return h.exttype default: } return } func (h *HTTPReader) Reader() io.ReadCloser { return h.get } func (h *HTTPReader) GetRequest() *http.Request { return h.get.Request() } func (h *HTTPReader) GetResponse() *http.Response { return h.get.Response() }