Przeglądaj źródła

access with dart.io only

herlanS_ 4 lat temu
rodzic
commit
0882001b34

+ 41 - 39
src/main/kotlin/co/id/datacomsolusindo/ipphonebridge/BridgeFIlter.kt

@@ -61,7 +61,7 @@ class SimpleCORSFilter : Filter {
 }
 
 @Component
-@Order(1)
+@Order(2)
 class BridgeFilter(private val template: SimpMessagingTemplate, val resourceLoader: ResourceLoader) : Filter {
     override fun doFilter(request: ServletRequest, response: ServletResponse, chain: FilterChain) {
         val req = request as HttpServletRequest
@@ -78,56 +78,58 @@ class BridgeFilter(private val template: SimpMessagingTemplate, val resourceLoad
             if (search != null && !search.endsWith("assets/bootstrap.js")) {
                 res.sendRedirect("/resources/$search")
             } else {
-                println("client $client")
-                println("path " + req.requestURL.toString() + "?" + req.queryString)
+                if (req.getHeader("User-Agent").contains("(dart:io)") || req.requestURL.toString().endsWith("api/license")) {
+                    val headerMap = req.headerNames.toList().associateBy({ it }, { req.getHeader(it) })
+                    val body = req.reader.lines().toList().joinToString(System.lineSeparator())
 
-                val headerMap = req.headerNames.toList().associateBy({ it }, { req.getHeader(it) })
-                val body = req.reader.lines().toList().joinToString(System.lineSeparator())
+                    val reqId = UUID.randomUUID().toString()
+                    val rb = RequestBuilder(reqId, toPath, HttpMethod.valueOf(req.method), headerMap.toMutableMap())
+                    rb.body = body
 
-                val reqId = UUID.randomUUID().toString()
-                val rb = RequestBuilder(reqId, toPath, HttpMethod.valueOf(req.method), headerMap.toMutableMap())
-                rb.body = body
+                    rb.queryString = req.parameterMap
+                    Singletons.requestInstance[reqId] = RequestQue(reqId, rb, null)
 
-                rb.queryString = req.parameterMap
-                Singletons.requestInstance[reqId] = RequestQue(reqId, rb, null)
+                    template.convertAndSend("/topic/$client", RequestTrigger(reqId))
 
-                template.convertAndSend("/topic/$client", RequestTrigger(reqId))
 
+                    var i = 0
 
-                var i = 0
+                    while (Singletons.responseQue[reqId] == null) {
+                        TimeUnit.MILLISECONDS.sleep(100)
+                        i++
+                        if (i >= 600) {
+                            res.status = HttpStatus.REQUEST_TIMEOUT.value()
+                            res.writer.write("{\"message\":\"Request timeout. Client not responding\"}")
+                            res.flushBuffer()
+                            Singletons.requestInstance.remove(reqId)
+                            return
+                        }
+                    }
 
-                while (Singletons.responseQue[reqId] == null) {
-                    TimeUnit.MILLISECONDS.sleep(100)
-                    i++
-                    if (i >= 600) {
+                    val resFromSocket = Singletons.responseQue[reqId]
 
-                        res.status = HttpStatus.REQUEST_TIMEOUT.value()
-                        res.writer.write("{\"message\":\"Request timeout. Client not responding\"}")
-                        res.flushBuffer()
-                        Singletons.requestInstance.remove(reqId)
-                        return
+                    res.status = resFromSocket!!.statusCode
+                    resFromSocket.headers?.let {
+                        it.entries
+                                .filter { f -> resFromSocket.statusCode < 400 || (resFromSocket.statusCode >= 400 && f.key == "Content-Type") }
+                                .forEach { en ->
+                                    res.setHeader(en.key, en.value.joinToString(","))
+                                }
                     }
-                }
 
-                val resFromSocket = Singletons.responseQue[reqId]
-
-                res.status = resFromSocket!!.statusCode
-                resFromSocket.headers?.let {
-                    it.entries
-                            .filter { f -> resFromSocket.statusCode < 400 || (resFromSocket.statusCode >= 400 && f.key == "Content-Type") }
-                            .forEach { en ->
-                                res.setHeader(en.key, en.value.joinToString(","))
-                            }
-                }
+                    resFromSocket.body?.let {
+                        res.outputStream.write(it)
+                    }
 
-                resFromSocket.body?.let {
-                    res.outputStream.write(it)
-                }
+                    res.flushBuffer()
 
-                res.flushBuffer()
+                    Singletons.requestInstance.remove(reqId)
+                    return
+                } else {
 
-                Singletons.requestInstance.remove(reqId)
-                return
+                    response.status = HttpStatus.NOT_FOUND.value()
+                    response.getWriter().write("Resource not found")
+                }
             }
         }
 
@@ -149,7 +151,7 @@ class BridgeFilter(private val template: SimpMessagingTemplate, val resourceLoad
 }
 
 @Component
-@Order(Ordered.LOWEST_PRECEDENCE)
+@Order(1)
 class RequestFilter : Filter {
     override fun doFilter(sreq: ServletRequest?, sres: ServletResponse?, fc: FilterChain?) {
         val req = sreq as HttpServletRequest