Skip to content

Commit 4702afe

Browse files
committed
Merge commit 'merge mainscreen conflicts'
2 parents 5ab43ab + 36eadf2 commit 4702afe

File tree

5 files changed

+80
-3
lines changed

5 files changed

+80
-3
lines changed

src/api/functions/entraId.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -368,7 +368,7 @@ export async function listGroupMembers(
368368
* @throws {EntraUserError} If fetching the user profile fails.
369369
* @returns {Promise<UserProfileData>} The user's profile information.
370370
*/
371-
export async function getUserProfile(
371+
export async function getUserProflile(
372372
token: string,
373373
email: string,
374374
): Promise<UserProfileData> {

src/api/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import mobileWalletRoute from "./routes/mobileWallet.js";
3333
import stripeRoutes from "./routes/stripe.js";
3434
import membershipPlugin from "./routes/membership.js";
3535
import path from "path"; // eslint-disable-line import/no-nodejs-modules
36+
import sigleadRoutes from "./routes/siglead.js";
3637
import roomRequestRoutes from "./routes/roomRequests.js";
3738
import logsPlugin from "./routes/logs.js";
3839
import fastifySwagger from "@fastify/swagger";
@@ -289,6 +290,7 @@ async function init(prettyPrint: boolean = false) {
289290
api.register(linkryRoutes, { prefix: "/linkry" });
290291
api.register(mobileWalletRoute, { prefix: "/mobileWallet" });
291292
api.register(stripeRoutes, { prefix: "/stripe" });
293+
api.register(sigleadRoutes, { prefix: "/siglead" });
292294
api.register(roomRequestRoutes, { prefix: "/roomRequests" });
293295
api.register(logsPlugin, { prefix: "/logs" });
294296
api.register(apiKeyRoute, { prefix: "/apiKey" });

src/api/routes/siglead.ts

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
import { FastifyInstance, FastifyPluginAsync } from "fastify";
2+
import { allAppRoles, AppRoles } from "../../common/roles.js";
3+
import {
4+
addToTenant,
5+
getEntraIdToken,
6+
listGroupMembers,
7+
modifyGroup,
8+
patchUserProfile,
9+
} from "../functions/entraId.js";
10+
import {
11+
BaseError,
12+
DatabaseFetchError,
13+
DatabaseInsertError,
14+
EntraGroupError,
15+
EntraInvitationError,
16+
InternalServerError,
17+
NotFoundError,
18+
UnauthorizedError,
19+
} from "../../common/errors/index.js";
20+
import { PutItemCommand } from "@aws-sdk/client-dynamodb";
21+
import { genericConfig } from "../../common/config.js";
22+
import { marshall } from "@aws-sdk/util-dynamodb";
23+
import {
24+
InviteUserPostRequest,
25+
invitePostRequestSchema,
26+
GroupMappingCreatePostRequest,
27+
groupMappingCreatePostSchema,
28+
entraActionResponseSchema,
29+
groupModificationPatchSchema,
30+
GroupModificationPatchRequest,
31+
EntraGroupActions,
32+
entraGroupMembershipListResponse,
33+
ProfilePatchRequest,
34+
entraProfilePatchRequest,
35+
} from "../../common/types/iam.js";
36+
import {
37+
AUTH_DECISION_CACHE_SECONDS,
38+
getGroupRoles,
39+
} from "../functions/authorization.js";
40+
import { OrganizationList } from "common/orgs.js";
41+
import { z } from "zod";
42+
43+
const OrganizationListEnum = z.enum(OrganizationList as [string, ...string[]]);
44+
export type Org = z.infer<typeof OrganizationListEnum>;
45+
46+
type Member = { name: string; email: string };
47+
type OrgMembersResponse = { org: Org; members: Member[] };
48+
49+
const sigleadRoutes: FastifyPluginAsync = async (fastify, _options) => {
50+
fastify.get<{
51+
Reply: OrgMembersResponse[];
52+
}>("/groups", async (request, reply) => {
53+
const entraIdToken = await getEntraIdToken(
54+
{
55+
smClient: fastify.secretsManagerClient,
56+
dynamoClient: fastify.dynamoClient,
57+
},
58+
fastify.environmentConfig.AadValidClientId,
59+
);
60+
61+
const data = await Promise.all(
62+
OrganizationList.map(async (org) => {
63+
const members: Member[] = await listGroupMembers(entraIdToken, org);
64+
return { org, members } as OrgMembersResponse;
65+
}),
66+
);
67+
68+
reply.status(200).send(data);
69+
});
70+
};
71+
72+
export default sigleadRoutes;

src/common/roles.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,8 @@ export enum AppRoles {
1818
MANAGE_ORG_API_KEYS = "manage:orgApiKey"
1919
}
2020
export const allAppRoles = Object.values(AppRoles).filter(
21-
(value) => typeof value === "string",
21+
(value) => typeof value === "string",
2222
);
23+
24+
25+

src/ui/components/AppShell/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ import {
1818
IconPizza,
1919
IconTicket,
2020
IconLock,
21-
IconUsers,
2221
IconDoor,
2322
IconHistory,
2423
IconKey,
24+
IconUsers,
2525
} from "@tabler/icons-react";
2626
import { ReactNode } from "react";
2727
import { useNavigate } from "react-router-dom";

0 commit comments

Comments
 (0)