Keycloak

Форк
0
69 строк · 1.7 Кб
1
import { CallOptions } from "./api/methods";
2
import { Links, parseLinks } from "./api/parse-links";
3
import { parseResponse } from "./api/parse-response";
4
import { Permission, Resource, Scope } from "./api/representations";
5
import { request } from "./api/request";
6
import { KeycloakContext } from "./root/KeycloakContext";
7

8
export const fetchResources = async (
9
  { signal, context }: CallOptions,
10
  requestParams: Record<string, string>,
11
  shared: boolean | undefined = false,
12
): Promise<{ data: Resource[]; links: Links }> => {
13
  const response = await request(
14
    `/resources${shared ? "/shared-with-me?" : "?"}`,
15
    context,
16
    { searchParams: shared ? requestParams : undefined, signal },
17
  );
18

19
  let links: Links;
20

21
  try {
22
    links = parseLinks(response);
23
  } catch (error) {
24
    links = {};
25
  }
26

27
  return {
28
    data: checkResponse(await response.json()),
29
    links,
30
  };
31
};
32

33
export const fetchPermission = async (
34
  { signal, context }: CallOptions,
35
  resourceId: string,
36
): Promise<Permission[]> => {
37
  const response = await request(
38
    `/resources/${resourceId}/permissions`,
39
    context,
40
    { signal },
41
  );
42
  return parseResponse<Permission[]>(response);
43
};
44

45
export const updateRequest = (
46
  context: KeycloakContext,
47
  resourceId: string,
48
  username: string,
49
  scopes: Scope[] | string[],
50
) =>
51
  request(`/resources/${resourceId}/permissions`, context, {
52
    method: "PUT",
53
    body: [{ username, scopes }],
54
  });
55

56
export const updatePermissions = (
57
  context: KeycloakContext,
58
  resourceId: string,
59
  permissions: Permission[],
60
) =>
61
  request(`/resources/${resourceId}/permissions`, context, {
62
    method: "PUT",
63
    body: permissions,
64
  });
65

66
function checkResponse<T>(response: T) {
67
  if (!response) throw new Error("Could not fetch");
68
  return response;
69
}
70

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.