1 | 'use strict';
|
2 |
|
3 | var _regenerator = require('babel-runtime/regenerator');
|
4 |
|
5 | var _regenerator2 = _interopRequireDefault(_regenerator);
|
6 |
|
7 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
8 |
|
9 | function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 | module.exports = function crossOrigin() {
|
25 | var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
26 |
|
27 | var defaultOptions = {
|
28 | allowMethods: ['GET', 'PUT', 'POST', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS']
|
29 | };
|
30 |
|
31 |
|
32 | for (var key in defaultOptions) {
|
33 | if (!Object.prototype.hasOwnProperty.call(options, key)) {
|
34 | options[key] = defaultOptions[key];
|
35 | }
|
36 | }
|
37 |
|
38 | return function () {
|
39 | var _ref = _asyncToGenerator(_regenerator2.default.mark(function _callee(ctx, next) {
|
40 | var origin;
|
41 | return _regenerator2.default.wrap(function _callee$(_context) {
|
42 | while (1) {
|
43 | switch (_context.prev = _context.next) {
|
44 | case 0:
|
45 | origin = void 0;
|
46 |
|
47 | if (typeof options.origin === 'function') {
|
48 | origin = options.origin(ctx);
|
49 | } else {
|
50 | origin = options.origin || ctx.get('Origin') || '*';
|
51 | }
|
52 |
|
53 | if (origin) {
|
54 | _context.next = 6;
|
55 | break;
|
56 | }
|
57 |
|
58 | _context.next = 5;
|
59 | return next();
|
60 |
|
61 | case 5:
|
62 | return _context.abrupt('return', _context.sent);
|
63 |
|
64 | case 6:
|
65 |
|
66 |
|
67 | ctx.set('Access-Control-Allow-Origin', origin);
|
68 |
|
69 | if (!(ctx.method === 'OPTIONS')) {
|
70 | _context.next = 19;
|
71 | break;
|
72 | }
|
73 |
|
74 | if (ctx.get('Access-Control-Request-Method')) {
|
75 | _context.next = 12;
|
76 | break;
|
77 | }
|
78 |
|
79 | _context.next = 11;
|
80 | return next();
|
81 |
|
82 | case 11:
|
83 | return _context.abrupt('return', _context.sent);
|
84 |
|
85 | case 12:
|
86 |
|
87 |
|
88 | if (options.maxAge) {
|
89 | ctx.set('Access-Control-Max-Age', String(options.maxAge));
|
90 | }
|
91 |
|
92 |
|
93 | if (options.credentials === true) {
|
94 |
|
95 |
|
96 | ctx.set('Access-Control-Allow-Credentials', 'true');
|
97 | }
|
98 |
|
99 |
|
100 | if (options.allowMethods) {
|
101 | ctx.set('Access-Control-Allow-Methods', options.allowMethods.join(','));
|
102 | }
|
103 |
|
104 |
|
105 | if (options.allowHeaders) {
|
106 | ctx.set('Access-Control-Allow-Headers', options.allowHeaders.join(','));
|
107 | } else {
|
108 | ctx.set('Access-Control-Allow-Headers', ctx.get('Access-Control-Request-Headers'));
|
109 | }
|
110 |
|
111 | ctx.status = 204;
|
112 | _context.next = 29;
|
113 | break;
|
114 |
|
115 | case 19:
|
116 |
|
117 |
|
118 | if (options.credentials === true) {
|
119 | if (origin === '*') {
|
120 |
|
121 | ctx.remove('Access-Control-Allow-Credentials');
|
122 | } else {
|
123 | ctx.set('Access-Control-Allow-Credentials', 'true');
|
124 | }
|
125 | }
|
126 |
|
127 |
|
128 | if (options.exposeHeaders) {
|
129 | ctx.set('Access-Control-Expose-Headers', options.exposeHeaders.join(','));
|
130 | }
|
131 |
|
132 | _context.prev = 21;
|
133 | _context.next = 24;
|
134 | return next();
|
135 |
|
136 | case 24:
|
137 | _context.next = 29;
|
138 | break;
|
139 |
|
140 | case 26:
|
141 | _context.prev = 26;
|
142 | _context.t0 = _context['catch'](21);
|
143 | throw _context.t0;
|
144 |
|
145 | case 29:
|
146 | case 'end':
|
147 | return _context.stop();
|
148 | }
|
149 | }
|
150 | }, _callee, this, [[21, 26]]);
|
151 | }));
|
152 |
|
153 | return function (_x2, _x3) {
|
154 | return _ref.apply(this, arguments);
|
155 | };
|
156 | }();
|
157 | }; |
\ | No newline at end of file |