Авторизация с помощью логина/пароля происходит через обработку PULL-запроса к серверу.
В коде приложения установку обработчиков разных видов web-запросов на авторизацию к серверу можно найти в функции:
void HttpServer::configure( server::ManagerApplication &app)
находящемся в файле исходного кода /src/Http/HttpServer.cpp.
Для всех типов web-запросов обработчики вызываются одной и той же функцией, указанной выше, которая вызывает соответствующий метод обработчика Controller::handle
из интерфейса class Controller
.
Например, для POST-запросов вызывается метод:
CommonPostController::handle( const http::Request &request, http::Response &response )
В случае OAuth-авторизации через Polygit используется GET-запрос вида:
https://polygit.polymatica.ru/oauth/authorize?response_type=code&client_id=cb5916b...&redirect_uri=http://localhost:8080/api/v2/login/oauth2/redirect/gitlab
Этот GET-запрос обрабатывается той же самой функцией, указанной выше, но следом выполняется перенаправление на страницу Gitlab. В браузере появляется окошко с вопросом "Authorize analytics to use your account?" и кнопкой Authorize.
При нажатии на кнопку приходит уже новый POST-запрос, который снова попадает в вышеупомянутый общий обработчик, из которого вызывается вызывается обработчик RedirectGetController::handle
.
Обработчик извлекает из запроса значение authorization_code
, с помощью которого уже можно получить токен аутентификации (переменная server::oauth2::Token token
).
Для логирования события аутентификации из токена, в свою очередь, получается объект UserDescription
:
const server::oauth2::UserDescription user = authenticator.get_user_description( token.access_token, token.id_token )
в котором есть поле user_login
, значение которого и выводится в лог.