mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-16 16:30:15 +01:00
🔨 fix: Update expiresAt timestamp for tokens (#10740)
This commit is contained in:
parent
d5d362e52b
commit
774ebd1eaa
3 changed files with 43 additions and 1 deletions
|
|
@ -418,6 +418,41 @@ describe('Token Methods - Detailed Tests', () => {
|
||||||
|
|
||||||
expect(updated).toBeNull();
|
expect(updated).toBeNull();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('should update expiresAt when expiresIn is provided', async () => {
|
||||||
|
const beforeUpdate = Date.now();
|
||||||
|
const newExpiresIn = 7200;
|
||||||
|
|
||||||
|
const updated = await methods.updateToken(
|
||||||
|
{ token: 'update-token' },
|
||||||
|
{ expiresIn: newExpiresIn },
|
||||||
|
);
|
||||||
|
|
||||||
|
const afterUpdate = Date.now();
|
||||||
|
|
||||||
|
expect(updated).toBeDefined();
|
||||||
|
expect(updated?.expiresAt).toBeDefined();
|
||||||
|
|
||||||
|
const expectedMinExpiry = beforeUpdate + newExpiresIn * 1000;
|
||||||
|
const expectedMaxExpiry = afterUpdate + newExpiresIn * 1000;
|
||||||
|
|
||||||
|
expect(updated!.expiresAt.getTime()).toBeGreaterThanOrEqual(expectedMinExpiry);
|
||||||
|
expect(updated!.expiresAt.getTime()).toBeLessThanOrEqual(expectedMaxExpiry);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should not modify expiresAt when expiresIn is not provided', async () => {
|
||||||
|
const original = await Token.findOne({ token: 'update-token' });
|
||||||
|
const originalExpiresAt = original!.expiresAt.getTime();
|
||||||
|
|
||||||
|
const updated = await methods.updateToken(
|
||||||
|
{ token: 'update-token' },
|
||||||
|
{ email: 'changed@example.com' },
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(updated).toBeDefined();
|
||||||
|
expect(updated?.email).toBe('changed@example.com');
|
||||||
|
expect(updated!.expiresAt.getTime()).toBe(originalExpiresAt);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('deleteTokens', () => {
|
describe('deleteTokens', () => {
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,13 @@ export function createTokenMethods(mongoose: typeof import('mongoose')) {
|
||||||
): Promise<IToken | null> {
|
): Promise<IToken | null> {
|
||||||
try {
|
try {
|
||||||
const Token = mongoose.models.Token;
|
const Token = mongoose.models.Token;
|
||||||
return await Token.findOneAndUpdate(query, updateData, { new: true });
|
|
||||||
|
const dataToUpdate = { ...updateData };
|
||||||
|
if (updateData?.expiresIn !== undefined) {
|
||||||
|
dataToUpdate.expiresAt = new Date(Date.now() + updateData.expiresIn * 1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
return await Token.findOneAndUpdate(query, dataToUpdate, { new: true });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.debug('An error occurred while updating token:', error);
|
logger.debug('An error occurred while updating token:', error);
|
||||||
throw error;
|
throw error;
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,7 @@ export interface TokenUpdateData {
|
||||||
identifier?: string;
|
identifier?: string;
|
||||||
token?: string;
|
token?: string;
|
||||||
expiresAt?: Date;
|
expiresAt?: Date;
|
||||||
|
expiresIn?: number;
|
||||||
metadata?: Map<string, unknown>;
|
metadata?: Map<string, unknown>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue