diff options
| -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"), | 
