mirror of
https://github.com/Open-Argon/http.ar.git
synced 2026-10-28 09:43:55 +00:00
impliment neon.ar and add more to formdata.ar
This commit is contained in:
1 parent
c1cbb9b918
commit
c0713ff6ee
9 files changed
+60
-28
No files matched your search
@@ -9,6 +9,7 @@
|
||||
<video src="/movie.mp4" controls width="500px"></video>
|
||||
<form action="/form" method="post">
|
||||
<input type="text" name="name" />
|
||||
<input type="email" name="email" />
|
||||
<input type="submit" value="Submit" />
|
||||
</form>
|
||||
</body>
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
[]
|
||||
[{"Name":"neon.ar","Version":"beta1.0.0","URL":"http://isotope.wbell.dev/isotope-download?name=neon.ar\u0026version=beta1.0.0"}]
|
||||
@@ -0,0 +1 @@
|
||||
let inDebug = false
|
||||
+19
-11
@@ -1,3 +1,14 @@
|
||||
import "url" as url
|
||||
|
||||
let __makeFile(name, type, data) = do
|
||||
let File = {name: name, type: type, data: data}
|
||||
let save(path) = do
|
||||
let file = file.write(path)
|
||||
file.buffer(data)
|
||||
file.close()
|
||||
File.save = save
|
||||
return File
|
||||
|
||||
let __multipart(req, res) = do
|
||||
let boundary = buffer().from(req.headers["content-type"].splitN("boundary=", 2)[1])
|
||||
let newLineSplit = buffer().from("\r\n\r\n")
|
||||
@@ -22,15 +33,8 @@ let __multipart(req, res) = do
|
||||
if (disposition[0] == "form-data") do
|
||||
let name = json.parse(disposition[1].splitN("=", 2)[1])
|
||||
if (disposition.length >= 3) do
|
||||
req.files[name] = {}
|
||||
req.files[name].name = json.parse(disposition[2].splitN("=", 2)[1])
|
||||
req.files[name].type = headers["content-type"]
|
||||
req.files[name].data = body
|
||||
let save(path) = do
|
||||
let file = file.write(path)
|
||||
file.buffer(body)
|
||||
file.close()
|
||||
req.files[name].save = save
|
||||
let filename = json.parse(disposition[2].splitN("=", 2)[1])
|
||||
req.files[name] = __makeFile(filename, headers["content-type"], body)
|
||||
else do
|
||||
req.formdata[name] = body.to("string")
|
||||
res.next()
|
||||
@@ -41,6 +45,10 @@ let formdata(req, res) = do
|
||||
req.files = {}
|
||||
|
||||
if (req.method != "POST") return res.next()
|
||||
if ("content-type" in req.headers && req.headers["content-type"].lower().startswith("multipart/form-data")) do
|
||||
return __multipart(req, res)
|
||||
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()
|
||||
@@ -3,6 +3,7 @@ import "parseRequest" as parseRequest
|
||||
import "pathCompare" as pathCompare
|
||||
import "url" as url
|
||||
import "version" as version
|
||||
import "renderTemplate" as renderTemplate
|
||||
|
||||
let handle(routes, conn, onErr) = do
|
||||
try do
|
||||
@@ -85,7 +86,8 @@ let handle(routes, conn, onErr) = do
|
||||
conn.close()
|
||||
for (i from 0 to request.on.end.length) do
|
||||
request.on.end[i]()
|
||||
|
||||
response.renderTemplate(path, values) = do
|
||||
response.send(renderTemplate.renderTemplate(path, values))
|
||||
response.onErr(err) = do
|
||||
if (onErr) onErr(err)
|
||||
else term.log(err)
|
||||
|
||||
@@ -3,6 +3,15 @@ import "logger" as *
|
||||
import "static" as *
|
||||
import "cookie" as *
|
||||
import "formdata" as *
|
||||
import "debug" as __debug
|
||||
|
||||
let setDebug(value) = do
|
||||
if (__debug.inDebug == value) return
|
||||
__debug.inDebug = value
|
||||
if (value) do
|
||||
term.log("Debug mode enabled")
|
||||
else do
|
||||
term.log("Debug mode disabled")
|
||||
|
||||
let server() = do
|
||||
let class = {port: 3000, numThreads: 1, callback: ()=term.log("Server running on port "+class.port)}
|
||||
|
||||
+1
-1
@@ -13,7 +13,7 @@ let parse(conn) = do
|
||||
let headers = {}
|
||||
for (i from 1 to split.length) do
|
||||
let header = split[i].splitN(": ", 2)
|
||||
if (header.length < 2) break
|
||||
if (header.length != 2) break
|
||||
let name = header[0].lower()
|
||||
let value = header[1]
|
||||
headers[name] = value
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
import "neon.ar" as neon
|
||||
import "debug" as debug
|
||||
|
||||
let templates = {}
|
||||
|
||||
let templatesPath = path.join([program.cwd, "templates"])
|
||||
|
||||
let renderTemplate(path, values) = do
|
||||
if (path in templates && (not debug.inDebug)) return templates[path].render(values)
|
||||
let template = neon.template(path)
|
||||
if (not debug.inDebug) templates[path] = template
|
||||
return template.render(values)
|
||||
+13
-14
@@ -24,21 +24,20 @@ let encode(data) = do
|
||||
i = i + 1
|
||||
return encoded.join("")
|
||||
|
||||
let decodeURLQuery(querytext) = do
|
||||
let query = {}
|
||||
let querySplit = querytext.split("&")
|
||||
for (i from 0 to querySplit.length) do
|
||||
let queryItem = querySplit[i].splitN("=", 2)
|
||||
let nameDecoded = decode(queryItem[0])
|
||||
if (queryItem.length != 2) query[nameDecoded] = ""
|
||||
else query[nameDecoded] = decode(queryItem[1])
|
||||
return query
|
||||
|
||||
let split(url) = do
|
||||
let split = url.split("?")
|
||||
if (split.length == 1) do
|
||||
return {path: split[0], query: {}}
|
||||
else do
|
||||
querytext = split[1:].join("?")
|
||||
let query = {}
|
||||
let querySplit = querytext.split("&")
|
||||
for (i from 0 to querySplit.length) do
|
||||
let queryItem = querySplit[i].split("=")
|
||||
if (queryItem.length == 1) do
|
||||
query[decode(queryItem[0])] = ""
|
||||
else do
|
||||
query[decode(queryItem[0])] = decode(queryItem[1])
|
||||
return {path: split[0], query: query}
|
||||
let split = url.splitN("?", 2)
|
||||
if (split.length != 2) return {path: split[0], query: {}}
|
||||
else return {path: split[0], query: decodeURLQuery(split[1])}
|
||||
|
||||
let queryStr(query) = do
|
||||
let queryStr = []
|
||||
|
||||
Reference in new issue
Block a user