0

Change Security Level

by
Published 20 days ago

Set how aggressively Cloudflare challenges visitors to the zone based on their IP reputation.

Script cloudflare Verified

The script

Submitted by hugo989 Typescript (fetch-only)
Verified 21 days ago
1
//native
2

3
export type DynSelect_zone_id = string
4

5
// Dropdown of the account's zones so users pick a domain instead of pasting its 32-char id.
6
// ponytail: first 50 zones only (API max per_page); paste the id directly beyond that.
7
export async function zone_id(auth: RT.Cloudflare) {
8
  const response = await fetch(
9
    "https://api.cloudflare.com/client/v4/zones?per_page=50",
10
    {
11
      headers: {
12
        Authorization: `Bearer ${auth.token}`,
13
        Accept: "application/json",
14
      },
15
    }
16
  )
17
  if (!response.ok) {
18
    throw new Error(`${response.status} ${await response.text()}`)
19
  }
20
  const { result } = (await response.json()) as {
21
    result: { id: string; name: string }[]
22
  }
23
  return result.map((z) => ({ value: z.id, label: z.name }))
24
}
25

26
/**
27
 * Change Security Level
28
 * Set how aggressively Cloudflare challenges visitors to the zone based on their IP reputation.
29
 */
30
export async function main(
31
  auth: RT.Cloudflare,
32
  zone_id: DynSelect_zone_id,
33
  value: "essentially_off" | "low" | "medium" | "high" | "under_attack"
34
) {
35
  const response = await fetch(
36
    `https://api.cloudflare.com/client/v4/zones/${zone_id}/settings/security_level`,
37
    {
38
      method: "PATCH",
39
      headers: {
40
        Authorization: `Bearer ${auth.token}`,
41
        "Content-Type": "application/json",
42
        Accept: "application/json",
43
      },
44
      body: JSON.stringify({ value }),
45
    }
46
  )
47

48
  if (!response.ok) {
49
    throw new Error(`${response.status} ${await response.text()}`)
50
  }
51

52
  return await response.json()
53
}
54