Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion app/components/modal/AddUser.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ interface Props {
export default function AddUserModal({ open, setOpen, setUserPrincipalName, setUserEmail }: Props) {
const [query, setQuery] = useState<string>('');
const [selected, setSelected] = useState<AppUser | undefined>({
id: '0',
providerUserId: '0',
upn: '',
email: '',
idir: '',
Expand Down
1 change: 1 addition & 0 deletions app/core/auth-options.ts
Original file line number Diff line number Diff line change
Expand Up @@ -276,6 +276,7 @@ export const authOptions: AuthOptions = {
const upsertedUser = await upsertUser(loweremail, { lastSeen });
if (!upsertedUser) {
const data = {
providerUserId: '',
firstName: given_name,
lastName: family_name,
email: loweremail,
Expand Down
15 changes: 15 additions & 0 deletions app/emails/_components/Params.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ const publicRequestData = {
signedById: 'signed-by-id',
signedBy: {
id: 'd',
providerUserId: '',
firstName: 'John',
lastName: 'Doe',
email: 'john.doe@gov.bc.ca',
Expand All @@ -39,6 +40,7 @@ const publicRequestData = {
approvedById: 'approved-by-id',
approvedBy: {
id: 'd',
providerUserId: '',
firstName: 'John',
lastName: 'Doe',
email: 'john.doe@gov.bc.ca',
Expand All @@ -54,6 +56,7 @@ const publicRequestData = {
expenseAuthorityId: 'expense-authority-id',
expenseAuthority: {
id: 'd',
providerUserId: '',
firstName: 'John',
lastName: 'Doe',
email: 'john.doe@gov.bc.ca',
Expand Down Expand Up @@ -89,6 +92,7 @@ const publicRequestData = {
provider: 'AWS',
projectOwner: {
id: 'd',
providerUserId: '',
firstName: 'John',
lastName: 'Doe',
email: 'john.doe@gov.bc.ca',
Expand All @@ -103,6 +107,7 @@ const publicRequestData = {
},
primaryTechnicalLead: {
id: 'c',
providerUserId: '',
firstName: 'Sarah',
lastName: 'Williams',
email: 'sarah.williams@gov.bc.ca',
Expand All @@ -117,6 +122,7 @@ const publicRequestData = {
},
expenseAuthority: {
id: 'c',
providerUserId: '',
firstName: 'Sarah',
lastName: 'Williams',
email: 'sarah.williams@gov.bc.ca',
Expand Down Expand Up @@ -194,6 +200,7 @@ export const samplePublicRequest = {
provider: 'AWS', // or GOOGLE
projectOwner: {
id: 'd',
providerUserId: '',
firstName: 'John',
lastName: 'Doe',
email: 'john.doe@gov.bc.ca',
Expand All @@ -208,6 +215,7 @@ export const samplePublicRequest = {
},
primaryTechnicalLead: {
id: 'c',
providerUserId: '',
firstName: 'Sarah',
lastName: 'Williams',
email: 'sarah.williams@gov.bc.ca',
Expand All @@ -222,6 +230,7 @@ export const samplePublicRequest = {
},
expenseAuthority: {
id: 'c',
providerUserId: '',
firstName: 'Sarah',
lastName: 'Williams',
email: 'sarah.williams@gov.bc.ca',
Expand Down Expand Up @@ -283,6 +292,7 @@ export const samplePublicProduct: PublicCloudRequestedProjectWithContacts = {
provider: 'AWS',
projectOwner: {
id: 'd',
providerUserId: '',
firstName: 'John',
lastName: 'Doe',
email: 'john.doe@gov.bc.ca',
Expand All @@ -297,6 +307,7 @@ export const samplePublicProduct: PublicCloudRequestedProjectWithContacts = {
},
primaryTechnicalLead: {
id: 'c',
providerUserId: '',
firstName: 'Sarah',
lastName: 'Williams',
email: 'sarah.williams@gov.bc.ca',
Expand All @@ -311,6 +322,7 @@ export const samplePublicProduct: PublicCloudRequestedProjectWithContacts = {
},
expenseAuthority: {
id: 'c',
providerUserId: '',
firstName: 'Sarah',
lastName: 'Williams',
email: 'sarah.williams@gov.bc.ca',
Expand Down Expand Up @@ -648,6 +660,7 @@ export const samplePrivateProduct: PrivateCloudRequestedProjectWithContacts = {
cluster: 'SILVER',
projectOwner: {
id: 'd',
providerUserId: '',
firstName: 'John',
lastName: 'Doe',
email: 'john.doe@gov.bc.ca',
Expand All @@ -662,6 +675,7 @@ export const samplePrivateProduct: PrivateCloudRequestedProjectWithContacts = {
},
primaryTechnicalLead: {
id: 'c',
providerUserId: '',
firstName: 'Sarah',
lastName: 'Williams',
email: 'sarah.williams@gov.bc.ca',
Expand All @@ -676,6 +690,7 @@ export const samplePrivateProduct: PrivateCloudRequestedProjectWithContacts = {
},
secondaryTechnicalLead: {
id: 'c',
providerUserId: '',
firstName: 'Sarah',
lastName: 'Williams',
email: 'sarah.williams@gov.bc.ca',
Expand Down
105 changes: 105 additions & 0 deletions app/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions app/prisma/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ datasource db {

model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
providerUserId String?
firstName String?
lastName String?
email String @unique
Expand Down
2 changes: 1 addition & 1 deletion app/queries/users.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ export async function getMatchingUserIds(search: string) {
export async function createProxyUsers() {
const dbUsers = await Promise.all(
proxyUsers.map((puser: MsUser) => {
const { id, displayName, idirGuid, ...clearnUserData } = processMsUser(puser);
const { displayName, idirGuid, ...clearnUserData } = processMsUser(puser);

clearnUserData.email = clearnUserData.email.toLowerCase();
return prisma.user.upsert({
Expand Down
1 change: 1 addition & 0 deletions app/services/db/user.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ export async function upsertUser(email: string, extra = {}) {
const adUserPhoto = await getUserPhoto(email);
const data = {
email,
providerUserId: adUser.providerUserId,
firstName: adUser.firstName,
lastName: adUser.lastName,
ministry: adUser.ministry,
Expand Down
2 changes: 1 addition & 1 deletion app/services/msgraph/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { MsUser, AppUser } from '@/types/user';
import { callMsGraph, getAccessToken } from './core';
export function processMsUser(user: MsUser): AppUser {
return {
id: user.id,
providerUserId: user.id,
upn: user.userPrincipalName,
email: user.mail.toLowerCase(),
idir: user.onPremisesSamAccountName,
Expand Down
60 changes: 24 additions & 36 deletions app/services/nats/public-cloud/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { Prisma, PublicCloudRequest, PublicCloudRequestedProject, RequestType } from '@prisma/client';
import { formatFullName } from '@/helpers/user';

export type PublicCloudRequestedProjectWithContacts = Prisma.PublicCloudRequestedProjectGetPayload<{
include: {
Expand All @@ -20,6 +21,21 @@ export type PublicCloudProjectWithContacts = Prisma.PublicCloudRequestedProjectG
};
}>;

function prepareUser(user?: Prisma.UserGetPayload<null> | null) {
if (!user)
return {
name: '',
email: '',
providerUserId: '',
};

return {
name: formatFullName(user),
email: user.email,
providerUserId: user.providerUserId,
};
}

// Create a test env variable that prefix the namespace name with "t"
export default function createPublicCloudNatsMessage(
requestType: RequestType,
Expand Down Expand Up @@ -54,47 +70,19 @@ export default function createPublicCloudNatsMessage(
prod: decisionData.environmentsEnabled.production,
tools: decisionData.environmentsEnabled.tools,
},
requested_product_owner: {
name: `${decisionData.projectOwner.firstName} ${decisionData.projectOwner.lastName}`,
email: decisionData.projectOwner.email,
},
current_product_owner: !currentProject
? null
: {
name: `${currentProject.projectOwner.firstName} ${currentProject.projectOwner.lastName}`,
email: currentProject.projectOwner.email,
},
requested_expense_authority: {
name: `${decisionData.expenseAuthority?.firstName} ${decisionData.expenseAuthority?.lastName}`,
email: decisionData.expenseAuthority?.email,
},
current_expense_authority: !currentProject
? null
: {
name: `${currentProject.expenseAuthority?.firstName} ${currentProject.expenseAuthority?.lastName}`,
email: currentProject.expenseAuthority?.email,
},
requested_product_owner: prepareUser(decisionData.projectOwner),
current_product_owner: !currentProject ? null : prepareUser(currentProject.projectOwner),
requested_expense_authority: prepareUser(decisionData.expenseAuthority),
current_expense_authority: !currentProject ? null : prepareUser(currentProject.expenseAuthority),
requested_tech_leads: [
{
name: `${decisionData.primaryTechnicalLead.firstName} ${decisionData.primaryTechnicalLead.lastName}`,
email: decisionData.primaryTechnicalLead.email,
},
{
name: `${decisionData?.secondaryTechnicalLead?.firstName} ${decisionData?.secondaryTechnicalLead?.lastName}`,
email: decisionData?.secondaryTechnicalLead?.email,
},
prepareUser(decisionData.primaryTechnicalLead),
prepareUser(decisionData.secondaryTechnicalLead),
].filter((techLead) => Boolean(techLead.email)),
current_tech_leads: !currentProject
? null
: [
{
name: `${currentProject.primaryTechnicalLead.firstName} ${currentProject.primaryTechnicalLead.lastName}`,
email: currentProject.primaryTechnicalLead.email,
},
{
name: `${currentProject?.secondaryTechnicalLead?.firstName} ${currentProject?.secondaryTechnicalLead?.lastName}`,
email: currentProject?.secondaryTechnicalLead?.email,
},
prepareUser(currentProject.primaryTechnicalLead),
prepareUser(currentProject?.secondaryTechnicalLead),
].filter((techLead) => Boolean(techLead.email)),
},
};
Expand Down
2 changes: 1 addition & 1 deletion app/types/user.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ export interface MsUser {
}

export interface AppUser {
id: string;
providerUserId: string;
upn: string;
email: string;
idir: string;
Expand Down