CGIJS
is a all featured library to run any CGI
mode / Interpreted language script
files, or connect to any web application server proxies, or manage processes in the system.
CGIJS
library:
- Supports running any
CGI
/Interpreted Language scripts
using the nodejs process module inany OS
that runsnode.js
. Needs the language interpretor to be installed in the system - [TODO] Supports running any
CGI
/Interpreted Language scripts
using interpreters library module inany OS
that runsnode.js
. Do not need the language interpretor to be installed in the system - Supports both
CGI
executables as well asproxy
tolocalhost
/remote
/embedded servers
using proxying of multiple protocols (http
,websockets
,tcp
,udp
,socks
,ssh
,ftp
). - Supports managing processes like
embedded
server
executables, embeddeddatabase
executables, orany other
embedded/ non-embedded executables - Supports working with
shell
,json
,ini
,csv
,yaml
, andxml
internally
[Funding Invited]
General Note: The library is production ready. However, please be cautious of processes/executables permissions/security in your project using CGIJS
CGIJS was created with a motivation to allow creation of a Desktop executable/ application
using Electron
that can run any CGI
/ Interpreted language scripted files/ applications
under the hood.
npm install cgijs --save
If you wish to run interpreted languages like php
, perl
, python
, micropython
, cpython
, ruby
, julia
, cpp
, golang
, ocaml
, lua
, napi
, wasm-run
, r-lang
, openssl
with wasm files
without having the language's binary present/ installed in your system then use the following package.
npm install bridge-wasm --save
Light weight, Flexible, Generic implementation. CGIJS is Nodejs Framework Independent / agnostic
for application development.
There are three main modules inside CGIJS - file
for CGI file execution, proxy
for running proxies, and process
for managing processes.
- The process shell module is security agnostic and is dependant on your code.
- The package accesses the shell to run script executables using the node.js process module. Please consider your
security risks based on your executable's/ script's security risks
.
- The package accesses the shell to run script executables using the node.js process module. Please consider your
- The proxy module is security agnostic and is dependant on your code and proxy's security.
- The
package has a LAN or WAN network proxy module AND does not create any proxies
by its own - unless specified by you. Please consider your custom created proxy's security risks.
- The
- The
package does not use Telemetry, nor Collect data Remotely, nor has Telemetry/Remote based Error collection
on its own.- The package propogates errors for you to handle or collect errors/ data.
- CGI file execution
- Run any scripts that support CGI based serving/execution
- Run multiple CGI executables/ Interpreters in one or multiple applications
- Embed your own CGI/ Interpreted Language executables
- Runs scripts with language interpretor binary (like php, python, ruby, etc) in your system
- Runs scripts without language interpretor binary (like php, python, ruby, etc) in your system using their wasm packages
- Running Proxies
- Run any host that serves a web app, using proxy
- Run proxies for Application (Local / Remote)
- Supports websocket implementation in web proxies
- Run multiple protocol proxies (HTTP, UDP, TCP, Websockets, Socks) and multiple instances in one or multiple applications
- Manage Processes or Services
- Allows running and closing process Executables
- Allows managing Embedding Web Servers, which can run web applications through proxies [Todo] Testing for some embeddable servers
- Allows managing Embedded Database servers [Todo] Testing for some embeddable servers
- Should run smoothly with Unsupported proxy servers/ processes/ services (not widely tested)
- Embedding
- Multiple web servers in one or multiple applications
- Multiple databases in one or multiple applications
- Python (2.x, 3.x) -
py
(for Python .py extension files. Needed for *nix systems) - Perl (Version Independent) -
plc
,pld
,pl
(for Perl .pl, .plc, .pld extension files) - PHP (Version Independent) -
php
(for .php extension files) - Ruby (Version Independent) -
rb
(for Ruby .rb extension files) - Node.js (Version Independent) -
js
(for Node.js .js extension files) - CGI -
cgi
(for CGI .cgi extension files) [Todo Testing]
- Jsp (With Tomcat, or any webserver as proxy)
- Aspx (With IIS, Apache, or any webserver as proxy)
- [] Jsp (With Tomcat embedded) [Todo]
- [] Aspx (With Nginx and Apache embedded) [Todo]
The script currently allows working with (starting, stopping, restarting using bash, bat scripts) following web servers:
- IIS [Done]
- Nginx [Done]
- Apache HTTPD [Done]
- Apache TomCat [Done]
- Nginx (Allows Embed) [Done]
- Apache HTTPD (Allows Embed) [Done]
- Apache TomCat (Allows Embed) [Todo - Testing], should work based on current testing of other proxies
- Mongoose [Todo - Testing], should work based on current testing of other proxies
- Jetty [Todo - Testing], should work based on current testing of other proxies
- Putty [Todo - Testing], should work based on current testing of other proxies
- [] Mongoose (Allows Embed) [Todo - Testing]
- [] Jetty (Allows Embed) [Todo - Testing]
- Putty (Allows Embed) [Todo - Testing]
- PHP development server using
php -S
- Ruby development server using
rails server
[Todo - Testing] - Python development server using
py -m http.server
- [] Other Proxy-able local/remote servers [InProgress]
The script currently allows working with (starting, stopping, restarting proxies) following web servers:
- IIS [Done]
- Nginx [Done]
- Apache HTTPD [Done]
- Apache TomCat [Done]
- Nginx (Allows Embed) [Done]
- Apache HTTPD (Allows Embed) [Done]
- Apache TomCat (Allows Embed) [Todo - Testing], should work based on current testing of other proxies
- Mongoose [Todo - Testing], should work based on current testing of other proxies
- Jetty [Todo - Testing], should work based on current testing of other proxies
- Putty [Todo - Testing], should work based on current testing of other proxies
- [] Mongoose (Allows Embed) [Todo - Testing]
- [] Jetty (Allows Embed) [Todo - Testing]
- Putty (Allows Embed) [Todo - Testing]
- PHP development server using
php -S
- Ruby development server using
rails server
[Todo - Testing] - Python development server using
py -m http.server
- [] Other Proxy-able local/remote servers [InProgress]
- IIS [Done]
- Nginx [Done]
- Apache HTTPD [Done]
- Apache TomCat [Done]
- Nginx [Done]
- Apache HTTPD [Done]
- Apache TomCat [Todo - Testing], should work based on current testing of other proxies
- Mongoose [Todo - Testing], should work based on current testing of other proxies
- Jetty [Todo - Testing], should work based on current testing of other proxies
- Putty [Todo - Testing], should work based on current testing of other proxies
- [] Mongoose (Allows Embed) [Todo - Testing]
- [] Jetty (Allows Embed) [Todo - Testing]
- Putty (Allows Embed) [Todo - Testing]
- PHP development server using
php -S
- Ruby development server using
rails server
[Todo - Testing] - Python development server using
py -m http.server
- [] Other Proxy-able local/remote servers [InProgress]
The script currently allows working with (starting, stopping, restarting) following databases and processes:
- Mysql [Done]
- MongoDB [Done]
- [] PgSQL [Todo]
- [] Redis [Todo]
- bash, bat, ps scripts [Done]
- Other Processes for your application support
This library is in active development. Issues, and feedbacks as github ticket are welcome.
-
Environment and Library dependencies:
- Nodejs: (> 8.x),
- http-proxy for http-proxy support,
- socks for socks support,
- udp-proxy for udp support,
- ssh2 for ssh2, ssh, ftp, sftp support,
- socket-proxy for socket proxy,
- http-proxy-to-socks for http to socks proxy,
- csv for file parser,
- xml-js for xml file parser,
- yaml for yaml file parser,
- ini for ini file parser,
- dotenv for dotenv file parser,
- shelljs for support with shell
- concurrency.js for concurrency and parallelization support for threads and processes
-
Extra needed dependencies to use language interpretors and libraries for
php
,perl
,python
,micropython
,cpython
,ruby
,julia
,cpp
,golang
,ocaml
,lua
,napi
,wasm-run
,r-lang
,openssl
withwasm files
without having to install (or have) binaries in your system- bridge-wasm for running interpreted languages with wasm without having the binary in your system (installed/ present).
-
Application Dependencies:
- Your app, you decide
- Example/Demo has "express": "^4.17.1"
- Alternatively, Use any other Nodejs framework you want to use for your app
This project contains example that demonstrates working with ExpressJS.
- The demos for runing CGI/Interpreted scripts with node.js and express applications can be found in the folder demo app.
- The demos for individual implementation of file, process, proxy, and utils modules can be found in the folder demo usage [todo]
cgijs library has been created to address following use cases:
- working with CGI / interpreted languages from
any
Node.js app framework - using any CGI / interpreted languages apps with electron as demonstrated in functioning desktop-cgi app
... * Wiki links to be added
- Getting started
- Quick demo - CGI mode executable files
- Quick demo - proxying to proxies/servers
- Quick demo - proxying to proxy's websocket
- Quick demo - proxying to udp, socks, http to socks proxy's websocket
- Run CGI files using process module and binaries in the system
- PHP (.php)
- Perl (Perl any versions - .plc, .pld, .pl)
- Python (Python2, Python3 - .py)
- Ruby (.rb)
- Node.js (.js)
- Run CGI files using cgi-js
- PHP (.php)
- Perl (Perl any versions - .plc, .pld, .pl)
- Python (Python2, Python3 - .py)
- Ruby (.rb)
- Lua (.)
- Rust (.)
- GoLang (.go)
- CPython (.py)
- Julia (.)
- R-Lang (.)
- Run Proxy servers to connect to:
- Any Local http/https/websocket Servers
- Any Remote http/https/websocket Servers
- Embedded Apache httpd, Apache tomcat, Nginx (http/https/websocket)
- Embedded Mongoose http server (http/https)
- Manage Embedded Servers (for desktop-cgi use case):
- Embedded Apache httpd (http/https/websocket)
- Embedded Apache tomcat (http/https/websocket)
- Embedded Mongoose http server (http/https)
- Embedded Nginx (http/https/websocket)
- PHP inbuilt web development servers
- Ruby inbuilt web development servers
- Python inbuilt web development servers
- Manage Embedded Database Servers (for desktop-cgi use case):
- Embedded Mysql
- Embedded MongoDB
- Embedded PgSQL
- Working with SQLite
- Manage Processes (for desktop-cgi use case):
- Other Processes or executable workings
- Run and Manage embedded or non-embedded executables / processes on need for application
- Working with config.json file for simpler implementation in apps
- In development [Testing for Desktop-CGI use case]
- In development [Testing for language based development server]
Check .todo file for latest TODO list
The MIT License (MIT) - See LICENSE for further details
Copyright © 2019 - till library works: Ganesh B [email protected]
- feature needs reporting,
- testing,
- issue reporting,
- contribution
Please use these styles for contributions