Security News
New Python Packaging Proposal Aims to Solve Phantom Dependency Problem with SBOMs
PEP 770 proposes adding SBOM support to Python packages to improve transparency and catch hidden non-Python dependencies that security tools often miss.
Mock server that implements the API Blueprint specification:
Since version 0.1.12 MSON support is now provided.
Drakov provide some logging in the following situations:
When flag --debugMode
is set on Drakov's start up all mismatching requests will be dumped on logs. Also Drakov will send a detail payload within the 404 response.
npm install -g gamora
drakov -f <glob expression to your md files> -s <comma delimited list of static file paths> -p <server port>
Argument Notes:
drakov --config config.js
Important This mode of operation will load your configuration from a Javascript file that must export an object of arguments as supported in the arguments module.
All command line arguments aside from --config
will be ignored, and the defaults will be merged in.
drakov
Similar to utilities such as JSHint, drakov will look for a .drakovrc
file in the current path where drakov
is executed
and walk up the path until /
is reached.
The .drakovrc
file should be a valid Node.js module that exports a valid Drakov configuration object such as would be
used with the --config
switch.
drakov -f <glob expression to your md files> --discover
Enables the /drakov
endpoint, which lists all the available endpoints currently being served by Drakov
With only a glob expression
drakov -f "../com/foo/contracts/*.md"
With glob expression and single static path
drakov -f "../com/foo/contracts/*.md" -s "../path/to/static/files"
With glob expression and multiple static paths (must be comma delimited with no spaces)
drakov -f "../com/foo/contracts/*.md" -s "../path/to/static/files" -s "../second/path/to/static/files"
With glob expression and static path that has a specific mount point
drakov -f "../com/foo/contracts/*.md" -s "../path/to/static/files=/www/path"
With glob expression and static path that has a specific mount point with different path mount delimiter
drakov -f "../com/foo/contracts/*.md" -s "../path/to/static/files:/www/path" -d ":"
With glob expression and specified server port
drakov -f "../com/foo/contracts/*.md" -p 4007
When running drakov and binding to a public IP
drakov -f "../com/foo/contracts/*.md" --public
You can tell Drakov to watch for changes in the spec files that are loaded. When changes are detected, Drakov will reload.
drakov -f "../com/foo/contracts/*.md" --watch
By default a CORS header is sent, you can disable it with the --disableCORS switch.
drakov -f "../com/foo/contracts/*.md" --disableCORS
When you run server for testing API on different port than your app it's handy to allow cross origin resource sharing (CORS). For this to work you need also to listen on every route for OPTIONS requests.
drakov -f "../com/foo/contracts/*.md" --autoOptions
By default Drakov only binds to localhost, to run on all public IP interfaces use the --public switch.
drakov -f "../com/foo/contracts/*.md" --public
To enable SSL you must provide both key and certificate. Use parameters --sslKeyFile and --sslCrtFile to specify the path to your key and certificate files. Once SSL is enabled Drakov will only respond to HTTPS requests.
drakov -f "../com/foo/contracts/*.md" --sslKeyFile="./ssl/server.key" --sslCrtFile="./ssl/server.crt"
In some cases you may wish to suppress the logging output of Drakov. To do so, run is with the --stealthmode
options.
drakov -f "../com/foo/contracts/*.md" --stealthmode
In some case you may want to force Drakov to delay sending a response. To do this simple use the --delay
argument followed by a number (ms).
drakov -f "../com/foo/contracts/*.md" --delay 2000
For HTTP methods such as DELETE, you may want Drakov to return them in the appropriate methods allow header. You can do this using the --method
argument
drakov -f "../com/foo/contracts/*.md" --method DELETE
drakov -f "../com/foo/contracts/*.md" --method DELETE --method OPTIONS
For HTTP headers such as Authorization, you may want Drakov to return them in the appropriate methods allow header. You can do this using the --header
argument
drakov -f "../com/foo/contracts/*.md" --header Authorization
drakov -f "../com/foo/contracts/*.md" --header Authorization --header X-Csrf-Token
Drakov includes many headers by default: Origin, X-Requested-With, Content-Type, Accept
when CORS is enabled.
In cases where strict HTTP headers matching against API blueprints is not necessary, you can use the --ignoreHeader
argument:
drakov -f "../com/foo/contracts/*.md" --ignoreHeader Cookie --ignoreHeader Authorization
var drakov = require('gamora');
var argv = {
sourceFiles: 'path/to/files/**.md',
serverPort: 3000,
staticPaths: [
'/path/to/static/files',
'/another/path/to/static/files',
'/path/to/more/files=/mount/it/here'
],
stealthmode: true,
disableCORS: true,
sslKeyFile: '/path/to/ssl/key.key',
sslCrtFile: '/path/to/ssl/cert.crt',
delay: 2000,
method: ['DELETE','OPTIONS']
};
drakov.run(argv, function(){
// started Drakov
drakov.stop(function() {
// stopped Drakov
});
});
Due to protagonist parsing being async, we need to setup the middleware with an init function
var drakovMiddleware = require('gamora').middleware;
var argv = {
sourceFiles: 'path/to/files/**.md',
serverPort: 3000,
staticPaths: [
'/path/to/static/files',
'/another/path/to/static/files',
'/path/to/more/files=/mount/it/here'
],
stealthmode: true,
disableCORS: true,
sslKeyFile: '/path/to/ssl/key.key',
sslCrtFile: '/path/to/ssl/cert.crt',
delay: 2000,
method: ['DELETE','OPTIONS']
};
var app = express();
drakovMiddleware.init(app, argv, function(err, middlewareFunction) {
if (err) {
throw err;
}
app.use(middlewareFunction);
app.listen(argv.serverPort);
});
Q: If I have multiple requests/responses on the same API endpoint, which response will I get?
A: Drakov will respond first with any responses that have a JSON schema with the first response matching the request body for that API endpoint. You can request a specific response by adding a Prefer
header to the request in the form Prefer:status=XXX
where XXX
is the status code of the desired response. See issue #88 for details.
Q: If I have multiple responses on a single request, which response will I get?
A: Drakov will respond with the first response.
Q: Drakov is too loud (outputting too much logging), can I turn off request and API responses?
A: You can suppress all but the startup output of Drakov with --stealthmode
.
Pull requests with patches for fixes and enhancements are very welcome. We have a few requirements that will help us to quickly assess your contributions.
If you have any ideas or questions you are welcome to post an issue.
.editorconfig
and .jshintrc
files included in the projectnpm test
and run against the jshinting ruleslib/logger
module and use logger.log()
, this allows your logging be properly disabled in Drakov's stealth modelogger.log('[TYPE]'.white
, 'Something is happening');`yargsConfigOptions
object in the arguments moduletest/example/md
directorytest/api
for request/response behaviour tests, or test/unit
if it is a unit test-test.js
npm test
before you submit your build requestA history of changes with a list of contributors can be found at https://github.com/WilliamDASILVA/gamora/blob/master/CHANGELOG.md
Yakov Khalinsky yakov@therocketsurgeon.com
Marcelo Garcia de Oliveira moliveira@aconex.com
Huge thanks to Eva Mansk for the funky logo!
You are welcome to use the Drakov logo as long it is to refer to this project and you provide acknowledgement and a link back to our project.
This is a fork of the "Drakov" package. Due to low maintenance, we decided to fork it for our own needs and deploy in a separate package.
FAQs
Mock server that implements the API Blueprint specification
The npm package gamora receives a total of 3 weekly downloads. As such, gamora popularity was classified as not popular.
We found that gamora demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
PEP 770 proposes adding SBOM support to Python packages to improve transparency and catch hidden non-Python dependencies that security tools often miss.
Security News
Socket CEO Feross Aboukhadijeh discusses open source security challenges, including zero-day attacks and supply chain risks, on the Cyber Security Council podcast.
Security News
Research
Socket researchers uncover how threat actors weaponize Out-of-Band Application Security Testing (OAST) techniques across the npm, PyPI, and RubyGems ecosystems to exfiltrate sensitive data.