Skip to content

Commit

Permalink
fix
Browse files Browse the repository at this point in the history
  • Loading branch information
itsumura-h committed Feb 16, 2024
1 parent 603ee5a commit 81acc2e
Show file tree
Hide file tree
Showing 6 changed files with 51 additions and 35 deletions.
3 changes: 3 additions & 0 deletions examples/example/config.nims
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,6 @@ putEnv("DB_POSTGRES", $true) # "true" or "false"
putEnv("SESSION_TYPE", "file") # "file" or "redis"
putEnv("SESSION_DB_PATH", "./session.db") # Session file path or redis host:port. ex:"127.0.0.1:6379"
putEnv("LIBSASS", $true) # "true" or "false"

# switch("define","httpbeast")
# switch("define","httpx")
60 changes: 38 additions & 22 deletions src/basolato/core/libservers/nostd/server.nim
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,15 @@ import std/strformat
import std/tables
import std/times
import std/mimetypes
import ../../base
import ../../baseEnv
import ../../benchmark
import ../../error_page
import ../../header
import ../../logger
import ../../resources/dd_page
import ../../response
import ../../route
import ../../security/context
import ../../security/cookie
import ./request

when defined(httpbeast):
Expand Down Expand Up @@ -65,28 +64,45 @@ proc serve*(seqRoutes:seq[Routes], port=5000) =

if req.httpMethod == HttpHead:
response.setBody("")
except:
except DD:
var headers = newHttpHeaders()
headers["content-type"] = "text/html; charset=utf-8"
let exception = getCurrentException()
if exception.name == "DD".cstring:
var msg = exception.msg
msg = msg.replace(re"Async traceback:[.\s\S]*")
response = Response.new(Http200, ddPage(msg), headers)
elif exception.name == "ErrorAuthRedirect".cstring:
headers["location"] = exception.msg
headers["set-cookie"] = "session_id=; expires=31-Dec-1999 23:59:59 GMT" # Delete session id
response = Response.new(Http302, "", headers)
elif exception.name == "ErrorRedirect".cstring:
headers["location"] = exception.msg
response = Response.new(Http302, "", headers)
elif exception.name == "ErrorHttpParse".cstring:
response = Response.new(Http501, "", headers)
else:
let status = checkHttpCode(exception)
response = Response.new(status, errorPage(status, exception.msg), headers)
echoErrorMsg(&"{$response.status} {$req.httpMethod} {req.path}")
echoErrorMsg(exception.msg)
var msg = getCurrentExceptionMsg()
msg = msg.replace(re"Async traceback:[.\s\S]*")
response = Response.new(Http200, ddPage(msg), headers)
except ErrorHttpParse:
var headers = newHttpHeaders()
response = Response.new(Http501, "", headers)
except:
var headers = newHttpHeaders()
let msg = getCurrentExceptionMsg()
let status = Http500
response = Response.new(status, errorPage(status, msg), headers)
echoErrorMsg(&"{$response.status} {req.hostname} {$req.httpMethod} {req.path}")
echoErrorMsg(msg)

# except:
# var headers = newHttpHeaders()
# headers["content-type"] = "text/html; charset=utf-8"
# let exception = getCurrentException()
# if exception.name == "DD".cstring:
# var msg = exception.msg
# msg = msg.replace(re"Async traceback:[.\s\S]*")
# response = Response.new(Http200, ddPage(msg), headers)
# elif exception.name == "ErrorAuthRedirect".cstring:
# headers["location"] = exception.msg
# headers["set-cookie"] = "session_id=; expires=31-Dec-1999 23:59:59 GMT" # Delete session id
# response = Response.new(Http302, "", headers)
# elif exception.name == "ErrorRedirect".cstring:
# headers["location"] = exception.msg
# response = Response.new(Http302, "", headers)
# elif exception.name == "ErrorHttpParse".cstring:
# response = Response.new(Http501, "", headers)
# else:
# let status = checkHttpCode(exception)
# response = Response.new(status, errorPage(status, exception.msg), headers)
# echoErrorMsg(&"{$response.status} {$req.httpMethod} {req.path}")
# echoErrorMsg(exception.msg)

if response.status == HttpCode(0):
var headers = newHttpHeaders()
Expand Down
6 changes: 2 additions & 4 deletions src/basolato/core/libservers/std/server.nim
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ import ../../resources/dd_page
import ../../response
import ../../route
import ../../security/context
# import ../../security/cookie
import ./request


Expand All @@ -44,8 +43,7 @@ proc serveCore(params:(Routes, int)){.async.} =
else:
# check path match with controller routing → run middleware → run controller
let key = $(req.httpMethod) & ":" & req.path
let origin = &"{HOST_ADDR}:{PORT_NUM}"
let context = Context.new(req, origin).await
let context = Context.new(req).await
if routes.withoutParams.hasKey(key):
# withoutParams
let route = routes.withoutParams[key]
Expand Down Expand Up @@ -113,8 +111,8 @@ proc serveCore(params:(Routes, int)){.async.} =
elif response.status == HttpCode(0):
var headers = newHttpHeaders()
headers["content-type"] = "text/html; charset=utf-8"
response = Response.new(Http404, errorPage(Http404, ""), headers)
echoErrorMsg(&"{$response.status} {req.hostname} {$req.httpMethod} {req.path}")
response = Response.new(Http404, errorPage(Http404, ""), headers)

response.headers.setDefaultHeaders()
req.respond(response.status, response.body, response.headers.format()).await
Expand Down
3 changes: 1 addition & 2 deletions src/basolato/core/security/context.nim
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,9 @@ else:

type Context* = ref object
request: Request
origin:string
session: Option[Session]

proc new*(_:type Context, request:Request, origin:string):Future[Context]{.async.} =
proc new*(_:type Context, request:Request):Future[Context]{.async.} =
return Context(
request:request,
session:none(Session)
Expand Down
9 changes: 3 additions & 6 deletions src/basolato/middleware/check_csrf_token_middleware.nim
Original file line number Diff line number Diff line change
@@ -1,22 +1,18 @@
import std/asyncdispatch
import std/options
import std/times
import std/httpcore
import std/tables
import std/json
import ../core/baseEnv
import ../core/security/context
import ../core/security/session
import ../core/security/cookie
import ../core/security/csrf_token
import ../core/logger
import ../middleware


proc checkCsrfToken*(c:Context, p:Params):Future[Response] {.async.} =
result = next()
if [HttpPost, HttpPut, HttpPatch, HttpDelete].contains(c.request.httpMethod) and
not (c.request.headers.hasKey("content-type") and c.request.headers["content-type"].contains("application/json")):
echo "=== checkCsrfToken ==="
echo p.getAll()
try:
if not p.hasKey("csrf_token"):
raise newException(Exception, "csrf token is missing")
Expand All @@ -28,4 +24,5 @@ proc checkCsrfToken*(c:Context, p:Params):Future[Response] {.async.} =
raise newException(Exception, "Invalid csrf token")
return next()
except:
echoErrorMsg(getCurrentExceptionMsg())
return render(Http403, getCurrentExceptionMsg())
5 changes: 4 additions & 1 deletion src/basolato/middleware/session_from_cookie_middleware.nim
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
import std/asyncdispatch
import std/httpcore
import std/options
import std/times
import ../core/baseEnv
import ../core/security/context
import ../core/security/session
import ../core/security/cookie
import ../core/baseEnv
import ../core/logger
import ../middleware


Expand All @@ -22,4 +24,5 @@ proc sessionFromCookie*(c:Context, p:Params):Future[Response] {.async.} =
cookies.set("session_id", newSessionId, expire=timeForward(SESSION_TIME, Minutes))
return next().setCookie(cookies)
except:
echoErrorMsg(getCurrentExceptionMsg())
return render(Http500, getCurrentExceptionMsg())

0 comments on commit 81acc2e

Please sign in to comment.