diff --git a/pit.nimble b/pit.nimble index 278c4c6..ac81e99 100644 --- a/pit.nimble +++ b/pit.nimble @@ -11,5 +11,5 @@ bin = @["pit", "pit_api"] # Dependencies -requires @[ "nim >= 0.18.0", "cliutils 0.5.0", "docopt 0.6.5", "jester 0.2.0", - "langutils >= 0.4.0", "timeutils 0.3.0", "uuids 0.1.9" ] +requires @[ "nim >= 0.19.0", "cliutils 0.6.0", "docopt 0.6.8", "jester 0.4.1", + "langutils >= 0.4.0", "timeutils 0.3.0", "uuids 0.1.10" ] diff --git a/src/pit_api.nim b/src/pit_api.nim index dd6bc6e..a208333 100644 --- a/src/pit_api.nim +++ b/src/pit_api.nim @@ -1,7 +1,7 @@ ## Personal Issue Tracker API Interface ## ==================================== -import asyncdispatch, cliutils, docopt, jester, json, logging, sequtils, strutils +import asyncdispatch, cliutils, docopt, jester, json, logging, options, sequtils, strutils import nre except toSeq import pitpkg/private/libpit @@ -18,6 +18,20 @@ const TXT = "text/plain" proc raiseEx(reason: string): void = raise newException(Exception, reason) +template halt(code: HttpCode, + headers: RawHeaders, + content: string): typed = + ## Immediately replies with the specified request. This means any further + ## code will not be executed after calling this template in the current + ## route. + bind TCActionSend, newHttpHeaders + result[0] = CallbackAction.TCActionSend + result[1] = code + result[2] = some(headers) + result[3] = content + result.matched = true + break allRoutes + template checkAuth(cfg: PitApiCfg) = ## Check this request for authentication and authorization information. ## If the request is not authorized, this template sets up the 401 response @@ -40,11 +54,10 @@ template checkAuth(cfg: PitApiCfg) = except: stderr.writeLine "Auth failed: " & getCurrentExceptionMsg() - response.data[0] = CallbackAction.TCActionSend - response.data[1] = Http401 - response.data[2]["WWW-Authenticate"] = "Bearer" - response.data[2]["Content-Type"] = TXT - response.data[3] = getCurrentExceptionMsg() + halt( + Http401, + headers & @{"Content-Type": TXT}, + getCurrentExceptionMsg()) proc start*(cfg: PitApiCfg) = diff --git a/src/pitpkg/version.nim b/src/pitpkg/version.nim index 8fe58f3..9073d69 100644 --- a/src/pitpkg/version.nim +++ b/src/pitpkg/version.nim @@ -1 +1 @@ -const PIT_VERSION = "4.4.2" +const PIT_VERSION* = "4.4.3"