Enable E-Tags for GUI and RAW
This commit is contained in:
@ -1,29 +1,63 @@
|
||||
import { ABC } from "../deps.ts";
|
||||
import { basicauth, extractPackagePath } from "../utils.ts";
|
||||
import { basicauth, extractPackagePath, sortVersions } from "../utils.ts";
|
||||
|
||||
import { Hash } from "../deps.ts";
|
||||
import db, { IPackage } from "../db.ts";
|
||||
|
||||
const MAX_CACHE_AGE = 60 * 30; // 30 Minutes
|
||||
|
||||
const CACHE_CONTROL = "public, max-age=" + MAX_CACHE_AGE;
|
||||
|
||||
export default function views(g: ABC.Application) {
|
||||
g.get(
|
||||
"/",
|
||||
async (ctx) => {
|
||||
return ctx.render("index", {
|
||||
search: ctx.queryParams["q"],
|
||||
});
|
||||
// const render = await IndexView();
|
||||
// console.log(render);
|
||||
// ctx.response.body = render;
|
||||
// ctx.response.status = 200;
|
||||
},
|
||||
basicauth("views")
|
||||
);
|
||||
g.get(
|
||||
"/package/:package",
|
||||
async (ctx) => {
|
||||
let [packageName, packageVersion] = extractPackagePath(
|
||||
ctx.params.package
|
||||
);
|
||||
g.get("/", async (ctx) => {
|
||||
ctx.response.headers.set("cache-control", CACHE_CONTROL);
|
||||
|
||||
return ctx.render("package", { packageName });
|
||||
},
|
||||
basicauth("views")
|
||||
);
|
||||
const search = ctx.queryParams.q;
|
||||
|
||||
let packages: IPackage[] = [];
|
||||
if (search && search !== "") {
|
||||
packages = await db.package.find({
|
||||
name: RegExp(`${search}`),
|
||||
});
|
||||
} else {
|
||||
packages = await db.package.find({});
|
||||
}
|
||||
|
||||
const etag =
|
||||
"W/" +
|
||||
Hash.createHash("sha3-256")
|
||||
.update(
|
||||
packages
|
||||
.map((e) => {
|
||||
const sorted = e.versions.sort(sortVersions).reverse();
|
||||
return e.name + sorted[0];
|
||||
})
|
||||
.join(":")
|
||||
)
|
||||
.toString("base64");
|
||||
|
||||
ctx.response.headers.set("e-tag", etag);
|
||||
|
||||
return ctx.render("index", {
|
||||
packages,
|
||||
search,
|
||||
});
|
||||
});
|
||||
g.get("/package/:package", async (ctx) => {
|
||||
let [packageName, packageVersion] = extractPackagePath(
|
||||
ctx.params.package
|
||||
);
|
||||
|
||||
const pkg = await db.package.findOne({ name: packageName });
|
||||
|
||||
const etag =
|
||||
"W/" +
|
||||
Hash.createHash("sha3-256")
|
||||
.update(`${packageName}:${packageVersion}`)
|
||||
.toString("base64");
|
||||
|
||||
await ctx.render("package", { pkg });
|
||||
ctx.response.headers.set("cache-control", CACHE_CONTROL);
|
||||
ctx.response.headers.set("E-Tag", etag);
|
||||
});
|
||||
}
|
||||
|
Reference in New Issue
Block a user