/**
  * An intermediate page for jsConnect that checks SSO against and then posts the information to /entry/connect.
  *
  * @param EntryController $Sender
  * @param string $Action A specific action. It can be one of the following:
  *
  * - blank: The default action.
  * - guest: There is no user signed in.
  * -
  * @param string $Target The url to redirect to after a successful connect.
  * @throws /Exception Throws an exception when the jsConnect provider is not found.
  */
 public function entryController_jsConnect_create($Sender, $Action = '', $Target = '')
 {
     $Sender->setData('_NoMessages', true);
     if ($Action) {
         if ($Action == 'guest') {
             $Sender->addDefinition('CheckPopup', true);
             $Target = $Sender->Form->getFormValue('Target', '/');
             $Sender->RedirectUrl = $Target;
             $Sender->render('JsConnect', '', 'plugins/jsconnect');
         } else {
             parse_str($Sender->Form->getFormValue('JsConnect'), $JsData);
             $Error = val('error', $JsData);
             $Message = val('message', $JsData);
             if ($Error === 'timeout' && !$Message) {
                 $Message = t('Your sso timed out.', 'Your sso timed out during the request. Please try again.');
             }
             Gdn::dispatcher()->passData('Exception', $Message ? htmlspecialchars($Message) : htmlspecialchars($Error))->dispatch('home/error');
         }
     } else {
         $client_id = $Sender->setData('client_id', $Sender->Request->get('client_id', 0));
         $Provider = self::getProvider($client_id);
         if (empty($Provider)) {
             throw NotFoundException('Provider');
         }
         $Get = arrayTranslate($Sender->Request->get(), ['client_id', 'display']);
         $Sender->addDefinition('JsAuthenticateUrl', self::connectUrl($Provider, true));
         $Sender->addJsFile('jsconnect.js', 'plugins/jsconnect');
         $Sender->setData('Title', t('Connecting...'));
         $Sender->Form->Action = url('/entry/connect/jsconnect?' . http_build_query($Get));
         $Sender->Form->addHidden('JsConnect', '');
         $Sender->Form->addHidden('Target', $Target);
         $Sender->MasterView = 'empty';
         $Sender->Render('JsConnect', '', 'plugins/jsconnect');
     }
 }