icynet-admin/pages/api/login.ts

39 lines
939 B
TypeScript

import Cookies from 'cookies';
import { NextApiRequest, NextApiResponse } from 'next';
import {
CLIENT_ID,
COOKIE_KEYS,
OAUTH_URL,
PUBLIC_URL,
} from '../../lib/constants';
import { encrypt, generateString } from '../../lib/utils/crypto';
const redirect = `${PUBLIC_URL}/api/callback`;
export default function handler(req: NextApiRequest, res: NextApiResponse) {
const stateToken = generateString(16);
const state = encrypt(
JSON.stringify({
redirect_uri: redirect,
state: stateToken,
})
);
const params = new URLSearchParams({
client_id: CLIENT_ID,
response_type: 'code',
redirect_uri: redirect,
scope: 'management',
state,
});
const cookies = new Cookies(req, res, { keys: COOKIE_KEYS });
cookies.set('validation', stateToken, {
secure: process.env.NODE_ENV === 'production',
signed: true,
});
res.redirect(`${OAUTH_URL}/authorize?${params.toString()}`);
}