Files
isotope-server/routes/website/package.ar
T
2023-08-08 19:26:23 +01:00

49 lines
2.3 KiB
Plaintext

import "server" as *
import "database" as *
import "url.ar" as url
import "bleach.ar" as bleach
import "shlex.ar" as shlex
import "render" as render
import "commaNumbers" as *
let package(req, res) = do
let acc = account.getByToken(req.cookies.get("token", ""))
let name = req.query.get("name")
if (not name) do
res.code = 404
res.renderTemplate("404.html", {})
return
let version = req.query.get("version", "latest")
let commandName = name
if (version != "latest") commandName += "@"+version
let command = shlex.join(["isotope", "install", commandName])
let package = packages.get(name)
if (package == null && version == "latest") do
package = {versions:{}, order:{}, name:name}
else if (package == null) do
res.code = 404
res.renderTemplate("404.html", {})
return
if ("order" not in package) do
package.order = {}
makeChange()
if (version not in package.versions && version != "latest") do
res.code = 404
res.renderTemplate("404.html", {})
return
let versions = []
let keys = package.versions.keys()
keys.sort()
keys.sort(true, (v) = package.order.get(v, 0))
for (i from 0 to keys.length) do
let versioni = keys[i]
let URL = "/package?"+url.queryStr({name:name, version:versioni})
let html = null
if (versioni == version) html = "<a href='"+URL+"' class='selected'>"+bleach.clean(name+"@"+versioni)+"</a>"
else html = "<a href='"+URL+"'>"+bleach.clean(name+"@"+versioni)+"</a>"
if (versioni == "latest") versions.insert(0, html)
else versions.append(html)
let author = account.getById(package.get("owner")) || {username:"Unknown", id:""}
res.renderTemplate("package.html", {name:name, description: package.get("description", ""), 'short-description': package.get("short-description", ""), 'downloads': commaSeperatedNumber(package.get("downloads", 0)), keywords:package.get("keywords", []).join(', '), repository:package.get("repository", "https://github.com/"), license: package.get("license", "Unspecified"), author: author.username, authorPage: '/author?'+url.queryStr({id:author.id}), version:version, versions:versions.join(""), command:command, commandComma:command.replace("'", "\\'")})
app.route("/package", null, package)