├── .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 |
36 |
37 |
38 |
46 |
47 |
48 |
49 |
50 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
68 |
69 |
70 |
71 |

72 | support coming soon!
73 |
74 |
75 |
76 |
79 |
80 |
81 |
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 | }
--------------------------------------------------------------------------------