Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 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 .github/workflows/register-commands-production.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ jobs:
with:
apiToken: ${{secrets.CLOUDFLARE_API_TOKEN}}
accountId: ${{secrets.CLOUDFLARE_ACCOUNT_ID}}
wranglerVersion: '3.57.0'
wranglerVersion: "3.57.0"
secrets: |
DISCORD_PUBLIC_KEY
DISCORD_TOKEN
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/register-commands-staging.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ jobs:
with:
apiToken: ${{secrets.CLOUDFLARE_API_TOKEN}}
accountId: ${{secrets.CLOUDFLARE_ACCOUNT_ID}}
wranglerVersion: '3.57.0'
wranglerVersion: "3.57.0"
secrets: |
DISCORD_PUBLIC_KEY
DISCORD_TOKEN
Expand Down
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: "want to verify from main site?",
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";
7 changes: 6 additions & 1 deletion src/controllers/baseHandler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,13 +61,18 @@ export async function baseHandler(
return helloCommand(message.member.user.id);
}
case getCommandName(VERIFY): {
const data = message.data?.options as Array<messageRequestDataOptions>;
const dev = data.find(
(item) => item.name === "dev"
) as unknown as DevFlag;
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