diff options
Diffstat (limited to 'pkg/handler/config')
| -rw-r--r-- | pkg/handler/config/handler.go | 65 | 
1 files changed, 65 insertions, 0 deletions
| diff --git a/pkg/handler/config/handler.go b/pkg/handler/config/handler.go new file mode 100644 index 0000000..c278e35 --- /dev/null +++ b/pkg/handler/config/handler.go @@ -0,0 +1,65 @@ +package config + +import ( +	"bytes" +	"encoding/json" +	"log/slog" +	"net/http" + +	"github.com/alecthomas/chroma/v2/formatters/html" +	"github.com/alecthomas/chroma/v2/lexers" +	"github.com/alecthomas/chroma/v2/styles" + +	"git.gabrielgio.me/cerrado/pkg/config" +	"git.gabrielgio.me/cerrado/templates" +) + +type ( +	configurationRepository interface { +		GetRootReadme() string +		List() []*config.GitRepositoryConfiguration +	} +) + +func ConfigFile(configRepo configurationRepository) func(http.ResponseWriter, *http.Request) { +	return func(w http.ResponseWriter, _ *http.Request) { + +		config := struct { +			RootReadme   string +			Repositories []*config.GitRepositoryConfiguration +		}{ +			RootReadme:   configRepo.GetRootReadme(), +			Repositories: configRepo.List(), +		} + +		b, err := json.MarshalIndent(config, "", "  ") +		if err != nil { +			slog.Error("Error parsing json", "error", err) +			return +		} + +		lexer := lexers.Get("json") +		style := styles.Get("monokailight") +		formatter := html.New( +			html.WithLineNumbers(true), +		) +		iterator, err := lexer.Tokenise(nil, string(b)) +		if err != nil { +			slog.Error("Error tokenise", "error", err) +			return +		} + +		var code bytes.Buffer +		err = formatter.Format(&code, style, iterator) +		if err != nil { +			slog.Error("Error format", "error", err) +			return +		} + +		hello := &templates.HelloPage{ +			Body: code.Bytes(), +		} + +		templates.WritePageTemplate(w, hello) +	} +} | 
