Joli\SlackSecretSanta\Controller\SantaController::authenticate PHP Method

authenticate() public method

Ask for Slack authentication and store the AccessToken in Session.
public authenticate ( Request $request ) : RedirectResponse | Response
$request Symfony\Component\HttpFoundation\Request
return Symfony\Component\HttpFoundation\RedirectResponse | Symfony\Component\HttpFoundation\Response
    public function authenticate(Request $request)
    {
        $provider = new Slack(['clientId' => $this->slackClientId, 'clientSecret' => $this->slackClientSecret, 'redirectUri' => $this->router->generate('authenticate', [], RouterInterface::ABSOLUTE_URL)]);
        if (!$request->query->has('code')) {
            // If we don't have an authorization code then get one
            $options = ['scope' => ['chat:write:bot', 'users:read']];
            $authUrl = $provider->getAuthorizationUrl($options);
            $this->session->set(self::STATE_SESSION_KEY, $provider->getState());
            return new RedirectResponse($authUrl);
        } elseif (empty($request->query->get('state')) || $request->query->get('state') !== $this->session->get(self::STATE_SESSION_KEY)) {
            $this->session->remove(self::STATE_SESSION_KEY);
            return new Response('Invalid states.', 401);
        } else {
            // Try to get an access token (using the authorization code grant)
            $token = $provider->getAccessToken('authorization_code', ['code' => $request->query->get('code')]);
            // Who Am I?
            $test = new AuthTestPayload();
            $response = $this->getApiClient($token)->send($test);
            if ($response->isOk()) {
                $this->session->set(self::TOKEN_SESSION_KEY, $token);
                $this->session->set(self::USER_ID_SESSION_KEY, $response->getUserId());
                return new RedirectResponse($this->router->generate('run'));
            } else {
                return new RedirectResponse($this->router->generate('homepage'));
            }
        }
    }