Skip to content

Commit

Permalink
test
Browse files Browse the repository at this point in the history
  • Loading branch information
kaldray committed Jun 18, 2024
1 parent 7a16299 commit e76c483
Show file tree
Hide file tree
Showing 2 changed files with 109 additions and 101 deletions.
208 changes: 108 additions & 100 deletions pages/api/auth/[...nextauth].ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { NextApiRequest, NextApiResponse } from "next";
import NextAuth, { TokenSet } from "next-auth";
import { JWT } from "next-auth/jwt";
import SpotifyProvider from "next-auth/providers/spotify";
Expand Down Expand Up @@ -51,110 +52,117 @@ async function getDeezerToken(paramsUrl: URLSearchParams): Promise<TokenSet> {
};
}

export default NextAuth({
providers: [
SpotifyProvider({
clientId: process.env.SPOTIFY_CLIENT_ID,
clientSecret: process.env.SPOTIFY_CLIENT_SECRET,
authorization: `https://accounts.spotify.com/authorize?scope=user-top-read,user-read-private`,
}),
{
id: "deezer",
name: "Deezer",
type: "oauth",
clientId: process.env.DEEZER_CLIENT_ID,
clientSecret: process.env.DEEZER_CLIENT_SECRET,
token: {
async request({ provider, params }) {
if (provider.clientId === undefined || provider.clientSecret === undefined || params.code === undefined) {
throw new Error("Provider is not defined");
}
const paramsUrl = new URLSearchParams({
app_id: provider.clientId,
secret: provider.clientSecret,
code: params.code,
});
const tokens = await getDeezerToken(paramsUrl);
return { tokens };
export default function auth(req: NextApiRequest, res: NextApiResponse): ReturnType<typeof NextAuth> {
req.headers["x-forwarded-host"] = process.env.NEXTAUTH_URL;
return NextAuth(req, res, {
providers: [
SpotifyProvider({
clientId: process.env.SPOTIFY_CLIENT_ID,
clientSecret: process.env.SPOTIFY_CLIENT_SECRET,
authorization: `https://accounts.spotify.com/authorize?scope=user-top-read,user-read-private`,
}),
{
id: "deezer",
name: "Deezer",
type: "oauth",
clientId: process.env.DEEZER_CLIENT_ID,
clientSecret: process.env.DEEZER_CLIENT_SECRET,
token: {
async request({ provider, params }) {
if (provider.clientId === undefined || provider.clientSecret === undefined || params.code === undefined) {
throw new Error("Provider is not defined");
}
const paramsUrl = new URLSearchParams({
app_id: provider.clientId,
secret: provider.clientSecret,
code: params.code,
});
const tokens = await getDeezerToken(paramsUrl);
return { tokens };
},
},
},
authorization: {
url: "https://connect.deezer.com/oauth/auth.php",
params: {
redirect_uri: "https://statlist.fr/api/auth/callback/deezer",
scope: "basic_access,email,listening_history,offline_access",
authorization: {
url: "https://connect.deezer.com/oauth/auth.php",
params: {
redirect_uri: "https://statlist.fr/api/auth/callback/deezer",
scope: "basic_access,email,listening_history,offline_access",
},
},
},
userinfo: {
url: "https://api.deezer.com/user/me",
async request({ tokens, client }) {
const { access_token } = tokens;
if (typeof access_token === "undefined") {
throw new Error("Users Acces Token is Undefined!");
}
return await client.userinfo(access_token, { params: { access_token } });
userinfo: {
url: "https://api.deezer.com/user/me",
async request({ tokens, client }) {
const { access_token } = tokens;
if (typeof access_token === "undefined") {
throw new Error("Users Acces Token is Undefined!");
}
return await client.userinfo(access_token, { params: { access_token } });
},
},
async profile(user: User) {
return {
id: user.id,
name: user.name,
email: user.email,
image: user.picture,
};
},
},
async profile(user: User) {
return {
id: user.id,
name: user.name,
email: user.email,
image: user.picture,
};
},
],
secret: process.env.NEXTAUTH_SECRET,
pages: {
signIn: "/login",
},
],
secret: process.env.NEXTAUTH_SECRET,
pages: {
signIn: "/login",
},
callbacks: {
async jwt({ token, account, user }) {
if (account != null && account.provider === "spotify" && user != null && typeof account.expires_at === "number") {
return {
...token,
accessToken: account.access_token,
accessTokenExpires: account.expires_at * 1000,
refreshToken: account.refresh_token,
username: account.providerAccountId,
provider: account.provider,
user,
};
}
if (account != null && account.provider === "deezer" && typeof account.expires_at === "number") {
return {
...token,
accessToken: account.access_token,
accessTokenExpires: account.expires_at,
refreshToken: account.refresh_token,
username: account.providerAccountId,
provider: account.provider,
user,
};
}
if (
token.provider === "spotify" &&
token.accessTokenExpires !== undefined &&
Date.now() < token.accessTokenExpires
) {
return token;
}
if (token.provider === "spotify") {
return await spotifyRefreshAccessToken(token);
}
return { ...token };
callbacks: {
async jwt({ token, account, user }) {
if (
account != null &&
account.provider === "spotify" &&
user != null &&
typeof account.expires_at === "number"
) {
return {
...token,
accessToken: account.access_token,
accessTokenExpires: account.expires_at * 1000,
refreshToken: account.refresh_token,
username: account.providerAccountId,
provider: account.provider,
user,
};
}
if (account != null && account.provider === "deezer" && typeof account.expires_at === "number") {
return {
...token,
accessToken: account.access_token,
accessTokenExpires: account.expires_at,
refreshToken: account.refresh_token,
username: account.providerAccountId,
provider: account.provider,
user,
};
}
if (
token.provider === "spotify" &&
token.accessTokenExpires !== undefined &&
Date.now() < token.accessTokenExpires
) {
return token;
}
if (token.provider === "spotify") {
return await spotifyRefreshAccessToken(token);
}
return { ...token };
},
async session({ session, token }) {
session.user.accessToken = token.accessToken;
session.user.refreshToken = token.refreshToken;
session.user.username = token.username;
session.user.provider = token.provider;
return session;
},
},
async session({ session, token }) {
session.user.accessToken = token.accessToken;
session.user.refreshToken = token.refreshToken;
session.user.username = token.username;
session.user.provider = token.provider;
return session;
session: {
strategy: "jwt",
},
},

session: {
strategy: "jwt",
},
});
});
}
2 changes: 1 addition & 1 deletion pages/login.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import style from "@styles/Pages/login.module.scss";

const Login: FC<InferGetServerSidePropsType<typeof getServerSideProps>> = ({ providers }) => {
async function logIn(provider: ClientSafeProvider["id"]): Promise<void> {
await signIn(provider, { callbackUrl: `https://statlist.fr/${provider}` });
await signIn(provider, { callbackUrl: `/${provider}` });
}
return (
<>
Expand Down

0 comments on commit e76c483

Please sign in to comment.