Add an Access identity provider

Adds a new identity provider to Access.

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
 * Add an Access identity provider
8
 * Adds a new identity provider to Access.
9
 */
10
export async function main(
11
  auth: Cloudflare,
12
  identifier: string,
13
  body:
14
    | ({
15
        config: { [k: string]: unknown };
16
        id?: string;
17
        name: string;
18
        scim_config?: {
19
          enabled?: boolean;
20
          group_member_deprovision?: boolean;
21
          seat_deprovision?: boolean;
22
          secret?: string;
23
          user_deprovision?: boolean;
24
          [k: string]: unknown;
25
        };
26
        type: string;
27
        [k: string]: unknown;
28
      } & {
29
        config?: {
30
          client_id?: string;
31
          client_secret?: string;
32
          [k: string]: unknown;
33
        } & {
34
          conditional_access_enabled?: boolean;
35
          directory_id?: string;
36
          support_groups?: boolean;
37
          [k: string]: unknown;
38
        };
39
        [k: string]: unknown;
40
      })
41
    | ({
42
        config: { [k: string]: unknown };
43
        id?: string;
44
        name: string;
45
        scim_config?: {
46
          enabled?: boolean;
47
          group_member_deprovision?: boolean;
48
          seat_deprovision?: boolean;
49
          secret?: string;
50
          user_deprovision?: boolean;
51
          [k: string]: unknown;
52
        };
53
        type: string;
54
        [k: string]: unknown;
55
      } & {
56
        config?: {
57
          client_id?: string;
58
          client_secret?: string;
59
          [k: string]: unknown;
60
        } & {
61
          centrify_account?: string;
62
          centrify_app_id?: string;
63
          [k: string]: unknown;
64
        };
65
        [k: string]: unknown;
66
      })
67
    | ({
68
        config: { [k: string]: unknown };
69
        id?: string;
70
        name: string;
71
        scim_config?: {
72
          enabled?: boolean;
73
          group_member_deprovision?: boolean;
74
          seat_deprovision?: boolean;
75
          secret?: string;
76
          user_deprovision?: boolean;
77
          [k: string]: unknown;
78
        };
79
        type: string;
80
        [k: string]: unknown;
81
      } & {
82
        config?: {
83
          client_id?: string;
84
          client_secret?: string;
85
          [k: string]: unknown;
86
        };
87
        [k: string]: unknown;
88
      })
89
    | ({
90
        config: { [k: string]: unknown };
91
        id?: string;
92
        name: string;
93
        scim_config?: {
94
          enabled?: boolean;
95
          group_member_deprovision?: boolean;
96
          seat_deprovision?: boolean;
97
          secret?: string;
98
          user_deprovision?: boolean;
99
          [k: string]: unknown;
100
        };
101
        type: string;
102
        [k: string]: unknown;
103
      } & {
104
        config?: {
105
          client_id?: string;
106
          client_secret?: string;
107
          [k: string]: unknown;
108
        };
109
        [k: string]: unknown;
110
      })
111
    | ({
112
        config: { [k: string]: unknown };
113
        id?: string;
114
        name: string;
115
        scim_config?: {
116
          enabled?: boolean;
117
          group_member_deprovision?: boolean;
118
          seat_deprovision?: boolean;
119
          secret?: string;
120
          user_deprovision?: boolean;
121
          [k: string]: unknown;
122
        };
123
        type: string;
124
        [k: string]: unknown;
125
      } & {
126
        config?: {
127
          client_id?: string;
128
          client_secret?: string;
129
          [k: string]: unknown;
130
        };
131
        [k: string]: unknown;
132
      })
133
    | ({
134
        config: { [k: string]: unknown };
135
        id?: string;
136
        name: string;
137
        scim_config?: {
138
          enabled?: boolean;
139
          group_member_deprovision?: boolean;
140
          seat_deprovision?: boolean;
141
          secret?: string;
142
          user_deprovision?: boolean;
143
          [k: string]: unknown;
144
        };
145
        type: string;
146
        [k: string]: unknown;
147
      } & {
148
        config?: {
149
          client_id?: string;
150
          client_secret?: string;
151
          [k: string]: unknown;
152
        } & { apps_domain?: string; [k: string]: unknown };
153
        [k: string]: unknown;
154
      })
155
    | ({
156
        config: { [k: string]: unknown };
157
        id?: string;
158
        name: string;
159
        scim_config?: {
160
          enabled?: boolean;
161
          group_member_deprovision?: boolean;
162
          seat_deprovision?: boolean;
163
          secret?: string;
164
          user_deprovision?: boolean;
165
          [k: string]: unknown;
166
        };
167
        type: string;
168
        [k: string]: unknown;
169
      } & {
170
        config?: {
171
          client_id?: string;
172
          client_secret?: string;
173
          [k: string]: unknown;
174
        };
175
        [k: string]: unknown;
176
      })
177
    | ({
178
        config: { [k: string]: unknown };
179
        id?: string;
180
        name: string;
181
        scim_config?: {
182
          enabled?: boolean;
183
          group_member_deprovision?: boolean;
184
          seat_deprovision?: boolean;
185
          secret?: string;
186
          user_deprovision?: boolean;
187
          [k: string]: unknown;
188
        };
189
        type: string;
190
        [k: string]: unknown;
191
      } & {
192
        config?: {
193
          client_id?: string;
194
          client_secret?: string;
195
          [k: string]: unknown;
196
        } & {
197
          auth_url?: string;
198
          certs_url?: string;
199
          claims?: string[];
200
          scopes?: string[];
201
          token_url?: string;
202
          [k: string]: unknown;
203
        };
204
        [k: string]: unknown;
205
      })
206
    | ({
207
        config: { [k: string]: unknown };
208
        id?: string;
209
        name: string;
210
        scim_config?: {
211
          enabled?: boolean;
212
          group_member_deprovision?: boolean;
213
          seat_deprovision?: boolean;
214
          secret?: string;
215
          user_deprovision?: boolean;
216
          [k: string]: unknown;
217
        };
218
        type: string;
219
        [k: string]: unknown;
220
      } & {
221
        config?: {
222
          client_id?: string;
223
          client_secret?: string;
224
          [k: string]: unknown;
225
        } & { okta_account?: string; [k: string]: unknown };
226
        [k: string]: unknown;
227
      })
228
    | ({
229
        config: { [k: string]: unknown };
230
        id?: string;
231
        name: string;
232
        scim_config?: {
233
          enabled?: boolean;
234
          group_member_deprovision?: boolean;
235
          seat_deprovision?: boolean;
236
          secret?: string;
237
          user_deprovision?: boolean;
238
          [k: string]: unknown;
239
        };
240
        type: string;
241
        [k: string]: unknown;
242
      } & {
243
        config?: {
244
          client_id?: string;
245
          client_secret?: string;
246
          [k: string]: unknown;
247
        } & { onelogin_account?: string; [k: string]: unknown };
248
        [k: string]: unknown;
249
      })
250
    | ({
251
        config: { [k: string]: unknown };
252
        id?: string;
253
        name: string;
254
        scim_config?: {
255
          enabled?: boolean;
256
          group_member_deprovision?: boolean;
257
          seat_deprovision?: boolean;
258
          secret?: string;
259
          user_deprovision?: boolean;
260
          [k: string]: unknown;
261
        };
262
        type: string;
263
        [k: string]: unknown;
264
      } & {
265
        config?: {
266
          client_id?: string;
267
          client_secret?: string;
268
          [k: string]: unknown;
269
        } & { ping_env_id?: string; [k: string]: unknown };
270
        [k: string]: unknown;
271
      })
272
    | ({
273
        config: { [k: string]: unknown };
274
        id?: string;
275
        name: string;
276
        scim_config?: {
277
          enabled?: boolean;
278
          group_member_deprovision?: boolean;
279
          seat_deprovision?: boolean;
280
          secret?: string;
281
          user_deprovision?: boolean;
282
          [k: string]: unknown;
283
        };
284
        type: string;
285
        [k: string]: unknown;
286
      } & {
287
        config?: {
288
          attributes?: string[];
289
          email_attribute_name?: string;
290
          header_attributes?: {
291
            attribute_name?: string;
292
            header_name?: string;
293
            [k: string]: unknown;
294
          }[];
295
          idp_public_certs?: string[];
296
          issuer_url?: string;
297
          sign_request?: boolean;
298
          sso_target_url?: string;
299
          [k: string]: unknown;
300
        };
301
        [k: string]: unknown;
302
      })
303
    | ({
304
        config: { [k: string]: unknown };
305
        id?: string;
306
        name: string;
307
        scim_config?: {
308
          enabled?: boolean;
309
          group_member_deprovision?: boolean;
310
          seat_deprovision?: boolean;
311
          secret?: string;
312
          user_deprovision?: boolean;
313
          [k: string]: unknown;
314
        };
315
        type: string;
316
        [k: string]: unknown;
317
      } & {
318
        config?: {
319
          client_id?: string;
320
          client_secret?: string;
321
          [k: string]: unknown;
322
        };
323
        [k: string]: unknown;
324
      })
325
) {
326
  const url = new URL(
327
    `https://api.cloudflare.com/client/v4/zones/${identifier}/access/identity_providers`
328
  );
329

330
  const response = await fetch(url, {
331
    method: "POST",
332
    headers: {
333
      "X-AUTH-EMAIL": auth.email,
334
      "X-AUTH-KEY": auth.key,
335
      "Content-Type": "application/json",
336
      Authorization: "Bearer " + auth.token,
337
    },
338
    body: JSON.stringify(body),
339
  });
340
  if (!response.ok) {
341
    const text = await response.text();
342
    throw new Error(`${response.status} ${text}`);
343
  }
344
  return await response.json();
345
}
346