MCPcopy
hub / github.com/caddyserver/caddy / Setup

Method Setup

caddyconfig/httpcaddyfile/httptype.go:57–364  ·  view source on GitHub ↗

Setup makes a config from the tokens.

(
	inputServerBlocks []caddyfile.ServerBlock,
	options map[string]any,
)

Source from the content-addressed store, hash-verified

55
56// Setup makes a config from the tokens.
57func (st ServerType) Setup(
58 inputServerBlocks []caddyfile.ServerBlock,
59 options map[string]any,
60) (*caddy.Config, []caddyconfig.Warning, error) {
61 var warnings []caddyconfig.Warning
62 gc := counter{new(int)}
63 state := make(map[string]any)
64
65 // load all the server blocks and associate them with a "pile" of config values
66 originalServerBlocks := make([]serverBlock, 0, len(inputServerBlocks))
67 for _, sblock := range inputServerBlocks {
68 for j, k := range sblock.Keys {
69 if j == 0 && strings.HasPrefix(k.Text, "@") {
70 return nil, warnings, fmt.Errorf("%s:%d: cannot define a matcher outside of a site block: '%s'", k.File, k.Line, k.Text)
71 }
72 if _, ok := registeredDirectives[k.Text]; ok {
73 return nil, warnings, fmt.Errorf("%s:%d: parsed '%s' as a site address, but it is a known directive; directives must appear in a site block", k.File, k.Line, k.Text)
74 }
75 }
76 originalServerBlocks = append(originalServerBlocks, serverBlock{
77 block: sblock,
78 pile: make(map[string][]ConfigValue),
79 })
80 }
81
82 // apply any global options
83 var err error
84 originalServerBlocks, err = st.evaluateGlobalOptionsBlock(originalServerBlocks, options)
85 if err != nil {
86 return nil, warnings, err
87 }
88
89 // this will replace both static and user-defined placeholder shorthands
90 // with actual identifiers used by Caddy
91 replacer := NewShorthandReplacer()
92
93 originalServerBlocks, err = st.extractNamedRoutes(originalServerBlocks, options, &warnings, replacer)
94 if err != nil {
95 return nil, warnings, err
96 }
97
98 for _, sb := range originalServerBlocks {
99 for i := range sb.block.Segments {
100 replacer.ApplyToSegment(&sb.block.Segments[i])
101 }
102
103 if len(sb.block.Keys) == 0 {
104 return nil, warnings, fmt.Errorf("server block without any key is global configuration, and if used, it must be first")
105 }
106
107 // extract matcher definitions
108 matcherDefs := make(map[string]caddy.ModuleMap)
109 for _, segment := range sb.block.Segments {
110 if dir := segment.Directive(); strings.HasPrefix(dir, matcherPrefix) {
111 d := caddyfile.NewDispenser(segment)
112 err := parseMatcherDefinitions(d, matcherDefs)
113 if err != nil {
114 return nil, warnings, err

Callers

nothing calls this directly

Implementers 1

ServerTypecaddyconfig/httpcaddyfile/httptype.go

Calls 15

extractNamedRoutesMethod · 0.95
ApplyToSegmentMethod · 0.95
serversFromPairingsMethod · 0.95
buildTLSAppMethod · 0.95
buildPKIAppMethod · 0.95
NewDispenserFunction · 0.92
JSONFunction · 0.92
JSONModuleObjectFunction · 0.92
NewShorthandReplacerFunction · 0.85

Tested by

no test coverage detected