/**

\defgroup token Tokeny
\ingroup services

\details

W celu zarejestrowania konta lub zmiany hasła, należy pobrać z serwera token.
Przy asynchronicznej operacji, po wywołaniu funkcji \c gg_token() wynikową
strukturę \c gg_http należy traktować tak jak każde połączenie HTTP. Po
zakończeniu operacji asynchronicznej (\c state równe \c GG_STATE_DONE) lub
wyjściu z funkcji \c gg_token() w operacji synchronicznej, w polu \c data
struktury będzie znajdował się wskaźnik na strukturą \c gg_token zawierającą
informacje o tokenie. W polu \c body struktury \c gg_http znajdzie się obrazek
tokenu o rozmiarze \c body_size. Aplikacja powinna wyświetlić token
użytkownikowi w celu odczytania i przekazania treści, która następnie zostana
przekazana do odpowiedniej funkcji wywołania usługi dodatkowej.

\section example Przykład pobierania tokenu

\code
struct gg_http *token;
FILE *f;

token = gg_token(0);

if (!token) {
    błąd("Błąd pobierania tokenu");
    exit(1);
}

plik = fopen(((struct gg_token *) token->data)->tokenid, "w");

if (!plik) {
    błąd("Błąd otwarcia pliku");
    gg_token_free(token);
    exit(1);
}

fwrite(token->body, token->body_size, 1, plik);
fclose(plik);

gg_token_free(token);
\endcode

*/

