58 lines
1.6 KiB
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
|