From 60d2b81c29968ce6597a95e24b15c940b37a0d53 Mon Sep 17 00:00:00 2001 From: Agusti Fernandez Pardo Date: Wed, 23 Mar 2022 18:56:31 +0100 Subject: [PATCH] feat: Initial work on event-types, add jest for testing w node-http-mocks --- .gitignore | 2 +- pages/api/auth/[...nextauth].ts | 82 +++++++++++++++++++++++++++++++++ 2 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 pages/api/auth/[...nextauth].ts diff --git a/.gitignore b/.gitignore index 0d8832421a..f1476ef06a 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,4 @@ node_modules/ .env .next/ .turbo/ -*.tsbuildinfo \ No newline at end of file +*.tsbuildinfo diff --git a/pages/api/auth/[...nextauth].ts b/pages/api/auth/[...nextauth].ts new file mode 100644 index 0000000000..d3d2886b06 --- /dev/null +++ b/pages/api/auth/[...nextauth].ts @@ -0,0 +1,82 @@ +import { PrismaAdapter } from "@next-auth/prisma-adapter"; +import { PrismaClient } from "@prisma/client"; +import NextAuth, { NextAuthOptions } from "next-auth"; +import EmailProvider from "next-auth/providers/email"; + +// FIXME: not working when importing prisma directly from our project +// import prisma from "@calcom/prisma"; +const prisma = new PrismaClient(); + +// TODO: get rid of this and do it in it's own auth.cal.com project with a custom Next.js app + +export const authOptions: NextAuthOptions = { + // For more information on each option (and a full list of options) go to + // https://next-auth.js.org/configuration/options + adapter: PrismaAdapter(prisma), + // https://next-auth.js.org/configuration/providers + providers: [ + EmailProvider({ + maxAge: 10 * 60 * 60, // Magic links are valid for 10 min only + // sendVerificationRequest, + }), + ], + secret: process.env.NEXTAUTH_SECRET, + session: { + // Use JSON Web Tokens for session instead of database sessions. + // This option can be used with or without a database for users/accounts. + // Note: `strategy` should be set to 'jwt' if no database is used. + + // TODO: Do we want to move 'database' sessions at some point? + strategy: "jwt", + // Seconds - How long until an idle session expires and is no longer valid. + // maxAge: 30 * 24 * 60 * 60, // 30 days + + // Seconds - Throttle how frequently to write to database to extend a session. + // Use it to limit write operations. Set to 0 to always update the database. + // Note: This option is ignored if using JSON Web Tokens + // updateAge: 24 * 60 * 60, // 24 hours + }, + + // JSON Web tokens are only used for sessions if the `strategy: 'jwt'` session + // option is set - or by default if no database is specified. + // https://next-auth.js.org/configuration/options#jwt + jwt: { + // A secret to use for key generation (you should set this explicitly) + secret: process.env.SECRET, + // Set to true to use encryption (default: false) + // encryption: true, + // You can define your own encode/decode functions for signing and encryption + // if you want to override the default behaviour. + // encode: async ({ secret, token, maxAge }) => {}, + // decode: async ({ secret, token, maxAge }) => {}, + }, + // https://next-auth.js.org/configuration/pages + // NOTE: We don't want to enable these, only the API endpoints for auth. We will get rid of this when we do auth.cal.com + pages: { + signIn: "/", // Displays signin buttons + signOut: "/", // Displays form with sign out button + error: "/", // Error code passed in query string as ?error= + verifyRequest: "/", // Used for check email page + newUser: "/", // If set, new users will be directed here on first sign in + }, + + // Callbacks are asynchronous functions you can use to control what happens + // when an action is performed. + // https://next-auth.js.org/configuration/callbacks + + callbacks: { + // async signIn({ user, account, profile, email, credentials }) { return true }, + // async redirect({ url, baseUrl }) { return baseUrl }, + // async session({ session, token, user }) { return session }, + // FIXME: add a custom jwt callback, that is stored outside next-auth + // and can be reused to generate valid Personal Access Tokens for the API. + // async jwt({ token, user, account, profile, isNewUser }) { return token } + }, + + // Events are useful for logging + // https://next-auth.js.org/configuration/events + + // Enable debug messages in the console if you are having problems + debug: false, +}; +export default NextAuth(authOptions);