mirror of
https://github.com/wassname/Open-Assistant.git
synced 2026-06-29 16:30:24 +08:00
65 lines
1.9 KiB
TypeScript
65 lines
1.9 KiB
TypeScript
import parser from "accept-language-parser";
|
|
import type { NextApiRequest } from "next";
|
|
import { i18n } from "src/../next-i18next.config";
|
|
import prisma from "src/lib/prismadb";
|
|
import type { BackendUserCore } from "src/types/Users";
|
|
|
|
const LOCALE_SET = new Set(i18n.locales);
|
|
|
|
/**
|
|
* Returns the most appropriate user language using the following priority:
|
|
*
|
|
* 1. The `NEXT_LOCALE` cookie which is set by the client side and will be in
|
|
* the set of supported locales.
|
|
* 2. The `accept-language` header if it contains a supported locale as set by
|
|
* the i18n module.
|
|
* 3. "en" as a final fallback.
|
|
*/
|
|
const getUserLanguage = (req: NextApiRequest): string => {
|
|
const cookieLanguage = req.cookies["NEXT_LOCALE"];
|
|
if (cookieLanguage) {
|
|
return cookieLanguage;
|
|
}
|
|
const headerLanguages = parser.parse(req.headers["accept-language"]);
|
|
if (headerLanguages.length > 0 && LOCALE_SET.has(headerLanguages[0].code)) {
|
|
return headerLanguages[0].code;
|
|
}
|
|
return "en";
|
|
};
|
|
|
|
/**
|
|
* Returns a `BackendUserCore` that can be used for interacting with the Backend service.
|
|
*
|
|
* @param {string} id The user's web auth id.
|
|
*
|
|
* @return {BackendUserCore} The most specific auth type and id for the user.
|
|
*/
|
|
const getBackendUserCore = async (id: string) => {
|
|
const user = await prisma.user.findUnique({
|
|
where: { id },
|
|
select: {
|
|
id: true,
|
|
name: true,
|
|
accounts: true,
|
|
},
|
|
});
|
|
|
|
// If there are no linked accounts, just use what we have locally.
|
|
if (user.accounts.length === 0) {
|
|
return {
|
|
id: user.id,
|
|
display_name: user.name,
|
|
auth_method: "local",
|
|
} as BackendUserCore;
|
|
}
|
|
|
|
// Otherwise, use the first linked account that the user created.
|
|
return {
|
|
id: user.accounts[0].providerAccountId,
|
|
display_name: user.name,
|
|
auth_method: user.accounts[0].provider,
|
|
} as BackendUserCore;
|
|
};
|
|
|
|
export { getBackendUserCore, getUserLanguage };
|