diff --git a/bakalari.nim b/bakalari.nim index fe69beb..236d4a4 100644 --- a/bakalari.nim +++ b/bakalari.nim @@ -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