import { auth, config, method, route, swagger, validate } from "@noderun/hapi-router" import { Req, Res, ReturnValue } from "#/global" import path from "path" import fs from "fs-extra" import { baseDir, gFail, sourceDir } from "@/util" import MarkdownIt from "markdown-it" export default class Index { @auth("optional") async index(request: Req, h: Res): ReturnValue { const md = new MarkdownIt() var result = md.render(fs.readFileSync(path.resolve(baseDir, "./docs/index.md"), "utf-8")) const isRenderHtmx = Reflect.has(request.query, "htmx") if (isRenderHtmx) { return h.view("htmx/path/index.pug", { isLogin: request.auth.isAuthenticated, md: result }) } return h.view("views/index.pug", { isLogin: request.auth.isAuthenticated, md: result }) } @route("/about") @auth("try") async about(request: Req, h: Res) { const isRenderHtmx = Reflect.has(request.query, "htmx") if (!request.auth.isAuthenticated) { if (isRenderHtmx) { // https://github.com/hapijs/hapi/issues/4443 // https://github.com/hapijs/hapi/issues/4212 return h.response().header("HX-Redirect", `/login?next=${encodeURIComponent(request.path)}`) } return h.redirect(`/login?next=${encodeURIComponent(request.path)}`).takeover() } const md = new MarkdownIt() // console.log(path.resolve(baseDir, "./docs/a.md")) // var result = md.render(fs.readFileSync(path.resolve(baseDir, "./docs/a.md"), "utf-8")) const data = { // md: result, } if (isRenderHtmx) { return h.view("htmx/path/about.pug", data) } return h.view("views/about.pug", data) } @route("/color/del") @method("POST") @auth() async color_del(request: Req, h: Res) { const { id } = request.payload as any if (!id) { request.yar.flash("error", "未提供id") return h.redirect("/color") } try { const ColorModel = request.getModel("color") await ColorModel.destroy({ where: { id} }) request.yar.flash("success", "删除成功") } catch (error) { loggerSite.error(error) request.yar.flash("error", "删除失败") } return h.redirect("/color") } @route("/color") @method("POST") @auth() async color_post(request: Req, h: Res) { const { name, value, desctibe } = request.payload as any if (!value) { request.yar.flash("error", "请输入颜色值") return h.redirect("/color") } try { const ColorModel = request.getModel("color") await ColorModel.create({ name, value, desctibe }) request.yar.flash("success", "成功") } catch (error) { loggerSite.error(error) request.yar.flash("error", "插入颜色失败") } return h.redirect("/color") } @route("/color") async color_get(request: Req, h: Res) { const ColorModel = request.getModel("color") const colorList = await ColorModel.findAll({}) // const colorList = await ColorModel.findAll({ // include: [ // { model: request.getModel("color_cate"), attributes: ['name'] } // ] // }) // console.log(colorList); // const ColorCateModel = request.getModel("color_cate") // console.log(await ColorCateModel.findAll({ // include: [request.getModel("color")] // })) const isRenderHtmx = Reflect.has(request.query, "htmx") if (isRenderHtmx) { return h.view(`htmx/path/color.pug`, { list: colorList }) } return h.view(`views/color.pug`, { list: colorList }) } @route("/docs/{path*}") @auth() async docs(req: Req, h: Res): ReturnValue { // const {id} = req.auth.credentials // try { // req.cookieAuth.ttl(720 * 24 * 60 * 60 * 1000) // req.cookieAuth.set({ id: id }); // } catch (error) { // console.log(error); // } if (req.params && req.params.path.endsWith(".md")) { // console.log(path.resolve(baseDir, "docs/"+"*.md")); // console.log(await glob("docs/"+"*.md")); const mdPath = path.resolve(baseDir, "docs/" + req.params.path) if (fs.existsSync(mdPath)) { const str = fs.readFileSync(mdPath, "utf8") console.log("---->", mdPath) return h.view("views/css.pug", { content: str.toString(), }) } // 解析文档 return h.view("views/css.pug") } // 404页面 return h.redirect("/404") } @route("/{path*}") async any(req: Req, h: Res): ReturnValue { if (req.path) { const filePath = path.resolve(baseDir, "template/views", "." + req.path + ".pug") if (fs.existsSync(filePath)) { const isRenderHtmx = Reflect.has(req.query, "htmx") if (isRenderHtmx) { return h.view(`htmx/path${req.path}.pug`) } return h.view(`views${req.path}.pug`) } } console.log("404: ", req.raw.req.url) return h.redirect("/404?r=" + encodeURIComponent(req.raw.req.url)) } @route("/404") @auth("try") async 404(request: Req, h: Res): ReturnValue { if (request.auth.isAuthenticated) { // 登录了 } else { // 未登录 } if (request.query?.r) { // 可重定向返回 } return h.view("404.pug", { rollback: request.query?.r, }) } }