dva/bakalari.nim

58 lines
1.6 KiB
Nim

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"
data = newMultipartData {
"client_id": "ANDR",
"grant_type": "password",
"username": username,
"password": password,
}
response = client.post($api, multipart = data)
body = response.body
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