mirror of
https://github.com/Open-Argon/isotope-server.git
synced 2026-10-28 09:43:51 +00:00
49 lines
2.3 KiB
Plaintext
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) |