Update environment variable handling and cookie

retrieval
This commit is contained in:
William Bell committed 2023-11-14 22:06:33 +00:00
1 parent e3a7c23cff
commit c99b940068
15 files changed
+73 -73

No files matched your search

+3 -3
View File
@@ -1,8 +1,8 @@
let url = env.get("URL","https://isotope.wbell.dev")
let url = env.get_value("URL","https://isotope.wbell.dev")
term.log("URL: "+url)
let domain = env.get("domain","isotope.wbell.dev")
let domain = env.get_value("domain","isotope.wbell.dev")
term.log("domain: "+domain)
let port = number(env.get("PORT", 7030))
let port = number(env.get_value("PORT", 7030))
term.log("port: "+port)
let env_keys = env.keys()
+1 -1
View File
@@ -1 +1 @@
[{"Name":"bleach.ar","Version":"1.0.0","URL":"https://isotope.wbell.dev/isotope-download?name=bleach.ar\u0026version=1.0.0","Remote":"isotope.wbell.dev"},{"Name":"shlex.ar","Version":"1.0.1","URL":"https://isotope.wbell.dev/isotope-download?version=1.0.1\u0026name=shlex.ar","Remote":"isotope.wbell.dev"},{"Name":"neon.ar","Version":"beta1.0.2","URL":"https://isotope.wbell.dev/isotope-download?name=neon.ar\u0026version=beta1.0.2","Remote":"isotope.wbell.dev"},{"Name":"url.ar","Version":"1.0.1","URL":"https://isotope.wbell.dev/isotope-download?name=url.ar\u0026version=1.0.1","Remote":"isotope.wbell.dev"},{"Name":"http.ar","Version":"1.1.0","URL":"https://isotope.wbell.dev/isotope-download?name=http.ar\u0026version=1.1.0","Remote":"isotope.wbell.dev"}]
[{"Name":"bleach.ar","Version":"1.0.0","URL":"https://isotope.wbell.dev/isotope-download?version=1.0.0\u0026name=bleach.ar","Remote":"isotope.wbell.dev"},{"Name":"shlex.ar","Version":"1.0.1","URL":"https://isotope.wbell.dev/isotope-download?name=shlex.ar\u0026version=1.0.1","Remote":"isotope.wbell.dev"},{"Name":"neon.ar","Version":"beta1.0.2","URL":"https://isotope.wbell.dev/isotope-download?version=beta1.0.2\u0026name=neon.ar","Remote":"isotope.wbell.dev"},{"Name":"url.ar","Version":"1.0.1","URL":"https://isotope.wbell.dev/isotope-download?name=url.ar\u0026version=1.0.1","Remote":"isotope.wbell.dev"},{"Name":"http.ar","Version":"1.1.0","URL":"https://isotope.wbell.dev/isotope-download?name=http.ar\u0026version=1.1.0","Remote":"isotope.wbell.dev"}]
+1 -1
View File
@@ -13,6 +13,6 @@ let navbar(acc) = do
return '<div class="navbar"><a href="/"><div class="logo"></div></a><div class="links">'+links.join("")+'</div></div>'
let middleware(req,res) = do
let acc = account.getByToken(req.cookies.get("token", ""))
let acc = account.getByToken(req.cookies.get_value("token", ""))
res.templateValues.navbar = navbar(acc)
res.next()
+8 -8
View File
@@ -3,22 +3,22 @@ import "config" as *
import "database" as *
let download(req, res) = do
let name = req.query.get("name", null)
let version = req.query.get("version", "latest")
let package = packages.get(name)
let name = req.query.get_value("name", null)
let version = req.query.get_value("version", "latest")
let package = packages.get_value(name)
if (package == null) do
res.code = 404
res.send("Package not found")
return
let currentVersion = package.versions.get(version)
let currentVersion = package.versions.get_value(version)
forever do
let redirect = currentVersion.get("redirect")
let redirect = currentVersion.get_value("redirect")
if (redirect) do
currentVersion = package.versions.get(redirect)
currentVersion = package.versions.get_value(redirect)
continue
break
let filename = currentVersion.get("filename")
let filename = currentVersion.get_value("filename")
let p = path.join([program.cwd, "data","packages", name, filename])
package.downloads = package.get("downloads", 0) + 1
package.downloads = package.get_value("downloads", 0) + 1
res.sendFile(p)
app.get("/isotope-download", download)
+5 -5
View File
@@ -3,23 +3,23 @@ import "randstr" as *
import "database" as *
let push(req, res) = do
let name = req.formdata.get("name", null)
let name = req.formdata.get_value("name", null)
if (name == null) do
res.code = 400
res.send("Missing name")
return
let version = req.formdata.get("version", null)
let version = req.formdata.get_value("version", null)
if (version == null) do
res.code = 400
res.send("Missing version")
return
let file = req.files.file
let latest = req.formdata.latest
let package = packages.get(name)
let package = packages.get_value(name)
if (package == null) do
res.code = 404
return res.send("Package not found")
let acc = account.getByToken(req.headers.get("isotope-auth", ""))
let acc = account.getByToken(req.headers.get_value("isotope-auth", ""))
if (acc == null) do
res.code = 403
return res.send("You are not logged in")
@@ -28,7 +28,7 @@ let push(req, res) = do
return res.send("You are not the owner of this package")
if ("order" not in package) package.order = {}
if (package.versions.keys().length == 0) latest = "true"
let currentVersion = package.versions.get(version)
let currentVersion = package.versions.get_value(version)
let directory = path.join([program.cwd, "data", "packages", name])
if (currentVersion == null) do
currentVersion = {name:name, version:version}
+7 -7
View File
@@ -4,21 +4,21 @@ import "database" as *
import "url.ar" as urllib
let search(req, res) = do
let name = req.query.get("name", null)
let version = req.query.get("version", "latest")
let package = packages.get(name)
let name = req.query.get_value("name", null)
let version = req.query.get_value("version", "latest")
let package = packages.get_value(name)
if (package == null) do
res.code = 404
res.send("Package not found")
return
let currentVersion = package.versions.get(version)
let currentVersion = package.versions.get_value(version)
forever do
let redirect = currentVersion.get("redirect")
let redirect = currentVersion.get_value("redirect")
if (redirect) do
currentVersion = package.versions.get(redirect)
currentVersion = package.versions.get_value(redirect)
continue
break
let filename = currentVersion.get("filename")
let filename = currentVersion.get_value("filename")
let URL = config.url+"/isotope-download?"+urllib.queryStr({name:currentVersion.name, version:currentVersion.version})
res.json({Name: currentVersion.name, Version: currentVersion.version, URL:URL })
app.get("/isotope-search", search)
+1 -1
View File
@@ -3,7 +3,7 @@ import "database" as *
import "url.ar" as url
let accountpage(req, res) = do
let acc = account.getByToken(req.cookies.get("token", ""))
let acc = account.getByToken(req.cookies.get_value("token", ""))
if (not acc) return res.redirect("/login?"+url.queryStr({to:req.path}))
res.renderTemplate("account.html", {username:acc.username, email:acc.email})
app.get("/account", accountpage)
+1 -1
View File
@@ -5,7 +5,7 @@ import "shlex.ar" as shlex
import "config" as config
let accountpage(req, res) = do
let acc = account.getByToken(req.cookies.get("token", ""))
let acc = account.getByToken(req.cookies.get_value("token", ""))
term.log(acc)
if (not acc) return res.redirect("/login?"+url.queryStr({to:"/account"}))
let token = account.makeToken(acc)
+4 -4
View File
@@ -2,14 +2,14 @@ import "server" as *
import "database" as *
let login(req, res) = do
let redirect = req.query.get("to", "/")
let redirect = req.query.get_value("to", "/")
if (redirect == "/login") redirect = "/"
let acc = account.getByToken(req.cookies.get("token", ""))
let acc = account.getByToken(req.cookies.get_value("token", ""))
if (acc) do
return res.redirect(redirect)
else if (req.method == "POST") do
let user = req.formdata.get("user")
let password = req.formdata.get("password")
let user = req.formdata.get_value("user")
let password = req.formdata.get_value("password")
let errResp(err) = res.renderTemplate("login.html", {errorMsg:err, user:user})
if (not user) return errResp("Missing user")
else if (not password) return errResp("Missing password")
+2 -2
View File
@@ -2,9 +2,9 @@ import "server" as *
import "database" as *
let logout(req, res) = do
let redirect = req.query.get("to", "/login")
let redirect = req.query.get_value("to", "/login")
if (redirect == "/logout") redirect = "/login"
term.log(account.deleteToken(req.cookies.get("token", "")))
term.log(account.deleteToken(req.cookies.get_value("token", "")))
res.deleteCookie("token")
res.redirect(redirect)
app.get("/logout", logout)
+5 -5
View File
@@ -2,15 +2,15 @@ import "server" as *
import "database" as *
let register(req, res) = do
let redirect = req.query.get("to", "/")
let redirect = req.query.get_value("to", "/")
if (redirect == "/register") redirect = "/"
let acc = account.getByToken(req.cookies.get("token", ""))
let acc = account.getByToken(req.cookies.get_value("token", ""))
if (acc) do
return res.redirect(redirect)
else if (req.method == "POST") do
let username = req.formdata.get("username")
let email = req.formdata.get("email")
let password = req.formdata.get("password")
let username = req.formdata.get_value("username")
let email = req.formdata.get_value("email")
let password = req.formdata.get_value("password")
let errResp(err) = res.renderTemplate("register.html", {errorMsg:err, username:username, email:email})
if (not username) return errResp("Missing username")
else if (not email) return errResp("Missing email")
+7 -7
View File
@@ -7,18 +7,18 @@ 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")
let acc = account.getByToken(req.cookies.get_value("token", ""))
let name = req.query.get_value("name")
if (not name) do
res.code = 404
res.renderTemplate("404.html", {})
return
let version = req.query.get("version", "latest")
let version = req.query.get_value("version", "latest")
let commandName = name
if (version != "latest") commandName += "@"+version
let command = shlex.join(["isotope", "install", commandName])
let package = packages.get(name)
let package = packages.get_value(name)
if (package == null && version == "latest") do
package = {versions:{}, order:{}, name:name}
else if (package == null) do
@@ -35,7 +35,7 @@ let package(req, res) = do
let versions = []
let keys = package.versions.keys()
keys.sort()
keys.sort(true, (v) = package.order.get(v, 0))
keys.sort(true, (v) = package.order.get_value(v, 0))
for (i from 0 to keys.length) do
let versioni = keys[i]
let URL = "/package?"+url.queryStr({name:name, version:versioni})
@@ -44,6 +44,6 @@ let package(req, res) = do
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("'", "\\'")})
let author = account.getById(package.get_value("owner")) || {username:"Unknown", id:""}
res.renderTemplate("package.html", {name:name, description: package.get_value("description", ""), 'short-description': package.get_value("short-description", ""), 'downloads': commaSeperatedNumber(package.get_value("downloads", 0)), keywords:package.get_value("keywords", []).join(', '), repository:package.get_value("repository", "https://github.com/"), license: package.get_value("license", "Unspecified"), author: author.username, authorPage: '/author?'+url.queryStr({id:author.id}), version:version, versions:versions.join(""), command:command, commandComma:command.replace("'", "\\'")})
app.get("/package", package)
+14 -14
View File
@@ -3,17 +3,17 @@ import "database" as *
import "url.ar" as url
let newPackage(req, res) = do
let acc = account.getByToken(req.cookies.get("token", ""))
let acc = account.getByToken(req.cookies.get_value("token", ""))
if (req.method == "POST") do
if (not acc) return res.redirect("/login?"+url.queryStr({to:req.path+"?"+url.queryStr(req.formdata)}))
let name = req.formdata.get("name", "")
let shortDescription = req.formdata.get("short-description", "")
let description = req.formdata.get("description", "")
let license = req.formdata.get("license", "")
let repository = req.formdata.get("repository", "")
let keywords = req.formdata.get("keywords", "")
let name = req.formdata.get_value("name", "")
let shortDescription = req.formdata.get_value("short-description", "")
let description = req.formdata.get_value("description", "")
let license = req.formdata.get_value("license", "")
let repository = req.formdata.get_value("repository", "")
let keywords = req.formdata.get_value("keywords", "")
let errResp(err) = res.renderTemplate("createPackage.html", {name:name, "short-description":shortDescription, description:description, license:license, repository:repository, keywords:keywords, error:err})
let package = packages.get(name)
let package = packages.get_value(name)
if (package != null) do
errResp("Package already exists")
return
@@ -49,11 +49,11 @@ let newPackage(req, res) = do
makeChange()
return res.redirect("/package?"+url.queryStr({name:name}))
let values = {}
values.name = req.query.get("name", "")
values["short-description"] = req.query.get("short-description", "")
values.description = req.query.get("description", "")
values.license = req.query.get("license", "")
values.repository = req.query.get("repository", "")
values.keywords = req.query.get("keywords", "")
values.name = req.query.get_value("name", "")
values["short-description"] = req.query.get_value("short-description", "")
values.description = req.query.get_value("description", "")
values.license = req.query.get_value("license", "")
values.repository = req.query.get_value("repository", "")
values.keywords = req.query.get_value("keywords", "")
res.renderTemplate("createPackage.html", values)
app.all("/package/create", newPackage)
+9 -9
View File
@@ -3,22 +3,22 @@ import "database" as *
import "url.ar" as url
let editPackage(req, res) = do
let acc = account.getByToken(req.cookies.get("token", ""))
let acc = account.getByToken(req.cookies.get_value("token", ""))
if (not acc) return res.redirect("/login?"+url.queryStr({to:req.path+"?"+url.queryStr(req.formdata)}))
let name = req.query.get("name", "")
let pkg = packages.get(name)
let name = req.query.get_value("name", "")
let pkg = packages.get_value(name)
if ((not pkg) || pkg.owner != acc.id) do
res.code = 404
res.renderTemplate("404.html", {})
return
if (req.method == "POST") do
let shortDescription = req.formdata.get("short-description", "")
let description = req.formdata.get("description", "")
let license = req.formdata.get("license", "")
let repository = req.formdata.get("repository", "")
let keywords = req.formdata.get("keywords", "")
let shortDescription = req.formdata.get_value("short-description", "")
let description = req.formdata.get_value("description", "")
let license = req.formdata.get_value("license", "")
let repository = req.formdata.get_value("repository", "")
let keywords = req.formdata.get_value("keywords", "")
let errResp(err) = res.renderTemplate("editPackage.html", {name:name, "short-description":shortDescription, description:description, license:license, repository:repository, keywords:keywords, error:err})
let package = packages.get(name)
let package = packages.get_value(name)
if (package == null) do
errResp("Package does not exist")
return
+5 -5
View File
@@ -5,8 +5,8 @@ import "bleach.ar" as bleach
import "render" as renderer
let search(req, res) = do
let acc = account.getByToken(req.cookies.get("token", ""))
let query = req.query.get("q", "")
let acc = account.getByToken(req.cookies.get_value("token", ""))
let query = req.query.get_value("q", "")
let lowerQuery = query.lower()
let keys = packages.keys()
keys.sort()
@@ -16,16 +16,16 @@ let search(req, res) = do
for (i from 0 to keys.length) do
let name = keys[i]
let package = packages[name]
let element() = "<a href='/package?"+url.queryStr({name:name})+"'><h1>"+bleach.clean(name)+"</h1><p>"+bleach.clean(package.get("short-description",""))+"</p></a>"
let element() = "<a href='/package?"+url.queryStr({name:name})+"'><h1>"+bleach.clean(name)+"</h1><p>"+bleach.clean(package.get_value("short-description",""))+"</p></a>"
if (lowerQuery in name.lower()) do
namedSearch.append(element())
results += 1
continue
else if (lowerQuery in package.get("description", "").lower()) do
else if (lowerQuery in package.get_value("description", "").lower()) do
descriptionSearch.append(element())
results += 1
continue
let keywords = package.get("keywords", [])
let keywords = package.get_value("keywords", [])
for (j from 0 to keywords.length) do
let keyword = keywords[j].strip()
if (keyword.lower() in lowerQuery) do