Skip to content

Commit 2950617

Browse files
authored
Merge pull request #1178 from kriswest/1177-return-200-on-reject
fix: return 200 status codes on rejection to ensure error message renders in git client
2 parents 00c11bd + 7210153 commit 2950617

File tree

3 files changed

+16
-10
lines changed

3 files changed

+16
-10
lines changed

src/proxy/routes/index.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ const proxyFilter: ProxyOptions['filter'] = async (req, res) => {
4141
'Invalid request received',
4242
null,
4343
);
44-
res.status(400).send(handleMessage('Invalid request received'));
44+
// return status 200 to ensure that the error message is rendered by the git client
45+
res.status(200).send(handleMessage('Invalid request received'));
4546
return false;
4647
}
4748

@@ -65,7 +66,8 @@ const proxyFilter: ProxyOptions['filter'] = async (req, res) => {
6566
action.errorMessage,
6667
action.blockedMessage,
6768
);
68-
res.status(403).send(packetMessage);
69+
// return status 200 to ensure that the error message is rendered by the git client
70+
res.status(200).send(packetMessage);
6971
return false;
7072
}
7173

@@ -90,7 +92,8 @@ const proxyFilter: ProxyOptions['filter'] = async (req, res) => {
9092
null,
9193
);
9294

93-
res.status(500).send(packetMessage);
95+
// return status 200 to ensure that the error message is rendered by the git client
96+
res.status(200).send(packetMessage);
9497
return false;
9598
}
9699
};
@@ -172,7 +175,7 @@ const teeAndValidate = async (req: Request, res: Response, next: NextFunction) =
172175
'x-frame-options': 'DENY',
173176
connection: 'close',
174177
})
175-
.status(403)
178+
.status(200) // return status 200 to ensure that the error message is rendered by the git client
176179
.send(handleMessage(msg));
177180
return;
178181
}

test/teeAndValidation.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ describe('teeAndValidate middleware', () => {
5656
expect(next.called).to.be.false;
5757

5858
expect(res.set.called).to.be.true;
59-
expect(res.status.calledWith(403)).to.be.true;
59+
expect(res.status.calledWith(200)).to.be.true; // status 200 is used to ensure error message is rendered by git client
6060
expect(res.send.calledWith(handleMessage('denied!'))).to.be.true;
6161
});
6262

test/testProxyRoute.test.js

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ describe('proxy route filter middleware', () => {
6363
.set('user-agent', 'git/2.42.0')
6464
.set('accept', 'application/x-git-upload-pack-request');
6565

66-
expect(res).to.have.status(400);
66+
expect(res).to.have.status(200); // status 200 is used to ensure error message is rendered by git client
6767
expect(res.text).to.contain('Invalid request received');
6868
});
6969

@@ -82,7 +82,7 @@ describe('proxy route filter middleware', () => {
8282
.send(Buffer.from('0000'))
8383
.buffer();
8484

85-
expect(res.status).to.equal(403);
85+
expect(res.status).to.equal(200); // status 200 is used to ensure error message is rendered by git client
8686
expect(res.text).to.contain('You shall not push!');
8787
expect(res.headers['content-type']).to.include('application/x-git-receive-pack-result');
8888
expect(res.headers['x-frame-options']).to.equal('DENY');
@@ -466,7 +466,8 @@ describe('proxy express application', async () => {
466466
.set('accept', 'application/x-git-upload-pack-request')
467467
.buffer();
468468

469-
res2.should.have.status(403);
469+
res2.should.have.status(200); // status 200 is used to ensure error message is rendered by git client
470+
expect(res2.text).to.contain('Rejecting repo');
470471
}).timeout(5000);
471472

472473
it('should not proxy requests for an unknown project', async function () {
@@ -487,7 +488,8 @@ describe('proxy express application', async () => {
487488
.set('user-agent', 'git/2.42.0')
488489
.set('accept', 'application/x-git-upload-pack-request')
489490
.buffer();
490-
res.should.have.status(403);
491+
res.should.have.status(200); // status 200 is used to ensure error message is rendered by git client
492+
expect(res.text).to.contain('Rejecting repo');
491493

492494
// try (and fail) to proxy a request to the repo via the fallback URL directly
493495
const res2 = await chai
@@ -496,6 +498,7 @@ describe('proxy express application', async () => {
496498
.set('user-agent', 'git/2.42.0')
497499
.set('accept', 'application/x-git-upload-pack-request')
498500
.buffer();
499-
res2.should.have.status(403);
501+
res2.should.have.status(200);
502+
expect(res2.text).to.contain('Rejecting repo');
500503
}).timeout(5000);
501504
});

0 commit comments

Comments
 (0)