80 lines
2.2 KiB
JavaScript
80 lines
2.2 KiB
JavaScript
const fs = require('fs')
|
|
const swaggerAutogen = require('swagger-autogen')()
|
|
|
|
const doc = {
|
|
info: {
|
|
title: 'IPost API',
|
|
description: 'the official IPost.rocks API documentation',
|
|
},
|
|
host: 'ipost.rocks',
|
|
schemes: ['https'],
|
|
securityDefinitions: {
|
|
appTokenAuthHeader: {
|
|
type: 'apiKey',
|
|
in: 'header', // can be 'header', 'query' or 'cookie'
|
|
name: 'ipost-auth-token', // name of the header, query parameter or cookie
|
|
description:
|
|
'authenticate using the authentication object in the header',
|
|
},
|
|
},
|
|
}
|
|
|
|
const outputFile = './swagger-api.json'
|
|
const tempFile = './swagger-output.json'
|
|
const endpointsFiles = ['./server.js']
|
|
|
|
function pushdirectory(currentpath) {
|
|
fs.readdirSync(currentpath, {
|
|
withFileTypes: true,
|
|
}).forEach((dirent) => {
|
|
if (dirent.isFile()) {
|
|
endpointsFiles.push(currentpath + dirent.name)
|
|
} else {
|
|
pushdirectory(currentpath + dirent.name + '/')
|
|
}
|
|
})
|
|
}
|
|
|
|
pushdirectory('./routes/')
|
|
|
|
swaggerAutogen(tempFile, endpointsFiles, doc)
|
|
|
|
/*
|
|
Replace some error codes with own error codes, as described in error_codes.txt
|
|
*/
|
|
const to_replace = {
|
|
401: 'login error (invalid cookie)',
|
|
402: 'login error (bad cookie)',
|
|
403: 'login error (no cookie)',
|
|
|
|
410: 'argument/data error',
|
|
411: 'argument/data error',
|
|
412: 'argument/data error',
|
|
413: 'argument/data error',
|
|
414: 'argument/data error',
|
|
415: 'argument/data error',
|
|
416: 'argument/data error',
|
|
417: 'argument/data error',
|
|
418: 'argument/data error',
|
|
419: 'argument/data error',
|
|
420: 'invalid authetication object',
|
|
}
|
|
|
|
let file = JSON.parse(fs.readFileSync(tempFile, 'utf8'))
|
|
|
|
for (let path in file.paths) {
|
|
for (let method in file.paths[path]) {
|
|
for (let response in file.paths[path][method].responses) {
|
|
if (to_replace[response]) {
|
|
file.paths[path][method].responses[response].description =
|
|
to_replace[response]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
file = JSON.stringify(file)
|
|
console.log(file)
|
|
fs.writeFileSync(outputFile, file)
|
|
fs.rmSync(tempFile)
|