diff --git a/.gitignore b/.gitignore index 0864b5b..7dcac90 100644 --- a/.gitignore +++ b/.gitignore @@ -60,4 +60,5 @@ fabric.properties # Built Visual Studio Code Extensions *.vsix -config-local.yaml \ No newline at end of file +config-local.yaml +gitea-pages \ No newline at end of file diff --git a/Makefile b/Makefile index 70eb817..0edcdff 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,11 @@ fmt: @(test -f "$(GOPATH)/bin/gofumpt" || go install mvdan.cc/gofumpt@latest) && \ - "$(GOPATH)/bin/gofumpt" -l -w . \ No newline at end of file + "$(GOPATH)/bin/gofumpt" -l -w . + +gitea-pages: $(shell find . -type f -name "*.go" ) go.mod go.sum + @CGO_ENABLED=0 go build -o $@ . + +.PHONY: debug + +debug: gitea-pages + @./gitea-pages -conf config-local.yaml -debug \ No newline at end of file diff --git a/config.go b/config.go index dfc48e6..60fc0cc 100644 --- a/config.go +++ b/config.go @@ -12,8 +12,6 @@ type Config struct { Auth ConfigAuth `yaml:"auth"` // 后端认证配置 Cache ConfigCache `yaml:"cache"` // 缓存配置 - - Storage string `yaml:"storage"` // 持久化配置 } type ConfigAuth struct { @@ -24,6 +22,7 @@ type ConfigAuth struct { } type ConfigCache struct { - ttl time.Duration `yaml:"ttl"` // 缓存时间 - length int `yaml:"length"` // 最大文件大小 + ttl time.Duration `yaml:"ttl"` // 缓存时间 + singleSize int `yaml:"single_size"` // 单个文件最大大小 + maxSize int `yaml:"max_size"` // 最大文件大小 } diff --git a/main.go b/main.go index da29a2c..63f02e7 100644 --- a/main.go +++ b/main.go @@ -1,4 +1,61 @@ package main -func main() { +import ( + "flag" + "log" + "log/slog" + "net/http" + "os" + + "code.d7z.net/d7z-project/gitea-pages/pkg" + "code.d7z.net/d7z-project/gitea-pages/pkg/providers" + + "gopkg.in/yaml.v3" +) + +var ( + configPath = "config-local.yaml" + debug = false + config = &Config{} +) + +func init() { + flag.StringVar(&configPath, "conf", configPath, "config file path") + flag.BoolVar(&debug, "debug", debug, "debug mode") +} + +func main() { + flag.Parse() + debugInject() + loadConf() + gitea, err := providers.NewGitea(config.Auth.Server, config.Auth.Token) + if err != nil { + log.Fatalln(err) + } + server := pkg.NewPageServer(gitea, pkg.DefaultOptions(config.Domain)) + mux := http.NewServeMux() + mux.Handle("/", server) + defer server.Close() + _ = http.ListenAndServe(config.Bind, mux) +} + +func debugInject() { + programLevel := new(slog.LevelVar) + programLevel.Set(slog.LevelDebug) + if debug { + h := slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{Level: programLevel}) + slog.SetDefault(slog.New(h)) + } + slog.Debug("debug mode") +} + +func loadConf() { + file, err := os.ReadFile(configPath) + if err != nil { + log.Fatalf("read config file failed: %v", err) + } + err = yaml.Unmarshal(file, &config) + if err != nil { + log.Fatalf("parse config file failed: %v", err) + } } diff --git a/pkg/core/page.go b/pkg/core/page.go index 4c71889..7255b0e 100644 --- a/pkg/core/page.go +++ b/pkg/core/page.go @@ -3,6 +3,7 @@ package core import ( "errors" "fmt" + "log/slog" "os" "strings" ) @@ -41,6 +42,7 @@ func (p *PageDomain) ParseDomainMeta(domain, path, branch string) (*PageDomainCo rel := &PageDomainContent{} if !strings.HasSuffix(domain, "."+p.baseDomain) { + slog.Debug("Page Domain does not end with ."+p.baseDomain, "domain", domain) return nil, os.ErrNotExist } diff --git a/pkg/server.go b/pkg/server.go index a11ce0c..d40aa80 100644 --- a/pkg/server.go +++ b/pkg/server.go @@ -57,21 +57,21 @@ func NewPageServer(backend core.Backend, options ServerOptions) *Server { } func (s *Server) ServeHTTP(writer http.ResponseWriter, request *http.Request) { - meta, err := s.meta.ParseDomainMeta(request.Method, request.RequestURI, request.URL.Query().Get("branch")) + meta, err := s.meta.ParseDomainMeta(request.Host, request.RequestURI, request.URL.Query().Get("branch")) if err != nil { if errors.Is(err, os.ErrNotExist) { - s.writeError(writer, err) - } else { s.writeNotfoundError(writer, request.RequestURI) + } else { + s.writeError(writer, err) } return } result, err := s.reader.Open(meta.Owner, meta.Repo, meta.CommitID, meta.Path) if err != nil { if errors.Is(err, os.ErrNotExist) { - s.writeError(writer, err) - } else { s.writeNotfoundError(writer, request.RequestURI) + } else { + s.writeError(writer, err) } return } diff --git a/pkg/utils/cache.go b/pkg/utils/cache.go index f82642d..88e9d11 100644 --- a/pkg/utils/cache.go +++ b/pkg/utils/cache.go @@ -27,6 +27,7 @@ type Cache interface { var ErrCacheOutOfMemory = errors.New("内容无法被缓存,超过最大限定值") // TODO: 优化锁结构 +// 复杂场景请使用其他缓存服务 type CacheMemory struct { l sync.RWMutex