diff --git a/apps/api/src/app/auth/auth.controller.ts b/apps/api/src/app/auth/auth.controller.ts index ea722a0ca..659961d49 100644 --- a/apps/api/src/app/auth/auth.controller.ts +++ b/apps/api/src/app/auth/auth.controller.ts @@ -57,17 +57,12 @@ export class AuthController { private resendOTP: ResendOTP ) {} - @Get('/github') - githubAuth() { - if (!process.env.GITHUB_OAUTH_CLIENT_ID || !process.env.GITHUB_OAUTH_CLIENT_SECRET) { - throw new ApiException( - 'GitHub auth is not configured, please provide GITHUB_OAUTH_CLIENT_ID and GITHUB_OAUTH_CLIENT_SECRET as env variables' - ); - } - - return { - success: true, - }; + @Post('/github') +async githubAuth(@Body() body: RegisterUserDto, @Res() response: Response) { + if (process.env.DISABLE_USER_REGISTRATION === 'true') { + response.status(403).send({ message: 'Account creation is disabled' }); + return; + } } @Get('/github/callback') @@ -115,17 +110,23 @@ export class AuthController { response.contentType('text').send(); } - @Post('/register') - async register(@Body() body: RegisterUserDto, @Res() response: Response) { - const registeredUser = await this.registerUser.execute(RegisterUserCommand.create(body)); + @Post('/register') +async register(@Body() body: RegisterUserDto, @Res() response: Response) { + if (process.env.DISABLE_USER_REGISTRATION === 'true') { + response.status(403).send({ message: 'Account creation is disabled' }); + return; + } - response.cookie(CONSTANTS.AUTH_COOKIE_NAME, registeredUser.token, { - ...COOKIE_CONFIG, - domain: process.env.COOKIE_DOMAIN, - }); + const registeredUser = await this.registerUser.execute(RegisterUserCommand.create(body)); + + response.cookie(CONSTANTS.AUTH_COOKIE_NAME, registeredUser.token, { + ...COOKIE_CONFIG, + domain: process.env.COOKIE_DOMAIN, + }); + + response.send(registeredUser); +} - response.send(registeredUser); - } @Post('/verify') async verifyRoute(@Body() body: VerifyDto, @UserSession() user: IJwtPayload) { diff --git a/apps/api/src/config/env-validator.ts b/apps/api/src/config/env-validator.ts index 6c55b1605..4b2cbe35e 100644 --- a/apps/api/src/config/env-validator.ts +++ b/apps/api/src/config/env-validator.ts @@ -1,14 +1,18 @@ -import { port, str, url, ValidatorSpec } from 'envalid'; +import { port, str, url, ValidatorSpec, bool } from 'envalid'; import * as envalid from 'envalid'; import { ENVTypesEnum } from '@impler/shared'; // eslint-disable-next-line @typescript-eslint/no-explicit-any -const validators: { [K in keyof any]: ValidatorSpec } = { +export const validators: { [K in keyof any]: ValidatorSpec } = { JWT_SECRET: str(), NODE_ENV: str({ choices: [ENVTypesEnum.LOCAL, ENVTypesEnum.TEST, ENVTypesEnum.PROD, ENVTypesEnum.CI, ENVTypesEnum.LOCAL], default: ENVTypesEnum.LOCAL, }), + DISABLE_USER_REGISTRATION: bool({ + default: false, + desc: 'Flag to disable user registration', + }), S3_LOCAL_STACK: str(), S3_BUCKET_NAME: str(), S3_REGION: str(), diff --git a/docker/.env.example b/docker/.env.example index 743d75054..443fd7b15 100644 --- a/docker/.env.example +++ b/docker/.env.example @@ -5,6 +5,7 @@ JWT_SECRET=SUPER-SECRET NODE_ENV=local MONGO_URL=mongodb://mongodb:27017/impler RABBITMQ_CONN_URL=amqp://guest:guest@rabbitmq:5672 +DISABLE_USER_REGISTRATION=false # AWS S3_LOCAL_STACK=http://localhost:4566 diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index d0a7179e6..f435bdab9 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -25,6 +25,7 @@ services: environment: NODE_ENV: ${NODE_ENV} PORT: ${API_PORT} + DISABLE_USER_REGISTRATION: ${DISABLE_USER_REGISTRATION} WIDGET_BASE_URL: ${WIDGET_BASE_URL} WEB_BASE_URL: ${WEB_BASE_URL} MONGO_URL: ${MONGO_URL} @@ -129,4 +130,4 @@ services: volumes: mongodb: ~ networks: - impler: \ No newline at end of file + impler: