comparison src/luan/modules/http/Http.luan @ 1259:e8020216dee7

add Luan.to_luan and fix multipart/form-data
author Franklin Schmidt <fschmidt@gmail.com>
date Sun, 23 Sep 2018 17:58:40 -0600
parents e38f5869e9df
children 4b5b84853f6f
comparison
equal deleted inserted replaced
1258:e4d7a3114fa8 1259:e8020216dee7
2 local Luan = require "luan:Luan.luan" 2 local Luan = require "luan:Luan.luan"
3 local error = Luan.error 3 local error = Luan.error
4 local ipairs = Luan.ipairs or error() 4 local ipairs = Luan.ipairs or error()
5 local pairs = Luan.pairs or error() 5 local pairs = Luan.pairs or error()
6 local type = Luan.type or error() 6 local type = Luan.type or error()
7 local to_luan = Luan.to_luan or error()
7 local Io = require "luan:Io.luan" 8 local Io = require "luan:Io.luan"
8 local Html = require "luan:Html.luan" 9 local Html = require "luan:Html.luan"
9 local Table = require "luan:Table.luan" 10 local Table = require "luan:Table.luan"
10 local clear = Table.clear or error() 11 local clear = Table.clear or error()
11 local Package = require "luan:Package.luan" 12 local Package = require "luan:Package.luan"
12 local String = require "luan:String.luan" 13 local String = require "luan:String.luan"
13 local lower = String.lower or error() 14 local lower = String.lower or error()
14 local matches = String.matches or error() 15 local matches = String.matches or error()
15 local IoLuan = require "java:luan.modules.IoLuan" 16 local IoLuan = require "java:luan.modules.IoLuan"
16 local JavaLuan = require "java:luan.Luan" 17 local LuanJava = require "java:luan.Luan"
18 local Request = require "java:luan.webserver.Request"
17 local Response = require "java:luan.webserver.Response" 19 local Response = require "java:luan.webserver.Response"
18 local ResponseOutputStream = require "java:luan.webserver.ResponseOutputStream" 20 local ResponseOutputStream = require "java:luan.webserver.ResponseOutputStream"
19 local Status = require "java:luan.webserver.Status" 21 local Status = require "java:luan.webserver.Status"
20 local OutputStreamWriter = require "java:java.io.OutputStreamWriter" 22 local OutputStreamWriter = require "java:java.io.OutputStreamWriter"
21 local HashMap = require "java:java.util.HashMap" 23 local HashMap = require "java:java.util.HashMap"
22 24
23 25
24 local Http = {} 26 local Http = {}
27
28 local old_java_to_luan = Luan.java_to_luan or error()
29
30 local function java_to_luan(obj)
31 obj = old_java_to_luan(obj)
32 if type(obj)=="java" and obj.instanceof(Request.MultipartFile) then
33 return {
34 filename = obj.filename
35 content_type = obj.contentType
36 content = obj.content
37 }
38 end
39 return obj
40 end
25 41
26 function Http.new_request(java) 42 function Http.new_request(java)
27 local this = {} 43 local this = {}
28 Http.request = this 44 Http.request = this
29 if java == nil then 45 if java == nil then
38 this.method = java.method or error() 54 this.method = java.method or error()
39 this.raw_path = java.rawPath or error() 55 this.raw_path = java.rawPath or error()
40 this.path = java.path or error() 56 this.path = java.path or error()
41 this.protocol = java.protocol or error() 57 this.protocol = java.protocol or error()
42 this.scheme = java.scheme or error() 58 this.scheme = java.scheme or error()
43 this.headers = JavaLuan.toLuan(java.headers) 59 this.headers = to_luan(java.headers)
44 this.parameters = JavaLuan.toLuan(java.parameters) 60 this.parameters = to_luan(java.parameters,java_to_luan)
45 this.cookies = JavaLuan.toLuan(java.cookies) 61 this.cookies = to_luan(java.cookies)
46 end 62 end
47 63
48 function this.url() 64 function this.url()
49 return this.scheme.."://"..this.headers["host"]..this.raw_path 65 return this.scheme.."://"..this.headers["host"]..this.raw_path
50 end 66 end
133 local java = response.java or error() 149 local java = response.java or error()
134 java.status = Status.getStatus(response.status) 150 java.status = Status.getStatus(response.status)
135 for name, value in pairs(response.headers) do 151 for name, value in pairs(response.headers) do
136 type(name)=="string" or "header name must be string" 152 type(name)=="string" or "header name must be string"
137 name = lower(name) 153 name = lower(name)
138 value = JavaLuan.toJava(value) 154 value = LuanJava.toJava(value)
139 java.headers.put(name,value) 155 java.headers.put(name,value)
140 end 156 end
141 response.writer and response.writer.close() 157 response.writer and response.writer.close()
142 return java 158 return java
143 end 159 end