103 lines
3.9 KiB
TypeScript
103 lines
3.9 KiB
TypeScript
'use server';
|
|
import { AuthError } from "@/fetchers/types/base";
|
|
import { scanByRKeyDouble, scanByRKeyDoubleToken, scanByRKeySingleToken } from "@/fetchers/redis/redisService";
|
|
import { getPlainAccessToken } from "./access";
|
|
import { nextCrypto } from "@/fetchers/base";
|
|
import { getCookieSelectToken, removeCookieTokens, setCookieSelectToken } from "./cookies";
|
|
|
|
async function getPlainSelectToken() {
|
|
console.log('getPlainSelectToken is triggered...');
|
|
|
|
try {
|
|
let encryptedSelectToken = "";
|
|
|
|
// Try to get token from cookies first
|
|
const selectCookie = await getCookieSelectToken();
|
|
if (selectCookie?.value) {
|
|
encryptedSelectToken = selectCookie.value;
|
|
console.log('Select token from cookie:', 'found');
|
|
}
|
|
|
|
console.log('getPlainSelectToken encryptedSelectToken', encryptedSelectToken ? `${encryptedSelectToken.substring(0, 10)}...` : 'empty');
|
|
|
|
if (!encryptedSelectToken) {
|
|
console.log('No select token found');
|
|
throw new AuthError("No select token found");
|
|
}
|
|
|
|
const decryptedSelectToken = await nextCrypto.decrypt(encryptedSelectToken) || "";
|
|
console.log('getPlainSelectToken decryptedSelectToken', decryptedSelectToken ? `${decryptedSelectToken.substring(0, 10)}...` : 'empty');
|
|
|
|
if (!decryptedSelectToken) {
|
|
console.log('Decrypted select token is invalid or empty');
|
|
throw new AuthError("Select token is invalid");
|
|
}
|
|
|
|
return decryptedSelectToken;
|
|
}
|
|
catch (error) {
|
|
console.error('Error in getPlainSelectToken:', error);
|
|
throw new AuthError("No select token found on cookies");
|
|
}
|
|
}
|
|
|
|
async function getSelectToken() {
|
|
try {
|
|
const plainAccessToken = await getPlainAccessToken();
|
|
const plainSelectToken = await getPlainSelectToken();
|
|
console.log('plainAccessToken', plainAccessToken);
|
|
console.log('plainSelectToken', plainSelectToken);
|
|
const scanToken = await scanByRKeyDouble({ rKey: plainAccessToken, sKey: plainSelectToken });
|
|
if (!scanToken) throw new AuthError("Select token is invalid");
|
|
return scanToken;
|
|
}
|
|
catch (error) { throw new AuthError("No select token found in headers") }
|
|
}
|
|
|
|
async function getSelectTokenObject() {
|
|
try {
|
|
const plainAccessToken = await getPlainAccessToken();
|
|
const plainSelectToken = await getPlainSelectToken();
|
|
console.log('plainAccessToken', plainAccessToken);
|
|
console.log('plainSelectToken', plainSelectToken);
|
|
const scanToken = await scanByRKeyDoubleToken({ rKey: plainAccessToken, sKey: plainSelectToken });
|
|
if (!scanToken) throw new AuthError("Select token is invalid");
|
|
return scanToken;
|
|
}
|
|
catch (error) { throw new AuthError("No select token found in headers") }
|
|
}
|
|
|
|
async function getAccessTokenObject() {
|
|
try {
|
|
const plainAccessToken = await getPlainAccessToken();
|
|
console.log('plainAccessToken', plainAccessToken);
|
|
const scanToken = await scanByRKeySingleToken({ rKey: plainAccessToken });
|
|
if (!scanToken) throw new AuthError("Access token is invalid");
|
|
return scanToken;
|
|
}
|
|
catch (error) { throw new AuthError("No access token found in headers") }
|
|
}
|
|
|
|
async function setSelectToken(token: string) {
|
|
console.log('setSelectToken is triggered...');
|
|
await setCookieSelectToken(token);
|
|
}
|
|
|
|
async function isSelectTokenValid() {
|
|
try {
|
|
const selectToken = await getSelectToken();
|
|
console.log('isSelectTokenValid selectToken', selectToken);
|
|
if (selectToken) return true;
|
|
} catch (error) {
|
|
console.log('isSelectTokenValid error', error);
|
|
return false
|
|
}
|
|
}
|
|
|
|
async function removeSelectToken() {
|
|
console.log('removeSelectToken is triggered');
|
|
await removeCookieTokens();
|
|
}
|
|
|
|
export { getSelectToken, setSelectToken, removeSelectToken, getPlainSelectToken, isSelectTokenValid, getSelectTokenObject, getAccessTokenObject };
|