| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- # SPDX-License-Identifier: AGPL-3.0-only
- import strutils, sequtils, uri, tables, json
- from jester import Request, cookies
- import ../views/general
- import ".."/[utils, prefs, types]
- export utils, prefs, types, uri, json
- template savePref*(pref, value: string; req: Request; expire=false) =
- if not expire or pref in cookies(req):
- let sameSite = if cfg.useHttps: None else: Lax
- setCookie(pref, value, daysForward(when expire: -10 else: 360),
- httpOnly=true, secure=cfg.useHttps, sameSite=sameSite, path="/")
- template requestPrefs*(): untyped {.dirty.} =
- getPrefs(cookies(request), params(request))
- template showError*(error: string; cfg: Config): string =
- renderMain(renderError(error), request, cfg, requestPrefs(), "Error")
- template getPath*(): untyped {.dirty.} =
- $(parseUri(request.path) ? filterParams(request.params))
- template refPath*(): untyped {.dirty.} =
- if @"referer".len > 0: @"referer" else: "/"
- template getCursor*(): string =
- let cursor = @"cursor"
- decodeUrl(if cursor.len > 0: cursor else: @"max_position", false)
- template getCursor*(req: Request): string =
- let cursor = req.params.getOrDefault("cursor")
- decodeUrl(if cursor.len > 0: cursor
- else: req.params.getOrDefault("max_position"), false)
- proc getNames*(name: string): seq[string] =
- name.strip(chars={'/'}).split(",").filterIt(it.len > 0)
- template applyUrlPrefs*() {.dirty.} =
- if @"prefs".len > 0:
- var prefParams = initTable[string, string]()
- for pair in @"prefs".split(','):
- let kv = pair.split('=', maxsplit=1)
- if kv.len == 2:
- prefParams[kv[0]] = kv[1]
- elif kv.len == 1 and kv[0].len > 0:
- prefParams[kv[0]] = ""
- genApplyPrefs(prefParams, request)
- # Rebuild URL without prefs param
- var params: seq[(string, string)]
- for k, v in request.params:
- if k != "prefs":
- params.add (k, v)
- if params.len > 0:
- let cleanUrl = request.getNativeReq.url ? params
- redirect($cleanUrl)
- else:
- redirect(request.path)
- template respJson*(node: JsonNode) =
- resp $node, "application/json"
|