fix: refresh access token expiry 60m (#14331)

* fix: refresh access token expiry 60m

* fix: exception filters logging request

* fix: never auto accept domain for managed users
This commit is contained in:
Morgan
2024-04-04 09:07:43 -03:00
committed by GitHub
parent a8d8c992a4
commit a72a3e45e9
8 changed files with 35 additions and 17 deletions
@@ -1,4 +1,5 @@
import { ArgumentsHost, Catch, ExceptionFilter, HttpException, Logger } from "@nestjs/common";
import { Request } from "express";
import { ERROR_STATUS } from "@calcom/platform-constants";
import { Response } from "@calcom/platform-types";
@@ -10,11 +11,14 @@ export class HttpExceptionFilter implements ExceptionFilter<HttpException> {
catch(exception: HttpException, host: ArgumentsHost) {
const ctx = host.switchToHttp();
const response = ctx.getResponse<Response>();
const request = ctx.getRequest();
const request = ctx.getRequest<Request>();
const statusCode = exception.getStatus();
this.logger.error(`Http Exception Filter: ${exception?.message}`, {
exception,
request,
body: request.body,
headers: request.headers,
url: request.url,
method: request.method,
});
response.status(statusCode).json({
status: ERROR_STATUS,
@@ -7,6 +7,7 @@ import {
PrismaClientUnknownRequestError,
PrismaClientValidationError,
} from "@prisma/client/runtime/library";
import { Request } from "express";
import { ERROR_STATUS, INTERNAL_SERVER_ERROR } from "@calcom/platform-constants";
import { Response } from "@calcom/platform-types";
@@ -31,10 +32,13 @@ export class PrismaExceptionFilter implements ExceptionFilter {
catch(error: PrismaError, host: ArgumentsHost) {
const ctx = host.switchToHttp();
const response = ctx.getResponse<Response>();
const request = ctx.getRequest();
const request = ctx.getRequest<Request>();
this.logger.error(`PrismaError: ${error.message}`, {
error,
request,
body: request.body,
headers: request.headers,
url: request.url,
method: request.method,
});
response.status(HttpStatus.INTERNAL_SERVER_ERROR).json({
status: ERROR_STATUS,
@@ -1,6 +1,7 @@
import { ArgumentsHost, Catch, Logger, HttpStatus } from "@nestjs/common";
import { BaseExceptionFilter } from "@nestjs/core";
import * as Sentry from "@sentry/node";
import { Request } from "express";
import { ERROR_STATUS, INTERNAL_SERVER_ERROR } from "@calcom/platform-constants";
import { Response } from "@calcom/platform-types";
@@ -12,11 +13,14 @@ export class SentryFilter extends BaseExceptionFilter {
handleUnknownError(exception: any, host: ArgumentsHost): void {
const ctx = host.switchToHttp();
const response = ctx.getResponse<Response>();
const request = ctx.getRequest();
const request = ctx.getRequest<Request>();
this.logger.error(`Sentry Exception Filter: ${exception?.message}`, {
exception,
request,
body: request.body,
headers: request.headers,
url: request.url,
method: request.method,
});
// capture if client has been init
@@ -1,4 +1,5 @@
import { ArgumentsHost, Catch, ExceptionFilter, Logger } from "@nestjs/common";
import { Request } from "express";
import { ERROR_STATUS } from "@calcom/platform-constants";
import { TRPCError } from "@calcom/platform-libraries";
@@ -11,7 +12,7 @@ export class TRPCExceptionFilter implements ExceptionFilter {
catch(exception: TRPCError, host: ArgumentsHost) {
const ctx = host.switchToHttp();
const response = ctx.getResponse<Response>();
const request = ctx.getRequest();
const request = ctx.getRequest<Request>();
let statusCode = 500;
switch (exception.code) {
@@ -42,7 +43,10 @@ export class TRPCExceptionFilter implements ExceptionFilter {
this.logger.error(`TRPC Exception Filter: ${exception?.message}`, {
exception,
request,
body: request.body,
headers: request.headers,
url: request.url,
method: request.method,
});
response.status(statusCode).json({
@@ -1,5 +1,6 @@
import type { ArgumentsHost, ExceptionFilter } from "@nestjs/common";
import { Catch, HttpStatus, Logger } from "@nestjs/common";
import { Request } from "express";
import { ZodError } from "zod";
import { BAD_REQUEST, ERROR_STATUS } from "@calcom/platform-constants";
@@ -12,11 +13,14 @@ export class ZodExceptionFilter implements ExceptionFilter {
catch(error: ZodError, host: ArgumentsHost) {
const ctx = host.switchToHttp();
const response = ctx.getResponse<Response>();
const request = ctx.getRequest();
const request = ctx.getRequest<Request>();
this.logger.error(`ZodError: ${error.message}`, {
error,
request,
body: request.body,
headers: request.headers,
url: request.url,
method: request.method,
});
response.status(HttpStatus.BAD_REQUEST).json({
@@ -27,8 +27,6 @@ export class OAuthClientUsersService {
const username = generateShortHash(body.email, oAuthClientId);
user = await this.userRepository.create(body, username, oAuthClientId, isPlatformManaged);
} else {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const [_, emailDomain] = body.email.split("@");
user = (
await createNewUsersConnectToOrgIfExists({
usernamesOrEmails: [body.email],
@@ -40,7 +38,7 @@ export class OAuthClientUsersService {
language: "en",
},
parentId: null,
autoAcceptEmailDomain: emailDomain,
autoAcceptEmailDomain: "never-auto-accept-email-domain-for-managed-users",
connectionInfoMap: {
[body.email]: {
orgId: organizationId,
@@ -101,7 +101,7 @@ export class TokensRepository {
}
async refreshOAuthTokens(clientId: string, refreshTokenSecret: string, tokenUserId: number) {
const accessExpiry = DateTime.now().plus({ minute: 1 }).startOf("minute").toJSDate();
const accessExpiry = DateTime.now().plus({ minute: 60 }).startOf("minute").toJSDate();
const refreshExpiry = DateTime.now().plus({ year: 1 }).startOf("day").toJSDate();
// eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -1,16 +1,16 @@
import { BaseStrategy } from "@/lib/passport/strategies/types";
import { NextAuthPassportStrategy } from "@/lib/passport/strategies/types";
import { UsersRepository } from "@/modules/users/users.repository";
import { Injectable } from "@nestjs/common";
import { PassportStrategy } from "@nestjs/passport";
@Injectable()
export class NextAuthMockStrategy extends PassportStrategy(BaseStrategy, "next-auth") {
export class NextAuthMockStrategy extends PassportStrategy(NextAuthPassportStrategy, "next-auth") {
constructor(private readonly email: string, private readonly userRepository: UsersRepository) {
super();
}
async authenticate() {
try {
const user = await this.userRepository.findByEmail(this.email);
const user = await this.userRepository.findByEmailWithProfile(this.email);
if (!user) {
throw new Error("User with the provided email not found");
}