diff options
Diffstat (limited to 'pkg/handler')
| -rw-r--r-- | pkg/handler/git/handler.go | 40 | ||||
| -rw-r--r-- | pkg/handler/router.go | 2 | 
2 files changed, 39 insertions, 3 deletions
| diff --git a/pkg/handler/git/handler.go b/pkg/handler/git/handler.go index 28cc99e..7bdf372 100644 --- a/pkg/handler/git/handler.go +++ b/pkg/handler/git/handler.go @@ -2,8 +2,10 @@ package git  import (  	"bytes" +	"io"  	"log/slog"  	"net/http" +	"os"  	"path/filepath"  	"git.gabrielgio.me/cerrado/pkg/ext" @@ -15,11 +17,15 @@ import (  	"github.com/alecthomas/chroma/v2/styles"  	"github.com/go-git/go-git/v5/plumbing"  	"github.com/go-git/go-git/v5/plumbing/object" +	"github.com/gomarkdown/markdown" +	markdownhtml "github.com/gomarkdown/markdown/html" +	"github.com/gomarkdown/markdown/parser"  )  type (  	GitHandler struct {  		gitService gitService +		readmePath string  	}  	gitService interface { @@ -31,11 +37,16 @@ type (  		ListTags(name string) ([]*object.Tag, error)  		ListBranches(name string) ([]*plumbing.Reference, error)  	} + +	configurationRepository interface { +		GetRootReadme() string +	}  ) -func NewGitHandler(gitService gitService) *GitHandler { +func NewGitHandler(gitService gitService, confRepo configurationRepository) *GitHandler {  	return &GitHandler{  		gitService: gitService, +		readmePath: confRepo.GetRootReadme(),  	}  } @@ -46,7 +57,32 @@ func (g *GitHandler) List(w http.ResponseWriter, _ *http.Request) {  		return  	} -	gitList := &templates.GitListPage{repos} +	f, err := os.Open(g.readmePath) +	if err != nil { +		slog.Error("Error loading readme file", "error", err) +		return +	} + +	bs, err := io.ReadAll(f) +	if err != nil { +		slog.Error("Error reading readme file bytes", "error", err) +		return +	} + +	extensions := parser.CommonExtensions | parser.AutoHeadingIDs | parser.NoEmptyLineBeforeBlock +	p := parser.NewWithExtensions(extensions) +	doc := p.Parse(bs) + +	htmlFlag := markdownhtml.CommonFlags | markdownhtml.HrefTargetBlank +	opts := markdownhtml.RendererOptions{Flags: htmlFlag} +	renderer := markdownhtml.NewRenderer(opts) + +	bs = markdown.Render(doc, renderer) + +	gitList := &templates.GitListPage{ +		Respositories: repos, +		About:         bs, +	}  	templates.WritePageTemplate(w, gitList)  } diff --git a/pkg/handler/router.go b/pkg/handler/router.go index de5117c..bf13ad5 100644 --- a/pkg/handler/router.go +++ b/pkg/handler/router.go @@ -20,7 +20,7 @@ func MountHandler(  	configRepo *serverconfig.ConfigurationRepository,  ) (http.Handler, error) {  	var ( -		gitHandler   = git.NewGitHandler(gitService) +		gitHandler   = git.NewGitHandler(gitService, configRepo)  		aboutHandler = about.NewAboutHandler(configRepo)  		configHander = config.ConfigFile(configRepo)  	) | 
