Skip to content

Commit

Permalink
Merge pull request #5 from cdcabrera/development
Browse files Browse the repository at this point in the history
fix(forced status): 5XX response blocked by authorization
  • Loading branch information
cdcabrera authored Jul 26, 2018
2 parents 592c230 + 8549097 commit a23ceb7
Show file tree
Hide file tree
Showing 4 changed files with 90 additions and 46 deletions.
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,10 @@ Generate a "happy path" mock server from [apidoc](http://apidocjs.com/) `@apiSuc
server is setup correctly you should be able update your code comments/annotations and have the mock(s) update with a
browser refresh.

Apidoc Mock can also be found on Docker Hub...

* [Docker Hub, cdcabrera/apidoc-mock](https://hub.docker.com/r/cdcabrera/apidoc-mock/)

### Basic example

The base Docker image comes preloaded with a "hello/world" example, the basics
Expand Down
10 changes: 5 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "apidoc-mock",
"version": "1.0.0",
"version": "1.0.1",
"description": "Creates a mock server from apiDoc comments.",
"author": "cdcabrera",
"private": true,
Expand Down Expand Up @@ -34,17 +34,17 @@
"dependencies": {
"apidoc": "^0.17.6",
"express": "^4.16.3",
"nodemon": "^1.18.1"
"nodemon": "^1.18.3"
},
"devDependencies": {
"babel-eslint": "^8.2.3",
"eslint": "^5.1.0",
"babel-eslint": "^8.2.6",
"eslint": "^5.2.0",
"eslint-config-esnext": "^3.0.0",
"eslint-config-node": "^3.0.0",
"eslint-config-prettier": "^2.9.0",
"eslint-plugin-babel": "^5.1.0",
"eslint-plugin-import": "^2.13.0",
"eslint-plugin-node": "^6.0.1",
"eslint-plugin-node": "^7.0.1",
"eslint-plugin-prettier": "^2.6.2",
"prettier": "^1.13.7"
}
Expand Down
52 changes: 29 additions & 23 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -340,38 +340,44 @@ class LoadApi {
);
}

const httpStatus = example.status;
const httpStatus = example.status > 0 && example.status < 600 ? example.status : 500;
const { content, type } = LoadApi.parseContentAndType(example.content, example.type);

response.set('Cache-Control', 'no-cache');

if (value.header && value.header.fields.Header && value.header.fields.Header.length) {
for (let i = 0; i < value.header.fields.Header.length; i++) {
const headerValue = value.header.fields.Header[i];

if (
!headerValue.optional &&
headerValue.field &&
/authorization/i.test(headerValue.field)
) {
const authorization = request.get('authorization');

if (!authorization) {
const authObj = LoadApi.parseContentAndType(
authExample.content,
authExample.type
);

response.append('WWW-Authenticate', 'Spoof response');
response.status(401);
response.set('Content-Type', authObj.type);
response.end(authObj.content || 'Authorization Required');
return;
if (httpStatus < 500) {
if (value.header && value.header.fields.Header && value.header.fields.Header.length) {
for (let i = 0; i < value.header.fields.Header.length; i++) {
const headerValue = value.header.fields.Header[i];

if (
!headerValue.optional &&
headerValue.field &&
/authorization/i.test(headerValue.field)
) {
const authorization = request.get('authorization');

if (!authorization) {
const authObj = LoadApi.parseContentAndType(
authExample.content,
authExample.type
);

console.info(`Response :${value.type}\t:${value.url}\t:401`);

response.append('WWW-Authenticate', 'Spoof response');
response.status(401);
response.set('Content-Type', authObj.type);
response.end(authObj.content || 'Authorization Required');
return;
}
}
}
}
}

console.info(`Response :${value.type}\t:${value.url}\t:${httpStatus}`);

response.set('Content-Type', type);
response.status(httpStatus);
response.send(content);
Expand Down
70 changes: 52 additions & 18 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -286,6 +286,17 @@ babel-eslint@^8.2.3:
eslint-scope "~3.7.1"
eslint-visitor-keys "^1.0.0"

babel-eslint@^8.2.6:
version "8.2.6"
resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.2.6.tgz#6270d0c73205628067c0f7ae1693a9e797acefd9"
dependencies:
"@babel/code-frame" "7.0.0-beta.44"
"@babel/traverse" "7.0.0-beta.44"
"@babel/types" "7.0.0-beta.44"
babylon "7.0.0-beta.44"
eslint-scope "3.7.1"
eslint-visitor-keys "^1.0.0"

[email protected]:
version "7.0.0-beta.44"
resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.44.tgz#89159e15e6e30c5096e22d738d8c0af8a0e8ca1d"
Expand Down Expand Up @@ -802,6 +813,13 @@ eslint-plugin-babel@^5.1.0:
dependencies:
eslint-rule-composer "^0.3.0"

eslint-plugin-es@^1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-1.3.1.tgz#5acb2565db4434803d1d46a9b4cbc94b345bd028"
dependencies:
eslint-utils "^1.3.0"
regexpp "^2.0.0"

eslint-plugin-import@^2.12.0, eslint-plugin-import@^2.13.0:
version "2.13.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.13.0.tgz#df24f241175e312d91662dc91ca84064caec14ed"
Expand All @@ -817,14 +835,16 @@ eslint-plugin-import@^2.12.0, eslint-plugin-import@^2.13.0:
read-pkg-up "^2.0.0"
resolve "^1.6.0"

eslint-plugin-node@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-6.0.1.tgz#bf19642298064379315d7a4b2a75937376fa05e4"
eslint-plugin-node@^7.0.1:
version "7.0.1"
resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-7.0.1.tgz#a6e054e50199b2edd85518b89b4e7b323c9f36db"
dependencies:
ignore "^3.3.6"
eslint-plugin-es "^1.3.1"
eslint-utils "^1.3.1"
ignore "^4.0.2"
minimatch "^3.0.4"
resolve "^1.3.3"
semver "^5.4.1"
resolve "^1.8.1"
semver "^5.5.0"

eslint-plugin-prettier@^2.6.2:
version "2.6.2"
Expand All @@ -837,7 +857,7 @@ eslint-rule-composer@^0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz#79320c927b0c5c0d3d3d2b76c8b4a488f25bbaf9"

eslint-scope@^3.7.1, eslint-scope@~3.7.1:
eslint-scope@3.7.1, eslint-scope@^3.7.1, eslint-scope@~3.7.1:
version "3.7.1"
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8"
dependencies:
Expand All @@ -851,7 +871,7 @@ eslint-scope@^4.0.0:
esrecurse "^4.1.0"
estraverse "^4.1.1"

eslint-utils@^1.3.1:
eslint-utils@^1.3.0, eslint-utils@^1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512"

Expand Down Expand Up @@ -902,9 +922,9 @@ eslint@^4.19.1:
table "4.0.2"
text-table "~0.2.0"

eslint@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.1.0.tgz#2ed611f1ce163c0fb99e1e0cda5af8f662dff645"
eslint@^5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.2.0.tgz#3901ae249195d473e633c4acbc370068b1c964dc"
dependencies:
ajv "^6.5.0"
babel-code-frame "^6.26.0"
Expand All @@ -922,7 +942,7 @@ eslint@^5.1.0:
functional-red-black-tree "^1.0.1"
glob "^7.1.2"
globals "^11.7.0"
ignore "^3.3.3"
ignore "^4.0.2"
imurmurhash "^0.1.4"
inquirer "^5.2.0"
is-resolvable "^1.1.0"
Expand Down Expand Up @@ -1417,10 +1437,14 @@ ignore-walk@^3.0.1:
dependencies:
minimatch "^3.0.4"

ignore@^3.3.3, ignore@^3.3.6:
ignore@^3.3.3:
version "3.3.8"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.8.tgz#3f8e9c35d38708a3a7e0e9abb6c73e7ee7707b2b"

ignore@^4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.2.tgz#0a8dd228947ec78c2d7f736b1642a9f7317c1905"

import-lazy@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43"
Expand Down Expand Up @@ -2022,9 +2046,9 @@ node-pre-gyp@^0.9.0:
semver "^5.3.0"
tar "^4"

nodemon@^1.18.1:
version "1.18.1"
resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-1.18.1.tgz#873d2f7799662c549f7ea557db6934d5cbf665d6"
nodemon@^1.18.3:
version "1.18.3"
resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-1.18.3.tgz#46e681ee0dd1b590562e03019b4c5df234f906f9"
dependencies:
chokidar "^2.0.2"
debug "^3.1.0"
Expand Down Expand Up @@ -2421,6 +2445,10 @@ regexpp@^1.0.1, regexpp@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab"

regexpp@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.0.tgz#b2a7534a85ca1b033bcf5ce9ff8e56d4e0755365"

registry-auth-token@^3.0.1:
version "3.3.2"
resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.2.tgz#851fd49038eecb586911115af845260eec983f20"
Expand Down Expand Up @@ -2461,12 +2489,18 @@ resolve-url@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"

resolve@^1.3.3, resolve@^1.5.0, resolve@^1.6.0:
resolve@^1.5.0, resolve@^1.6.0:
version "1.7.1"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.7.1.tgz#aadd656374fd298aee895bc026b8297418677fd3"
dependencies:
path-parse "^1.0.5"

resolve@^1.8.1:
version "1.8.1"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26"
dependencies:
path-parse "^1.0.5"

restore-cursor@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
Expand Down Expand Up @@ -2534,7 +2568,7 @@ semver-diff@^2.0.0:
dependencies:
semver "^5.0.3"

"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0:
"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.5.0:
version "5.5.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"

Expand Down

0 comments on commit a23ceb7

Please sign in to comment.