2019-02-19 17:51:38 -06:00

33 lines
1.2 KiB
Nim

import bcrypt, nre, strutils, uuids
import ./configuration
import ./db
import ./models
proc randomString*(cost: int8): string = genSalt(cost)
proc hashWithSalt*(pwd: string, salt: string): tuple[hash, salt: string] =
result = (hash: hash(pwd, salt), salt: salt)
proc hashPwd*(pwd: string, cost: int8): tuple[pwd, salt:string] =
let hashed = hashWithSalt(pwd, genSalt(cost))
result = (pwd: hashed.hash, salt: hashed.salt)
proc validatePwd*(u: User, givenPwd: string): bool =
let salt = u.salt
result = compare(u.hashedPwd, hash(givenPwd, salt))
proc nameToSlug*(name: string): string =
result = name.replace(re"\W+", "-").toLower
proc getMeasureForSlug*(ctx: PMApiContext, userId: UUID, slug: string): Measure =
let measures = ctx.db.findMeasuresByUserIdAndSlug($userId, slug)
if measures.len < 1: raiseEx NotFoundError, "no measure named '" & slug & "'"
result = measures[0]
proc getMeasurementForMeasure*(ctx: PMApiContext, measureId, measurementId: UUID): Measurement =
let measurements = ctx.db.findMeasurementsByMeasureIdAndId($measureId, $measurementId)
if measurements.len < 1: raiseEx NotFoundError, "no measurement for is '" & $measurementId & "'"
result = measurements[0]