chore: made the required changes in auth and user modules to accommodate changes made in user schema
This commit is contained in:
@@ -1,158 +0,0 @@
|
|||||||
-- CreateEnum
|
|
||||||
CREATE TYPE "TeamMemberRole" AS ENUM ('OWNER', 'VIEWER', 'EDITOR');
|
|
||||||
|
|
||||||
-- CreateTable
|
|
||||||
CREATE TABLE "Team" (
|
|
||||||
"id" TEXT NOT NULL,
|
|
||||||
"name" TEXT NOT NULL,
|
|
||||||
|
|
||||||
CONSTRAINT "Team_pkey" PRIMARY KEY ("id")
|
|
||||||
);
|
|
||||||
|
|
||||||
-- CreateTable
|
|
||||||
CREATE TABLE "TeamMember" (
|
|
||||||
"id" TEXT NOT NULL,
|
|
||||||
"role" "TeamMemberRole" NOT NULL,
|
|
||||||
"userUid" TEXT NOT NULL,
|
|
||||||
"teamID" TEXT NOT NULL,
|
|
||||||
|
|
||||||
CONSTRAINT "TeamMember_pkey" PRIMARY KEY ("id")
|
|
||||||
);
|
|
||||||
|
|
||||||
-- CreateTable
|
|
||||||
CREATE TABLE "TeamInvitation" (
|
|
||||||
"id" TEXT NOT NULL,
|
|
||||||
"teamID" TEXT NOT NULL,
|
|
||||||
"creatorUid" TEXT NOT NULL,
|
|
||||||
"inviteeEmail" TEXT NOT NULL,
|
|
||||||
"inviteeRole" "TeamMemberRole" NOT NULL,
|
|
||||||
|
|
||||||
CONSTRAINT "TeamInvitation_pkey" PRIMARY KEY ("id")
|
|
||||||
);
|
|
||||||
|
|
||||||
-- CreateTable
|
|
||||||
CREATE TABLE "TeamCollection" (
|
|
||||||
"id" TEXT NOT NULL,
|
|
||||||
"parentID" TEXT,
|
|
||||||
"teamID" TEXT NOT NULL,
|
|
||||||
"title" TEXT NOT NULL,
|
|
||||||
|
|
||||||
CONSTRAINT "TeamCollection_pkey" PRIMARY KEY ("id")
|
|
||||||
);
|
|
||||||
|
|
||||||
-- CreateTable
|
|
||||||
CREATE TABLE "TeamRequest" (
|
|
||||||
"id" TEXT NOT NULL,
|
|
||||||
"collectionID" TEXT NOT NULL,
|
|
||||||
"teamID" TEXT NOT NULL,
|
|
||||||
"title" TEXT NOT NULL,
|
|
||||||
"request" JSONB NOT NULL,
|
|
||||||
|
|
||||||
CONSTRAINT "TeamRequest_pkey" PRIMARY KEY ("id")
|
|
||||||
);
|
|
||||||
|
|
||||||
-- CreateTable
|
|
||||||
CREATE TABLE "Shortcode" (
|
|
||||||
"id" TEXT NOT NULL,
|
|
||||||
"request" JSONB NOT NULL,
|
|
||||||
"creatorUid" TEXT,
|
|
||||||
"createdOn" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
|
|
||||||
CONSTRAINT "Shortcode_pkey" PRIMARY KEY ("id")
|
|
||||||
);
|
|
||||||
|
|
||||||
-- CreateTable
|
|
||||||
CREATE TABLE "TeamEnvironment" (
|
|
||||||
"id" TEXT NOT NULL,
|
|
||||||
"teamID" TEXT NOT NULL,
|
|
||||||
"name" TEXT NOT NULL,
|
|
||||||
"variables" JSONB NOT NULL,
|
|
||||||
|
|
||||||
CONSTRAINT "TeamEnvironment_pkey" PRIMARY KEY ("id")
|
|
||||||
);
|
|
||||||
|
|
||||||
-- CreateTable
|
|
||||||
CREATE TABLE "User" (
|
|
||||||
"id" TEXT NOT NULL,
|
|
||||||
"name" TEXT,
|
|
||||||
"email" TEXT,
|
|
||||||
"image" TEXT,
|
|
||||||
"isAdmin" BOOLEAN NOT NULL DEFAULT false,
|
|
||||||
"refreshToken" TEXT,
|
|
||||||
"createdOn" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
|
|
||||||
CONSTRAINT "User_pkey" PRIMARY KEY ("id")
|
|
||||||
);
|
|
||||||
|
|
||||||
-- CreateTable
|
|
||||||
CREATE TABLE "Account" (
|
|
||||||
"id" TEXT NOT NULL,
|
|
||||||
"userId" TEXT NOT NULL,
|
|
||||||
"provider" TEXT NOT NULL,
|
|
||||||
"providerAccountId" TEXT NOT NULL,
|
|
||||||
"providerRefreshToken" TEXT,
|
|
||||||
"providerAccessToken" TEXT,
|
|
||||||
"providerScope" TEXT,
|
|
||||||
"loggedIn" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
|
|
||||||
CONSTRAINT "Account_pkey" PRIMARY KEY ("id")
|
|
||||||
);
|
|
||||||
|
|
||||||
-- CreateTable
|
|
||||||
CREATE TABLE "PasswordlessVerification" (
|
|
||||||
"deviceIdentifier" TEXT NOT NULL,
|
|
||||||
"token" TEXT NOT NULL,
|
|
||||||
"userUid" TEXT NOT NULL,
|
|
||||||
"expiresOn" TIMESTAMPTZ(3) NOT NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
-- CreateIndex
|
|
||||||
CREATE UNIQUE INDEX "TeamMember_teamID_userUid_key" ON "TeamMember"("teamID", "userUid");
|
|
||||||
|
|
||||||
-- CreateIndex
|
|
||||||
CREATE INDEX "TeamInvitation_teamID_idx" ON "TeamInvitation"("teamID");
|
|
||||||
|
|
||||||
-- CreateIndex
|
|
||||||
CREATE UNIQUE INDEX "TeamInvitation_teamID_inviteeEmail_key" ON "TeamInvitation"("teamID", "inviteeEmail");
|
|
||||||
|
|
||||||
-- CreateIndex
|
|
||||||
CREATE UNIQUE INDEX "Shortcode_id_creatorUid_key" ON "Shortcode"("id", "creatorUid");
|
|
||||||
|
|
||||||
-- CreateIndex
|
|
||||||
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
|
|
||||||
|
|
||||||
-- CreateIndex
|
|
||||||
CREATE UNIQUE INDEX "Account_provider_providerAccountId_key" ON "Account"("provider", "providerAccountId");
|
|
||||||
|
|
||||||
-- CreateIndex
|
|
||||||
CREATE UNIQUE INDEX "PasswordlessVerification_token_key" ON "PasswordlessVerification"("token");
|
|
||||||
|
|
||||||
-- CreateIndex
|
|
||||||
CREATE UNIQUE INDEX "PasswordlessVerification_deviceIdentifier_token_key" ON "PasswordlessVerification"("deviceIdentifier", "token");
|
|
||||||
|
|
||||||
-- AddForeignKey
|
|
||||||
ALTER TABLE "TeamMember" ADD CONSTRAINT "TeamMember_teamID_fkey" FOREIGN KEY ("teamID") REFERENCES "Team"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
||||||
|
|
||||||
-- AddForeignKey
|
|
||||||
ALTER TABLE "TeamInvitation" ADD CONSTRAINT "TeamInvitation_teamID_fkey" FOREIGN KEY ("teamID") REFERENCES "Team"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
||||||
|
|
||||||
-- AddForeignKey
|
|
||||||
ALTER TABLE "TeamCollection" ADD CONSTRAINT "TeamCollection_parentID_fkey" FOREIGN KEY ("parentID") REFERENCES "TeamCollection"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
||||||
|
|
||||||
-- AddForeignKey
|
|
||||||
ALTER TABLE "TeamCollection" ADD CONSTRAINT "TeamCollection_teamID_fkey" FOREIGN KEY ("teamID") REFERENCES "Team"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
||||||
|
|
||||||
-- AddForeignKey
|
|
||||||
ALTER TABLE "TeamRequest" ADD CONSTRAINT "TeamRequest_collectionID_fkey" FOREIGN KEY ("collectionID") REFERENCES "TeamCollection"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
||||||
|
|
||||||
-- AddForeignKey
|
|
||||||
ALTER TABLE "TeamRequest" ADD CONSTRAINT "TeamRequest_teamID_fkey" FOREIGN KEY ("teamID") REFERENCES "Team"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
||||||
|
|
||||||
-- AddForeignKey
|
|
||||||
ALTER TABLE "TeamEnvironment" ADD CONSTRAINT "TeamEnvironment_teamID_fkey" FOREIGN KEY ("teamID") REFERENCES "Team"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
||||||
|
|
||||||
-- AddForeignKey
|
|
||||||
ALTER TABLE "Account" ADD CONSTRAINT "Account_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
||||||
|
|
||||||
-- AddForeignKey
|
|
||||||
ALTER TABLE "PasswordlessVerification" ADD CONSTRAINT "PasswordlessVerification_userUid_fkey" FOREIGN KEY ("userUid") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
-- AlterTable
|
|
||||||
ALTER TABLE "Account" ALTER COLUMN "loggedIn" SET DATA TYPE TIMESTAMP(3);
|
|
||||||
|
|
||||||
-- AlterTable
|
|
||||||
ALTER TABLE "PasswordlessVerification" ALTER COLUMN "expiresOn" SET DATA TYPE TIMESTAMP(3);
|
|
||||||
|
|
||||||
-- AlterTable
|
|
||||||
ALTER TABLE "User" ALTER COLUMN "createdOn" SET DATA TYPE TIMESTAMP(3);
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
# Please do not edit this file manually
|
|
||||||
# It should be added in your version-control system (i.e. Git)
|
|
||||||
provider = "postgresql"
|
|
||||||
@@ -48,7 +48,7 @@ export class AuthService {
|
|||||||
const idToken = await this.prismaService.passwordlessVerification.create({
|
const idToken = await this.prismaService.passwordlessVerification.create({
|
||||||
data: {
|
data: {
|
||||||
deviceIdentifier: salt,
|
deviceIdentifier: salt,
|
||||||
userUid: user.id,
|
userUid: user.uid,
|
||||||
expiresOn: expiresOn,
|
expiresOn: expiresOn,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
@@ -77,7 +77,7 @@ export class AuthService {
|
|||||||
try {
|
try {
|
||||||
const user = await this.prismaService.user.update({
|
const user = await this.prismaService.user.update({
|
||||||
where: {
|
where: {
|
||||||
id: userUid,
|
uid: userUid,
|
||||||
},
|
},
|
||||||
data: {
|
data: {
|
||||||
refreshToken: tokenHash,
|
refreshToken: tokenHash,
|
||||||
@@ -290,7 +290,7 @@ export class AuthService {
|
|||||||
statusCode: HttpStatus.NOT_FOUND,
|
statusCode: HttpStatus.NOT_FOUND,
|
||||||
});
|
});
|
||||||
|
|
||||||
const generatedAuthTokens = await this.generateAuthTokens(user.id);
|
const generatedAuthTokens = await this.generateAuthTokens(user.uid);
|
||||||
if (E.isLeft(generatedAuthTokens))
|
if (E.isLeft(generatedAuthTokens))
|
||||||
return E.left({
|
return E.left({
|
||||||
message: generatedAuthTokens.left.message,
|
message: generatedAuthTokens.left.message,
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ export class UserService {
|
|||||||
try {
|
try {
|
||||||
const user = await this.prisma.user.findUniqueOrThrow({
|
const user = await this.prisma.user.findUniqueOrThrow({
|
||||||
where: {
|
where: {
|
||||||
id: userUid,
|
uid: userUid,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
return O.some(user);
|
return O.some(user);
|
||||||
@@ -52,9 +52,9 @@ export class UserService {
|
|||||||
async createUserSSO(accessToken: string, refreshToken: string, profile) {
|
async createUserSSO(accessToken: string, refreshToken: string, profile) {
|
||||||
const createdUser = await this.prisma.user.create({
|
const createdUser = await this.prisma.user.create({
|
||||||
data: {
|
data: {
|
||||||
name: !profile.displayName ? null : profile.displayName,
|
displayName: !profile.displayName ? null : profile.displayName,
|
||||||
email: profile.emails[0].value,
|
email: profile.emails[0].value,
|
||||||
image: !profile.photos ? null : profile.photos[0].value,
|
photoURL: !profile.photos ? null : profile.photos[0].value,
|
||||||
accounts: {
|
accounts: {
|
||||||
create: {
|
create: {
|
||||||
provider: profile.provider,
|
provider: profile.provider,
|
||||||
@@ -83,7 +83,7 @@ export class UserService {
|
|||||||
providerAccessToken: accessToken ? accessToken : null,
|
providerAccessToken: accessToken ? accessToken : null,
|
||||||
user: {
|
user: {
|
||||||
connect: {
|
connect: {
|
||||||
id: user.id,
|
uid: user.uid,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import * as E from 'fp-ts/Either';
|
|||||||
import { AuthErrorHandler } from './types/AuthErrorHandler';
|
import { AuthErrorHandler } from './types/AuthErrorHandler';
|
||||||
import { AuthTokens } from './types/AuthTokens';
|
import { AuthTokens } from './types/AuthTokens';
|
||||||
import { Response } from 'express';
|
import { Response } from 'express';
|
||||||
|
import { DateTime } from 'luxon';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A workaround to throw an exception in an expression.
|
* A workaround to throw an exception in an expression.
|
||||||
@@ -134,7 +135,6 @@ export const validateEmail = (email: string) => {
|
|||||||
).test(email);
|
).test(email);
|
||||||
};
|
};
|
||||||
|
|
||||||
//TODO: set expiresOn to cookies
|
|
||||||
/**
|
/**
|
||||||
* Sets and returns the cookies in the response object on successful authentication
|
* Sets and returns the cookies in the response object on successful authentication
|
||||||
* @param res Express Response Object
|
* @param res Express Response Object
|
||||||
@@ -146,15 +146,30 @@ export const authCookieHandler = (
|
|||||||
authTokens: AuthTokens,
|
authTokens: AuthTokens,
|
||||||
redirect: boolean,
|
redirect: boolean,
|
||||||
) => {
|
) => {
|
||||||
|
const currentTime = DateTime.now();
|
||||||
|
const accessTokenValidity = currentTime.plus({
|
||||||
|
millisecond: parseInt(process.env.ACCESS_TOKEN_VALIDITY),
|
||||||
|
});
|
||||||
|
const refreshTokenValidity = currentTime.plus({
|
||||||
|
millisecond: parseInt(process.env.REFRESH_TOKEN_VALIDITY),
|
||||||
|
});
|
||||||
|
console.log(process.env.ACCESS_TOKEN_VALIDITY, accessTokenValidity);
|
||||||
|
console.log(process.env.REFRESH_TOKEN_VALIDITY, refreshTokenValidity);
|
||||||
|
console.log(process.env.REDIRECT_URL);
|
||||||
|
|
||||||
res.cookie('access_token', authTokens.access_token, {
|
res.cookie('access_token', authTokens.access_token, {
|
||||||
httpOnly: true,
|
httpOnly: true,
|
||||||
secure: true,
|
secure: true,
|
||||||
sameSite: 'lax',
|
sameSite: 'lax',
|
||||||
|
maxAge: accessTokenValidity.toMillis(),
|
||||||
|
expires: accessTokenValidity.toJSDate(),
|
||||||
});
|
});
|
||||||
res.cookie('refresh_token', authTokens.refresh_token, {
|
res.cookie('refresh_token', authTokens.refresh_token, {
|
||||||
httpOnly: true,
|
httpOnly: true,
|
||||||
secure: true,
|
secure: true,
|
||||||
sameSite: 'lax',
|
sameSite: 'lax',
|
||||||
|
maxAge: refreshTokenValidity.toMillis(),
|
||||||
|
expires: refreshTokenValidity.toJSDate(),
|
||||||
});
|
});
|
||||||
if (redirect) {
|
if (redirect) {
|
||||||
res.status(HttpStatus.OK).redirect('http://localhost:3170/graphql');
|
res.status(HttpStatus.OK).redirect('http://localhost:3170/graphql');
|
||||||
|
|||||||
Reference in New Issue
Block a user