123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- package auth
- import (
- "context"
- "fmt"
- "io"
- "net/http"
- "net/url"
- "runtime"
- "strconv"
- "github.com/jmorganca/ollama/version"
- )
- type RegistryOptions struct {
- Insecure bool
- Username string
- Password string
- Token string
- }
- func MakeRequest(ctx context.Context, method string, requestURL *url.URL, headers http.Header, body io.Reader, regOpts *RegistryOptions) (*http.Response, error) {
- if requestURL.Scheme != "http" && regOpts != nil && regOpts.Insecure {
- requestURL.Scheme = "http"
- }
- req, err := http.NewRequestWithContext(ctx, method, requestURL.String(), body)
- if err != nil {
- return nil, err
- }
- if headers != nil {
- req.Header = headers
- }
- if regOpts != nil {
- if regOpts.Token != "" {
- req.Header.Set("Authorization", "Bearer "+regOpts.Token)
- } else if regOpts.Username != "" && regOpts.Password != "" {
- req.SetBasicAuth(regOpts.Username, regOpts.Password)
- }
- }
- req.Header.Set("User-Agent", fmt.Sprintf("ollama/%s (%s %s) Go/%s", version.Version, runtime.GOARCH, runtime.GOOS, runtime.Version()))
- if s := req.Header.Get("Content-Length"); s != "" {
- contentLength, err := strconv.ParseInt(s, 10, 64)
- if err != nil {
- return nil, err
- }
- req.ContentLength = contentLength
- }
- proxyURL, err := http.ProxyFromEnvironment(req)
- if err != nil {
- return nil, err
- }
- client := http.Client{
- Transport: &http.Transport{
- Proxy: http.ProxyURL(proxyURL),
- },
- }
- resp, err := client.Do(req)
- if err != nil {
- return nil, err
- }
- return resp, nil
- }
|