This is the software running on https://cors.isomorphic-git.org/ - a free service (generously sponsored by Clever Cloud) for users of isomorphic-git that enables cloning and pushing repos in the browser.
It is derived from https://github.com/wmhilton/cors-buster with added restrictions to reduce the opportunity to abuse the proxy. Namely, it blocks requests that don't look like valid git requests.
Installationnpm install @isomorphic-git/cors-proxyCLI usage
Start proxy on default port 9999:
Start proxy on a custom port:
Start proxy in daemon mode. It will write the PID of the daemon process to $PWD/cors-proxy.pid
:
Kill the process with the PID specified in $PWD/cors-proxy.pid
:
Environment variables:
PORT
the port to listen to (if run with npm start
)ALLOW_ORIGIN
the value for the 'Access-Control-Allow-Origin' CORS headerINSECURE_HTTP_ORIGINS
comma separated list of origins for which HTTP should be used instead of HTTPS (added to make developing against locally running git servers easier)You can also use the cors-proxy
as a middleware in your own server.
const express = require('express') const corsProxy = require('@isomorphic-git/cors-proxy/middleware.js') const app = express() const options = {} app.use(corsProxy(options))Middleware configuration
The middleware doesn't use the environment variables. The options object supports the following properties:
origin
: string. The value for the 'Access-Control-Allow-Origin' CORS headerinsecure_origins
: string[]. Array of origins for which HTTP should be used instead of HTTPS (added to make developing against locally running git servers easier)authorization
: (req, res, next) => void. A middleware function you can use to handle custom authorization. Is run after filtering for git-like requests and handling CORS but before the request is proxied.Example:
app.use( corsProxy({ authorization: (req: Request, res: Response, next: NextFunction) => { // proxied git HTTP requests already use the Authorization header for git credentials, // so their [Company] credentials are inserted in the X-Authorization header instead. if (getAuthorizedUser(req, 'X-Authorization')) { return next(); } else { return res.status(401).send("Unable to authenticate you with [Company]'s git proxy"); } }, }) ); // Only requests with a valid JSON Web Token will be proxied function getAuthorizedUser(req: Request, header: string = 'Authorization') { const Authorization = req.get(header); if (Authorization) { const token = Authorization.replace('Bearer ', ''); try { const verifiedToken = verify(token, env.APP_SECRET) as IToken; if (verifiedToken) { return { id: verifiedToken.userId, }; } } catch (e) { // noop } } }License
This work is released under The MIT License
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4