forked from openedx/frontend-app-admin-console
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathapi.ts
More file actions
109 lines (95 loc) · 3.35 KB
/
api.ts
File metadata and controls
109 lines (95 loc) · 3.35 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
100
101
102
103
104
105
106
107
108
109
import { getAuthenticatedHttpClient } from '@edx/frontend-platform/auth';
import { LibraryMetadata, TeamMember } from '@src/types';
import { camelCaseObject } from '@edx/frontend-platform';
import { getApiUrl, getStudioApiUrl } from '@src/data/utils';
export interface QuerySettings {
roles: string | null;
search: string | null;
order: string | null;
sortBy: string | null;
pageSize: number;
pageIndex: number;
}
export interface GetTeamMembersResponse {
results: TeamMember[];
count: number;
}
export type RevokeUserRolesRequest = {
users: string;
role: string;
scope: string;
};
export interface DeleteRevokeUserRolesResponse {
completed: {
userIdentifiers: string;
status: string;
}[],
errors: {
userIdentifiers: string;
error: string;
}[],
}
export type PermissionsByRole = {
role: string;
permissions: string[];
userCount: number;
};
export interface PutAssignTeamMembersRoleResponse {
completed: { user: string; status: string }[];
errors: { userIdentifier: string; error: string }[];
}
export interface AssignTeamMembersRoleRequest {
users: string[];
role: string;
scope: string;
}
export const getTeamMembers = async (object: string, querySettings: QuerySettings): Promise<GetTeamMembersResponse> => {
const url = new URL(getApiUrl(`/api/authz/v1/roles/users/?scope=${object}`));
if (querySettings.roles) {
url.searchParams.set('roles', querySettings.roles);
}
if (querySettings.search) {
url.searchParams.set('search', querySettings.search);
}
if (querySettings.sortBy && querySettings.order) {
url.searchParams.set('sort_by', querySettings.sortBy);
url.searchParams.set('order', querySettings.order);
}
url.searchParams.set('page_size', querySettings.pageSize.toString());
url.searchParams.set('page', (querySettings.pageIndex + 1).toString());
const { data } = await getAuthenticatedHttpClient().get(url);
return camelCaseObject(data);
};
export const assignTeamMembersRole = async (
data: AssignTeamMembersRoleRequest,
): Promise<PutAssignTeamMembersRoleResponse> => {
const res = await getAuthenticatedHttpClient().put(getApiUrl('/api/authz/v1/roles/users/'), data);
return camelCaseObject(res.data);
};
// TODO: this should be replaced in the future with Console API
export const getLibrary = async (libraryId: string): Promise<LibraryMetadata> => {
const { data } = await getAuthenticatedHttpClient().get(getStudioApiUrl(`/api/libraries/v2/${libraryId}/`));
return {
id: data.id,
org: data.org,
title: data.title,
slug: data.slug,
};
};
export const getPermissionsByRole = async (scope: string): Promise<PermissionsByRole[]> => {
const url = new URL(getApiUrl('/api/authz/v1/roles/'));
url.searchParams.append('scope', scope);
const { data } = await getAuthenticatedHttpClient().get(url);
return camelCaseObject(data.results);
};
export const revokeUserRoles = async (
data: RevokeUserRolesRequest,
): Promise<DeleteRevokeUserRolesResponse> => {
const url = new URL(getApiUrl('/api/authz/v1/roles/users/'));
url.searchParams.append('users', data.users);
url.searchParams.append('role', data.role);
url.searchParams.append('scope', data.scope);
// If this is not transformed to string, it shows a 404 with the token CSRF acquisition request
const res = await getAuthenticatedHttpClient().delete(url.toString());
return camelCaseObject(res.data);
};