Files
isotope-server/routes/isotope/push.ar
T

50 lines
1.8 KiB
Plaintext

import "server" as *
import "randstr" as *
import "database" as *
let push(req, res) = do
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_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_value(name)
if (package == null) do
res.code = 404
return res.send("Package not found")
if (version not in package.versions.keys() && not validName(version)) do
res.code = 400
res.send("Invalid version type")
return
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")
if (acc.id != package.owner) do
res.code = 403
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_value(version)
let directory = path.join([program.cwd, "data", "packages", name])
if (currentVersion == null) do
currentVersion = {name:name, version:version}
package.versions[version] = currentVersion
let filename = version+".tar.gz"
let p = path.join([directory, filename])
path.mkAllDir(directory)
file.save(p)
currentVersion.filename = filename
package.order[version] = time.now().unix()
if (latest == "true") do
package.versions['latest'] = {redirect: version}
makeChange()
res.send("OK")
app.post("/isotope-push", push)