(ctx context.Context, hdr textproto.Header, body buffer.Buffer)
| 216 | } |
| 217 | |
| 218 | func (s *state) CheckBody(ctx context.Context, hdr textproto.Header, body buffer.Buffer) module.CheckResult { |
| 219 | bodyR, err := body.Open() |
| 220 | if err != nil { |
| 221 | return module.CheckResult{ |
| 222 | Reject: true, |
| 223 | Reason: exterrors.WithFields(err, map[string]interface{}{"check": modName}), |
| 224 | } |
| 225 | } |
| 226 | |
| 227 | var buf bytes.Buffer |
| 228 | if err := textproto.WriteHeader(&buf, hdr); err != nil { |
| 229 | return module.CheckResult{ |
| 230 | Reject: true, |
| 231 | Reason: exterrors.WithFields(err, map[string]interface{}{"check": modName}), |
| 232 | } |
| 233 | } |
| 234 | |
| 235 | r, err := http.NewRequest("POST", s.c.apiPath+"/checkv2", io.MultiReader(&buf, bodyR)) |
| 236 | if err != nil { |
| 237 | return module.CheckResult{ |
| 238 | Reject: true, |
| 239 | Reason: exterrors.WithFields(err, map[string]interface{}{"check": modName}), |
| 240 | } |
| 241 | } |
| 242 | |
| 243 | r.Header.Add("Pass", "all") // TODO: does that need to be configurable? |
| 244 | // TODO: include version (needs maddy.Version moved somewhere to break circular dependency) |
| 245 | r.Header.Add("User-Agent", "maddy") |
| 246 | if s.c.tag != "" { |
| 247 | r.Header.Add("MTA-Tag", s.c.tag) |
| 248 | } |
| 249 | if s.c.settingsID != "" { |
| 250 | r.Header.Add("Settings-ID", s.c.settingsID) |
| 251 | } |
| 252 | if s.c.mtaName != "" { |
| 253 | r.Header.Add("MTA-Name", s.c.mtaName) |
| 254 | } |
| 255 | |
| 256 | addConnHeaders(r, s.msgMeta, s.mailFrom, s.rcpt) |
| 257 | r.Header.Add("Content-Length", strconv.Itoa(body.Len())) |
| 258 | |
| 259 | resp, err := s.c.client.Do(r) |
| 260 | if err != nil { |
| 261 | return s.c.ioErrAction.Apply(module.CheckResult{ |
| 262 | Reason: &exterrors.SMTPError{ |
| 263 | Code: 451, |
| 264 | EnhancedCode: exterrors.EnhancedCode{4, 7, 0}, |
| 265 | Message: "Internal error during policy check", |
| 266 | CheckName: modName, |
| 267 | Err: err, |
| 268 | }, |
| 269 | }) |
| 270 | } |
| 271 | if resp.StatusCode/100 != 2 { |
| 272 | return s.c.errorRespAction.Apply(module.CheckResult{ |
| 273 | Reason: &exterrors.SMTPError{ |
| 274 | Code: 451, |
| 275 | EnhancedCode: exterrors.EnhancedCode{4, 7, 0}, |
nothing calls this directly
no test coverage detected