Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(server): improved packfile encoding to support short messages and… #409

Merged
merged 5 commits into from
Feb 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/proxy/index.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/* eslint-disable max-len */
const proxyApp = require('express')();
const bodyParser = require('body-parser');
const routes = require('./routes');
const routes = require('./routes').router;
const config = require('../config');
const db = require('../db');
const { GIT_PROXY_SERVER_PORT: proxyHttpPort } = require('../config/env').Vars;
Expand Down
18 changes: 11 additions & 7 deletions src/proxy/routes/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,7 @@ router.use(
message = action.blockedMessage;
}

// ERROR PCT LINE -- MOVE THIS TO HELPER
const errorMessage = `ERR\t${message}`;
const len = 6 + errorMessage.length;

const prefix = len.toString(16);
const packetMessage = `00${prefix}\x02${errorMessage}\n0000`;
packetMessage = handleMessage(message);

res.status(200).send(packetMessage);

Expand All @@ -69,4 +64,13 @@ router.use(
}),
);

module.exports = router;
const handleMessage = async(message) => {
const errorMessage = `ERR\t${message}`;
const len = 6 + new TextEncoder().encode(errorMessage).length;

const prefix = len.toString(16);
const packetMessage = `${prefix.padStart(4, '0')}\x02${errorMessage}\n0000`;
return packetMessage
}

module.exports = {router, handleMessage};
19 changes: 19 additions & 0 deletions test/testProxyRoute.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@

const handleMessage = require('../src/proxy/routes').handleMessage;
const chai = require('chai');

const expect = chai.expect;

// Use this test as a template
describe('proxy error messages', async () => {

it('should handle short messages', async function () {
const res = await handleMessage('one');
expect(res).to.contain('one');
});

it('should handle emoji messages', async function () {
const res = await handleMessage('❌ push failed: too many errors');
expect(res).to.contain('❌');
});
});