forked from auth0/auth0-deploy-cli
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathriskAssessments.ts
More file actions
99 lines (86 loc) · 2.47 KB
/
riskAssessments.ts
File metadata and controls
99 lines (86 loc) · 2.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import DefaultAPIHandler from './default';
import { Assets } from '../../../types';
export const schema = {
type: 'object',
properties: {
enabled: {
type: 'boolean',
description: 'Whether or not risk assessment is enabled.',
},
newDevice: {
type: 'object',
properties: {
remember_for: {
type: 'number',
description: 'Length of time to remember devices for, in days.',
},
},
required: ['remember_for'],
},
},
required: ['enabled'],
};
export type RiskAssessmentsSettings = {
enabled: boolean;
newDevice?: {
remember_for: number;
};
};
export default class RiskAssessmentsHandler extends DefaultAPIHandler {
existing: RiskAssessmentsSettings | null;
constructor(config: DefaultAPIHandler) {
super({
...config,
type: 'riskAssessment',
});
}
async getType(): Promise<RiskAssessmentsSettings> {
if (this.existing) {
return this.existing;
}
try {
const [settings, newDeviceSettings] = await Promise.all([
this.client.riskAssessments.getSettings(),
this.client.riskAssessments.getNewDeviceSettings().catch((err) => {
if (err?.statusCode === 404) return { data: { remember_for: 0 } };
throw err;
}),
]);
this.existing = {
enabled: settings.data.enabled,
...(newDeviceSettings.data.remember_for > 0 && {
newDevice: {
remember_for: newDeviceSettings.data.remember_for,
},
}),
};
return this.existing;
} catch (err) {
if (err.statusCode === 404) return { enabled: false };
throw err;
}
}
async processChanges(assets: Assets): Promise<void> {
const { riskAssessment } = assets;
// Non-existing section means it doesn't need to be processed
if (!riskAssessment) {
return;
}
const updates: Promise<unknown>[] = [];
// Update main settings (enabled flag)
const settings = {
enabled: riskAssessment.enabled as boolean,
};
updates.push(this.client.riskAssessments.updateSettings(settings));
// Update new device settings if provided
if (riskAssessment.newDevice) {
const newDeviceSettings = {
remember_for: riskAssessment.newDevice.remember_for as number,
};
updates.push(this.client.riskAssessments.updateNewDeviceSettings(newDeviceSettings));
}
await Promise.all(updates);
this.updated += 1;
this.didUpdate(riskAssessment);
}
}