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