Skip to content
Snippets Groups Projects
proxy.go 1.18 KiB
Newer Older
ale's avatar
ale committed
package main

import (
	"encoding/base64"
	"flag"
ale's avatar
ale committed
	"net/http"
	"net/http/httputil"
	"net/url"

	"github.com/coreos/go-systemd/v22/activation"
ale's avatar
ale committed
)

var (
	addr       = flag.String("addr", "127.0.0.1:11434", "address to listen on")
	useSystemd = flag.Bool("systemd-activation", false, "use systemd activation")
	token      = flag.String("token", "", "bearer token for authentication")
	target     = flag.String("target", "https://ollama.ula.inventati.org", "target hostname")
ale's avatar
ale committed
)

func newSystemdListener() (net.Listener, error) {
	listeners, err := activation.Listeners()
	if err != nil {
		return nil, err
	}
	return listeners[0], nil
}

func newListener() (net.Listener, error) {
	if *useSystemd {
		return newSystemdListener()
	}
	return net.Listen("tcp", *addr)
}

ale's avatar
ale committed
func main() {
	flag.Parse()

	authHdr := "Bearer " + base64.StdEncoding.EncodeToString([]byte(*token))
	targetURI, _ := url.Parse(*target)

	proxy := &httputil.ReverseProxy{
		Rewrite: func(req *httputil.ProxyRequest) {
			req.SetURL(targetURI)
			req.Out.Header.Set("Authorization", authHdr)
		},
	}

	l, err := newListener()
	if err != nil {
		log.Fatal(err)
	}

	if err := http.Serve(l, proxy); err != nil {
		log.Fatal(err)
	}
ale's avatar
ale committed
}