├── .jshintignore ├── .bowerrc ├── static ├── favicon.ico ├── img │ ├── error-sprite.png │ ├── swagger-logo.png │ ├── editor-sprite.png │ ├── github-sprite.png │ ├── postman-sprite.png │ └── swagger-sprite.png ├── css │ ├── bootstrap.scss │ ├── _scaffolding.scss │ ├── _animations.scss │ ├── style.scss │ ├── _variables.scss │ ├── _error.scss │ ├── style.min.css.map │ ├── style.min.css │ ├── _navbar.scss │ └── bootstrap.min.css.map ├── error.html ├── docs │ └── index.html ├── editor │ └── index.html ├── ui │ └── index.html ├── js │ └── swagger-suite.js └── _header.html ├── lib ├── debug.js ├── swagger-ui.js ├── swagger-suite.js ├── errors.js └── swagger-editor.js ├── .gitignore ├── README.md ├── samples ├── minimal.yaml ├── user-manager │ ├── mock-user-data.json │ ├── user.yaml │ ├── authorization.js │ ├── server.js │ ├── authentication.js │ └── users.yaml ├── petstore │ ├── server.js │ └── petstore.yaml └── CORS.yaml ├── .gitattributes ├── bower.json ├── LICENSE ├── LICENSES.md ├── package.json ├── .jshintrc └── index.js /.jshintignore: -------------------------------------------------------------------------------- 1 | node_modules/** 2 | 3 | -------------------------------------------------------------------------------- /.bowerrc: -------------------------------------------------------------------------------- 1 | { 2 | "directory": "static/bower_components" 3 | } 4 | -------------------------------------------------------------------------------- /static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesMessinger/swagger-suite/HEAD/static/favicon.ico -------------------------------------------------------------------------------- /static/img/error-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesMessinger/swagger-suite/HEAD/static/img/error-sprite.png -------------------------------------------------------------------------------- /static/img/swagger-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesMessinger/swagger-suite/HEAD/static/img/swagger-logo.png -------------------------------------------------------------------------------- /static/img/editor-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesMessinger/swagger-suite/HEAD/static/img/editor-sprite.png -------------------------------------------------------------------------------- /static/img/github-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesMessinger/swagger-suite/HEAD/static/img/github-sprite.png -------------------------------------------------------------------------------- /static/img/postman-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesMessinger/swagger-suite/HEAD/static/img/postman-sprite.png -------------------------------------------------------------------------------- /static/img/swagger-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesMessinger/swagger-suite/HEAD/static/img/swagger-sprite.png -------------------------------------------------------------------------------- /lib/debug.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | 'use strict'; 3 | 4 | module.exports = require('debug')('swagger:suite'); 5 | 6 | })(); 7 | -------------------------------------------------------------------------------- /static/css/bootstrap.scss: -------------------------------------------------------------------------------- 1 | @import "variables"; 2 | @import "../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap"; 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | **/*~ 2 | **/._* 3 | **/.DS_Store 4 | npm-debug.log 5 | .idea 6 | node_modules 7 | static/bower_components 8 | static/img/src 9 | samples/TEST 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Swagger-Suite 2 | ##### This project is no longer supported or maintained. I recommend using [Swagger-Node](https://github.com/swagger-api/swagger-node) instead. 3 | -------------------------------------------------------------------------------- /samples/minimal.yaml: -------------------------------------------------------------------------------- 1 | swagger: "2.0" 2 | info: 3 | version: "1.0.0" 4 | title: minimal 5 | description: Example of the bare minimum Swagger spec 6 | host: localhost:3000 # otherwise, a random port will be used each time 7 | paths: 8 | /users: 9 | get: 10 | responses: 11 | "200": 12 | description: Describe the 200 response in more detail 13 | -------------------------------------------------------------------------------- /static/css/_scaffolding.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Scaffolding 3 | // ---------------------------------------------- 4 | 5 | html,head,body,main { 6 | height: 100%; 7 | width: 100%; 8 | overflow: hidden; 9 | } 10 | 11 | body { 12 | padding-top: $navbar-height; 13 | } 14 | 15 | main > iframe { 16 | height: 100%; 17 | width: 100%; 18 | border: none; 19 | } 20 | 21 | a { 22 | cursor: pointer; 23 | } 24 | -------------------------------------------------------------------------------- /static/css/_animations.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Animations 3 | // ---------------------------------------------- 4 | 5 | // Used for the error alert icon 6 | @-webkit-keyframes attention { 7 | from { 8 | transform: rotate(-45deg); 9 | } 10 | to { 11 | transform: rotate(45deg); 12 | } 13 | } 14 | @keyframes attention { 15 | from { 16 | transform: rotate(-45deg); 17 | } 18 | to { 19 | transform: rotate(45deg); 20 | } 21 | } 22 | 23 | -------------------------------------------------------------------------------- /static/css/style.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Bootstrap 3 | // ---------------------------------------------- 4 | @import "variables"; 5 | @import "../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/variables"; 6 | @import "../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/mixins"; 7 | 8 | 9 | // 10 | // Swagger-Suite 11 | // ---------------------------------------------- 12 | @import "scaffolding"; 13 | @import "animations"; 14 | @import "navbar"; 15 | @import "error"; 16 | -------------------------------------------------------------------------------- /static/css/_variables.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Swagger-Server variables 3 | // ---------------------------------------------- 4 | $swagger-green: #8ABD24; 5 | $navbar-icon-size: 32px; 6 | 7 | 8 | // 9 | // Bootstrap variable overrides 10 | // ---------------------------------------------- 11 | $gray-dark: #4a4a4a; 12 | $gray-light: #B6B1B1; 13 | 14 | $brand-success: $swagger-green; 15 | 16 | $navbar-inverse-bg: $gray-dark; 17 | 18 | $icon-font-path: "../bower_components/bootstrap-sass-official/assets/fonts/bootstrap/"; 19 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Convert all line endings to CRLF, so they work with Windows programs 2 | * text=auto 3 | 4 | # Explicitly declare text files you want to always be normalized and converted 5 | # to native line endings on checkout. 6 | *.txt text 7 | *.html text 8 | *.md text 9 | *.css text 10 | *.scss text 11 | *.min text 12 | *.js text 13 | *.json text 14 | *.config text 15 | *.xml text 16 | *.njsproj text 17 | *.java text 18 | *.sql text 19 | *.iml text 20 | *.svg text 21 | 22 | # Declare files that will always have CRLF line endings on checkout. 23 | *.sln text eol=crlf 24 | 25 | # Denote all files that are truly binary and should not be modified. 26 | *.png binary 27 | *.jpg binary 28 | *.jpeg binary 29 | -------------------------------------------------------------------------------- /bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "swagger-suite", 3 | "version": "1.0.0", 4 | "description": "No longer maintained. Please use https://github.com/swagger-api/swagger-node", 5 | "keywords": [ 6 | "rest", 7 | "json", 8 | "yaml", 9 | "api", 10 | "spec", 11 | "specification", 12 | "contract", 13 | "schema", 14 | "editor", 15 | "mock", 16 | "fake", 17 | "test", 18 | "docs", 19 | "documentation", 20 | "server", 21 | "express", 22 | "connect", 23 | "swagger", 24 | "postman" 25 | ], 26 | "authors": [ 27 | "James Messinger" 28 | ], 29 | "main": "index.html", 30 | "license": "MIT", 31 | "homepage": "https://github.com/BigstickCarpet/swagger-suite", 32 | "private": true, 33 | "ignore": [ 34 | "**/.*", 35 | "bower_components" 36 | ], 37 | "dependencies": { 38 | "bootstrap-sass-official": "~3.2.0", 39 | "swagger-suite-editor": "*", 40 | "swagger-suite-ui": "*" 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /samples/user-manager/mock-user-data.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "username": "admin", 4 | "password": "admin", 5 | "name": { 6 | "firstName": "Admin" 7 | } 8 | }, 9 | { 10 | "username": "jdoe", 11 | "password": "jdoe", 12 | "name": { 13 | "firstName": "John", 14 | "lastName": "Doe" 15 | }, 16 | "email": "john.doe@company.com", 17 | "telephone": 5551234567 18 | }, 19 | { 20 | "username": "bsmith", 21 | "password": "bsmith", 22 | "name": { 23 | "firstName": "Bob", 24 | "lastName": "Smith" 25 | }, 26 | "email": "bob.smith@company.com" 27 | }, 28 | { 29 | "username": "sjones", 30 | "password": "sjones", 31 | "name": { 32 | "firstName": "Sarah", 33 | "lastName": "Jones" 34 | }, 35 | "telephone": 5559876543 36 | }, 37 | { 38 | "username": "aadams", 39 | "password": "aadams", 40 | "name": { 41 | "firstName": "Amanda", 42 | "lastName": "Adams" 43 | } 44 | } 45 | ] 46 | -------------------------------------------------------------------------------- /static/css/_error.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Error page styling 3 | // ---------------------------------------------- 4 | #error-page { 5 | padding-top: $navbar-height + $navbar-padding-vertical + $padding-large-vertical; 6 | 7 | .jumbotron { 8 | position: relative; 9 | padding-bottom: 140px; 10 | 11 | &:after { 12 | content: ""; 13 | background: url(../img/swagger-logo.png) no-repeat center bottom; 14 | background-size: 250px; 15 | display: block; 16 | height: 360px; 17 | width: 100%; 18 | position: absolute; 19 | bottom: -125px; 20 | left: 0; 21 | } 22 | 23 | @media screen and (min-width: $screen-sm-min) and (max-width: $screen-sm-max) { 24 | padding-bottom: 180px; 25 | 26 | &:after { 27 | background-size: 300px; 28 | bottom: -150px; 29 | } 30 | } 31 | 32 | @media screen and (min-width: $screen-md-min) { 33 | padding-bottom: 220px; 34 | 35 | &:after { 36 | background-size: 360px; 37 | bottom: -180px; 38 | } 39 | } 40 | } 41 | } 42 | 43 | -------------------------------------------------------------------------------- /static/error.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | Swagger-Suite {{ statusCode }} Error 12 | 13 | 14 | 19 | 20 |
21 |
22 |

{{ statusCode }} Error

23 | 24 |

25 | {{ errorMessage }} 26 |

27 |
28 |
29 | 30 | 31 | -------------------------------------------------------------------------------- /static/docs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | Swagger-Suite 16 | 17 | 18 |
19 | 20 |
21 | 22 | 23 | -------------------------------------------------------------------------------- /static/editor/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | Swagger-Suite 16 | 17 | 18 |
19 | 20 |
21 | 22 | 23 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 James Messinger 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. -------------------------------------------------------------------------------- /lib/swagger-ui.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | 'use strict'; 3 | 4 | var debug = require('./debug'); 5 | var express = require('express'); 6 | var path = require('path'); 7 | var util = require('swagger-server/lib/helpers/util'); 8 | 9 | 10 | /** 11 | * Serves Swagger-UI files. 12 | * 13 | * @param {SwaggerServer} server 14 | * @param {settings} settings 15 | */ 16 | module.exports = function swaggerUI(server, settings) { 17 | var router = express.Router(); 18 | var staticFiles = path.join(__dirname, '../static'); 19 | 20 | 21 | if (settings.swaggerUI.enabled) { 22 | // Serve "/static/ui" content 23 | router.use(settings.swaggerUI.route, express.static(staticFiles + '/ui')); 24 | 25 | // Serve the Swagger spec as JSON 26 | router.get(settings.swaggerUI.route + '/api-docs', function getSwaggerJSON(req, res, next) { 27 | debug('Sending the JSON Swagger spec'); 28 | res.json(server.swaggerObject); 29 | }); 30 | 31 | // When the server starts, display the path to Swagger-UI 32 | server.once(server.events.start, function() { 33 | if (server.metadata.url) { 34 | debug('Swagger-UI is now running at %s%s', util.normalizePath(server.metadata.url.href), settings.swaggerUI.route); 35 | } 36 | }); 37 | } 38 | 39 | 40 | return router; 41 | }; 42 | 43 | })(); 44 | -------------------------------------------------------------------------------- /static/ui/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | Swagger-Suite 16 | 17 | 18 |
19 | 20 | 21 | 26 |
27 | 28 | 29 | -------------------------------------------------------------------------------- /samples/user-manager/user.yaml: -------------------------------------------------------------------------------- 1 | # This is not a complete Swagger spec. It's just a JSON Schema (in YAML format) 2 | # that's referenced by the "users.yaml" spec using "$ref: http://localhost:3000/users.json" 3 | # 4 | # Note that Swagger-Server will automatically convert the YAML to JSON when serving 5 | # the file. If you prefer to author the file in JSON instead of YAML, then that's ok too. 6 | 7 | description: a registered user 8 | required: [username, password, name] 9 | properties: 10 | username: 11 | type: string 12 | minLength: 4 13 | maxLength: 20 14 | pattern: "^\\w+$" # only allows alphanumeric characters 15 | description: username must be unique 16 | password: 17 | type: string 18 | minLength: 4 19 | description: a super-secure, four-character password :) 20 | name: 21 | type: object 22 | description: the user's real name 23 | required: [firstName] 24 | properties: 25 | firstName: 26 | type: string 27 | minLength: 1 28 | lastName: 29 | type: string 30 | email: 31 | type: string 32 | telephone: 33 | type: integer 34 | minimum: 1000000000 35 | lastLoginDate: 36 | type: string 37 | format: date-time 38 | description: when the user last logged in (set by the server) 39 | readOnly: true 40 | example: 41 | username: jdoe 42 | name: 43 | firstName: John 44 | lastName: Doe 45 | email: john.doe@abc.com 46 | telephone: 5551234567 47 | lastLoginDate: 2015-05-11T14-00-32Z 48 | -------------------------------------------------------------------------------- /LICENSES.md: -------------------------------------------------------------------------------- 1 | Open Source Software License Info 2 | ================================== 3 | 4 | Swagger-Suite 5 | ------------------- 6 | Swagger-Suite is 100% free and open-source software, licensed under the [MIT license](LICENSE). You can use this software however you like and modify it as much as you want. You are __not__ obliged to contribute any improvements or bug fixes back to the project, but it would be both courteous and greatly appreciated. 7 | 8 | 9 | Third-Party Software 10 | ------------------- 11 | Swgger-Suite uses many other open-source projects, almost all of which are also MIT licensed. However, the following are exceptions: 12 | 13 | * [Swagger-UI](https://github.com/wordnik/swagger-ui) - [Apache 2.0](https://github.com/wordnik/swagger-ui/blob/master/LICENSE) 14 | 15 | * [Swagger-Editor](https://github.com/wordnik/swagger-editor) - [Apache 2.0](https://github.com/wordnik/swagger-editor/blob/master/LICENSE) 16 | 17 | * [Node.js](http://nodejs.org/) - [Joyent License](https://raw.githubusercontent.com/joyent/node/v0.10.32/LICENSE) 18 | 19 | 20 | Special Thanks 21 | ------------------- 22 | I would like to especially thank the dev team at [Reverb](https://helloreverb.com/), who developed [Swagger](https://github.com/wordnik/swagger-spec) and [Swagger-UI](https://github.com/wordnik/swagger-ui), as well as the dev team at [Apigee](http://apigee.com/about/), who developed the excellent [Swagger-Editor](https://github.com/wordnik/swagger-editor) and contributed it to the open-source community. 23 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "swagger-suite", 3 | "version": "1.0.0", 4 | "description": "No longer maintained. Please use https://github.com/swagger-api/swagger-node", 5 | "keywords": [ 6 | "rest", 7 | "json", 8 | "yaml", 9 | "api", 10 | "spec", 11 | "specification", 12 | "contract", 13 | "schema", 14 | "editor", 15 | "mock", 16 | "fake", 17 | "test", 18 | "docs", 19 | "documentation", 20 | "server", 21 | "express", 22 | "connect", 23 | "swagger", 24 | "postman" 25 | ], 26 | "author": { 27 | "name": "James Messinger", 28 | "url": "http://jamesmessinger.com" 29 | }, 30 | "license": "MIT", 31 | "homepage": "https://github.com/BigstickCarpet/swagger-suite", 32 | "main": "index.js", 33 | "scripts": { 34 | "start": "node ./samples/user-manager/server.js", 35 | "petstore": "DEBUG=swagger:* node ./samples/petstore/server.js", 36 | "petstore-windows": "set DEBUG=swagger:* && node ./samples/petstore/server.js", 37 | "users": "DEBUG=swagger:* node ./samples/user-manager/server.js", 38 | "users-windows": "set DEBUG=swagger:* && node ./samples/user-manager/server.js" 39 | }, 40 | "repository": { 41 | "type": "git", 42 | "url": "https://github.com/BigstickCarpet/swagger-suite.git" 43 | }, 44 | "dependencies": { 45 | "body-parser": "^1.9.0", 46 | "debug": "~2.0.0", 47 | "express": "~4.9.0", 48 | "lodash": "^2.4.1", 49 | "morgan": "~1.3.0", 50 | "serve-favicon": "^2.1.5", 51 | "js-yaml": "^3.2.2", 52 | "swagger-server": "0.x" 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /samples/petstore/server.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | var path = require('path'); 4 | var swaggerSuite = require('../../../swagger-suite'); // you can just use require('swagger-suite') in your apps 5 | 6 | // 7 | // Load the Swagger file 8 | // ---------------------------------------- 9 | var server = swaggerSuite(path.join(__dirname, 'petstore.yaml')); 10 | 11 | 12 | // 13 | // Add custom middleware logic 14 | // ---------------------------------------- 15 | 16 | // Don't allow duplicate pet names 17 | server.post('/pets', function(req, res, next) { 18 | var newPetName = req.swagger.params.body.name; 19 | var existingPets = server.mockDataStore.fetchCollection('/pets'); 20 | 21 | // If any of the existing pet names match the new name, then return a 409 (conflict) error 22 | for (var i = 0; i < existingPets.length; i++) { 23 | var pet = existingPets[i]; 24 | 25 | if (newPetName.toLowerCase() === pet.name.toLowerCase()) { 26 | var err = new Error('A pet with that name already exists'); 27 | err.status = 409; 28 | throw err; 29 | } 30 | } 31 | 32 | // If we get here, then there are no conflicts with existing names, 33 | // so proceed to the next middleware. 34 | next(); 35 | }); 36 | 37 | 38 | // This an Express error-handler middleware (notice the extra "err" parameter). 39 | // It will only be called if an error occurs. See http://expressjs.com/guide/error-handling.html 40 | server.use(function(err, req, res, next) { 41 | // Return all errors as a custom "errorModel" object 42 | var errorModel = { 43 | code: err.status || 500, 44 | message: err.message || 'Unknown Error' 45 | }; 46 | 47 | res.status(errorModel.code).json(errorModel); 48 | }); 49 | 50 | 51 | // 52 | // Start listening for requests 53 | // ---------------------------------------- 54 | server.start(); 55 | 56 | -------------------------------------------------------------------------------- /samples/user-manager/authorization.js: -------------------------------------------------------------------------------- 1 | /** 2 | * This file contains middleware that determines whether users 3 | * are authorized to perform certain operations. 4 | */ 5 | module.exports = function(server) { 6 | 7 | /** 8 | * Refuses access to everyone except the "admin" user 9 | */ 10 | function adminOnly(req, res, next) { 11 | if (req.user.username === 'admin') { 12 | // you're an admin, so you may proceed 13 | next(); 14 | } 15 | else { 16 | // you're NOT an admin, so denied 17 | res.status(401).send('Only admins can access this'); 18 | } 19 | } 20 | 21 | 22 | /** 23 | * Allows users to perform operations on their own account, but not other people's accounts. 24 | * Except for the Admin user, who is allowed to do anything to any account. 25 | */ 26 | function yourselfOnly(req, res, next) { 27 | var userBeingEdited = req.swagger.params.username; 28 | 29 | if (req.user.username === userBeingEdited || req.user.username === 'admin') { 30 | // You're editing yourself. Or you're an admin. Either way, you may proceed. 31 | next(); 32 | } 33 | else { 34 | // Nope. You can't edit other people. 35 | res.status(401).send('You can only do this for your own account.'); 36 | } 37 | } 38 | 39 | 40 | // Only admins are allowed to get the full list of users 41 | server.get('/users', adminOnly); 42 | 43 | // Only admins can create new users 44 | server.post('/users', adminOnly); 45 | 46 | // Users can only retrieve their own account 47 | server.get('/users/{username}', yourselfOnly); 48 | 49 | // Users can only edit their own account 50 | server.post('/users/{username}', yourselfOnly); 51 | 52 | // Users can only delete their own account 53 | server.delete('/users/{username}', yourselfOnly); 54 | 55 | // Users can only log themselves out 56 | server.post('/users/{username}/logout', yourselfOnly); 57 | 58 | }; 59 | -------------------------------------------------------------------------------- /static/css/style.min.css.map: -------------------------------------------------------------------------------- 1 | { 2 | "version": "3", 3 | "mappings": "AAIA,mBAAoB,CAClB,MAAM,CAAE,IAAI,CACZ,KAAK,CAAE,IAAI,CACX,QAAQ,CAAE,MAAM,CAGlB,IAAK,CACH,WAAW,CC8UsB,IAAK,CD3UxC,WAAc,CACZ,MAAM,CAAE,IAAI,CACZ,KAAK,CAAE,IAAI,CACX,MAAM,CAAE,IAAI,CAGd,CAAE,CACA,MAAM,CAAE,OAAO,CEhBjB,4BAOC,CANC,IAAK,CACH,SAAS,CAAE,cAAc,CAE3B,EAAG,CACD,SAAS,CAAE,aAAa,EAG5B,oBAOC,CANC,IAAK,CACH,SAAS,CAAE,cAAc,CAE3B,EAAG,CACD,SAAS,CAAE,aAAa,ECd5B,eAAgB,CACd,MAAM,CAAE,CAAC,CAGP,0CAAa,CACX,SAAS,CAAE,MAAqB,CAChC,UAAU,CAAE,MAAM,CAElB,iDAAS,CACP,OAAO,CAAE,GAAG,CAKlB,mDAAoC,CAClC,YAAY,CF+EY,IAAK,CE9E7B,MAAM,CFqUyB,IAAK,CEpUpC,WAAW,CAAE,GAA0C,CAGzD,oCAAqB,CACnB,OAAO,CAAE,YAAY,CACrB,QAAQ,CAAE,QAAQ,CAClB,MAAM,CCvBS,IAAI,CDwBnB,KAAK,CCxBU,IAAI,CDyBnB,MAAM,CAAE,KAAK,CAEb,sFAAkB,CAChB,OAAO,CAAE,EAAE,CACX,UAAU,CAAE,kBAAkB,CAC9B,aAAa,CAAE,GAAG,CAClB,OAAO,CAAE,YAAY,CACrB,QAAQ,CAAE,QAAQ,CAClB,GAAG,CAAE,CAAC,CACN,IAAI,CAAE,CAAC,CACP,MAAM,CAAE,IAAI,CACZ,KAAK,CAAE,IAAI,CACX,OAAO,CAAE,CAAC,CAGZ,0CAAQ,CACN,mBAAmB,CAAE,OAA8B,CACnD,OAAO,CAAE,CAAC,CACV,OAAO,CAAE,CAAC,CACV,kBAAkB,CAAE,YAAY,CAChC,UAAU,CAAE,YAAY,CAIxB,gDAAQ,CACN,OAAO,CAAE,CAAC,CAId,iDAAe,CACb,iBAAiB,CAAE,4CAA4C,CAC/D,SAAS,CAAE,4CAA4C,CAEvD,gHAAkB,CAChB,gBAAgB,CAAE,4BAA4B,CAGhD,uDAAQ,CACN,UAAU,CAAE,cAAc,CAG5B,wDAAS,CAIP,OAAO,CAAE,uBAAuB,CAChC,UAAU,CAAE,iBAAiB,CAK/B,oHAAkB,CAChB,gBAAgB,CAAE,6BAA6B,CAGjD,yDAAQ,CACN,UAAU,CAAE,eAAe,CAK7B,4GAAkB,CAChB,gBAAgB,CAAE,8BAA8B,CAGlD,qDAAQ,CACN,UAAU,CAAE,gBAAqC,CAKnD,sGAAkB,CAChB,gBAAgB,CAAE,8BAA8B,CAGlD,kDAAQ,CACN,UAAU,CAAE,eAAe,CAK7B,oGAAkB,CAChB,gBAAgB,CAAE,6BAA6B,CAGjD,iDAAQ,CACN,UAAU,CAAE,gBAA8B,CEhHlD,WAAY,CACV,WAAW,CAAE,IAAmE,CAEhF,sBAAW,CACT,QAAQ,CAAE,QAAQ,CAClB,cAAc,CAAE,KAAK,CAErB,4BAAQ,CACN,OAAO,CAAE,EAAE,CACX,UAAU,CAAE,oDAAoD,CAChE,eAAe,CAAE,KAAK,CACtB,OAAO,CAAE,KAAK,CACd,MAAM,CAAE,KAAK,CACb,KAAK,CAAE,IAAI,CACX,QAAQ,CAAE,QAAQ,CAClB,MAAM,CAAE,MAAM,CACd,IAAI,CAAE,CAAC,CAGT,2DAA8E,CAhBhF,sBAAW,CAiBP,cAAc,CAAE,KAAK,CAErB,4BAAQ,CACN,eAAe,CAAE,KAAK,CACtB,MAAM,CAAE,MAAM,EAIlB,oCAA8C,CAzBhD,sBAAW,CA0BP,cAAc,CAAE,KAAK,CAErB,4BAAQ,CACN,eAAe,CAAE,KAAK,CACtB,MAAM,CAAE,MAAM", 4 | "sources": ["_scaffolding.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/_variables.scss","_animations.scss","_navbar.scss","_variables.scss","_error.scss"], 5 | "file": "style.min.css" 6 | } -------------------------------------------------------------------------------- /samples/user-manager/server.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | var path = require('path'); 4 | var swaggerSuite = require('../../../swagger-suite'); // you can just use require('swagger-suite') in your apps 5 | var mockUserData = require('./mock-user-data'); 6 | var authenticationMiddleware = require('./authentication'); 7 | var authorizationMiddleware = require('./authorization'); 8 | 9 | 10 | // 11 | // Load the Swagger file 12 | // ---------------------------------------- 13 | var server = swaggerSuite(path.join(__dirname, 'users.yaml')); 14 | 15 | 16 | // 17 | // Create some initial mock data 18 | // ---------------------------------------- 19 | for (var i = 0; i < mockUserData.length; i++) { 20 | var user = mockUserData[i]; 21 | server.mockDataStore.createResource('/users/' + user.username, user); 22 | } 23 | 24 | 25 | // 26 | // Add custom middleware logic 27 | // ---------------------------------------- 28 | 29 | // Add middleware from other files 30 | authenticationMiddleware(server); 31 | authorizationMiddleware(server); 32 | 33 | 34 | // Don't allow creation of duplicate usernames 35 | server.post('/users', function duplicateNameCheck(req, res, next) { 36 | var newUsername = req.swagger.params.body.username.toLowerCase(); 37 | var existingUsers = server.mockDataStore.fetchCollection('/users'); 38 | 39 | for (var i = 0; i < existingUsers.length; i++) { 40 | var user = existingUsers[i]; 41 | 42 | if (user.username.toLowerCase() === newUsername) { 43 | return res.status(409).send('That username is already taken'); 44 | } 45 | } 46 | 47 | // If we get here, then there is no username conflict, 48 | // so it's safe to proceed with saving the new user 49 | next(); 50 | }); 51 | 52 | 53 | // Don't allow people to change their usernames 54 | server.post('/users/{username}', function protectUsername(req, res, next) { 55 | var existingUsername = req.swagger.params.username; 56 | var newUser = req.swagger.params.body; 57 | 58 | // Make sure the username stays the same 59 | newUser.username = existingUsername; 60 | 61 | // Continue saving the user 62 | next(); 63 | }); 64 | 65 | 66 | 67 | // 68 | // Start listening for requests 69 | // ---------------------------------------- 70 | server.start(); 71 | 72 | -------------------------------------------------------------------------------- /samples/user-manager/authentication.js: -------------------------------------------------------------------------------- 1 | /** 2 | * This file contains middleware to handle user authentication, 3 | * including logging in, logging out, and setting and reading the session cookie. 4 | */ 5 | module.exports = function(server) { 6 | 7 | /** 8 | * Authenticates the user via the session cookie on the request. 9 | * If authentication succeeds, then the user's info is stored at `req.user` 10 | * so it can be used by subsequent middleware. 11 | */ 12 | server.all(function authenticateUser(req, res, next) { 13 | // Get the session ID from the session cookie 14 | var sessionId = req.cookies['demo-session-id']; 15 | req.user = {}; 16 | 17 | if (sessionId) { 18 | // Find the user account for this session ID 19 | var results = server.mockDataStore.fetchCollection('/users', { sessionId: sessionId }); 20 | 21 | if (results.length === 1) { 22 | // Found 'em! Add the user object to the request, so other middleware can use it 23 | req.user = results[0]; 24 | console.log('User: %s', req.user.username); 25 | } 26 | } 27 | 28 | next(); 29 | }); 30 | 31 | 32 | /** 33 | * Handles log-in requests. If login succeeds, then a session cookie is created. 34 | */ 35 | server.post('/users/login', function login(req, res, next) { 36 | var username = req.swagger.params.body.username; 37 | var password = req.swagger.params.body.password; 38 | 39 | var user = server.mockDataStore.fetchResource('/users/' + username); 40 | if (!user || user.password !== password) { 41 | // Login failed 42 | res.status(401).send('Invalid username or password'); 43 | } 44 | else { 45 | // Login succeeded, so update the user's lastLoginDate 46 | user.lastLoginDate = new Date(); 47 | 48 | // Set a session cookie that expires waaaaaay in the future 49 | user.sessionId = 'random_' + Math.random(); 50 | res.set('Set-Cookie', 'demo-session-id=' + user.sessionId + '; Expires=Sat, 31-Dec-2050 00:00:00 GMT; Path=/'); 51 | 52 | // Save the user's data 53 | server.mockDataStore.overwriteResource('/users/' + username, user); 54 | 55 | // Return the user 56 | res.json(user); 57 | } 58 | }); 59 | 60 | 61 | // NOTE: No need to implement logout functionality, since all that entails is deleting the session cookie. 62 | // There's already a "Set-Cookie" header defined in the Swagger file for the "POST /users/logout" operation. 63 | // Swagger-Server will automatically apply that cookie using the default value in the Swagger file. 64 | // Because the default value includes a cookie expiration date that's in the past, the cookie is automatically deleted. 65 | 66 | }; 67 | -------------------------------------------------------------------------------- /lib/swagger-suite.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | 'use strict'; 3 | 4 | var debug = require('./debug'); 5 | var express = require('express'); 6 | var path = require('path'); 7 | var favicon = require('serve-favicon'); 8 | var _ = require('lodash'); 9 | var util = require('swagger-server/lib/helpers/util'); 10 | 11 | 12 | /** 13 | * Serves Swagger-Suite's own UI. 14 | * 15 | * @param {SwaggerServer} server 16 | * @param {settings} settings 17 | */ 18 | module.exports = function fileServer(server, settings) { 19 | var router = express.Router(); 20 | var staticFiles = path.join(__dirname, '../static'); 21 | 22 | 23 | // Favicon 24 | router.use(favicon(staticFiles + '/favicon.ico')); 25 | 26 | 27 | // Metadata.json (used by Swagger-Suite's UI) 28 | router.get('/static/metadata.json', function getSwaggerServerJSON(req, res, next) { 29 | if (!http304(req, res, server.metadata.specDate)) { 30 | debug('Sending the Swagger-Suite metadata (if you\'re seeing a bunch of this message, then your browser isn\'t caching the responses)'); 31 | 32 | var metadata = _.clone(server.metadata); 33 | metadata.settings = settings; 34 | metadata.info = server.swaggerObject ? server.swaggerObject.info : {}; 35 | 36 | // The Error object doesn't serialize well to JSON, so convert it to a POJO 37 | if (metadata.error) { 38 | metadata.error = { 39 | type: metadata.error.constructor.name, 40 | status: metadata.error.status, 41 | message: util.isDevelopmentEnvironment() ? metadata.error.stack : metadata.error.message 42 | }; 43 | } 44 | 45 | res.json(metadata); 46 | } 47 | }); 48 | 49 | 50 | // Serve "/static" content 51 | router.use('/static', express.static(staticFiles)); 52 | 53 | 54 | return router; 55 | }; 56 | 57 | 58 | function http304(req, res, lastModifiedDate) { 59 | // Set cache headers, so we can possibly return a 304 next time 60 | res.set('Cache-Control', 'public, max-age=0'); 61 | res.set('Last-Modified', util.rfc7231(lastModifiedDate)); 62 | res.set('ETag', 'W/"' + lastModifiedDate.getTime() + '"'); 63 | 64 | // If the "If-Modified-Since" header is specified, then we can possibly just return a 304 65 | var ifModified = new Date(req.get('If-Modified-Since')); 66 | if (!isNaN(ifModified.getTime())) { 67 | // Convert the Last-Modified date to RFC 7231 and back, so we're comparing apples-to-apples 68 | lastModifiedDate = new Date(util.rfc7231(lastModifiedDate)); 69 | 70 | if (ifModified >= lastModifiedDate) { 71 | res.status(304); 72 | res.end(); 73 | return true; 74 | } 75 | } 76 | 77 | // False = we did NOT send an HTTP 304 78 | return false; 79 | } 80 | 81 | })(); 82 | -------------------------------------------------------------------------------- /static/js/swagger-suite.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | 'use strict'; 3 | 4 | var metadata; 5 | 6 | 7 | $(function() { 8 | // Load the page header template 9 | $.get('/static/_header.html') 10 | .done(function(html) { 11 | // Display the page header 12 | $('body').prepend(html); 13 | 14 | // Get the metadata immediate, and every couple seconds 15 | getMetadata(); 16 | setInterval(getMetadata, 2000); 17 | 18 | // Enable Bootstrap tooltips 19 | $('.navbar-hover-effect').tooltip({ container: 'body' }); 20 | }) 21 | .fail(handleError); 22 | }); 23 | 24 | 25 | // Gets the latest Swagger-Suite metadata and updates the UI 26 | function getMetadata() { 27 | $.get('/static/metadata.json') 28 | .done(function(newMetadata) { 29 | // Determine if the metadata has changed 30 | newMetadata.specDate = new Date(newMetadata.specDate); 31 | 32 | if (!metadata || metadata.specDate < newMetadata.specDate) { 33 | // The metadata has changed 34 | metadata = newMetadata; 35 | processMetadata(); 36 | } 37 | }) 38 | .fail(handleError); 39 | } 40 | 41 | 42 | // Updates the UI with the latest metadata 43 | function processMetadata() { 44 | $('.api-title').text(metadata.info.title); 45 | $('.api-version').text(metadata.info.version); 46 | 47 | if (metadata.settings.docs.enabled) { 48 | $('.navbar-brand').attr('href', metadata.settings.docs.route); 49 | } 50 | 51 | if (metadata.settings.editor.enabled) { 52 | $('#swagger-editor').removeClass('hidden').attr('href', metadata.settings.editor.route); 53 | } 54 | 55 | if (metadata.settings.swaggerUI.enabled) { 56 | $('#swagger-ui').removeClass('hidden').attr('href', metadata.settings.swaggerUI.route); 57 | } 58 | 59 | handleError(metadata.error); 60 | } 61 | 62 | 63 | // Displays an error alert if possible; otherwise throws 64 | function handleError(error, status, message) { 65 | var $errorIndicator = $('#server-error'); 66 | var $errorModal = $('#error-modal'); 67 | 68 | if (!error) { 69 | $errorIndicator.addClass('hidden'); 70 | $errorModal.modal('hide'); 71 | } 72 | else { 73 | error = error || {}; 74 | error.status = error.status || status || ''; 75 | error.type = error.type || 'Error'; 76 | error.message = error.message || message || 'Unknown Error'; 77 | 78 | if ($errorIndicator.length === 0) { 79 | // there's nowhere to display the error, so throw it 80 | throw error; 81 | } 82 | 83 | $errorIndicator.removeClass('hidden'); 84 | $errorModal.find('.modal-title').text(error.status + ' ' + error.type); 85 | $errorModal.find('.modal-body').html(error.message.replace(/\n/g, '
')); 86 | } 87 | } 88 | 89 | 90 | // Display the current error in a modal 91 | function showError() { 92 | 93 | } 94 | 95 | 96 | })(); 97 | -------------------------------------------------------------------------------- /lib/errors.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | 'use strict'; 3 | 4 | var path = require('path'); 5 | var util = require('swagger-server/lib/helpers/util'); 6 | 7 | 8 | /** 9 | * Error handlers 10 | * 11 | * @param {SwaggerServer} server 12 | * @param {settings} settings 13 | */ 14 | module.exports = function errors(server, settings) { 15 | // Adds the error to Swagger-Suite's metadata, so it can be reported to the client 16 | function metadataError(err, req, res, next) { 17 | try { 18 | // We only want to report server-side errors 19 | if (err instanceof SyntaxError || err.status >= 500) { 20 | if (!server.metadata.error) { 21 | server.metadata.error = err; 22 | server.metadata.specDate = new Date(); 23 | } 24 | } 25 | } 26 | catch (e) { 27 | // Ignore any errors that happen inside this error handler 28 | } 29 | finally { 30 | next(err); 31 | } 32 | } 33 | 34 | // Attempts to return an HTML error page, if possible 35 | function htmlError(err, req, res, next) { 36 | // Set the response status code 37 | var statusCode = err.status || 500; 38 | res.status(statusCode); 39 | 40 | // Get the error message 41 | var errorMessage; 42 | if (statusCode >= 500 && util.isDevelopmentEnvironment()) 43 | errorMessage = err.stack; 44 | else 45 | errorMessage = err.message; 46 | errorMessage = errorMessage || 'Internal Server Error'; 47 | 48 | try { 49 | // Determine the format to send the error back in 50 | var accept = req.get('Accept'); 51 | var acceptsHTML = false; 52 | if (accept) { 53 | acceptsHTML = accept.indexOf('text/html') >= 0 54 | || accept.indexOf('*/*') >= 0 55 | || accept.indexOf('* / *') >= 0; 56 | } 57 | 58 | // If the request came from Swagger-Editor, then DON'T return HTML. It messes up the UI. 59 | if (req.headers.referer && req.headers.referer.indexOf('/swagger-suite-editor/') >= 0) { 60 | acceptsHTML = false; 61 | } 62 | 63 | if (acceptsHTML) { 64 | // Super simple mustache-like template 65 | var html = util.openFile(path.join(__dirname, '../static/error.html')); 66 | html = html.replace(/\{\{ statusCode \}\}/g, statusCode.toString()); 67 | html = html.replace(/\{\{ errorMessage \}\}/g, errorMessage.replace(/\n/g, '
')); 68 | res.type('html'); 69 | res.send(html); 70 | } 71 | else { 72 | // HTML isn't allowed, so let the next error handler take over 73 | next(err); 74 | } 75 | } 76 | catch (e) { 77 | // Something went wrong while trying to send as HTML, 78 | // so just let the next error handler take over 79 | next(err); 80 | } 81 | } 82 | 83 | return [metadataError, htmlError]; 84 | }; 85 | 86 | })(); 87 | 88 | -------------------------------------------------------------------------------- /static/css/style.min.css: -------------------------------------------------------------------------------- 1 | html,head,body,main{height:100%;width:100%;overflow:hidden}body{padding-top:50px}main>iframe{height:100%;width:100%;border:none}a{cursor:pointer}@-webkit-keyframes attention{from{transform:rotate(-45deg)}to{transform:rotate(45deg)}}@keyframes attention{from{transform:rotate(-45deg)}to{transform:rotate(45deg)}}.navbar-inverse{margin:0}.navbar-inverse .navbar-brand .api-version{font-size:10.8px;font-style:italic}.navbar-inverse .navbar-brand .api-version:before{content:'v'}.navbar-inverse .navbar-nav.navbar-right:last-child{margin-right:16px;height:50px;padding-top:9px}.navbar-inverse .navbar-hover-effect{display:inline-block;position:relative;height:32px;width:32px;margin:0 4px}.navbar-inverse .navbar-hover-effect:before,.navbar-inverse .navbar-hover-effect:after{content:'';background:no-repeat left top;border-radius:50%;display:inline-block;position:absolute;top:0;left:0;height:100%;width:100%;z-index:1}.navbar-inverse .navbar-hover-effect:after{background-position:0 -33px;z-index:2;opacity:0;-webkit-transition:opacity .75s;transition:opacity .75s}.navbar-inverse .navbar-hover-effect:hover:after{opacity:1}.navbar-inverse .navbar-hover-effect#server-error{-webkit-animation:attention .5s ease-in-out infinite alternate;animation:attention .5s ease-in-out infinite alternate}.navbar-inverse .navbar-hover-effect#server-error:before,.navbar-inverse .navbar-hover-effect#server-error:after{background-image:url(../img/error-sprite.png)}.navbar-inverse .navbar-hover-effect#server-error:after{box-shadow:0 0 20px black}.navbar-inverse .navbar-hover-effect#server-error.hidden{display:inline-block !important;visibility:hidden !important}.navbar-inverse .navbar-hover-effect#swagger-editor:before,.navbar-inverse .navbar-hover-effect#swagger-editor:after{background-image:url(../img/editor-sprite.png)}.navbar-inverse .navbar-hover-effect#swagger-editor:after{box-shadow:0 0 20px yellow}.navbar-inverse .navbar-hover-effect#swagger-ui:before,.navbar-inverse .navbar-hover-effect#swagger-ui:after{background-image:url(../img/swagger-sprite.png)}.navbar-inverse .navbar-hover-effect#swagger-ui:after{box-shadow:0 0 20px #a5da3a}.navbar-inverse .navbar-hover-effect#postman:before,.navbar-inverse .navbar-hover-effect#postman:after{background-image:url(../img/postman-sprite.png)}.navbar-inverse .navbar-hover-effect#postman:after{box-shadow:0 0 20px orange}.navbar-inverse .navbar-hover-effect#github:before,.navbar-inverse .navbar-hover-effect#github:after{background-image:url(../img/github-sprite.png)}.navbar-inverse .navbar-hover-effect#github:after{box-shadow:0 0 20px #a2c2e2}#error-page{padding-top:75px}#error-page .jumbotron{position:relative;padding-bottom:140px}#error-page .jumbotron:after{content:"";background:url(../img/swagger-logo.png) no-repeat center bottom;background-size:250px;display:block;height:360px;width:100%;position:absolute;bottom:-125px;left:0}@media screen and (min-width: 768px) and (max-width: 991px){#error-page .jumbotron{padding-bottom:180px}#error-page .jumbotron:after{background-size:300px;bottom:-150px}}@media screen and (min-width: 992px){#error-page .jumbotron{padding-bottom:220px}#error-page .jumbotron:after{background-size:360px;bottom:-180px}} 2 | /*@ sourceMappingURL=style.min.css.map */ -------------------------------------------------------------------------------- /static/css/_navbar.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Header bar at the top of every page 3 | // ---------------------------------------------- 4 | 5 | .navbar-inverse { 6 | margin: 0; 7 | 8 | .navbar-brand { 9 | .api-version { 10 | font-size: $font-size-small * .9; 11 | font-style: italic; 12 | 13 | &:before { 14 | content: 'v'; 15 | } 16 | } 17 | } 18 | 19 | .navbar-nav.navbar-right:last-child { 20 | margin-right: $padding-large-horizontal; 21 | height: $navbar-height; 22 | padding-top: (($navbar-height - $navbar-icon-size) / 2); 23 | } 24 | 25 | .navbar-hover-effect { 26 | display: inline-block; 27 | position: relative; 28 | height: $navbar-icon-size; 29 | width: $navbar-icon-size; 30 | margin: 0 4px; 31 | 32 | &:before, &:after { 33 | content: ''; 34 | background: no-repeat left top; 35 | border-radius: 50%; 36 | display: inline-block; 37 | position: absolute; 38 | top: 0; 39 | left: 0; 40 | height: 100%; 41 | width: 100%; 42 | z-index: 1; 43 | } 44 | 45 | &:after { 46 | background-position: 0 (-($navbar-icon-size + 1px)); 47 | z-index: 2; 48 | opacity: 0; 49 | -webkit-transition: opacity .75s; 50 | transition: opacity .75s; 51 | } 52 | 53 | &:hover { 54 | &:after { 55 | opacity: 1; 56 | } 57 | } 58 | 59 | &#server-error { 60 | -webkit-animation: attention .5s ease-in-out infinite alternate; 61 | animation: attention .5s ease-in-out infinite alternate; 62 | 63 | &:before, &:after { 64 | background-image: url(../img/error-sprite.png); 65 | } 66 | 67 | &:after { 68 | box-shadow: 0 0 20px black; 69 | } 70 | 71 | &.hidden { 72 | // Don't set "display: none" for the error icon, because then the browser doesn't download the image 73 | // until the icon is shown. But if the error is a lost server connection, then the icon can't be downloaded. 74 | // Setting "visibility: hidden" still causes the browser to download the file immediately. 75 | display: inline-block !important; 76 | visibility: hidden !important; 77 | } 78 | } 79 | 80 | &#swagger-editor { 81 | &:before, &:after { 82 | background-image: url(../img/editor-sprite.png); 83 | } 84 | 85 | &:after { 86 | box-shadow: 0 0 20px yellow; 87 | } 88 | } 89 | 90 | &#swagger-ui { 91 | &:before, &:after { 92 | background-image: url(../img/swagger-sprite.png); 93 | } 94 | 95 | &:after { 96 | box-shadow: 0 0 20px lighten($swagger-green, 10%); 97 | } 98 | } 99 | 100 | &#postman { 101 | &:before, &:after { 102 | background-image: url(../img/postman-sprite.png); 103 | } 104 | 105 | &:after { 106 | box-shadow: 0 0 20px orange; 107 | } 108 | } 109 | 110 | &#github { 111 | &:before, &:after { 112 | background-image: url(../img/github-sprite.png); 113 | } 114 | 115 | &:after { 116 | box-shadow: 0 0 20px lighten(#4183c4, 25%); 117 | } 118 | } 119 | } 120 | } 121 | 122 | -------------------------------------------------------------------------------- /static/_header.html: -------------------------------------------------------------------------------- 1 | 34 | 35 | 56 | 57 | 82 | -------------------------------------------------------------------------------- /samples/petstore/petstore.yaml: -------------------------------------------------------------------------------- 1 | swagger: "2.0" 2 | info: 3 | version: 1.0.0 4 | title: Swagger Petstore 5 | description: A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification 6 | termsOfService: http://helloreverb.com/terms/ 7 | contact: 8 | name: Wordnik API Team 9 | email: foo@example.com 10 | url: http://madskristensen.net 11 | license: 12 | name: MIT 13 | url: http://github.com/gruntjs/grunt/blob/master/LICENSE-MIT 14 | 15 | host: localhost:3000 16 | basePath: /api 17 | schemes: 18 | - http 19 | consumes: 20 | - application/json 21 | produces: 22 | - application/json 23 | 24 | paths: 25 | /pets: 26 | get: 27 | description: Returns all pets from the system that the user has access to 28 | operationId: findPets 29 | produces: 30 | - application/json 31 | - application/xml 32 | - text/xml 33 | - text/html 34 | parameters: 35 | - name: tags 36 | in: query 37 | description: tags to filter by 38 | required: false 39 | type: array 40 | items: 41 | type: string 42 | collectionFormat: csv 43 | - name: type 44 | in: query 45 | description: type of pet to filter by (dog, cat, or bird) 46 | required: false 47 | type: string 48 | - name: age 49 | in: query 50 | description: age of pet to filter by 51 | required: false 52 | type: integer 53 | responses: 54 | 200: 55 | description: pet response 56 | schema: 57 | type: array 58 | items: 59 | $ref: '#/definitions/pet' 60 | default: 61 | description: unexpected error 62 | schema: 63 | $ref: '#/definitions/errorModel' 64 | 65 | post: 66 | description: Creates a new pet in the store. 67 | operationId: addPet 68 | produces: 69 | - application/json 70 | parameters: 71 | - name: body 72 | in: body 73 | description: Pet to add to the store 74 | required: true 75 | schema: 76 | $ref: '#/definitions/pet' 77 | responses: 78 | 200: 79 | description: pet response 80 | headers: 81 | Location: 82 | type: string 83 | description: Swagger-Server will automatically set this header appropriately 84 | schema: 85 | $ref: '#/definitions/pet' 86 | 409: 87 | description: new pet conflicts with an existing pet (i.e. they have the same name) 88 | default: 89 | description: unexpected error 90 | schema: 91 | $ref: '#/definitions/errorModel' 92 | 93 | /pets/{name}: 94 | get: 95 | description: Returns a pet by name 96 | operationId: findPetByName 97 | produces: 98 | - application/json 99 | - application/xml 100 | - text/xml 101 | - text/html 102 | parameters: 103 | - name: name 104 | in: path 105 | description: name of pet to fetch 106 | required: true 107 | type: string 108 | responses: 109 | 200: 110 | description: pet response 111 | schema: 112 | $ref: '#/definitions/pet' 113 | default: 114 | description: unexpected error 115 | schema: 116 | $ref: '#/definitions/errorModel' 117 | 118 | patch: 119 | description: Updates a pet by name 120 | produces: 121 | - application/json 122 | - application/xml 123 | - text/xml 124 | - text/html 125 | parameters: 126 | - name: name 127 | in: path 128 | description: name of pet to update 129 | required: true 130 | type: string 131 | - name: body 132 | in: body 133 | description: The updated pet info 134 | required: true 135 | schema: 136 | $ref: '#/definitions/pet' 137 | responses: 138 | 200: 139 | description: pet response 140 | schema: 141 | $ref: '#/definitions/pet' 142 | default: 143 | description: unexpected error 144 | schema: 145 | $ref: '#/definitions/errorModel' 146 | 147 | delete: 148 | description: deletes a single pet based on the name supplied 149 | operationId: deletePet 150 | parameters: 151 | - name: name 152 | in: path 153 | description: Name of pet to delete 154 | required: true 155 | type: string 156 | responses: 157 | 204: 158 | description: pet deleted 159 | default: 160 | description: unexpected error 161 | schema: 162 | $ref: '#/definitions/errorModel' 163 | 164 | definitions: 165 | pet: 166 | required: 167 | - name 168 | - type 169 | properties: 170 | name: 171 | type: string 172 | minLength: 2 173 | pattern: "^[a-zA-Z0-9- ]+$" 174 | age: 175 | type: integer 176 | type: 177 | type: string 178 | enum: [cat, dog, bird] 179 | tags: 180 | type: array 181 | items: 182 | type: string 183 | minLength: 1 184 | 185 | errorModel: 186 | required: 187 | - code 188 | - message 189 | properties: 190 | code: 191 | type: integer 192 | format: int32 193 | message: 194 | type: string 195 | 196 | -------------------------------------------------------------------------------- /.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | // JSHint Default Configuration File (as on JSHint website) 3 | // See http://jshint.com/docs/ for more details 4 | 5 | "maxerr" : 500, // {int} Maximum error before stopping 6 | 7 | // Enforcing 8 | "bitwise" : true, // true: Prohibit bitwise operators (&, |, ^, etc.) 9 | "camelcase" : true, // true: Identifiers must be in camelCase 10 | "curly" : false, // true: Require {} for every new block or scope 11 | "eqeqeq" : true, // true: Require triple equals (===) for comparison 12 | "forin" : true, // true: Require filtering for..in loops with obj.hasOwnProperty() 13 | "immed" : true, // true: Require immediate invocations to be wrapped in parens e.g. `(function () { } ());` 14 | "indent" : 2, // {int} Number of spaces to use for indentation 15 | "latedef" : true, // true: Require variables/functions to be defined before being used 16 | "newcap" : true, // true: Require capitalization of all constructor functions e.g. `new F()` 17 | "noarg" : true, // true: Prohibit use of `arguments.caller` and `arguments.callee` 18 | "noempty" : true, // true: Prohibit use of empty blocks 19 | "nonew" : true, // true: Prohibit use of constructors for side-effects (without assignment) 20 | "plusplus" : false, // true: Prohibit use of `++` & `--` 21 | "quotmark" : "single", // Quotation mark consistency: 22 | // false : do nothing (default) 23 | // true : ensure whatever is used is consistent 24 | // "single" : require single quotes 25 | // "double" : require double quotes 26 | "undef" : true, // true: Require all non-global variables to be declared (prevents global leaks) 27 | "unused" : "vars", // true: Require all defined variables be used 28 | "strict" : false, // true: Requires all functions run in ES5 Strict Mode 29 | "trailing" : false, // true: Prohibit trailing whitespaces 30 | "maxparams" : false, // {int} Max number of formal params allowed per function 31 | "maxdepth" : false, // {int} Max depth of nested blocks (within functions) 32 | "maxstatements" : false, // {int} Max number statements per function 33 | "maxcomplexity" : false, // {int} Max cyclomatic complexity per function 34 | "maxlen" : false, // {int} Max number of characters per line 35 | 36 | // Relaxing 37 | "asi" : false, // true: Tolerate Automatic Semicolon Insertion (no semicolons) 38 | "boss" : false, // true: Tolerate assignments where comparisons would be expected 39 | "debug" : true, // true: Allow debugger statements e.g. browser breakpoints. 40 | "eqnull" : false, // true: Tolerate use of `== null` 41 | "es5" : false, // true: Allow ES5 syntax (ex: getters and setters) 42 | "esnext" : false, // true: Allow ES.next (ES6) syntax (ex: `const`) 43 | "moz" : false, // true: Allow Mozilla specific syntax (extends and overrides esnext features) 44 | // (ex: `for each`, multiple try/catch, function expression…) 45 | "evil" : false, // true: Tolerate use of `eval` and `new Function()` 46 | "expr" : true, // true: Tolerate `ExpressionStatement` as Programs 47 | "funcscope" : false, // true: Tolerate defining variables inside control statements" 48 | "globalstrict" : false, // true: Allow global "use strict" (also enables 'strict') 49 | "iterator" : false, // true: Tolerate using the `__iterator__` property 50 | "lastsemic" : false, // true: Tolerate omitting a semicolon for the last statement of a 1-line block 51 | "laxbreak" : true, // true: Tolerate possibly unsafe line breakings 52 | "laxcomma" : true, // true: Tolerate comma-first style coding 53 | "loopfunc" : false, // true: Tolerate functions being defined in loops 54 | "multistr" : false, // true: Tolerate multi-line strings 55 | "proto" : false, // true: Tolerate using the `__proto__` property 56 | "scripturl" : false, // true: Tolerate script-targeted URLs 57 | "smarttabs" : true, // true: Tolerate mixed tabs/spaces when used for alignment 58 | "shadow" : false, // true: Allows re-define variables later in code e.g. `var x=1; x=2;` 59 | "sub" : false, // true: Tolerate using `[]` notation when it can still be expressed in dot notation 60 | "supernew" : false, // true: Tolerate `new function () { ... };` and `new Object;` 61 | "validthis" : false, // true: Tolerate using this in a non-constructor function 62 | 63 | // Environments 64 | "browser" : true, // Web Browser (window, document, etc) 65 | "couch" : false, // CouchDB 66 | "devel" : true, // Development/debugging (alert, confirm, etc) 67 | "dojo" : false, // Dojo Toolkit 68 | "jquery" : true, // jQuery 69 | "mootools" : false, // MooTools 70 | "node" : true, // Node.js 71 | "nonstandard" : false, // Widely adopted globals (escape, unescape, etc) 72 | "prototypejs" : false, // Prototype and Scriptaculous 73 | "rhino" : false, // Rhino 74 | "worker" : false, // Web Workers 75 | "wsh" : false, // Windows Scripting Host 76 | "yui" : false, // Yahoo User Interface 77 | 78 | // Legacy 79 | "nomen" : false, // true: Prohibit dangling `_` in variables 80 | "onevar" : false, // true: Allow only one `var` statement per function 81 | "passfail" : false, // true: Stop on first error 82 | "white" : false, // true: Check against strict whitespace and indentation rules 83 | 84 | // Custom Globals 85 | "globals": { 86 | } // additional predefined global variables 87 | } 88 | -------------------------------------------------------------------------------- /samples/user-manager/users.yaml: -------------------------------------------------------------------------------- 1 | swagger: "2.0" 2 | info: 3 | version: "1.1.0" 4 | title: User Manager 5 | description: > 6 | This is a sample API for managing a database of users. User accounts can be created, deleted, edited, and retrieved. 7 | Users can also log-in, which will create a session cookie. Logging out will delete the cookie. 8 | 9 | host: localhost:3000 10 | consumes: 11 | - application/json 12 | produces: 13 | - application/json 14 | 15 | definitions: 16 | # A simple username/password combo for logging in 17 | login: 18 | required: [username, password] 19 | properties: 20 | username: 21 | type: string 22 | minLength: 1 23 | password: 24 | type: string 25 | minLength: 1 26 | 27 | # The user schema is defined in the "user.yaml" file. 28 | # Swagger-Server will automatically convert the user.yaml 29 | # file to JSON format 30 | user: 31 | $ref: http://localhost:3000/user.json 32 | 33 | 34 | # NOTE: This does NOT set global parameters for all operations. 35 | # It just defines parameter templates that can be referenced by operations (i.e. it saves typing) 36 | parameters: 37 | sessionCookie: &sessionCookie 38 | name: Cookie 39 | in: header 40 | required: true 41 | type: string 42 | description: The session cookie 43 | 44 | username: &username 45 | name: username 46 | in: path 47 | required: true 48 | type: string 49 | description: This is the {username} path parameter 50 | 51 | userData: &userData 52 | name: body 53 | in: body 54 | required: true 55 | schema: 56 | $ref: user 57 | description: The user data for create/update operations 58 | 59 | 60 | paths: 61 | /users: 62 | get: 63 | summary: Returns all users in the database. 64 | description: Only the "admin" user can access this. 65 | responses: 66 | 200: 67 | description: Returns the list of users 68 | schema: 69 | type: array 70 | items: 71 | $ref: user 72 | 401: 73 | description: Hey! You're not the "admin" user! 74 | 75 | post: 76 | summary: Creates a new user 77 | description: Only the "admin" user can create users. 78 | parameters: 79 | - name: body 80 | in: body 81 | required: true 82 | schema: 83 | $ref: user 84 | description: The user account to create 85 | responses: 86 | 201: 87 | description: New user was created successfully 88 | schema: 89 | $ref: user 90 | headers: 91 | Location: 92 | type: string 93 | description: The Server returns the URL of the new user 94 | 400: 95 | description: Bad JSON formatting in the request 96 | 97 | 98 | /users/{username}: 99 | get: 100 | summary: Retrieves a user 101 | description: > 102 | users can only retrieve their own account, not other users'. Except for the "admin" user, who can retrieve anyone. 103 | parameters: 104 | - *username 105 | - *sessionCookie 106 | responses: 107 | 200: 108 | description: Returns the user's data 109 | schema: 110 | $ref: user 111 | 401: 112 | description: You tried to retrieve someone else's account, and you're not the "admin" user. 113 | 404: 114 | description: The {username} was not found 115 | 116 | post: 117 | summary: Edits a user 118 | description: > 119 | Users can only edit their own account, not other users'. Except for the "admin" user, who can edit anyone. 120 | parameters: 121 | - *username 122 | - *userData 123 | - *sessionCookie 124 | responses: 125 | 200: 126 | description: User data was saved successfully 127 | schema: 128 | $ref: user 129 | 400: 130 | description: Bad JSON formatting in the request 131 | 401: 132 | description: You tried to edit someone else's account, and you're not the "admin" user. 133 | 404: 134 | description: The {username} was not found 135 | 136 | delete: 137 | summary: Deletes a user 138 | description: > 139 | Users can only delete their own account, not other users'. Except for the "admin" user, who can delete anyone. 140 | parameters: 141 | - *username 142 | - *sessionCookie 143 | responses: 144 | 204: 145 | description: User account was deleted 146 | 401: 147 | description: You tried to edit someone else's account, and you're not the "admin" user. 148 | 404: 149 | description: The {username} was not found 150 | 151 | 152 | /users/login: 153 | post: 154 | summary: Logs in 155 | description: | 156 | Try logging in with username "jdoe" and password "jdoe". 157 | Then try logging in with username "admin" and password "admin". 158 | parameters: 159 | - name: body 160 | in: body 161 | required: true 162 | description: The login credentials 163 | schema: 164 | $ref: login 165 | responses: 166 | 200: 167 | description: Login was successful 168 | schema: 169 | $ref: user 170 | headers: 171 | Set-Cookie: 172 | type: string 173 | description: The session cookie 174 | default: demo-session-id=123456789012345678901234567890 175 | 176 | 177 | /users/{username}/logout: 178 | post: 179 | summary: Logs out the given user 180 | description: > 181 | Users can only log themselves out, not other users. Except the "admin" user, who can log-out anyone. 182 | parameters: 183 | - *username 184 | - *sessionCookie 185 | responses: 186 | 204: 187 | description: Logout was successful 188 | headers: 189 | Set-Cookie: 190 | type: string 191 | description: Deletes the session cookie (by making expire in the past) 192 | default: demo-session-id=deleted; Expires=Thu, 01-Jan-1970 00:00:01 GMT; Path=/ 193 | 401: 194 | description: You tried to log someone else out, and you're not the "admin" user. 195 | 404: 196 | description: The {username} was not found 197 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | 'use strict'; 3 | 4 | var _ = require('lodash'); 5 | var morgan = require('morgan'); 6 | var SwaggerServer = require('swagger-server'); 7 | var errors = require('./lib/errors'); 8 | var swaggerSuiteFiles = require('./lib/swagger-suite'); 9 | var swaggerEditorFiles = require('./lib/swagger-editor'); 10 | var swaggerUIFiles = require('./lib/swagger-ui'); 11 | 12 | 13 | /** 14 | * This function creates a {@link SwaggerServer} instance and adds several extra 15 | * features to it, including Swagger-Editor and Swagger-UI. 16 | * 17 | * @param {string} swaggerFile 18 | * the path of a Swagger spec file (JSON or YAML) 19 | * 20 | * @param {swaggerSuite#defaults} [settings] 21 | * settings that determine how Swagger-Suite behaves and which features are enabled. 22 | * This object will be merged with the {@link swaggerSuite#defaults} object. 23 | * 24 | * @returns {SwaggerServer} 25 | */ 26 | function swaggerSuite(swaggerFile, settings) { 27 | settings = _.merge({}, swaggerSuite.defaults, settings); 28 | 29 | // Create a Swagger-Server instance 30 | var server = new SwaggerServer(swaggerFile, settings.server); 31 | 32 | // Add extra middleware 33 | server.use(morgan('dev', { skip: dontLogPollingRequests})); 34 | server.use(swaggerSuiteFiles(server, settings)); 35 | server.use(swaggerEditorFiles(server, settings)); 36 | server.use(swaggerUIFiles(server, settings)); 37 | server.use(errors(server, settings)); 38 | 39 | return server; 40 | } 41 | 42 | 43 | /** 44 | * The default settings that determine how the Swagger-Suite behaves and which features are enabled. 45 | * 46 | * @type {{docs: {enabled: boolean, route: string}, editor: {enabled: boolean, readOnly: boolean, route: string}, swaggerUI: {enabled: boolean, route: string}, api: {enabled: boolean, enableCORS: boolean, enableMocks: boolean}}} 47 | * @name defaults 48 | */ 49 | swaggerSuite.defaults = { 50 | /** 51 | * Swagger-Suite uses Swagger-Editor to provide HTML documentation of your RESTful API. 52 | * You can disable this, or change the documentation URL here. 53 | */ 54 | docs: { 55 | /** 56 | * Determines whether HTML docs are enabled. 57 | * @type {boolean} 58 | */ 59 | enabled: true, 60 | 61 | /** 62 | * The route to the HTML documentation. The default route is "/docs". 63 | * 64 | * For convenience, and to avoid confusion, if your API doesn't 65 | * have a GET operation at the root path (i.e. `GET /`), then Swagger-Server 66 | * will respond to this request with an HTTP 307 and a `Location` header 67 | * that redirects the browser to your HTML docs. 68 | * 69 | * @type {string} 70 | */ 71 | route: '/docs' 72 | }, 73 | 74 | /** 75 | * Swagger-Suite uses Swagger-Editor to provide a WYSIWYG editor for your API spec. 76 | * You can disable the editor, or adjust its behavior here. 77 | */ 78 | editor: { 79 | /** 80 | * Determines whether the Swagger-Editor WYSIWYG is enabled. 81 | * Disabling this will NOT disable the HTML documentation, which is also provided by Swagger-Editor. 82 | * @type {boolean} 83 | */ 84 | enabled: true, 85 | 86 | /** 87 | * Allows you to enable the editor in read-only mode. The editor will 88 | * still allow changes to the spec and will show instant previews of those changes, 89 | * but the actual Swagger file on the server will remain unchanged. 90 | * @type {boolean} 91 | */ 92 | readOnly: false, 93 | 94 | /** 95 | * The route to the Swagger spec editor. The default route is "/editor". 96 | * @type {string} 97 | */ 98 | route: '/editor' 99 | }, 100 | 101 | /** 102 | * Swagger-Suite includes Swagger-UI, which lets you test your API in any browser. 103 | * You can disable Swagger-UI, or change the URL here. 104 | */ 105 | swaggerUI: { 106 | /** 107 | * Determines whether Swagger-UI is enabled. 108 | * @type {boolean} 109 | */ 110 | enabled: true, 111 | 112 | /** 113 | * The route to Swagger-UI. The default route is "/ui". 114 | * @type {string} 115 | */ 116 | route: '/ui' 117 | }, 118 | 119 | /** 120 | * Swagger-Suite uses Swagger-Server to host your API and provide mocks for each of your operations. 121 | * You can disable this, or adjust its behavior here. 122 | */ 123 | server: { 124 | /** 125 | * Determines whether Swagger-Server is enabled. 126 | * @type {boolean} 127 | */ 128 | enabled: true, 129 | 130 | /** 131 | * By default, Swagger-Server will automatically handle all CORS preflight requests, 132 | * and will add the appropriate CORS headers to every HTTP response. 133 | * You can fully customize this behavior using your Swagger spec. See "CORS.js" for more details. 134 | * Or you can completely disable Swagger-Server's CORS functionality by setting this property to false. 135 | * @type {boolean} 136 | */ 137 | enableCORS: true, 138 | 139 | /** 140 | * Swagger-Server automatically provides mock implementations for 141 | * each operation defined in your Swagger spec. This is useful for 142 | * development and testing purposes, but when you're ready to provide 143 | * the real implementation for your API, you can disable the mocks. 144 | * 145 | * NOTE: Swagger-Server's mock implementations are always executed last, 146 | * so you can add your own implementation middleware (real or mock) and 147 | * then call Swagger-Server's mock via `next()`, or you can bypass 148 | * Swagger-Server's mock by not calling `next()` and sending your own 149 | * response instead. 150 | * 151 | * @type {boolean} 152 | */ 153 | enableMocks: true 154 | } 155 | }; 156 | 157 | 158 | // Don't logging polling requests from Swagger-Editor or Swagger-Suite's UI. They quickly clutter-up the log. 159 | function dontLogPollingRequests(req, res) { 160 | return req.originalUrl === '/static/bower_components/swagger-suite-editor/dist/index.html' 161 | || req.originalUrl === '/static/bower_components/swagger-suite-editor/dist/' 162 | || req.originalUrl === '/static/metadata.json'; 163 | } 164 | 165 | module.exports = swaggerSuite; 166 | 167 | })(); 168 | -------------------------------------------------------------------------------- /lib/swagger-editor.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | 'use strict'; 3 | 4 | var debug = require('./debug'); 5 | var format = require('util').format; 6 | var express = require('express'); 7 | var fs = require('fs'); 8 | var path = require('path'); 9 | var _ = require('lodash'); 10 | var yaml = require('js-yaml'); 11 | var bodyParser = require('body-parser'); 12 | var util = require('swagger-server/lib/helpers/util'); 13 | 14 | 15 | /** 16 | * Serves Swagger-Editor files. 17 | * 18 | * @param {SwaggerServer} server 19 | * @param {settings} settings 20 | */ 21 | module.exports = function swaggerEditor(server, settings) { 22 | var router = express.Router(); 23 | var staticFiles = path.join(__dirname, '../static'); 24 | 25 | 26 | if (settings.editor.enabled) { 27 | // Serve "/static/editor" content 28 | router.use(settings.editor.route, express.static(staticFiles + '/editor')); 29 | 30 | // When the server starts, display the path to the editor 31 | server.once(server.events.start, function() { 32 | if (server.metadata.url) { 33 | debug('Swagger-Editor is now running at %s%s', util.normalizePath(server.metadata.url.href), settings.editor.route); 34 | } 35 | }); 36 | } 37 | 38 | 39 | if (settings.docs.enabled) { 40 | // Serve "/static/docs" content 41 | router.use(settings.docs.route, express.static(staticFiles + '/docs')); 42 | 43 | // Redirect "GET /" to "GET /Docs" 44 | router.get('/', function redirectRootToDocs(req, res, next) { 45 | var swagger = server.swaggerObject; 46 | 47 | // Determine if the API includes a root GET operation 48 | if (!(_.isEmpty(swagger.basePath) || swagger.basePath === '/') // API basePath is not at the root 49 | || !_.isPlainObject(swagger.paths['/']) // API does not have a root path 50 | || !_.isPlainObject(swagger.paths['/'].get)) { // root path does not have a GET operation 51 | 52 | // The API doesn't have a GET operation at the root, so redirect them to the HTML docs page 53 | debug('Redirecting the browser to the HTML docs'); 54 | return res.redirect(307, req.baseUrl + settings.docs.route); 55 | } 56 | 57 | next(); 58 | }); 59 | 60 | // When the server starts, display the path to the docs 61 | server.once(server.events.start, function() { 62 | if (server.metadata.url) { 63 | debug('HTML documentation is now available at %s%s', util.normalizePath(server.metadata.url.href), settings.docs.route); 64 | } 65 | }); 66 | } 67 | 68 | 69 | if (settings.editor.enabled || settings.docs.enabled) { 70 | // NOTE: We don't use `settings.editor.route` here because this path is hard-coded in Swagger-Editor 71 | var editorYamlRoute = '/editor/spec'; 72 | 73 | // Serve the Swagger file as JSON 74 | router.get('/schema/swagger.json', function getSwaggerYAML(req, res, next) { 75 | debug('Sending the YAML Swagger spec'); 76 | sendFileAsYaml(res, server.swaggerFile); 77 | }); 78 | 79 | // Serve the Swagger file as YAML 80 | router.get(editorYamlRoute, function getSwaggerYAML(req, res, next) { 81 | debug('Sending the YAML Swagger spec'); 82 | sendFileAsYaml(res, server.swaggerFile); 83 | }); 84 | 85 | // Parse the YAML content as plain-text 86 | router.put(editorYamlRoute, bodyParser.text({ type: ['application/*', 'text/*'] })); 87 | 88 | // Update the Swagger file 89 | router.put(editorYamlRoute, function putSwaggerFile(req, res, next) { 90 | // If the editor is read-only, then don't save updates to the Swagger file 91 | if (settings.editor.readOnly) { 92 | return res.sendStatus(403); // Forbidden 93 | } 94 | 95 | debug('Updating %s', server.swaggerFile); 96 | 97 | try { 98 | // Validate the YAML content 99 | var data = req.body; 100 | yaml.safeLoad(data || 'invalid!!'); 101 | 102 | // Convert it to JSON, if necessary 103 | if (path.extname(server.swaggerFile) === '.json') { 104 | data = JSON.stringify(data); 105 | } 106 | 107 | // Update the source file 108 | fs.writeFileSync(server.swaggerFile, data); 109 | } 110 | catch (e) { 111 | var error = new SyntaxError(format( 112 | 'WARNING! Unable to save changes to the Swagger file. An error occurred: \n%s', e.message)); 113 | console.warn(error.message); 114 | throw error; 115 | } 116 | 117 | // Send a successful response 118 | res.sendStatus(204); 119 | }); 120 | 121 | 122 | // Serve other JSON/YAML files that are referenced via "$ref" 123 | router.use(function(req, res, next) { 124 | // Only allow GET and HEAD 125 | if (!(req.method === 'GET' || req.method === 'HEAD')) return next(); 126 | 127 | // Only allow JSON and YAML files to be requested 128 | var requestedExtension = path.extname(req.path); 129 | var allowedExtensions = ['.yaml', '.json']; 130 | if (allowedExtensions.indexOf(requestedExtension) === -1) return next(); 131 | 132 | // Get the full path to the file WITHOUT the extension 133 | var baseFilePath = path.join(path.dirname(server.swaggerFile), path.dirname(req.path), path.basename(req.path, requestedExtension)); 134 | 135 | // Try to find the file with either extension 136 | for (var i = 0; i < allowedExtensions.length; i++) { 137 | var ext = allowedExtensions[i]; 138 | if (fs.existsSync(baseFilePath + ext)) { 139 | switch (requestedExtension) { 140 | case '.json': 141 | return sendFileAsJson(res, baseFilePath + ext); 142 | case '.yaml': 143 | return sendFileAsYaml(res, baseFilePath + ext); 144 | } 145 | 146 | break; 147 | } 148 | } 149 | 150 | // If we didn't find the file, then maybe some other middleware will. 151 | // If not, then it'll end up 404'ing 152 | next(); 153 | }); 154 | } 155 | 156 | return router; 157 | }; 158 | 159 | 160 | function sendFileAsJson(res, filePath) { 161 | if (path.extname(filePath) === '.yaml') { 162 | // The source file is YAML, so convert it to JSON 163 | res.json(yaml.safeLoad(util.openFile(filePath))); 164 | } 165 | else { 166 | // The source file is JSON, so just send it 167 | res.json(util.openFile(filePath)); 168 | } 169 | } 170 | 171 | 172 | function sendFileAsYaml(res, filePath) { 173 | // Set the response type, since YAML isn't natively understood by Express 174 | res.type('text/yaml'); 175 | 176 | if (path.extname(filePath) === '.yaml') { 177 | // The source file is YAML, so just send it 178 | res.send(util.openFile(filePath)); 179 | } 180 | else { 181 | // The source file is JSON, so convert it to YAML 182 | res.send(yaml.safeDump(filePath, { skipInvalid: true })); 183 | } 184 | } 185 | 186 | })(); 187 | -------------------------------------------------------------------------------- /samples/CORS.yaml: -------------------------------------------------------------------------------- 1 | swagger: "2.0" 2 | info: 3 | version: "1.0.0" 4 | title: CORS Example API 5 | description: > 6 | This file demonstrates how to define custom CORS behavior in 7 | Swagger-Server. For more details on CORS and these headers, check out 8 | [this page on MDN](https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS) 9 | 10 | host: localhost:3000 11 | consumes: 12 | - application/json 13 | produces: 14 | - application/json 15 | 16 | paths: 17 | /users/login: 18 | # With both of the following operations commented out, Swagger-Server will 19 | # automatically handle CORS as described below. Uncommenting the first 20 | # operation will have no change in behavior, since it is equivalent to the 21 | # default Swagger-Server functionality. Uncommenting the second operation 22 | # will change things dramatically. 23 | 24 | # options: 25 | # $ref: default-CORS-response 26 | 27 | # options: 28 | # $ref: custom-CORS-response 29 | 30 | post: 31 | parameters: 32 | - name: body 33 | in: body 34 | schema: 35 | $ref: login 36 | responses: 37 | "201": 38 | description: login succeeded 39 | headers: 40 | Set-Cookie: 41 | type: string 42 | default: "auth-cookie=someRandomValueHere" 43 | description: Authentication cookie is returned 44 | 45 | get: 46 | responses: 47 | default: 48 | description: returns the users who have ever logged-in 49 | schema: 50 | type: array 51 | items: 52 | $ref: login 53 | 54 | 55 | /users/logout: 56 | # With both of the following operations commented out, Swagger-Server will 57 | # automatically handle CORS as described below. Uncommenting the first 58 | # operation will have no change in behavior, since it is equivalent to the 59 | # default Swagger-Server functionality. Uncommenting the second operation 60 | # will change things dramatically. 61 | 62 | # options: 63 | # $ref: default-CORS-response 64 | 65 | # options: 66 | # $ref: custom-CORS-response 67 | 68 | post: 69 | parameters: 70 | - name: Cookie 71 | in: header 72 | type: string 73 | description: Authentication token is required 74 | responses: 75 | 200: 76 | description: logout succeeded 77 | headers: 78 | Set-Cookie: 79 | type: string 80 | default: "auth-cookie=deleted;expires=Thu, 01 Jan 1970 00:00:00 GMT" 81 | description: Deletes the authentication cookie (by making it expire in the past) 82 | 83 | 84 | definitions: 85 | login: 86 | required: [username, password] 87 | properties: 88 | username: 89 | type: string 90 | password: 91 | type: string 92 | 93 | default-CORS-response: 94 | description: > 95 | The "OPTIONS" HTTP method is used for the CORS preflight request. 96 | Basically, the client browser is asking the server for permission 97 | to send the real HTTP request. 98 | responses: 99 | default: 100 | description: > 101 | Swagger-Server automatically handles the following CORS headers 102 | without any special configuration on your part (you don't even 103 | need to specify an OPTIONS operation in your Swagger spec). 104 | headers: 105 | Access-Control-Allow-Origin: 106 | type: string 107 | description: > 108 | By default, Swagger-Server will echo back the `Origin` 109 | request header (e.g. `http://yoursite.com`) 110 | Access-Control-Allow-Credentials: 111 | type: boolean 112 | description: > 113 | By default, Swagger-Server will return `true`. 114 | This enables cookies. 115 | Access-Control-Allow-Headers: 116 | type: array 117 | collectionFormat: csv 118 | description: > 119 | By default, Swagger-Server will echo back the 120 | `Access-Control-Request-Headers` request header 121 | (e.g. `Content-Type, X-Powered-By`) 122 | Access-Control-Allow-Methods: 123 | type: array 124 | collectionFormat: csv 125 | description: > 126 | By default, Swagger-Server will return the list of operations 127 | that are defined in your Swagger spec for the path 128 | (e.g. `GET, POST, PUT, DELETE`) 129 | Access-Control-Max-Age: 130 | type: integer 131 | description: > 132 | By default, Swagger-Server will return `0` (zero). This 133 | disables CORS caching by the client browser, which simplifies 134 | development and debugging. But feel free to change this to a 135 | higher number when you go to production. 136 | 137 | custom-CORS-response: 138 | responses: 139 | default: 140 | description: > 141 | If you specify an OPTIONS operation in your Swagger spec, then 142 | Swagger-Server will honor it. You can override any of 143 | Swagger-Server's default values for CORS headers, as shown below. 144 | Or you can disable Swagger-Server's automatic CORS functionality 145 | entirely with `server.settings.enableCORS = false;`. 146 | headers: 147 | Access-Control-Allow-Origin: 148 | type: string 149 | default: "*" 150 | description: > 151 | Setting this header to `*` allows all origins. 152 | This is handy for public REST APIs that don't require 153 | authentication. But, according to the HTTP spec, browsers 154 | *WILL NOT* send cookies if this header is `*`, regardless 155 | of what you set `Access-Control-Allow-Credentials` to. 156 | Access-Control-Allow-Credentials: 157 | type: boolean 158 | default: false 159 | description: > 160 | Setting this header to `false` means that your API does not 161 | use authentication cookies. 162 | Access-Control-Allow-Headers: 163 | type: array 164 | collectionFormat: csv 165 | default: Content-Type, X-Powered-By 166 | description: > 167 | This shows how you can explicitly specify which HTTP headers 168 | your API allows. 169 | Access-Control-Allow-Methods: 170 | type: array 171 | collectionFormat: csv 172 | default: GET, HEAD 173 | description: > 174 | This shows how you can explicitly specify which HTTP methods 175 | your API allows. 176 | Access-Control-Max-Age: 177 | type: integer 178 | default: 86400 # one day 179 | description: > 180 | This allows client browsers to cache the CORS response for 181 | one day (86400 seconds). 182 | 183 | 184 | -------------------------------------------------------------------------------- /static/css/bootstrap.min.css.map: -------------------------------------------------------------------------------- 1 | { 2 | "version": "3", 3 | "mappings": "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", 4 | "sources": ["../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/_normalize.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/_print.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/_glyphicons.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/_scaffolding.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/mixins/_vendor-prefixes.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/_variables.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/mixins/_tab-focus.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/mixins/_image.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/_type.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/mixins/_background-variant.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/mixins/_clearfix.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/mixins/_text-overflow.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/_code.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/_grid.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/mixins/_grid.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/mixins/_grid-framework.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/_tables.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/mixins/_table-row.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/_forms.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/mixins/_forms.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/_buttons.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/mixins/_buttons.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/mixins/_opacity.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/_component-animations.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/_dropdowns.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/mixins/_nav-divider.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/mixins/_reset-filter.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/_button-groups.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/mixins/_border-radius.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/_input-groups.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/_navs.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/_navbar.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/mixins/_nav-vertical-align.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/_breadcrumbs.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/_pagination.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/mixins/_pagination.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/_pager.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/_labels.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/mixins/_labels.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/_badges.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/_jumbotron.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/_thumbnails.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/_alerts.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/mixins/_alerts.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/_progress-bars.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/mixins/_gradients.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/mixins/_progress-bar.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/_media.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/_list-group.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/mixins/_list-group.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/_panels.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/mixins/_panels.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/_responsive-embed.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/_wells.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/_close.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/_modals.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/_tooltip.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/_popovers.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/_carousel.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/_utilities.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/mixins/_center-block.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/mixins/_hide-text.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/_responsive-utilities.scss","../bower_components/bootstrap-sass-official/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss"], 5 | "file": "bootstrap.min.css" 6 | } --------------------------------------------------------------------------------