63 lines
1.3 KiB
Go
63 lines
1.3 KiB
Go
// Package main ...
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"log"
|
|
"net/http"
|
|
"os"
|
|
"strings"
|
|
|
|
"git.mills.io/prologic/pages-server/gitea"
|
|
)
|
|
|
|
// GiteaHandler ...
|
|
type GiteaHandler struct {
|
|
Client *gitea.Client
|
|
|
|
Server string
|
|
Domain string
|
|
Token string
|
|
}
|
|
|
|
// Init ...
|
|
func (h *GiteaHandler) Init() error {
|
|
var err error
|
|
h.Client, err = gitea.NewClient(h.Server, h.Token, h.Domain)
|
|
|
|
return err
|
|
}
|
|
|
|
// ServeHTTP ...
|
|
func (h *GiteaHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|
// remove the domain if it's set (works fine if it's empty)
|
|
user := strings.TrimRight(strings.TrimSuffix(r.Host, h.Domain), ".")
|
|
log.Printf("user: %s", user)
|
|
|
|
f, err := h.Client.Open(user, r.URL.Path)
|
|
if err != nil {
|
|
http.Error(w, fmt.Sprintf("error resource not found: %s", err.Error()), http.StatusNotFound)
|
|
return
|
|
}
|
|
|
|
if _, err := io.Copy(w, f); err != nil {
|
|
http.Error(w, "Internal Server Error", http.StatusInternalServerError)
|
|
}
|
|
}
|
|
|
|
func main() {
|
|
handler := &GiteaHandler{
|
|
Domain: os.Getenv("DOMAIN"),
|
|
Server: os.Getenv("GITEA_URL"),
|
|
Token: os.Getenv("GITEA_TOKEN"),
|
|
}
|
|
if err := handler.Init(); err != nil {
|
|
log.Fatalf("error initializing handler: %s", err)
|
|
}
|
|
|
|
if err := http.ListenAndServe("0.0.0.0:8000", handler); err != nil {
|
|
log.Fatalf("error running server: %s", err)
|
|
}
|
|
}
|