Compare commits

...

2 Commits
4.4.2 ... 4.4.3

Author SHA1 Message Date
d4db66a71e Updates to compile on Nim 0.19 2019-01-17 13:18:25 -06:00
f8ccc831ef WIP Updates to compile on Nim 0.19. 2019-01-17 11:02:46 -06:00
3 changed files with 25 additions and 12 deletions

View File

@ -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.1", "docopt 0.6.8", "jester 0.4.1",
"langutils >= 0.4.0", "timeutils 0.3.0", "uuids 0.1.10" ]

View File

@ -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,
@{"Content-Type": TXT},
getCurrentExceptionMsg())
proc start*(cfg: PitApiCfg) =
@ -60,7 +73,7 @@ proc start*(cfg: PitApiCfg) =
resp("pong", TXT)
get "/issues":
checkAuth(cfg); if not authed: return true
checkAuth(cfg)
var args = queryParamsToCliArgs(request.params)
args = @["list"] & args
@ -71,10 +84,10 @@ proc start*(cfg: PitApiCfg) =
else: resp(stripAnsi(execResult[0]), TXT)
post "/issues":
checkAuth(cfg); if not authed: return true
checkAuth(cfg)
get "/issue/@issueId":
checkAuth(cfg); if not authed: return true
checkAuth(cfg)
var args = queryParamsToCliArgs(request.params)
args = @["list", @"issueId"] & args

View File

@ -1 +1 @@
const PIT_VERSION = "4.4.2"
const PIT_VERSION* = "4.4.3"