LoadConfig attempts to load the configuration from a byte slice. On error, it returns nil.
(config []byte)
| 703 | // LoadConfig attempts to load the configuration from a byte slice. |
| 704 | // On error, it returns nil. |
| 705 | func LoadConfig(config []byte) (*Config, error) { |
| 706 | var cfg = &Config{} |
| 707 | err := json.Unmarshal(config, &cfg) |
| 708 | if err != nil { |
| 709 | return nil, cferr.Wrap(cferr.PolicyError, cferr.InvalidPolicy, |
| 710 | errors.New("failed to unmarshal configuration: "+err.Error())) |
| 711 | } |
| 712 | |
| 713 | if cfg.Signing == nil { |
| 714 | return nil, errors.New("No \"signing\" field present") |
| 715 | } |
| 716 | |
| 717 | if cfg.Signing.Default == nil { |
| 718 | log.Debugf("no default given: using default config") |
| 719 | cfg.Signing.Default = DefaultConfig() |
| 720 | } else { |
| 721 | if err := cfg.Signing.Default.populate(cfg); err != nil { |
| 722 | return nil, err |
| 723 | } |
| 724 | } |
| 725 | |
| 726 | for k := range cfg.Signing.Profiles { |
| 727 | if err := cfg.Signing.Profiles[k].populate(cfg); err != nil { |
| 728 | return nil, err |
| 729 | } |
| 730 | } |
| 731 | |
| 732 | if !cfg.Valid() { |
| 733 | return nil, cferr.Wrap(cferr.PolicyError, cferr.InvalidPolicy, errors.New("invalid configuration")) |
| 734 | } |
| 735 | |
| 736 | log.Debugf("configuration ok") |
| 737 | return cfg, nil |
| 738 | } |
searching dependent graphs…