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
6 changes: 6 additions & 0 deletions config/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ import {
RDS_STAGING_STATUS_SITE_URL,
RDS_DASHBOARD_SITE_URL,
RDS_STAGING_DASHBOARD_SITE_URL,
RDS_MAIN_SITE_URL,
RDS_STAGING_MAIN_SITE_URL,
RDS_DEVELOPMENT_MAIN_SITE_URL,
} from "../src/constants/urls";
import {
DISCORD_PROFILE_SERVICE_HELP_GROUP,
Expand Down Expand Up @@ -74,6 +77,7 @@ const config = (env: env) => {
PROFILE_SERVICE_HELP_GROUP_ID: DISCORD_PROFILE_SERVICE_HELP_GROUP,
RDS_STATUS_SITE_URL: RDS_STATUS_SITE_URL,
DASHBOARD_SITE_URL: RDS_DASHBOARD_SITE_URL,
MAIN_SITE_URL: RDS_MAIN_SITE_URL,
},
staging: {
RDS_BASE_API_URL: RDS_BASE_STAGING_API_URL,
Expand All @@ -82,6 +86,7 @@ const config = (env: env) => {
PROFILE_SERVICE_HELP_GROUP_ID: DISCORD_PROFILE_SERVICE_STAGING_HELP_GROUP,
RDS_STATUS_SITE_URL: RDS_STAGING_STATUS_SITE_URL,
DASHBOARD_SITE_URL: RDS_STAGING_DASHBOARD_SITE_URL,
MAIN_SITE_URL: RDS_STAGING_MAIN_SITE_URL,
},
default: {
RDS_BASE_API_URL: RDS_BASE_DEVELOPMENT_API_URL,
Expand All @@ -91,6 +96,7 @@ const config = (env: env) => {
DISCORD_PROFILE_SERVICE_DEVELOPMENT_HELP_GROUP,
RDS_STATUS_SITE_URL: RDS_STATUS_SITE_URL,
DASHBOARD_SITE_URL: RDS_DASHBOARD_SITE_URL,
MAIN_SITE_URL: RDS_DEVELOPMENT_MAIN_SITE_URL,
},
};

Expand Down
8 changes: 8 additions & 0 deletions src/constants/commands.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,14 @@ export const VERIFY = {
name: "verify",
description:
"Generate a link with user specific token to link with RDS backend.",
options: [
{
name: "dev",
description: "Use new website for verification.",
type: 5,
required: false,
},
],
};

export const GROUP_INVITE = {
Expand Down
4 changes: 4 additions & 0 deletions src/constants/urls.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,7 @@ export const RDS_STAGING_STATUS_SITE_URL =
export const RDS_DASHBOARD_SITE_URL = "https://dashboard.realdevsquad.com";
export const RDS_STAGING_DASHBOARD_SITE_URL =
"https://staging-dashboard.realdevsquad.com";

export const RDS_MAIN_SITE_URL = "https://realdevsquad.com";
export const RDS_STAGING_MAIN_SITE_URL = "https://staging-www.realdevsquad.com";
export const RDS_DEVELOPMENT_MAIN_SITE_URL = "http://localhost:4200";
12 changes: 11 additions & 1 deletion src/controllers/baseHandler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,13 +61,23 @@ export async function baseHandler(
return helloCommand(message.member.user.id);
}
case getCommandName(VERIFY): {
const data = message.data?.options as Array<messageRequestDataOptions>;
const devOption = data?.find((item) => item.name === "dev");
const dev = devOption
? ({
name: devOption.name,
type: devOption.type,
value: Boolean(devOption.value),
} as DevFlag)
: undefined;
return await verifyCommand(
message.member.user.id,
message.member.user.avatar,
message.member.user.username,
message.member.user.discriminator,
message.member.joined_at,
env
env,
dev
);
}
case getCommandName(MENTION_EACH): {
Expand Down
16 changes: 12 additions & 4 deletions src/controllers/verifyCommand.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,18 @@ import { env } from "../typeDefinitions/default.types";
import { discordEphemeralResponse } from "../utils/discordEphemeralResponse";
import { generateUniqueToken } from "../utils/generateUniqueToken";
import { sendUserDiscordData } from "../utils/sendUserDiscordData";
import { DevFlag } from "../typeDefinitions/verify.types";

export async function verifyCommand(
userId: number,
userAvatarHash: string,
userName: string,
discriminator: string,
discordJoinedAt: string,
env: env
env: env,
dev?: DevFlag
) {
const token = await generateUniqueToken();

const response = await sendUserDiscordData(
token,
userId,
Expand All @@ -29,8 +30,15 @@ export async function verifyCommand(
env
);
if (response?.status === 201 || response?.status === 200) {
const verificationSiteURL = config(env).VERIFICATION_SITE_URL;
const message = `${VERIFICATION_STRING}\n${verificationSiteURL}/discord?token=${token}\n${VERIFICATION_SUBSTRING}`;
let verificationSiteURL = "";
let message = "";
if (dev?.value) {
verificationSiteURL = config(env).MAIN_SITE_URL;
message = `${VERIFICATION_STRING}\n${verificationSiteURL}/discord?dev=true&token=${token}\n${VERIFICATION_SUBSTRING}`;
} else {
verificationSiteURL = config(env).VERIFICATION_SITE_URL;
message = `${VERIFICATION_STRING}\n${verificationSiteURL}/discord?token=${token}\n${VERIFICATION_SUBSTRING}`;
}
return discordEphemeralResponse(message);
} else {
return discordEphemeralResponse(RETRY_COMMAND);
Expand Down
1 change: 1 addition & 0 deletions src/typeDefinitions/default.types.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ export interface variables {
TRACKING_CHANNEL_URL: string;
PROFILE_SERVICE_HELP_GROUP_ID: string;
RDS_STATUS_SITE_URL: string;
MAIN_SITE_URL: string;
}

export interface discordCommand {
Expand Down
5 changes: 5 additions & 0 deletions src/typeDefinitions/verify.types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
export type DevFlag = {
name: string;
type: number;
value: boolean;
};
63 changes: 63 additions & 0 deletions tests/unit/handlers/verifyCommand.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import {
env,
mockDateNow,
} from "../../fixtures/fixture";
import { DevFlag } from "../../../src/typeDefinitions/verify.types";

describe("verifyCommand", () => {
beforeEach(() => {
Expand All @@ -24,6 +25,68 @@ describe("verifyCommand", () => {
jest.spyOn(Date, "now").mockRestore();
});

test("should return message with verification site url when dev is false", async () => {
jest.spyOn(global, "fetch").mockResolvedValueOnce({
ok: true,
status: 200,
json: jest.fn().mockResolvedValueOnce(discordUserData),
} as unknown as Response);

const { verifyCommand } = await import(
"../../../src/controllers/verifyCommand"
);

const result = await verifyCommand(
1,
"userAvatarHash",
"userName",
"discriminator",
"2021-07-25T19:25:16.172000+00:00",
env,
{
value: false,
type: 5,
name: "dev",
} as DevFlag
);

const resultText = await result.text();
const resultData = JSON.parse(resultText);

const verificationSiteURL = config(env).VERIFICATION_SITE_URL;
const message = `${VERIFICATION_STRING}\n${verificationSiteURL}/discord?token=${UNIQUE_TOKEN}\n${VERIFICATION_SUBSTRING}`;
expect(resultData.data.content).toEqual(message);
});

test("should return message with verification site url when dev is true", async () => {
jest.spyOn(global, "fetch").mockResolvedValueOnce({
ok: true,
status: 200,
json: jest.fn().mockResolvedValueOnce(discordUserData),
} as unknown as Response);

const { verifyCommand } = await import(
"../../../src/controllers/verifyCommand"
);

const result = await verifyCommand(
1,
"userAvatarHash",
"userName",
"discriminator",
"2021-07-25T19:25:16.172000+00:00",
env,
{ value: true, type: 5, name: "dev" } as DevFlag
);

const resultText = await result.text();
const resultData = JSON.parse(resultText);

const verificationSiteURL = config(env).MAIN_SITE_URL;
const message = `${VERIFICATION_STRING}\n${verificationSiteURL}/discord?dev=true&token=${UNIQUE_TOKEN}\n${VERIFICATION_SUBSTRING}`;
expect(resultData.data.content).toEqual(message);
});

test("should return JSON response when response is ok", async () => {
jest.spyOn(global, "fetch").mockResolvedValueOnce({
ok: true,
Expand Down