This rails engine enables ruby and SQL invocation via HTTP POST requests. It is meant to be used as a tool for configuration management via local connections.
This goes into your Gemfile
.
gem 'configuration_management_backdoor', '>= 2.1.0', '< 3.0'
Results are always returned in JSON format where the value is wrapped under the
result
key. In case of an evaluation error there will be no result but an
error message and the return status is 422 aka "Unprocessable Entity".
A simple example:
$ curl -u x:YOUR_SECRET_KEY_BASE -X POST \
http://localhost:3000/configuration_management_backdoor/invoke \
-H 'content-type: application/ruby' -d '1 + 1'
{"result":2}
This will cause an error in the stack. We also use the -i
by which curl
will output meta data, too:
$ curl -i -u x:YOUR_SECRET_KEY_BASE -X POST \
http://localhost:3000/configuration_management_backdoor/invoke \
-H 'content-type: application/ruby' -d '1/0'
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json; charset=utf-8
...
{"error":"divided by 0"}
The structure of the value depends on the adapter. This is for the native Postgresql adapter:
$ curl -u x:YOUR_SECRET_KEY_BASE -X POST \
http://localhost:3000/configuration_management_backdoor/invoke \
-H 'content-type: application/sql' -d 'SELECT 1 + 1 AS output'
{"result":[{"output":"2"}]}
Error:
$ curl -u x:YOUR_SECRET_KEY_BASE -X POST \
http://localhost:3000/configuration_management_backdoor/invoke \
-H 'content-type: application/sql' -d 'SELECT 1 / 0'
{"error":"PG::DivisionByZero: ERROR: division by zero\n: SELECT 1 / 0"}