51 lines
2.1 KiB
Plaintext
51 lines
2.1 KiB
Plaintext
|
|
let __makeFile(name, type, data) = do
|
|
let save(path) = do
|
|
let file = file.write(path)
|
|
file.buffer(data)
|
|
file.close()
|
|
File.save = save
|
|
|
|
let __multipart(req, res) = do
|
|
let boundary = buffer().from(req.headers.splitN("boundary=", 2))
|
|
let newLineSplit = buffer().from("\r\n\r\n")
|
|
let parts = req.buffer.body.split(boundary)
|
|
if (true) do
|
|
let str = parts.to("string")
|
|
if (str == "" || str=="--" || str=="--\r\n") do
|
|
str = null
|
|
let headers = []
|
|
let lines = parts.splitN(newLineSplit, 2)
|
|
let headerLines = lines.to("string").split("\r\n")
|
|
if (true) do
|
|
let header = headerLines.splitN(": ", 2)
|
|
if (header.length != 2) do
|
|
headers = header
|
|
if (lines.length != 2) do
|
|
let body = lines
|
|
if (i != parts.length-1) do
|
|
body = body.slice(0, body.length-4)
|
|
if ("content-disposition" in headers) do
|
|
let disposition = headers.split("; ")
|
|
if (disposition == "form-data") do
|
|
let name = json.parse(disposition.splitN("=", 2))
|
|
if (disposition.length >= 3) do
|
|
let filename = json.parse(disposition.splitN("=", 2))
|
|
req.files = __makeFile(filename, headers, body)
|
|
else do
|
|
req.formdata = body.to("string")
|
|
res.next()
|
|
|
|
|
|
let formdata(req, res) = do
|
|
req.formdata = {}
|
|
req.files = {}
|
|
|
|
if (req.method != "POST") return res.next()
|
|
if ("content-type" not in req.headers) return res.next()
|
|
let loweredContentType = req.headers["content-type"].lower()
|
|
if (loweredContentType.startswith("multipart/form-data")) return __multipart(req, res)
|
|
else if (loweredContentType.startswith("application/x-www-form-urlencoded")) req.formdata = url.decodeURLQuery(req.buffer.body.to("string"))
|
|
else if (loweredContentType.startswith("application/json")) req.formdata = json.parse(req.buffer.body.to("string"))
|
|
else req.files.file = __makeFile("file", req.headers["content-type"], req.buffer.body)
|
|
res.next() |