Skip to content

Commit 99d988f

Browse files
authored
refactor(rest-express): use middleware to setup request infos (#1028)
1 parent 062fe00 commit 99d988f

16 files changed

+110
-87
lines changed

packages/rest-express/__tests__/endpoints/impersonate.ts

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,17 @@ describe('impersonate', () => {
2525
accessToken: 'token',
2626
},
2727
headers: {},
28+
infos: {
29+
ip: 'ipTest',
30+
userAgent: 'userAgentTest',
31+
},
2832
};
2933
const reqCopy = { ...req };
3034

3135
await middleware(req as any, res);
3236

3337
expect(req).toEqual(reqCopy);
34-
expect(accountsServer.impersonate).toHaveBeenCalledWith('token', 'toto', {
35-
ip: null,
36-
userAgent: '',
37-
});
38+
expect(accountsServer.impersonate).toHaveBeenCalledWith('token', 'toto', req.infos);
3839
expect(res.json).toHaveBeenCalledWith(impersonateReturnType);
3940
expect(res.status).not.toHaveBeenCalled();
4041
});
@@ -53,16 +54,17 @@ describe('impersonate', () => {
5354
accessToken: 'token',
5455
},
5556
headers: {},
57+
infos: {
58+
ip: 'ipTest',
59+
userAgent: 'userAgentTest',
60+
},
5661
};
5762
const reqCopy = { ...req };
5863

5964
await middleware(req as any, res);
6065

6166
expect(req).toEqual(reqCopy);
62-
expect(accountsServer.impersonate).toHaveBeenCalledWith('token', 'toto', {
63-
ip: null,
64-
userAgent: '',
65-
});
67+
expect(accountsServer.impersonate).toHaveBeenCalledWith('token', 'toto', req.infos);
6668
expect(res.status).toHaveBeenCalledWith(400);
6769
expect(res.json).toHaveBeenCalledWith(error);
6870
});

packages/rest-express/__tests__/endpoints/oauth/provider-callback.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ describe('providerCallback', () => {
2727
accessTokenSecret: 'secret',
2828
},
2929
headers: {},
30+
infos: {
31+
ip: 'ipTest',
32+
userAgent: 'userAgentTest',
33+
},
3034
};
3135
const reqCopy = { ...req };
3236

@@ -36,7 +40,7 @@ describe('providerCallback', () => {
3640
expect(accountsServer.loginWithService).toHaveBeenCalledWith(
3741
'oauth',
3842
{ accessToken: 'token', accessTokenSecret: 'secret' },
39-
{ ip: null, userAgent: '' }
43+
req.infos
4044
);
4145
expect(res.json).toHaveBeenCalledWith(user);
4246
expect(res.status).not.toHaveBeenCalled();
@@ -93,6 +97,10 @@ describe('providerCallback', () => {
9397
accessToken: 'token',
9498
},
9599
headers: {},
100+
infos: {
101+
ip: 'ipTest',
102+
userAgent: 'userAgentTest',
103+
},
96104
};
97105
const reqCopy = { ...req };
98106

@@ -102,7 +110,7 @@ describe('providerCallback', () => {
102110
expect(accountsServer.loginWithService).toHaveBeenCalledWith(
103111
'oauth',
104112
{ accessToken: 'token' },
105-
{ ip: null, userAgent: '' }
113+
req.infos
106114
);
107115
expect(res.status).toHaveBeenCalledWith(400);
108116
expect(res.json).toHaveBeenCalledWith(error);

packages/rest-express/__tests__/endpoints/password/reset.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@ describe('resetPassword', () => {
2828
newPassword: 'new-password',
2929
},
3030
headers: {},
31+
infos: {
32+
ip: 'ipTest',
33+
userAgent: 'userAgentTest',
34+
},
3135
};
3236
const reqCopy = { ...req };
3337

@@ -37,7 +41,7 @@ describe('resetPassword', () => {
3741
expect(accountsServer.getServices().password.resetPassword).toHaveBeenCalledWith(
3842
'token',
3943
'new-password',
40-
{ ip: null, userAgent: '' }
44+
req.infos
4145
);
4246
expect(res.json).toHaveBeenCalledWith(null);
4347
expect(res.status).not.toHaveBeenCalled();
@@ -62,6 +66,10 @@ describe('resetPassword', () => {
6266
newPassword: 'new-password',
6367
},
6468
headers: {},
69+
infos: {
70+
ip: 'ipTest',
71+
userAgent: 'userAgentTest',
72+
},
6573
};
6674
const reqCopy = { ...req };
6775

@@ -71,7 +79,7 @@ describe('resetPassword', () => {
7179
expect(accountsServer.getServices().password.resetPassword).toHaveBeenCalledWith(
7280
'token',
7381
'new-password',
74-
{ ip: null, userAgent: '' }
82+
req.infos
7583
);
7684
expect(res.status).toHaveBeenCalledWith(400);
7785
expect(res.json).toHaveBeenCalledWith(error);

packages/rest-express/__tests__/endpoints/refresh-access-token.ts

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,16 @@ describe('refreshAccessToken', () => {
2727
accessToken: 'token',
2828
refreshToken: 'refresh',
2929
},
30+
infos: {
31+
ip: 'ipTest',
32+
userAgent: 'userAgentTest',
33+
},
3034
};
3135
const reqCopy = { ...req };
3236

3337
await middleware(req as any, res);
3438

35-
expect(accountsServer.refreshTokens).toHaveBeenCalledWith('token', 'refresh', {
36-
ip: null,
37-
userAgent: '',
38-
});
39+
expect(accountsServer.refreshTokens).toHaveBeenCalledWith('token', 'refresh', req.infos);
3940
expect(req).toEqual(reqCopy);
4041
expect(res.json).toHaveBeenCalledWith(session);
4142
expect(res.status).not.toHaveBeenCalled();
@@ -55,16 +56,17 @@ describe('refreshAccessToken', () => {
5556
accessToken: 'token',
5657
refreshToken: 'refresh',
5758
},
59+
infos: {
60+
ip: 'ipTest',
61+
userAgent: 'userAgentTest',
62+
},
5863
};
5964
const reqCopy = { ...req };
6065

6166
await middleware(req as any, res);
6267

6368
expect(req).toEqual(reqCopy);
64-
expect(accountsServer.refreshTokens).toHaveBeenCalledWith('token', 'refresh', {
65-
ip: null,
66-
userAgent: '',
67-
});
69+
expect(accountsServer.refreshTokens).toHaveBeenCalledWith('token', 'refresh', req.infos);
6870
expect(res.status).toHaveBeenCalledWith(400);
6971
expect(res.json).toHaveBeenCalledWith(error);
7072
});

packages/rest-express/__tests__/endpoints/service-authenticate.ts

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,17 @@ describe('serviceAuthenticate', () => {
2424
service: 'sms',
2525
},
2626
headers: {},
27+
infos: {
28+
ip: 'ipTest',
29+
userAgent: 'userAgentTest',
30+
},
2731
};
2832
const reqCopy = { ...req };
2933

3034
await middleware(req as any, res);
3135

3236
expect(req).toEqual(reqCopy);
33-
expect(accountsServer.loginWithService).toHaveBeenCalledWith('sms', undefined, {
34-
ip: null,
35-
userAgent: '',
36-
});
37+
expect(accountsServer.loginWithService).toHaveBeenCalledWith('sms', undefined, req.infos);
3738
expect(res.json).toHaveBeenCalledWith(user);
3839
expect(res.status).not.toHaveBeenCalled();
3940
});
@@ -51,16 +52,17 @@ describe('serviceAuthenticate', () => {
5152
service: 'sms',
5253
},
5354
headers: {},
55+
infos: {
56+
ip: 'ipTest',
57+
userAgent: 'userAgentTest',
58+
},
5459
};
5560
const reqCopy = { ...req };
5661

5762
await middleware(req as any, res);
5863

5964
expect(req).toEqual(reqCopy);
60-
expect(accountsServer.loginWithService).toHaveBeenCalledWith('sms', undefined, {
61-
ip: null,
62-
userAgent: '',
63-
});
65+
expect(accountsServer.loginWithService).toHaveBeenCalledWith('sms', undefined, req.infos);
6466
expect(res.status).toHaveBeenCalledWith(400);
6567
expect(res.json).toHaveBeenCalledWith(error);
6668
});

packages/rest-express/__tests__/endpoints/verify-authentication.ts

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,21 @@ describe('serviceVerifyAuthentication', () => {
2121
service: 'sms',
2222
},
2323
headers: {},
24+
infos: {
25+
ip: 'ipTest',
26+
userAgent: 'userAgentTest',
27+
},
2428
};
2529
const reqCopy = { ...req };
2630

2731
await middleware(req as any, res);
2832

2933
expect(req).toEqual(reqCopy);
30-
expect(accountsServer.authenticateWithService).toHaveBeenCalledWith('sms', undefined, {
31-
ip: null,
32-
userAgent: '',
33-
});
34+
expect(accountsServer.authenticateWithService).toHaveBeenCalledWith(
35+
'sms',
36+
undefined,
37+
req.infos
38+
);
3439
expect(res.json).toHaveBeenCalledWith(true);
3540
expect(res.status).not.toHaveBeenCalled();
3641
});
@@ -48,16 +53,21 @@ describe('serviceVerifyAuthentication', () => {
4853
service: 'sms',
4954
},
5055
headers: {},
56+
infos: {
57+
ip: 'ipTest',
58+
userAgent: 'userAgentTest',
59+
},
5160
};
5261
const reqCopy = { ...req };
5362

5463
await middleware(req as any, res);
5564

5665
expect(req).toEqual(reqCopy);
57-
expect(accountsServer.authenticateWithService).toHaveBeenCalledWith('sms', undefined, {
58-
ip: null,
59-
userAgent: '',
60-
});
66+
expect(accountsServer.authenticateWithService).toHaveBeenCalledWith(
67+
'sms',
68+
undefined,
69+
req.infos
70+
);
6171
expect(res.status).toHaveBeenCalledWith(400);
6272
expect(res.json).toHaveBeenCalledWith(error);
6373
});

packages/rest-express/__tests__/express-middleware.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import * as express from 'express';
33

44
jest.mock('express', () => {
55
const mockRouter = {
6+
use: jest.fn(),
67
post: jest.fn(),
78
get: jest.fn(),
89
};
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
declare namespace Express {
2+
export interface Request {
3+
userAgent: string;
4+
ip: string;
5+
infos: {
6+
userAgent: string;
7+
ip: string;
8+
};
9+
}
10+
}

packages/rest-express/src/endpoints/impersonate.ts

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
import * as express from 'express';
2-
import * as requestIp from 'request-ip';
32
import { AccountsServer } from '@accounts/server';
43
import { ImpersonationUserIdentity } from '@accounts/types';
5-
import { getUserAgent } from '../utils/get-user-agent';
64
import { sendError } from '../utils/send-error';
75

86
export const impersonate = (accountsServer: AccountsServer) => async (
@@ -17,12 +15,7 @@ export const impersonate = (accountsServer: AccountsServer) => async (
1715
accessToken: string;
1816
impersonated: ImpersonationUserIdentity;
1917
} = req.body;
20-
const userAgent = getUserAgent(req);
21-
const ip = requestIp.getClientIp(req);
22-
const impersonateRes = await accountsServer.impersonate(accessToken, impersonated, {
23-
ip,
24-
userAgent,
25-
});
18+
const impersonateRes = await accountsServer.impersonate(accessToken, impersonated, req.infos);
2619
res.json(impersonateRes);
2720
} catch (err) {
2821
sendError(res, err);

packages/rest-express/src/endpoints/oauth/provider-callback.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
import * as express from 'express';
2-
import * as requestIp from 'request-ip';
32
import { AccountsServer } from '@accounts/server';
4-
import { getUserAgent } from '../../utils/get-user-agent';
53
import { sendError } from '../../utils/send-error';
64
import { AccountsExpressOptions } from '../../types';
75

@@ -14,8 +12,6 @@ export const providerCallback = (
1412
options?: AccountsExpressOptions
1513
) => async (req: express.Request, res: express.Response) => {
1614
try {
17-
const userAgent = getUserAgent(req);
18-
const ip = requestIp.getClientIp(req);
1915
const loggedInUser = await accountsServer.loginWithService(
2016
'oauth',
2117
{
@@ -24,7 +20,7 @@ export const providerCallback = (
2420
...(req.body || {}),
2521
...((req as RequestWithSession).session || {}),
2622
},
27-
{ ip, userAgent }
23+
req.infos
2824
);
2925

3026
if (options && options.onOAuthSuccess) {

0 commit comments

Comments
 (0)