MCPcopy Index your code
hub / github.com/foxcpp/maddy / expandCommand

Method expandCommand

internal/imap_filter/command/command.go:100–159  ·  view source on GitHub ↗
(msgMeta *module.MsgMetadata, accountName string, rcptTo string, hdr textproto.Header)

Source from the content-addressed store, hash-verified

98}
99
100func (c *Check) expandCommand(msgMeta *module.MsgMetadata, accountName string, rcptTo string, hdr textproto.Header) (string, []string) {
101 expArgs := make([]string, len(c.cmdArgs))
102
103 for i, arg := range c.cmdArgs {
104 expArgs[i] = placeholderRe.ReplaceAllStringFunc(arg, func(placeholder string) string {
105 switch placeholder {
106 case "{auth_user}":
107 if msgMeta.Conn == nil {
108 return ""
109 }
110 return msgMeta.Conn.AuthUser
111 case "{source_ip}":
112 if msgMeta.Conn == nil {
113 return ""
114 }
115 tcpAddr, _ := msgMeta.Conn.RemoteAddr.(*net.TCPAddr)
116 if tcpAddr == nil {
117 return ""
118 }
119 return tcpAddr.IP.String()
120 case "{source_host}":
121 if msgMeta.Conn == nil {
122 return ""
123 }
124 return msgMeta.Conn.Hostname
125 case "{source_rdns}":
126 if msgMeta.Conn == nil {
127 return ""
128 }
129 valI, err := msgMeta.Conn.RDNSName.Get()
130 if err != nil {
131 return ""
132 }
133 if valI == nil {
134 return ""
135 }
136 return valI.(string)
137 case "{msg_id}":
138 return msgMeta.ID
139 case "{sender}":
140 return msgMeta.OriginalFrom
141 case "{rcpt_to}":
142 return rcptTo
143 case "{original_rcpt_to}":
144 oldestOriginalRcpt := rcptTo
145 for originalRcpt, ok := rcptTo, true; ok; originalRcpt, ok = msgMeta.OriginalRcpts[originalRcpt] {
146 oldestOriginalRcpt = originalRcpt
147 }
148 return oldestOriginalRcpt
149 case "{subject}":
150 return hdr.Get("Subject")
151 case "{account_name}":
152 return accountName
153 }
154 return placeholder
155 })
156 }
157

Callers 1

IMAPFilterMethod · 0.95

Implementers 10

Checkinternal/testutils/check.go
Checkinternal/check/skeleton.go
statelessCheckinternal/check/stateless_check.go
Checkinternal/check/spf/spf.go
DNSBLinternal/check/dnsbl/dnsbl.go
Checkinternal/check/rspamd/rspamd.go
Checkinternal/check/command/command.go
Checkinternal/check/dkim/dkim.go
Checkinternal/check/milter/milter.go
Checkinternal/check/authorize_sender/author

Calls 2

StringMethod · 0.45
GetMethod · 0.45

Tested by

no test coverage detected