MCPcopy Create free account
hub / github.com/foxcpp/maddy / parseMsgPipelineRootCfg

Function parseMsgPipelineRootCfg

internal/msgpipeline/config.go:49–158  ·  view source on GitHub ↗
(globals map[string]interface{}, nodes []config.Node)

Source from the content-addressed store, hash-verified

47}
48
49func parseMsgPipelineRootCfg(globals map[string]interface{}, nodes []config.Node) (msgpipelineCfg, error) {
50 cfg := msgpipelineCfg{
51 perSource: map[string]sourceBlock{},
52 }
53 var defaultSrcRaw []config.Node
54 var othersRaw []config.Node
55 for _, node := range nodes {
56 switch node.Name {
57 case "check":
58 globalChecks, err := parseChecksGroup(globals, node)
59 if err != nil {
60 return msgpipelineCfg{}, err
61 }
62
63 cfg.globalChecks = append(cfg.globalChecks, globalChecks...)
64 case "modify":
65 globalModifiers, err := parseModifiersGroup(globals, node)
66 if err != nil {
67 return msgpipelineCfg{}, err
68 }
69
70 cfg.globalModifiers.Modifiers = append(cfg.globalModifiers.Modifiers, globalModifiers.Modifiers...)
71 case "source_in":
72 var tbl module.Table
73 if err := modconfig.ModuleFromNode("table", node.Args, config.Node{}, globals, &tbl); err != nil {
74 return msgpipelineCfg{}, err
75 }
76 srcBlock, err := parseMsgPipelineSrcCfg(globals, node.Children)
77 if err != nil {
78 return msgpipelineCfg{}, err
79 }
80 cfg.sourceIn = append(cfg.sourceIn, sourceIn{
81 t: tbl,
82 block: srcBlock,
83 })
84 case "source":
85 srcBlock, err := parseMsgPipelineSrcCfg(globals, node.Children)
86 if err != nil {
87 return msgpipelineCfg{}, err
88 }
89
90 if len(node.Args) == 0 {
91 return msgpipelineCfg{}, config.NodeErr(node, "expected at least one source matching rule")
92 }
93
94 for _, rule := range node.Args {
95 if strings.Contains(rule, "@") {
96 rule, err = address.ForLookup(rule)
97 } else {
98 rule, err = dns.ForLookup(rule)
99 }
100 if err != nil {
101 return msgpipelineCfg{}, config.NodeErr(node, "invalid source match rule: %v: %v", rule, err)
102 }
103
104 if !validMatchRule(rule) {
105 return msgpipelineCfg{}, config.NodeErr(node, "invalid source routing rule: %v", rule)
106 }

Calls 7

NodeErrFunction · 0.92
ForLookupFunction · 0.92
ForLookupFunction · 0.92
parseChecksGroupFunction · 0.85
parseModifiersGroupFunction · 0.85
parseMsgPipelineSrcCfgFunction · 0.85
validMatchRuleFunction · 0.85