-
Notifications
You must be signed in to change notification settings - Fork 0
/
openapi.ts
120 lines (113 loc) · 3.85 KB
/
openapi.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import swagger, { FnSwaggerUiGetInitializerScript } from 'feathers-swagger';
import koaSend from 'koa-send';
import type { Application } from './declarations';
import path from 'path';
const getSwaggerInitializerScript: FnSwaggerUiGetInitializerScript = ({ docsJsonPath, ctx, req }) => {
const headers = (req && req.headers) || (ctx && ctx.headers);
const basePath = headers!['x-forwarded-prefix'] ?? '';
// language=JavaScript
return `
window.onload = function() {
var script = document.createElement('script');
script.onload = function () {
window.ui = SwaggerUIBundle({
url: "${basePath}${docsJsonPath}",
dom_id: '#swagger-ui',
deepLinking: true,
presets: [
SwaggerUIBundle.presets.apis,
SwaggerUIStandalonePreset,
SwaggerUIApiKeyAuthFormPlugin,
],
plugins: [
SwaggerUIBundle.plugins.DownloadUrl
],
layout: "StandaloneLayout",
configs: {
apiKeyAuthFormPlugin: {
forms: {
BearerAuth: {
fields: {
email: {
type: 'text',
label: 'E-Mail-Address',
},
password: {
type: 'password',
label: 'Password',
},
},
authCallback(values, callback) {
window.ui.fn.fetch({
url: '/authentication',
method: 'post',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({
strategy: 'local',
...values
}),
}).then(function (response) {
const json = JSON.parse(response.data);
if (json.accessToken) {
callback(null, json.accessToken);
} else {
callback('error while login');
}
}).catch(function (err) {
console.log(err, Object.entries(err));
callback('error while login');
});
},
}
},
localStorage: {
BearerAuth: {}
}
}
}
});
};
script.src = '${basePath}/swagger-ui-apikey-auth-form.js';
document.head.appendChild(script)
};
`;
};
export default (app: Application) => {
app.use(async (ctx, next) => {
if (ctx.req.url === '/swagger-ui-apikey-auth-form.js') {
const absoluteFilePath = require.resolve(
'@mairu/swagger-ui-apikey-auth-form/dist/swagger-ui-apikey-auth-form'
);
const relativeFilePath = path.basename(absoluteFilePath);
const sendOptions = { root: path.dirname(absoluteFilePath) };
await koaSend(ctx, relativeFilePath, sendOptions);
} else {
await next();
}
});
app.configure(swagger.customMethodsHandler);
app.configure(
swagger({
specs: {
info: {
title: 'Testing feathers swagger with dove',
version: '1.0.0',
description: 'Testing feathers swagger with dove using koa',
},
components: {
securitySchemes: {
BearerAuth: {
type: 'http',
scheme: 'bearer',
},
},
},
security: [{ BearerAuth: [] }],
},
ui: swagger.swaggerUI({ getSwaggerInitializerScript }),
})
);
};