mirror of
https://github.com/openfrontio/OpenFrontIO.git
synced 2026-06-21 09:40:44 +00:00
fa7b7fceb3
## Description: ### ✅ Summary of Changes This PR enables the ESLint rule **`@typescript-eslint/no-unused-vars`** as requested in the issue and applies the necessary code adjustments across the project. #### 🔧 What was done: - Activated the rule `@typescript-eslint/no-unused-vars` in the ESLint config. - Updated ~70 files to comply with the rule: - Replaced unused variables with a `_` prefix where appropriate. - Added inline ESLint disable comments (`eslint-disable-next-line`) for specific cases where the variable or code block seemed important for context, readability, or future use. - Ensured no linting errors remain related to this rule. --- ### ❓ Clarification Some cases were handled with inline disable comments instead of removing the variable entirely, to avoid accidental breaking changes or loss of intent. If a different approach is preferred (e.g., stricter removal or alternative handling), I’m happy to adjust the implementation accordingly — just let me know! --- ### 🙌 Next Steps Please review and let me know if: - Any file should be handled differently. - You prefer removal instead of disabling in certain areas. - Additional rules should be enforced or reverted. I’m available to make any follow-up improvements needed. --- ### 🎃 Hacktoberfest Note I'm participating in **Hacktoberfest**, so if this PR is accepted, please add the label: `hacktoberfest-accepted` Thank you! #1784 ## Please complete the following: - [x] I have added screenshots for all UI updates - [x] I process any text displayed to the user through translateText() and I've added it to the en.json file - [x] I have added relevant tests to the test directory - [x] I confirm I have thoroughly tested these changes and take full responsibility for any bugs introduced ## Please put your Discord username so you can be contacted if a bug or regression is found: DISCORD_USERNAME
76 lines
1.9 KiB
TypeScript
76 lines
1.9 KiB
TypeScript
import { jwtVerify } from "jose";
|
|
import { z } from "zod";
|
|
import {
|
|
TokenPayload,
|
|
TokenPayloadSchema,
|
|
UserMeResponse,
|
|
UserMeResponseSchema,
|
|
} from "../core/ApiSchemas";
|
|
import { ServerConfig } from "../core/configuration/Config";
|
|
import { PersistentIdSchema } from "../core/Schemas";
|
|
|
|
type TokenVerificationResult =
|
|
| {
|
|
persistentId: string;
|
|
claims: TokenPayload | null;
|
|
}
|
|
| false;
|
|
|
|
export async function verifyClientToken(
|
|
token: string,
|
|
config: ServerConfig,
|
|
): Promise<TokenVerificationResult> {
|
|
if (PersistentIdSchema.safeParse(token).success) {
|
|
return { persistentId: token, claims: null };
|
|
}
|
|
try {
|
|
const issuer = config.jwtIssuer();
|
|
const audience = config.jwtAudience();
|
|
const key = await config.jwkPublicKey();
|
|
const { payload } = await jwtVerify(token, key, {
|
|
algorithms: ["EdDSA"],
|
|
issuer,
|
|
audience,
|
|
});
|
|
const result = TokenPayloadSchema.safeParse(payload);
|
|
if (!result.success) {
|
|
const error = z.prettifyError(result.error);
|
|
console.warn("Error parsing token payload", error);
|
|
return false;
|
|
}
|
|
const claims = result.data;
|
|
const persistentId = claims.sub;
|
|
return { persistentId, claims };
|
|
} catch (e) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
export async function getUserMe(
|
|
token: string,
|
|
config: ServerConfig,
|
|
): Promise<UserMeResponse | false> {
|
|
try {
|
|
// Get the user object
|
|
const response = await fetch(config.jwtIssuer() + "/users/@me", {
|
|
headers: {
|
|
authorization: `Bearer ${token}`,
|
|
},
|
|
});
|
|
if (response.status !== 200) return false;
|
|
const body = await response.json();
|
|
const result = UserMeResponseSchema.safeParse(body);
|
|
if (!result.success) {
|
|
console.error(
|
|
"Invalid response",
|
|
JSON.stringify(body),
|
|
JSON.stringify(result.error),
|
|
);
|
|
return false;
|
|
}
|
|
return result.data;
|
|
} catch (e) {
|
|
return false;
|
|
}
|
|
}
|