More functions for Bakaláři client

This commit is contained in:
Adam Blažek 2020-06-15 15:33:08 +02:00
parent 81f54bd6d6
commit 7b07c234c9
1 changed files with 35 additions and 1 deletions

View File

@ -2,14 +2,17 @@ import httpclient, json, uri
type
Bakalari = ref object
website: Uri
accessToken: string
refreshToken: string
let client = newHttpClient()
proc newBakalari*(website: Uri, username: string, password: string): Bakalari =
new result
result.website = website
let
api = website / "api/login"
client = newHttpClient()
data = newMultipartData {
"client_id": "ANDR",
"grant_type": "password",
@ -21,3 +24,34 @@ proc newBakalari*(website: Uri, username: string, password: string): Bakalari =
root = body.parseJson
result.accessToken = root["access_token"].getStr
result.refreshToken = root["refresh_token"].getStr
func accessToken*(bakalari: Bakalari): string =
bakalari.accessToken
func refreshToken*(bakalari: Bakalari): string =
bakalari.refreshToken
proc renewTokens(bakalari: Bakalari) =
let
api = bakalari.website / "api/login"
data = newMultipartData {
"client_id": "ANDR",
"grant_type": "refresh_token",
"refresh_token": bakalari.refreshToken,
}
response = client.post($api, multipart = data)
body = response.body
root = body.parseJson
bakalari.accessToken = root["access_token"].getStr
bakalari.refreshToken = root["refresh_token"].getStr
proc getEndpoint*(bakalari: Bakalari, endpoint: string): JsonNode =
let
api = bakalari.website / "api/3" / endpoint
data = newMultipartData {
"Authorization": "Bearer " & bakalari.accessToken,
}
response = client.post($api, multipart = data)
body = response.body
bakalari.renewTokens
result = body.parseJson