Skip to content

Commit bd9ab2a

Browse files
Merge pull request #582 from IABTechLab/ans-UID2-4386-remove-request-account-feature
Remove request account feature
2 parents 07b181c + 921199d commit bd9ab2a

File tree

17 files changed

+18
-606
lines changed

17 files changed

+18
-606
lines changed

keycloak/realm/realm-export.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
"oauth2DevicePollingInterval": 5,
3030
"enabled": true,
3131
"sslRequired": "external",
32-
"registrationAllowed": true,
32+
"registrationAllowed": false,
3333
"registrationEmailAsUsername": true,
3434
"rememberMe": true,
3535
"verifyEmail": true,

keycloak/themes/uid2-theme/login/messages/messages_en.properties

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,7 @@
11
# encoding: UTF-8
22
doLogIn=Log In
3-
noAccount=Don’t have an account?
4-
doRegister=Request Account
53
doForgotPassword=Forgot Password
64
loginAccountTitle=Log In
7-
registerTitle=Request Account
8-
registerInfo=To request an account, provide the following information.
9-
infoTitle=Your Information
105
passwordTitle=Create a Password
116
doRegisterButton=Continue
127
errorPatternNoMatch=We’re sorry, but we only accept sign-ups from company email addresses. Please use your official company email to register and try again.

keycloak/themes/uid2-theme/login/register.ftl

Lines changed: 0 additions & 144 deletions
This file was deleted.

keycloak/themes/uid2-theme/login/resources/css/login.css

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -343,4 +343,10 @@ div.kc-logo-text {
343343
list-style-type: disc;
344344
}
345345

346+
#request-account {
347+
color: #000;
348+
font-size: 16px;
349+
margin-top: 20px;
350+
}
351+
346352
/* End Recovery codes */

keycloak/themes/uid2-theme/login/template.ftl

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -140,13 +140,9 @@
140140
</div>
141141
</div>
142142
</div>
143-
<#if displayInfo>
144-
<div id="kc-info" class="${properties.kcSignUpClass!}">
145-
<div id="kc-info-wrapper" class="${properties.kcInfoAreaWrapperClass!}">
146-
<#nested "info">
147-
</div>
148-
</div>
149-
</#if>
143+
<div id="request-account">
144+
Don't have an account? Ask your UID2 contact or <a class="" href='https://unifiedid.com/docs/portal/portal-getting-started#request-an-account' target='_blank'>request access</a>.
145+
</div>
150146
<br />
151147
<a class="report-vulnerability" href='https://www.thetradedesk.com/us/trust/report-a-vulnerability' target='_blank'>Report a Vulnerability</a>
152148
</div>

src/api/entities/Participant.ts

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { ApiRole, ApiRoleDTO, ApiRoleSchema } from './ApiRole';
55
import { BaseModel } from './BaseModel';
66
import { ModelObjectOpt } from './ModelObjectOpt';
77
import { ParticipantType, ParticipantTypeDTO, ParticipantTypeSchema } from './ParticipantType';
8-
import { type User, UserCreationPartial, UserDTO, UserSchema } from './User';
8+
import { type User, UserDTO, UserSchema } from './User';
99
import { UserToParticipantRole } from './UserToParticipantRole';
1010

1111
export enum ParticipantStatus {
@@ -119,13 +119,6 @@ export const ParticipantSchema = z.object({
119119
crmAgreementNumber: z.string().nullable(),
120120
});
121121

122-
export const ParticipantCreationPartial = ParticipantSchema.pick({
123-
name: true,
124-
}).extend({
125-
types: z.array(ParticipantTypeSchema.pick({ id: true })),
126-
users: z.array(UserCreationPartial).optional(),
127-
});
128-
129122
export const ParticipantApprovalPartial = ParticipantSchema.pick({
130123
siteId: true,
131124
name: true,

src/api/routers/participants/participantsCreation.ts

Lines changed: 2 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,7 @@ import { z } from 'zod';
44
import { getRoleNamesByIds } from '../../../web/utils/apiRoles';
55
import { ApiRole } from '../../entities/ApiRole';
66
import { AuditAction, AuditTrailEvents } from '../../entities/AuditTrail';
7-
import {
8-
Participant,
9-
ParticipantCreationPartial,
10-
ParticipantStatus,
11-
} from '../../entities/Participant';
7+
import { Participant, ParticipantStatus } from '../../entities/Participant';
128
import { User, UserCreationPartial } from '../../entities/User';
139
import { UserRoleId } from '../../entities/UserRole';
1410
import { UserToParticipantRole } from '../../entities/UserToParticipantRole';
@@ -25,11 +21,7 @@ import {
2521
performAsyncOperationWithAuditTrail,
2622
} from '../../services/auditTrailService';
2723
import { doesUserExistInKeycloak } from '../../services/kcUsersService';
28-
import {
29-
getParticipantTypesByIds,
30-
ParticipantRequest,
31-
sendNewParticipantEmail,
32-
} from '../../services/participantsService';
24+
import { getParticipantTypesByIds, ParticipantRequest } from '../../services/participantsService';
3325
import {
3426
createAndInviteKeycloakUser,
3527
findUserByEmail,
@@ -179,54 +171,3 @@ export async function handleCreateParticipant(req: ParticipantRequest, res: Resp
179171

180172
return res.sendStatus(200);
181173
}
182-
183-
export const handleCreateParticipantFromRequest = async (
184-
req: ParticipantRequest,
185-
res: Response
186-
) => {
187-
try {
188-
const traceId = getTraceId(req);
189-
const parsedRequest = ParticipantCreationPartial.parse(req.body);
190-
const { users, ...rest } = parsedRequest;
191-
const participantData = {
192-
...rest,
193-
status: ParticipantStatus.AwaitingApproval,
194-
};
195-
const user = {
196-
...users![0],
197-
acceptedTerms: false,
198-
};
199-
200-
const participant = await User.transaction(async (trx) => {
201-
// create user
202-
const newPortalUser = await User.query(trx).insertAndFetch(user);
203-
204-
// create participant
205-
const newParticipant = await Participant.query(trx)
206-
.insertGraphAndFetch([participantData], {
207-
relate: true,
208-
})
209-
.first();
210-
211-
// update user/participant/role mapping
212-
await UserToParticipantRole.query(trx).insert({
213-
userId: newPortalUser.id,
214-
participantId: newParticipant?.id!,
215-
userRoleId: UserRoleId.Admin,
216-
});
217-
return newParticipant;
218-
});
219-
220-
sendNewParticipantEmail(
221-
parsedRequest,
222-
parsedRequest.types.map((t) => t.id),
223-
traceId
224-
);
225-
return res.status(201).json(participant);
226-
} catch (err) {
227-
if (err instanceof z.ZodError) {
228-
return res.status(400).send(err.issues);
229-
}
230-
return res.status(400).send([{ message: 'Unable to create participant' }]);
231-
}
232-
};

src/api/routers/participants/participantsRouter.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,7 @@ import {
2525
handleGetParticipantsAwaitingApproval,
2626
} from './participantsApproval';
2727
import { handleGetAuditTrail } from './participantsAuditTrail';
28-
import {
29-
handleCreateParticipant,
30-
handleCreateParticipantFromRequest,
31-
} from './participantsCreation';
28+
import { handleCreateParticipant } from './participantsCreation';
3229
import {
3330
handleGetParticipantDomainNames,
3431
handleSetParticipantDomainNames,
@@ -52,7 +49,6 @@ export function createParticipantsRouter() {
5249
const participantsRouter = express.Router();
5350

5451
participantsRouter.get('/signed', handleGetSignedParticipants);
55-
participantsRouter.post('/', handleCreateParticipantFromRequest);
5652

5753
participantsRouter.get(
5854
'/awaitingApproval',

src/api/services/participantsService.ts

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import { AuditAction, AuditTrailEvents } from '../entities/AuditTrail';
88
import {
99
Participant,
1010
ParticipantApprovalPartial,
11-
ParticipantCreationPartial,
1211
ParticipantDTO,
1312
ParticipantStatus,
1413
} from '../entities/Participant';
@@ -52,32 +51,6 @@ export const getParticipantTypesByIds = async (
5251
return ParticipantType.query().findByIds(participantTypeIds);
5352
};
5453

55-
export const sendNewParticipantEmail = async (
56-
newParticipant: z.infer<typeof ParticipantCreationPartial>,
57-
typeIds: number[],
58-
traceId: string
59-
) => {
60-
const participantTypes = await getParticipantTypesByIds(typeIds);
61-
const emailService = createEmailService();
62-
const requestor = newParticipant.users![0];
63-
const templateData = {
64-
participant: newParticipant.name,
65-
participantType: participantTypes.map((pt) => pt.typeName).join(', '),
66-
requestor: `${requestor.firstName} ${requestor.lastName}`,
67-
requestorEmail: requestor.email,
68-
jobFunction: requestor.jobFunction,
69-
};
70-
71-
const uid2SupportUsers = await getAllUid2SupportUsers();
72-
const emailArgs: EmailArgs = {
73-
subject: 'New Participant Request',
74-
templateData,
75-
template: 'newParticipantReadyForReview',
76-
to: uid2SupportUsers.map((user) => ({ name: user!.firstName, email: user!.email })),
77-
};
78-
emailService.sendEmail(emailArgs, traceId);
79-
};
80-
8154
export const mapParticipantToApprovalRequest = (
8255
participant: Participant
8356
): ParticipantRequestDTO => {

0 commit comments

Comments
 (0)