From ce397fed10bfc0474253ac3e68c444c54307c5e0 Mon Sep 17 00:00:00 2001 From: Guilherme Gazzo Date: Tue, 3 Jun 2025 13:57:11 -0300 Subject: [PATCH] test: Add loginToken support and related test for /me endpoint (#36124) --- apps/meteor/tests/end-to-end/api/users.ts | 25 +++++++++++++++++++++++ packages/core-typings/src/IUser.ts | 17 +++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/apps/meteor/tests/end-to-end/api/users.ts b/apps/meteor/tests/end-to-end/api/users.ts index e149de6d83e..f03dc46dd2c 100644 --- a/apps/meteor/tests/end-to-end/api/users.ts +++ b/apps/meteor/tests/end-to-end/api/users.ts @@ -3146,6 +3146,31 @@ describe('[Users]', () => { before(() => updatePermission('create-personal-access-tokens', ['admin'])); after(() => updatePermission('create-personal-access-tokens', ['admin'])); + it('should accept loginToken when we call /me', async () => { + let loginToken = ''; + await request + .post(api('users.generatePersonalAccessToken')) + .set(credentials) + .send({ + tokenName: 'test', + loginToken: '1234567890', + }) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('success', true); + expect(res.body).to.have.property('token'); + loginToken = res.body.token; + }); + + await request + .get(api('me')) // it does not really matter what we call here, we just want to test that the loginToken is accepted + .set({ + 'X-Auth-Token': loginToken, + 'X-User-Id': credentials['X-User-Id'], + }) + .expect(200); + }); describe('[/users.getPersonalAccessTokens]', () => { it('should return an array when the user does not have personal tokens configured', (done) => { void request diff --git a/packages/core-typings/src/IUser.ts b/packages/core-typings/src/IUser.ts index b6c2a742643..35fa08ded73 100644 --- a/packages/core-typings/src/IUser.ts +++ b/packages/core-typings/src/IUser.ts @@ -104,6 +104,23 @@ export interface IUserServices extends IOAuthUserServices { changedAt: Date; }; emailCode?: IUserEmailCode; + + /** + * iframe is used for iframe login + * the token is generated by an external service + * https://developer.rocket.chat/v1/docs/configuring-iframe-auth + */ + iframe?: { + token: string; + }; + + /** + * loginToken is used for route login 'https://your-rocket.chat/login-token/:token' "one time login" feature + * the token is generated by an external service + */ + loginToken?: { + token: string; + }; } type IUserService = keyof IUserServices;