🚀. Socket Launch Week Day 3:Socket Firewall Now Blocks Malicious VS Code and Open VSX Extensions.Learn more
Sign In

git-service-lite

Package Overview
Dependencies
Maintainers
1
Versions
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

git-service-lite - npm Package Compare versions

Comparing version
1.0.0
to
1.1.0
+1
-1
dist/index.js
#!/usr/bin/env node
import express from"express";import path from"node:path";import{readFile}from"node:fs/promises";import crypto from"node:crypto";import{fileURLToPath}from"node:url";import{getConfigLoader}from"./ConfigLoader.js";import{getLogger}from"./Logger.js";import https from"https";import{GitBackend}from"./GitBackend.js";let configLoader=await getConfigLoader(fileURLToPath(import.meta.url)),logger=getLogger(configLoader);async function main(){try{var e=path.join(configLoader.PACKAGE_BASE_PATH,"package.json"),t=await readFile(e,"utf8"),r=JSON.parse(t);logger.info(`Starting ${r.name}-${r.version}...`)}catch(e){logger.warn("Cannot load package information."),logger.debug(e)}e=express(),t=await configLoader.generateKeyStore(),r=new GitBackend(configLoader).createRouter();e.use("/git",requestAddressFilter,basicAuth,r),await startService(e,t),logger.info("Repositories root: "+configLoader.GIT_REPOSITORIES_ROOT),logger.info("Committer name: "+configLoader.GIT_COMMITTER_NAME),logger.info("Committer email: "+configLoader.GIT_COMMITTER_EMAIL),logger.info("Git service running on "+new URL("git",configLoader.GIT_SERVICE_BASE_URL))}async function startService(o,r){let e;return e="https:"===configLoader.GIT_SERVICE_BASE_URL.protocol?new Promise((e,t)=>{try{let t=https.createServer({key:r.servicePrivateKeyData,cert:r.serviceCertData},o).listen(configLoader.GIT_SERVICE_PORT,configLoader.GIT_SERVICE_ADDRESS,()=>{setInterval(()=>{configLoader.generateKeyStore().then(e=>{logger.debug("Updating service key store..."),r.servicePrivateKeyData=e.servicePrivateKeyData,r.serviceCertData=e.serviceCertData,t.setSecureContext({key:r.servicePrivateKeyData,cert:r.serviceCertData})}).catch(e=>{logger.error("Cannot update service key store."),logger.debug(e),process.exit(1)})},1e3*configLoader.GIT_SERVICE_KEY_STORE_UPDATE_TIMESPAN),e(t)})}catch(e){t(e)}}):new Promise((t,r)=>{try{let e=o.listen(configLoader.GIT_SERVICE_PORT,configLoader.GIT_SERVICE_ADDRESS,()=>{t(e)})}catch(e){r(e)}})}function requestAddressFilter(e,t,r){var o=e.socket.remoteAddress;o?configLoader.GIT_SERVICE_ALLOWED_REQUEST_ADDRESS_LIST.has(o)?r():(logger.warn(`Denied request from ${o} to ${e.method} `+e.originalUrl),t.status(403).send("Access denied")):t.status(403).send("Access denied")}function basicAuth(e,t,r){var o,e=e.headers.authorization;e&&e.startsWith("Basic ")?(e=e.split(" ")[1],[e,o]=Buffer.from(e,"base64").toString("utf8").split(":"),e!==configLoader.GIT_COMMITTER_NAME||crypto.createHash("sha256").update(o).digest("base64")!==configLoader.GIT_COMMITTER_SECRET?(t.set("WWW-Authenticate",'Basic realm="Git Go"'),t.status(401).send("Invalid credentials")):r()):(t.set("WWW-Authenticate",'Basic realm="Git Go"'),t.status(401).send("Authentication required"))}await main();
import express from"express";import path from"node:path";import{readdir,readFile}from"node:fs/promises";import crypto from"node:crypto";import{spawn}from"node:child_process";import{fileURLToPath}from"node:url";import{getConfigLoader}from"./ConfigLoader.js";import{getLogger}from"./Logger.js";import https from"https";import{GitBackend}from"./GitBackend.js";let configLoader=await getConfigLoader(fileURLToPath(import.meta.url)),logger=getLogger(configLoader);async function main(){try{var e=path.join(configLoader.PACKAGE_BASE_PATH,"package.json"),r=await readFile(e,"utf8"),t=JSON.parse(r);logger.info(`Starting ${t.name}-${t.version}...`)}catch(e){logger.warn("Cannot load package information."),logger.debug(e)}"--safe"===process.argv[2]&&(logger.info(`Starting verification of repositories in "${configLoader.GIT_REPOSITORIES_ROOT}"`),0<(e=await checkAllRepos()))&&(logger.error(`Verification failed: ${e} repository(ies) reported errors.`),process.exit(1));r=express(),t=await configLoader.generateKeyStore(),e=new GitBackend(configLoader).createRouter();r.use("/git",requestAddressFilter,basicAuth,e),await startService(r,t),logger.info("Repositories root: "+configLoader.GIT_REPOSITORIES_ROOT),logger.info("Committer name: "+configLoader.GIT_COMMITTER_NAME),logger.info("Committer email: "+configLoader.GIT_COMMITTER_EMAIL),logger.info("Git service running on "+new URL("git",configLoader.GIT_SERVICE_BASE_URL))}async function checkAllRepos(){let e=0;var r,t;for(r of await readdir(configLoader.GIT_REPOSITORIES_ROOT,{recursive:!0,withFileTypes:!0}))r.isDirectory()&&r.name.endsWith(".git")&&(t=path.join(r.parentPath,r.name),t=path.isAbsolute(t)?t:path.join(configLoader.GIT_REPOSITORIES_ROOT,t),e+=await checkRepo(t));return e}async function checkRepo(i){return new Promise((r,t)=>{var e=spawn("git",["fsck"],{env:process.env,cwd:i});let o="";e.stdout.on("data",e=>{o+=e}),e.on("error",e=>{t(e)}),e.on("exit",e=>{0===e?(logger.debug(`"${i}" passed.`),r(0)):(logger.error(`"${i}" failed.`),o&&logger.debug(o),r(1))})})}async function startService(o,t){let e;return e="https:"===configLoader.GIT_SERVICE_BASE_URL.protocol?new Promise((e,r)=>{try{let r=https.createServer({key:t.servicePrivateKeyData,cert:t.serviceCertData},o).listen(configLoader.GIT_SERVICE_PORT,configLoader.GIT_SERVICE_ADDRESS,()=>{setInterval(()=>{configLoader.generateKeyStore().then(e=>{logger.debug("Updating service key store..."),t.servicePrivateKeyData=e.servicePrivateKeyData,t.serviceCertData=e.serviceCertData,r.setSecureContext({key:t.servicePrivateKeyData,cert:t.serviceCertData})}).catch(e=>{logger.error("Cannot update service key store."),logger.debug(e),process.exit(1)})},1e3*configLoader.GIT_SERVICE_KEY_STORE_UPDATE_TIMESPAN),e(r)})}catch(e){r(e)}}):new Promise((r,t)=>{try{let e=o.listen(configLoader.GIT_SERVICE_PORT,configLoader.GIT_SERVICE_ADDRESS,()=>{r(e)})}catch(e){t(e)}})}function requestAddressFilter(e,r,t){var o=e.socket.remoteAddress;o?configLoader.GIT_SERVICE_ALLOWED_REQUEST_ADDRESS_LIST.has(o)?t():(logger.warn(`Denied request from ${o} to ${e.method} `+e.originalUrl),r.status(403).send("Access denied")):r.status(403).send("Access denied")}function basicAuth(e,r,t){var o,e=e.headers.authorization;e&&e.startsWith("Basic ")?(e=e.split(" ")[1],[e,o]=Buffer.from(e,"base64").toString("utf8").split(":"),e!==configLoader.GIT_COMMITTER_NAME||crypto.createHash("sha256").update(o).digest("base64")!==configLoader.GIT_COMMITTER_SECRET?(r.set("WWW-Authenticate",'Basic realm="Git Go"'),r.status(401).send("Invalid credentials")):t()):(r.set("WWW-Authenticate",'Basic realm="Git Go"'),r.status(401).send("Authentication required"))}await main();
{
"name": "git-service-lite",
"version": "1.0.0",
"version": "1.1.0",
"description": "A lightweight Node.js Git HTTP service for single‑user scenario",
"keywords": [
"git",
"http"
],
"author": "Qfield <contact@qfield.net>",
"license": "MIT",
"main": "dist/index.js",

@@ -35,4 +41,3 @@ "type": "module",

"uglify-js": "^3.19.3"
},
"author": "Qfield <contact@qfield.net>"
}
}

@@ -108,1 +108,10 @@ # git-service-lite

```
## Safe Mode
The `--safe` flag can be used to verify all repositories under the configured root directory before starting the
service. It runs `git fsck` on each repository and exits with a non‑zero status if any errors are found.
```shell
git-service --safe
```