feat: add fix dialog
This commit is contained in:
@ -1,6 +1,7 @@
|
||||
import express, { Request, Response } from 'express'
|
||||
import { BPManager } from './BPManager'
|
||||
import { BPSetMetadata } from './types'
|
||||
import { Memorizer } from './Memorizer'
|
||||
|
||||
export class WebServer {
|
||||
private readonly app = express()
|
||||
@ -12,16 +13,20 @@ export class WebServer {
|
||||
) {
|
||||
this.app.set('view engine', 'ejs')
|
||||
this.app.set('views', './views');
|
||||
this.app.use(express.static('./public'))
|
||||
|
||||
this.app.get('/', this.getMainPage.bind(this))
|
||||
this.app.get('/check_all', this.runCheck.bind(this))
|
||||
this.app.get('/check', this.runCheckOnce.bind(this))
|
||||
this.app.get('/check_all', this.runCheckAll.bind(this))
|
||||
|
||||
this.app.use('/fix', express.urlencoded())
|
||||
this.app.post('/fix', this.runFix.bind(this))
|
||||
|
||||
this.app.use(this.error404)
|
||||
|
||||
this.app.listen(this.port, this.showBanner.bind(this))
|
||||
}
|
||||
|
||||
private getMainPage(_: Request, res: Response) {
|
||||
private getMainPage(req: Request, res: Response) {
|
||||
const bpStatus: {
|
||||
category: string,
|
||||
metadatas: BPSetMetadata[]
|
||||
@ -29,30 +34,93 @@ export class WebServer {
|
||||
|
||||
const bpMetadatas = this.bpManager.getBPSetMetadatas()
|
||||
const categories = new Set(bpMetadatas.map((v) => v?.awsService))
|
||||
const hidePass = req.query['hidePass'] === 'true'
|
||||
|
||||
for (const category of categories)
|
||||
bpStatus.push({
|
||||
category,
|
||||
metadatas: bpMetadatas.filter((v) => v.awsService === category)
|
||||
metadatas: bpMetadatas.filter((v) =>
|
||||
v.awsService === category &&
|
||||
(!hidePass || v.nonCompliantResources.length > 0))
|
||||
})
|
||||
|
||||
res.render('index', {
|
||||
bpStatus,
|
||||
bpLength: bpMetadatas.length
|
||||
bpStatus: bpStatus.filter(({ metadatas }) => metadatas.length > 0),
|
||||
bpLength: bpMetadatas.length,
|
||||
hidePass
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
private runCheck(_: Request, res: Response) {
|
||||
void this.bpManager.runCheck()
|
||||
res.redirect('/')
|
||||
private async runCheckOnce(req: Request, res: Response) {
|
||||
res.setHeader('Content-Type', 'text/html; charset=utf-8')
|
||||
res.setHeader('Transfer-Encoding', 'chunked')
|
||||
|
||||
res.write('<script>setInterval(() => window.scrollTo(0, document.body.scrollHeight), 100)</script>')
|
||||
res.write('<pre>Start Checking....\n')
|
||||
|
||||
const { name, hidePass } = req.query
|
||||
if (typeof name !== 'string' || name.length < 1) {
|
||||
res.write('<a href="/">Failed. name not found. Return to Report Page')
|
||||
res.end()
|
||||
return
|
||||
}
|
||||
|
||||
Memorizer.reset()
|
||||
await this.bpManager.runCheckOnce(name)
|
||||
|
||||
res.write(`<a href="/?hidePass=${hidePass}">Done. Return to Report Page`)
|
||||
res.end()
|
||||
}
|
||||
|
||||
private async runCheckAll(req: Request, res: Response) {
|
||||
res.setHeader('Content-Type', 'text/html; charset=utf-8')
|
||||
res.setHeader('Transfer-Encoding', 'chunked')
|
||||
|
||||
const { hidePass } = req.query
|
||||
|
||||
res.write('<script>setInterval(() => window.scrollTo(0, document.body.scrollHeight), 100)</script>')
|
||||
res.write('<pre>Start Checking....\n')
|
||||
|
||||
Memorizer.reset()
|
||||
await this.bpManager.runCheckAll((name) =>
|
||||
res.write(`${name} - FINISHED\n`))
|
||||
|
||||
res.write(`<a href="/?hidePass=${hidePass}">Done. Return to Report Page`)
|
||||
res.end()
|
||||
}
|
||||
|
||||
private async runFix(req: Request, res: Response) {
|
||||
res.setHeader('Content-Type', 'text/html; charset=utf-8')
|
||||
res.setHeader('Transfer-Encoding', 'chunked')
|
||||
|
||||
res.write('<pre>Start Fixing....\n')
|
||||
|
||||
const { name, hidePass } = req.query
|
||||
if (typeof name !== 'string' || name.length < 1) {
|
||||
res.write('<a href="/">Failed. name not found. Return to Report Page')
|
||||
res.end()
|
||||
return
|
||||
}
|
||||
|
||||
const requiredParametersForFix =
|
||||
Object
|
||||
.keys(req.body)
|
||||
.map((k) => ({ name: k, value: req.body[k] }))
|
||||
|
||||
await this.bpManager.runFix(name, requiredParametersForFix)
|
||||
.catch((error) => {
|
||||
res.write(error.toString() + '\n')
|
||||
})
|
||||
|
||||
res.write(`<a href="/?hidePass=${hidePass}">Done. Return to Report Page`)
|
||||
res.end()
|
||||
}
|
||||
|
||||
private error404 (_: Request, res: Response) {
|
||||
res.status(404).send({ success: false, message: 'Page not found' })
|
||||
}
|
||||
|
||||
private showBanner () {
|
||||
private showBanner() {
|
||||
console.log(`
|
||||
|
||||
_______ _______ _______ _______ _______ _______
|
||||
|
Reference in New Issue
Block a user