diff options
author | Gabriel A. Giovanini <mail@gabrielgio.me> | 2024-10-05 16:47:32 +0200 |
---|---|---|
committer | Gabriel A. Giovanini <mail@gabrielgio.me> | 2024-10-05 16:47:32 +0200 |
commit | ada6a68b4f25c912705542a6b03aae7ffffb5e99 (patch) | |
tree | 63ffb7d4c2f6c8ce194f90f6b3568b9c08286bf9 | |
parent | 78af329f2c7bc1739bcd36baf45ab95aaff43434 (diff) | |
download | cerrado-ada6a68b4f25c912705542a6b03aae7ffffb5e99.tar.gz cerrado-ada6a68b4f25c912705542a6b03aae7ffffb5e99.tar.bz2 cerrado-ada6a68b4f25c912705542a6b03aae7ffffb5e99.zip |
feat: Make syntax highlight configurable
Now cerrado has configurable theme through "syntax-highlight".
-rw-r--r-- | config.example.scfg | 1 | ||||
-rw-r--r-- | main.go | 16 | ||||
-rw-r--r-- | pkg/config/config.go | 50 | ||||
-rw-r--r-- | pkg/config/config_test.go | 9 | ||||
-rw-r--r-- | pkg/handler/git/handler.go | 10 |
5 files changed, 58 insertions, 28 deletions
diff --git a/config.example.scfg b/config.example.scfg index f29e3ca..0c27591 100644 --- a/config.example.scfg +++ b/config.example.scfg @@ -5,6 +5,7 @@ listen-addr unix://var/run/cerrado.sock root-readme /srv/git/README.md passphrase $2a$14$VnB/ZcB1DUDkMnosRA6Y7.dj8h5eroslDxTeXlLwfQX/x86mh6WAq aes-key 8XHptZxSWCGs1m7QzztX5zNQ7D9NiQevVX0DaUTNMbDpRwFzoJiB0U7K6O/kqIt01jJVgzBUfiR8ES46ZLLb4w== +syntax-highlight monokailight scan /srv/git/ { public true @@ -11,6 +11,7 @@ import ( "os/signal" "time" + "github.com/alecthomas/chroma/v2/styles" "golang.org/x/crypto/bcrypt" "git.gabrielgio.me/cerrado/pkg/config" @@ -71,9 +72,7 @@ func key() error { } func run(ctx context.Context) error { - var ( - configPath = flag.String("config", "/etc/cerrado.scfg", "File path for the configuration file") - ) + configPath := flag.String("config", "/etc/cerrado.scfg", "File path for the configuration file") flag.Parse() @@ -83,6 +82,17 @@ func run(ctx context.Context) error { return err } + // checking chroma configurationo + + if _, ok := styles.Registry[configRepo.GetSyntaxHighlight()]; !ok { + slog.Warn( + "Invalid Syntax highlight selected", + "invalid-style", configRepo.GetSyntaxHighlight(), + "using", "monokailight", + ) + styles.Fallback = styles.Registry["monokailight"] + } + // services gitService := service.NewGitService(configRepo) diff --git a/pkg/config/config.go b/pkg/config/config.go index 902ff0d..812a06e 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -30,12 +30,13 @@ type ( // configuration represents file configuration. // fields needs to be exported to cmp to work configuration struct { - Scan *scan - RootReadme string - ListenAddr string - Passphrase string - AESKey string - Repositories []*GitRepositoryConfiguration + Scan *scan + RootReadme string + ListenAddr string + Passphrase string + SyntaxHighlight string + AESKey string + Repositories []*GitRepositoryConfiguration } // This is a per repository configuration. @@ -52,11 +53,12 @@ type ( // This holds all the function necessary to ask for configuration // information. ConfigurationRepository struct { - rootReadme string - listenAddr string - passphrase string - aesKey string - repositories []*GitRepositoryConfiguration + rootReadme string + listenAddr string + passphrase string + aesKey string + syntaxHighlight string + repositories []*GitRepositoryConfiguration } ) @@ -72,11 +74,12 @@ func LoadConfigurationRepository(configPath string) (*ConfigurationRepository, e } repo := &ConfigurationRepository{ - rootReadme: config.RootReadme, - listenAddr: config.ListenAddr, - repositories: config.Repositories, - passphrase: config.Passphrase, - aesKey: config.AESKey, + aesKey: config.AESKey, + listenAddr: config.ListenAddr, + passphrase: config.Passphrase, + repositories: config.Repositories, + rootReadme: config.RootReadme, + syntaxHighlight: config.SyntaxHighlight, } if config.Scan.Path != "" { @@ -87,7 +90,6 @@ func LoadConfigurationRepository(configPath string) (*ConfigurationRepository, e } return repo, nil - } // GetRootReadme returns root read path @@ -95,6 +97,10 @@ func (c *ConfigurationRepository) GetRootReadme() string { return c.rootReadme } +func (c *ConfigurationRepository) GetSyntaxHighlight() string { + return c.syntaxHighlight +} + func (c *ConfigurationRepository) GetListenAddr() string { return c.listenAddr } @@ -186,6 +192,11 @@ func parse(r io.Reader) (*configuration, error) { return nil, err } + err = setSyntaxHighlight(block, &config.SyntaxHighlight) + if err != nil { + return nil, err + } + err = setRepositories(block, &config.Repositories) if err != nil { return nil, err @@ -289,6 +300,11 @@ func setAESKey(block scfg.Block, listenAddr *string) error { return setString(scanDir, listenAddr) } +func setSyntaxHighlight(block scfg.Block, listenAddr *string) error { + scanDir := block.Get("syntax-highlight") + return setString(scanDir, listenAddr) +} + func setListenAddr(block scfg.Block, listenAddr *string) error { scanDir := block.Get("listen-addr") return setString(scanDir, listenAddr) diff --git a/pkg/config/config_test.go b/pkg/config/config_test.go index 0970cfa..9080351 100644 --- a/pkg/config/config_test.go +++ b/pkg/config/config_test.go @@ -105,6 +105,7 @@ repository /srv/git/cerrado.git { listen-addr unix://var/run/cerrado/cerrado.sock passphrase $2a$14$VnB/ZcB1DUDkMnosRA6Y7.dj8h5eroslDxTeXlLwfQX/x86mh6WAq aes-key 8XHptZxSWCGs1m7QzztX5zNQ7D9NiQevVX0DaUTNMbDpRwFzoJiB0U7K6O/kqIt01jJVgzBUfiR8ES46ZLLb4w== +syntax-highlight monokailight scan "/srv/git" { public true @@ -123,9 +124,10 @@ repository /srv/git/cerrado.git { Public: true, Path: "/srv/git", }, - ListenAddr: "unix://var/run/cerrado/cerrado.sock", - Passphrase: "$2a$14$VnB/ZcB1DUDkMnosRA6Y7.dj8h5eroslDxTeXlLwfQX/x86mh6WAq", - AESKey: "8XHptZxSWCGs1m7QzztX5zNQ7D9NiQevVX0DaUTNMbDpRwFzoJiB0U7K6O/kqIt01jJVgzBUfiR8ES46ZLLb4w==", + ListenAddr: "unix://var/run/cerrado/cerrado.sock", + Passphrase: "$2a$14$VnB/ZcB1DUDkMnosRA6Y7.dj8h5eroslDxTeXlLwfQX/x86mh6WAq", + AESKey: "8XHptZxSWCGs1m7QzztX5zNQ7D9NiQevVX0DaUTNMbDpRwFzoJiB0U7K6O/kqIt01jJVgzBUfiR8ES46ZLLb4w==", + SyntaxHighlight: "monokailight", Repositories: []*GitRepositoryConfiguration{ { Name: "linux.git", @@ -158,6 +160,5 @@ repository /srv/git/cerrado.git { t.Errorf("Wrong result given - wanted + got\n %s", diff) } }) - } } diff --git a/pkg/handler/git/handler.go b/pkg/handler/git/handler.go index 6fae146..5739c8e 100644 --- a/pkg/handler/git/handler.go +++ b/pkg/handler/git/handler.go @@ -27,18 +27,19 @@ import ( type ( GitHandler struct { gitService *service.GitService - readmePath string + config configurationRepository } configurationRepository interface { GetRootReadme() string + GetSyntaxHighlight() string } ) func NewGitHandler(gitService *service.GitService, confRepo configurationRepository) *GitHandler { return &GitHandler{ gitService: gitService, - readmePath: confRepo.GetRootReadme(), + config: confRepo, } } @@ -48,7 +49,7 @@ func (g *GitHandler) List(w http.ResponseWriter, _ *http.Request) error { return err } - f, err := os.Open(g.readmePath) + f, err := os.Open(g.config.GetRootReadme()) if err != nil { return err } @@ -280,7 +281,8 @@ func (g *GitHandler) Blob(w http.ResponseWriter, r *http.Request) error { filename := filepath.Base(rest) lexer := GetLexers(filename) - style := styles.Get("xcode") + style := styles.Get(g.config.GetSyntaxHighlight()) + formatter := html.New( html.WithLineNumbers(true), html.WithLinkableLineNumbers(true, "L"), |