Skip to content

Commit 69fbd03

Browse files
committed
feat: add svn log browser
1 parent 6a446c2 commit 69fbd03

35 files changed

Lines changed: 3840 additions & 12 deletions

cli.js

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,10 @@ const {
7575
validateTaskPlan,
7676
executeTaskPlan
7777
} = require('./lib/task-orchestrator');
78+
const {
79+
getSvnInfo,
80+
getSvnLogs
81+
} = require('./lib/svn-webdav');
7882
const {
7983
readAutomationConfig,
8084
matchAutomationRule,
@@ -9995,6 +9999,54 @@ function createWebServer({ htmlPath, assetsDir, webDir, host, port, openBrowser
99959999
}
999610000
}
999710001
break;
10002+
case 'svn-info':
10003+
{
10004+
const rawUrl = params && typeof params.url === 'string' ? params.url : '';
10005+
const remoteAddr = req && req.socket ? req.socket.remoteAddress : '';
10006+
const requesterIsLoopback = !remoteAddr
10007+
|| remoteAddr === '127.0.0.1'
10008+
|| remoteAddr === '::1'
10009+
|| remoteAddr === '::ffff:127.0.0.1';
10010+
if (!requesterIsLoopback) {
10011+
try {
10012+
const parsedUrl = new URL(rawUrl);
10013+
if (isPrivateNetworkHost(parsedUrl.hostname || '')) {
10014+
result = { error: 'Refusing to access private network svn url from non-loopback request' };
10015+
break;
10016+
}
10017+
} catch (_) {}
10018+
}
10019+
try {
10020+
result = await getSvnInfo(params || {});
10021+
} catch (e) {
10022+
result = { error: e && e.message ? String(e.message) : 'svn info failed', status: e && e.status ? e.status : undefined };
10023+
}
10024+
}
10025+
break;
10026+
case 'svn-logs':
10027+
{
10028+
const rawUrl = params && typeof params.url === 'string' ? params.url : '';
10029+
const remoteAddr = req && req.socket ? req.socket.remoteAddress : '';
10030+
const requesterIsLoopback = !remoteAddr
10031+
|| remoteAddr === '127.0.0.1'
10032+
|| remoteAddr === '::1'
10033+
|| remoteAddr === '::ffff:127.0.0.1';
10034+
if (!requesterIsLoopback) {
10035+
try {
10036+
const parsedUrl = new URL(rawUrl);
10037+
if (isPrivateNetworkHost(parsedUrl.hostname || '')) {
10038+
result = { error: 'Refusing to access private network svn url from non-loopback request' };
10039+
break;
10040+
}
10041+
} catch (_) {}
10042+
}
10043+
try {
10044+
result = await getSvnLogs(params || {});
10045+
} catch (e) {
10046+
result = { error: e && e.message ? String(e.message) : 'svn logs failed', status: e && e.status ? e.status : undefined };
10047+
}
10048+
}
10049+
break;
999810050
case 'get-config-template':
999910051
result = getConfigTemplate(params || {});
1000010052
break;

0 commit comments

Comments
 (0)