| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- package config
- import (
- "github.com/google/uuid"
- log "github.com/sirupsen/logrus"
- "strings"
- )
- // Sanitize will look for common configuration issues, and fix them. For example,
- // populating undefined fields - name -> title, etc.
- func (cfg *Config) Sanitize() {
- cfg.sanitizeLogLevel()
- // log.Infof("cfg %p", cfg)
- for idx := range cfg.Actions {
- cfg.Actions[idx].sanitize(cfg)
- }
- }
- func (cfg *Config) sanitizeLogLevel() {
- if logLevel, err := log.ParseLevel(cfg.LogLevel); err == nil {
- log.Info("Setting log level to ", logLevel)
- log.SetLevel(logLevel)
- }
- }
- func (action *Action) sanitize(cfg *Config) {
- if action.Timeout < 3 {
- action.Timeout = 3
- }
- action.ID = getActionID(action)
- action.Icon = lookupHTMLIcon(action.Icon, cfg.DefaultIconForActions)
- action.PopupOnStart = sanitizePopupOnStart(action.PopupOnStart, cfg)
- if action.MaxConcurrent < 1 {
- action.MaxConcurrent = 1
- }
- for idx := range action.Arguments {
- action.Arguments[idx].sanitize()
- }
- sanitizeAuthRequireGuestsToLogin(cfg)
- sanitizeLogHistoryPageSize(cfg)
- }
- func sanitizeAuthRequireGuestsToLogin(cfg *Config) {
- if cfg.AuthRequireGuestsToLogin {
- log.Infof("AuthRequireGuestsToLogin is enabled. All defaultPermissions will be set to false")
- cfg.DefaultPermissions.View = false
- cfg.DefaultPermissions.Exec = false
- cfg.DefaultPermissions.Logs = false
- }
- }
- func sanitizeLogHistoryPageSize(cfg *Config) {
- if cfg.LogHistoryPageSize < 10 {
- log.Warnf("LogsHistoryLimit is too low, setting it to 10")
- cfg.LogHistoryPageSize = 10
- } else if cfg.LogHistoryPageSize > 100 {
- log.Warnf("LogsHistoryLimit is high, you can do this, but expect browser lag.")
- }
- }
- func getActionID(action *Action) string {
- if action.ID == "" {
- return uuid.NewString()
- }
- if strings.Contains(action.ID, "{{") {
- log.Fatalf("Action IDs cannot contain variables")
- }
- return action.ID
- }
- //gocyclo:ignore
- func sanitizePopupOnStart(raw string, cfg *Config) string {
- switch raw {
- case "execution-dialog":
- return raw
- case "execution-dialog-output-html":
- return raw
- case "execution-dialog-stdout-only":
- return raw
- case "execution-button":
- return raw
- default:
- return cfg.DefaultPopupOnStart
- }
- }
- func (arg *ActionArgument) sanitize() {
- if arg.Title == "" {
- arg.Title = arg.Name
- }
- for idx, choice := range arg.Choices {
- if choice.Title == "" {
- arg.Choices[idx].Title = choice.Value
- }
- }
- arg.sanitizeNoType()
- // TODO Validate the default against the type checker, but this creates a
- // import loop
- }
- func (arg *ActionArgument) sanitizeNoType() {
- if len(arg.Choices) == 0 && arg.Type == "" {
- log.WithFields(log.Fields{
- "arg": arg.Name,
- }).Warn("Argument type isn't set, will default to 'ascii' but this may not be safe. You should set a type specifically.")
- arg.Type = "ascii"
- }
- }
|