From 4965d162addbee3a5646b76a3bfeebec18f4f653 Mon Sep 17 00:00:00 2001 From: Jonathan Bernard Date: Sun, 10 Mar 2019 15:59:02 -0500 Subject: [PATCH] Change the measure model: less pre-determined, more configurable. --- api/src/main/nim/personal_measure_api.nim | 19 ++++++++++- .../main/nim/personal_measure_apipkg/api.nim | 33 +++++++++++-------- .../nim/personal_measure_apipkg/models.nim | 21 +----------- .../20190214122514-initial-schema-up.sql | 5 --- api/temp/auth-token-jdb.txt | 1 + api/temp/credential | 1 + api/temp/pm-api | 1 + web/src/models.d.ts | 6 +--- 8 files changed, 43 insertions(+), 44 deletions(-) create mode 100644 api/temp/auth-token-jdb.txt create mode 120000 api/temp/credential create mode 120000 api/temp/pm-api diff --git a/api/src/main/nim/personal_measure_api.nim b/api/src/main/nim/personal_measure_api.nim index 7dbaf80..09b3b12 100644 --- a/api/src/main/nim/personal_measure_api.nim +++ b/api/src/main/nim/personal_measure_api.nim @@ -1,4 +1,4 @@ -import cliutils, docopt, logging, jester, json, os, strutils, tables +import cliutils, docopt, logging, jester, json, os, sequtils, strutils, tables import personal_measure_apipkg/api import personal_measure_apipkg/configuration @@ -64,6 +64,7 @@ Usage: personal_measure_api test [options] personal_measure_api serve [options] personal_measure_api hashpwd [options] + personal_measure_api create-admin Options: @@ -77,6 +78,22 @@ Options: let args = docopt(doc, version = PM_API_VERSION) let ctx = initContext(args) + if args["create-admin"]: + let allUsers = ctx.db.getAllUsers(); + if allUsers.anyIt(it.isAdmin): + raise newException(Exception, "admin user already exists, refusing to create a new admin") + + let pwdAndSalt = hashPwd($args[""], ctx.cfg.pwdCost) + + let adminUser = User( + displayName: "Admin", + email: $args[""], + hashedPwd: pwdAndSalt.pwd, + salt: pwdAndSalt.salt, + isAdmin: true) + + echo ctx.db.createUser(adminUser) + if args["hashpwd"]: if args["--salt"]: echo hashWithSalt($args[""], $args["--salt"]) diff --git a/api/src/main/nim/personal_measure_apipkg/api.nim b/api/src/main/nim/personal_measure_apipkg/api.nim index 9dd1f06..d79e799 100644 --- a/api/src/main/nim/personal_measure_apipkg/api.nim +++ b/api/src/main/nim/personal_measure_apipkg/api.nim @@ -251,6 +251,25 @@ proc start*(ctx: PMApiContext): void = resp(Http200, $(%session.user), JSON) + put "/user": + checkAuth() + + try: + let jsonBody = parseJson(request.body) + var updatedUser = session.user + + # if jsonBody.hasKey("email") # TODO: add verification? + if jsonBody.hasKey("displayName"): + updatedUser.displayName = jsonBody["displayName"].getStr() + + jsonResp(Http200, $(%ctx.db.updateUser(updatedUser))) + + except JsonParsingError: jsonResp(Http400, getCurrentExceptionMsg()) + except BadRequestError: jsonResp(Http400, getCurrentExceptionMsg()) + except: + error "Could not update user information:\n\t" & getCurrentExceptionMsg() + jsonResp(Http500) + get "/users": checkAuth(true) @@ -381,19 +400,7 @@ proc start*(ctx: PMApiContext): void = slug: slug, name: name, description: jsonBody.getIfExists("description").getStr(""), - domainSource: - if jsonBody.hasKey("domainSource"): some(jsonBody["domainSource"].getStr) - else: none[string](), - domainUnits: jsonBody.getIfExists("domainUnits").getStr(""), - rangeSource: - if jsonBody.hasKey("rangeSource"): some(jsonBody["rangeSource"].getStr) - else: none[string](), - rangeUnits: jsonBody.getIfExists("rangeUnits").getStr(""), - analysis: @[]) - - if jsonBody.hasKey("analysis"): - for a in jsonBody["analysis"].getElems: - newMeasure.analysis.add(a.getStr) + config: jsonBody.getOrFail("config")) resp($(%ctx.db.createMeasure(newMeasure)), JSON) diff --git a/api/src/main/nim/personal_measure_apipkg/models.nim b/api/src/main/nim/personal_measure_apipkg/models.nim index 70f9e7c..c97c4e8 100644 --- a/api/src/main/nim/personal_measure_apipkg/models.nim +++ b/api/src/main/nim/personal_measure_apipkg/models.nim @@ -23,11 +23,7 @@ type slug*: string name*: string description*: string - domainSource*: Option[string] - domainUnits*: string - rangeSource*: Option[string] - rangeUnits*: string - analysis*: seq[string] + config*: JsonNode Measurement* = object id*: UUID @@ -81,18 +77,3 @@ proc `%`*(tok: ApiToken): JsonNode = if tok.expires.isSome: result["expires"] = %(tok.expires.get.formatIso8601) - -proc `%`*(m: Measure): JsonNode = - result = %*{ - "id": $m.id, - "userId": $m.userId, - "slug": m.slug, - "name": m.name, - "description": m.description, - "domainUnits": m.domainUnits, - "rangeUnits": m.rangeUnits, - "analysis": m.analysis - } - - if m.domainSource.isSome: result["domainSource"] = %(m.domainSource.get) - if m.rangeSource.isSome: result["rangeSource"] = %(m.rangeSource.get) diff --git a/api/src/main/sql/migrations/20190214122514-initial-schema-up.sql b/api/src/main/sql/migrations/20190214122514-initial-schema-up.sql index 5bec2c7..f32a57e 100644 --- a/api/src/main/sql/migrations/20190214122514-initial-schema-up.sql +++ b/api/src/main/sql/migrations/20190214122514-initial-schema-up.sql @@ -26,11 +26,6 @@ create table "measures" ( name varchar not null, description varchar not null default '', config jsonb not null default '{}'::json, - domain_source varchar default null, - domain_units varchar not null default '', - range_source varchar default null, - range_units varchar not null default '', - analysis varchar[] not null default '{}', unique(user_id, slug) ); diff --git a/api/temp/auth-token-jdb.txt b/api/temp/auth-token-jdb.txt new file mode 100644 index 0000000..d543bdc --- /dev/null +++ b/api/temp/auth-token-jdb.txt @@ -0,0 +1 @@ +Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6Imp3dCJ9.eyJleHAiOjE1NTIzMjYxODMsInN1YiI6IjA3NWJjYzhmLWE4N2QtNDRjZS04MDk5LWQ3ZGExZjYxYTc1YSIsImlhdCI6MTU1MjIzOTc4M30.RjE0MjYzMkFDOTc4RjZFNTYyMDVBMTY5MjExNkJGQ0QzNkQ1QjZFNzVCODBDMThENTc1M0Y0MjhDMkNFMjE3RA diff --git a/api/temp/credential b/api/temp/credential new file mode 120000 index 0000000..b52530a --- /dev/null +++ b/api/temp/credential @@ -0,0 +1 @@ +auth-token-jdb.txt \ No newline at end of file diff --git a/api/temp/pm-api b/api/temp/pm-api new file mode 120000 index 0000000..b3635ee --- /dev/null +++ b/api/temp/pm-api @@ -0,0 +1 @@ +../src/util/bash/client.sh \ No newline at end of file diff --git a/web/src/models.d.ts b/web/src/models.d.ts index 331fb2b..7774e46 100644 --- a/web/src/models.d.ts +++ b/web/src/models.d.ts @@ -18,11 +18,7 @@ export interface Measure { slug: string; name: string; description: string; - domainSource?: string; - domainUnites: string; - rangeSource?: string; - rangeUnits: string; - analysis: string[]; + config: object; } export interface Measurement {