rules:
  - id: antibody-def-104-http-no-timeout
    languages: [python]
    severity: ERROR
    message: "Outbound HTTP call without explicit timeout. Prevented by defense DEF-104 generated from Incident #104."
    metadata:
      incident: "104"
      defense: "DEF-104"
      incident_url: "https://gitlab.example.com/antibody/sherlock/-/issues/104"
    pattern-either:
      - patterns:
          - pattern: requests.$M(...)
          - metavariable-regex:
              metavariable: $M
              regex: '^(get|post|put|patch|delete|head|options|request)$'
          - pattern-not: requests.$M(..., timeout=$T, ...)
      - pattern: requests.$M(..., timeout=None, ...)
      - pattern: urllib.request.urlopen($U)
      - patterns:
          - pattern-inside: |
              $S = requests.Session()
              ...
          - pattern: $S.$M(...)
          - metavariable-regex:
              metavariable: $M
              regex: '^(get|post|put|patch|delete|head|options|request)$'
          - pattern-not: $S.$M(..., timeout=$T, ...)
