Update an Access group

Updates a configured Access group.

Script cloudflare Verified

by hugo697 ยท 11/16/2023

The script

Submitted by hugo697 Typescript (fetch-only)
Verified 383 days ago
1
type Cloudflare = {
2
  token: string;
3
  email: string;
4
  key: string;
5
};
6
/**
7
 * Update an Access group
8
 * Updates a configured Access group.
9
 */
10
export async function main(
11
  auth: Cloudflare,
12
  uuid: string,
13
  identifier: string,
14
  body: {
15
    exclude?: (
16
      | { email: { email: string; [k: string]: unknown }; [k: string]: unknown }
17
      | {
18
          email_domain: { domain: string; [k: string]: unknown };
19
          [k: string]: unknown;
20
        }
21
      | { everyone: { [k: string]: unknown }; [k: string]: unknown }
22
      | { ip: { ip: string; [k: string]: unknown }; [k: string]: unknown }
23
      | { ip_list: { id: string; [k: string]: unknown }; [k: string]: unknown }
24
      | { certificate: { [k: string]: unknown }; [k: string]: unknown }
25
      | { group: { id: string; [k: string]: unknown }; [k: string]: unknown }
26
      | {
27
          azureAD: { connection_id: string; id: string; [k: string]: unknown };
28
          [k: string]: unknown;
29
        }
30
      | {
31
          "github-organization": {
32
            connection_id: string;
33
            name: string;
34
            [k: string]: unknown;
35
          };
36
          [k: string]: unknown;
37
        }
38
      | {
39
          gsuite: {
40
            connection_id: string;
41
            email: string;
42
            [k: string]: unknown;
43
          };
44
          [k: string]: unknown;
45
        }
46
      | {
47
          okta: { connection_id: string; email: string; [k: string]: unknown };
48
          [k: string]: unknown;
49
        }
50
      | {
51
          saml: {
52
            attribute_name: string;
53
            attribute_value: string;
54
            [k: string]: unknown;
55
          };
56
          [k: string]: unknown;
57
        }
58
    )[];
59
    include: (
60
      | { email: { email: string; [k: string]: unknown }; [k: string]: unknown }
61
      | {
62
          email_domain: { domain: string; [k: string]: unknown };
63
          [k: string]: unknown;
64
        }
65
      | { everyone: { [k: string]: unknown }; [k: string]: unknown }
66
      | { ip: { ip: string; [k: string]: unknown }; [k: string]: unknown }
67
      | { ip_list: { id: string; [k: string]: unknown }; [k: string]: unknown }
68
      | { certificate: { [k: string]: unknown }; [k: string]: unknown }
69
      | { group: { id: string; [k: string]: unknown }; [k: string]: unknown }
70
      | {
71
          azureAD: { connection_id: string; id: string; [k: string]: unknown };
72
          [k: string]: unknown;
73
        }
74
      | {
75
          "github-organization": {
76
            connection_id: string;
77
            name: string;
78
            [k: string]: unknown;
79
          };
80
          [k: string]: unknown;
81
        }
82
      | {
83
          gsuite: {
84
            connection_id: string;
85
            email: string;
86
            [k: string]: unknown;
87
          };
88
          [k: string]: unknown;
89
        }
90
      | {
91
          okta: { connection_id: string; email: string; [k: string]: unknown };
92
          [k: string]: unknown;
93
        }
94
      | {
95
          saml: {
96
            attribute_name: string;
97
            attribute_value: string;
98
            [k: string]: unknown;
99
          };
100
          [k: string]: unknown;
101
        }
102
    )[];
103
    name: string;
104
    require?: (
105
      | { email: { email: string; [k: string]: unknown }; [k: string]: unknown }
106
      | {
107
          email_domain: { domain: string; [k: string]: unknown };
108
          [k: string]: unknown;
109
        }
110
      | { everyone: { [k: string]: unknown }; [k: string]: unknown }
111
      | { ip: { ip: string; [k: string]: unknown }; [k: string]: unknown }
112
      | { ip_list: { id: string; [k: string]: unknown }; [k: string]: unknown }
113
      | { certificate: { [k: string]: unknown }; [k: string]: unknown }
114
      | { group: { id: string; [k: string]: unknown }; [k: string]: unknown }
115
      | {
116
          azureAD: { connection_id: string; id: string; [k: string]: unknown };
117
          [k: string]: unknown;
118
        }
119
      | {
120
          "github-organization": {
121
            connection_id: string;
122
            name: string;
123
            [k: string]: unknown;
124
          };
125
          [k: string]: unknown;
126
        }
127
      | {
128
          gsuite: {
129
            connection_id: string;
130
            email: string;
131
            [k: string]: unknown;
132
          };
133
          [k: string]: unknown;
134
        }
135
      | {
136
          okta: { connection_id: string; email: string; [k: string]: unknown };
137
          [k: string]: unknown;
138
        }
139
      | {
140
          saml: {
141
            attribute_name: string;
142
            attribute_value: string;
143
            [k: string]: unknown;
144
          };
145
          [k: string]: unknown;
146
        }
147
    )[];
148
    [k: string]: unknown;
149
  }
150
) {
151
  const url = new URL(
152
    `https://api.cloudflare.com/client/v4/zones/${identifier}/access/groups/${uuid}`
153
  );
154

155
  const response = await fetch(url, {
156
    method: "PUT",
157
    headers: {
158
      "X-AUTH-EMAIL": auth.email,
159
      "X-AUTH-KEY": auth.key,
160
      "Content-Type": "application/json",
161
      Authorization: "Bearer " + auth.token,
162
    },
163
    body: JSON.stringify(body),
164
  });
165
  if (!response.ok) {
166
    const text = await response.text();
167
    throw new Error(`${response.status} ${text}`);
168
  }
169
  return await response.json();
170
}
171