Skip to content
This repository was archived by the owner on Apr 27, 2021. It is now read-only.

Commit 5bc7e08

Browse files
committed
Make nodejs proxy in charge of redirections
1 parent 731ad87 commit 5bc7e08

File tree

4 files changed

+31
-14
lines changed

4 files changed

+31
-14
lines changed

src/Client.js

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,17 @@ export default class Client {
7979

8080
response = JSON.parse(response)
8181

82-
return response.status_code === 410
83-
? new Response(410)
84-
: new RedirectResponse(response.location, Number(response.status_code))
82+
let ruleId = null
83+
84+
if (response.matched_rule && response.matched_rule.id) {
85+
ruleId = response.matched_rule.id
86+
}
87+
88+
if (410 === response.status_code) {
89+
return new Response(410, ruleId)
90+
}
91+
92+
return new RedirectResponse(response.location, Number(response.status_code), ruleId)
8593
}
8694

8795
/**
@@ -99,6 +107,14 @@ export default class Client {
99107
'use_json': true,
100108
}
101109

110+
if (response instanceof RedirectResponse) {
111+
context.target = response.location
112+
}
113+
114+
if (response.ruleId) {
115+
context['rule_id'] = response.ruleId
116+
}
117+
102118
try {
103119
return await this.request('LOG', context) == true
104120
} catch (error) {
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import Response from './Response'
22

33
export default class RedirectResponse extends Response {
4-
constructor(location, statusCode = 301) {
5-
super(statusCode)
4+
constructor(location, statusCode = 301, ruleId = null) {
5+
super(statusCode, ruleId)
66
this.location = location
77
}
88
}

src/HttpMessage/Response.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
export default class Response {
2-
constructor(statusCode = 200) {
2+
constructor(statusCode = 200, ruleId = null) {
33
this.statusCode = statusCode
4+
this.ruleId = ruleId
45
}
56
}

src/RedirectionIO.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,12 @@ export default class RedirectionIO {
1414
}
1515

1616
app.use(async (req, res, next) => {
17-
this.attachLogEvent(req, res)
18-
1917
const request = new Request(req.get('Host'), req.originalUrl, req.get('User-Agent'), req.get('Referer'), req.protocol)
2018
const response = await this.handleRequest(request)
2119

20+
req.rio = { request: request, response: response }
21+
this.attachLogEvent(req, res)
22+
2223
if (!response) {
2324
return next()
2425
}
@@ -38,12 +39,13 @@ export default class RedirectionIO {
3839
this.connections = connections
3940
}
4041

41-
this.attachLogEvent(req, res)
42-
4342
const scheme = req.headers['x-forwarded-proto'] ? req.headers['x-forwarded-proto'] : 'http'
4443
const request = new Request(req.headers['host'], req.url.split('?')[0], req.headers['user-agent'], scheme)
4544
const response = await this.handleRequest(request)
4645

46+
req.rio = { request: request, response: response }
47+
this.attachLogEvent(req, res)
48+
4749
if (!response) {
4850
return false
4951
}
@@ -87,10 +89,8 @@ export default class RedirectionIO {
8789
*/
8890
static attachLogEvent(req, res) {
8991
req.on('end', async () => {
90-
const path = req.originalUrl ? req.originalUrl : req.url.split('?')[0]
91-
const scheme = req.headers['x-forwarded-proto'] ? req.headers['x-forwarded-proto'] : 'http'
92-
const request = new Request(req.headers['host'], path, req.headers['user-agent'], req.headers['referer'], scheme)
93-
const response = new Response(res.statusCode)
92+
const request = req.rio.request
93+
const response = req.rio.response || new Response(res.statusCode)
9494
const client = new Client(this.connections, 10, false)
9595

9696
try {

0 commit comments

Comments
 (0)