@@ -32,16 +32,36 @@ object LocalFiles {
3232 }
3333 }
3434
35- private fun serveFiles (path : String , connection : Socket ) {
35+ private fun serveFiles (id : String , connection : Socket ) {
36+ val path = directory.toString() + " /" + id
37+ val background = extensions.get(id)?.optJSONObject(" background" )?.optString(" page" )
3638 runCatching {
3739 connection.inputStream.bufferedReader().use {
3840 val requestLine = it.readLine()
41+ if (requestLine == null ) {
42+ connection.close()
43+ return
44+ }
3945 val request = requestLine.split(" " )
4046 if (request[0 ] == " GET" && request[2 ] == " HTTP/1.1" ) {
4147 val name = request[1 ]
4248 val file = File (path + name)
43- if (file.exists()) {
44- val data = file.readBytes()
49+ if (! file.exists() && name != " /ChromeXt.js" ) {
50+ connection.outputStream.write(" HTTP/1.1 404 Not Found\r\n\r\n " .toByteArray())
51+ } else if (file.isDirectory() || name.contains(" .." )) {
52+ connection.outputStream.write(" HTTP/1.1 403 Forbidden\r\n\r\n " .toByteArray())
53+ } else {
54+ val data =
55+ if (name == " /" + background) {
56+ val html = FileReader (file).use { it.readText() }
57+ html
58+ .replaceFirst(" <head>" , " <head>\n <script src='/ChromeXt.js'></script>" )
59+ .toByteArray()
60+ } else if (name == " /ChromeXt.js" ) {
61+ (" const extension = ${extensions.get(id)!! } ;\n " + script).toByteArray()
62+ } else {
63+ file.readBytes()
64+ }
4565 val type = URLConnection .guessContentTypeFromName(name) ? : " text/plain"
4666 val response =
4767 arrayOf(
@@ -52,8 +72,6 @@ object LocalFiles {
5272 connection.outputStream.write(
5373 (response.joinToString(" \r\n " ) + " \r\n\r\n " ).toByteArray())
5474 connection.outputStream.write(data)
55- } else {
56- connection.outputStream.write(" HTTP/1.1 404 Not Found\r\n\r\n " .toByteArray())
5775 }
5876 connection.close()
5977 }
@@ -62,28 +80,28 @@ object LocalFiles {
6280 .onFailure { Log .ex(it) }
6381 }
6482
65- private fun startServer (name : String ) {
66- if (extensions.containsKey(name ) && ! extensions.get(name )!! .has(" port" )) {
83+ private fun startServer (id : String ) {
84+ if (extensions.containsKey(id ) && ! extensions.get(id )!! .has(" port" )) {
6785 val server = ServerSocket ()
6886 server.bind(null )
6987 val port = server.getLocalPort()
70- Log .d(" Listening at port ${port} " )
88+ Log .d(" Listening at port ${port} for ${id} " )
7189 thread {
7290 runCatching {
7391 while (true ) {
7492 val socket = server.accept()
75- thread { serveFiles(directory.toString() + " / " + name , socket) }
93+ thread { serveFiles(id , socket) }
7694 }
7795 }
7896 .onFailure {
7997 Log .ex(it)
8098 server.close()
81- if (extensions.get(name )?.optInt(" port" ) == port) {
82- extensions.get(name )!! .remove(" port" )
99+ if (extensions.get(id )?.optInt(" port" ) == port) {
100+ extensions.get(id )!! .remove(" port" )
83101 }
84102 }
85103 }
86- extensions.get(name )!! .put(" port" , server.getLocalPort())
104+ extensions.get(id )!! .put(" port" , server.getLocalPort())
87105 }
88106 }
89107
0 commit comments