39 lines
920 B
Nim
39 lines
920 B
Nim
|
# inspired by https://github.com/h3rald/nimhttpd
|
||
|
|
||
|
import asynchttpserver
|
||
|
import types
|
||
|
import mimetypes
|
||
|
import uri
|
||
|
import os
|
||
|
import strutils
|
||
|
|
||
|
var mimes {.threadvar.}: MimeDB
|
||
|
|
||
|
proc initFileserver*() =
|
||
|
mimes = newMimeTypes()
|
||
|
|
||
|
proc sendStaticFile(path: string): NimHttpResponse =
|
||
|
var ext = path.splitFile.ext
|
||
|
if ext == "":
|
||
|
ext = ".txt"
|
||
|
ext = ext[1 .. ^1]
|
||
|
let mimetype = mimes.getMimetype(ext.toLowerAscii)
|
||
|
var file = path.readFile
|
||
|
return NimHttpResponse(
|
||
|
code: Http200,
|
||
|
msg: file,
|
||
|
headers: {"Content-Type": mimetype}.newHttpHeaders
|
||
|
)
|
||
|
|
||
|
proc servePath*(req: Request): NimHttpResponse =
|
||
|
let path = "client" & req.url.path.decodeUrl()
|
||
|
#if path.existsDir:
|
||
|
# return sendDirContents(path)
|
||
|
if path.existsFile:
|
||
|
return sendStaticFile(path)
|
||
|
if existsFile(path & "index.html"):
|
||
|
return sendStaticFile(path & "index.html")
|
||
|
else:
|
||
|
raise newException(notFoundException, "NOT_FOUND")
|
||
|
|