From be5b15a41ec27088cdc5e018607dc48ca33689de Mon Sep 17 00:00:00 2001
From: Ankit Singh <ankit.singh@xecurify.com>
Date: Fri, 25 Oct 2024 16:07:31 +0530
Subject: [PATCH] commit for 2.0.17

---
 logo.png                                      | Bin 0 -> 35962 bytes
 rest_api_authentication.info.yml              |   2 +-
 src/AdvancedSettingsForm.php                  |   2 +-
 src/ApiAuthenticationApiToken.php             |   3 +-
 src/Form/MiniOrangeAPIAuth.php                |  73 ++---------
 src/Form/MiniornageAPIAuthnRequestSupport.php |   2 +-
 src/Form/MiniornageAPIAuthnRequestTrial.php   | 117 ++++++++++++++---
 src/MiniorangeApiAuthSupport.php              |   6 +-
 src/MoHeadlessIntegration.php                 | 122 ++++++++++++++++++
 src/SetupAuthenticationForm.php               |   2 +-
 src/Utilities.php                             |   4 +
 11 files changed, 245 insertions(+), 88 deletions(-)
 create mode 100644 logo.png
 create mode 100644 src/MoHeadlessIntegration.php

diff --git a/logo.png b/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..31041bcd3b39a81c9a194d2d81c4ecf6c2136c23
GIT binary patch
literal 35962
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

literal 0
HcmV?d00001

diff --git a/rest_api_authentication.info.yml b/rest_api_authentication.info.yml
index a55f840..7d1efee 100644
--- a/rest_api_authentication.info.yml
+++ b/rest_api_authentication.info.yml
@@ -1,5 +1,5 @@
 name: 'REST & JSON API Authentication'
 type: module
-core_version_requirement: ^9.3 || ^10
+core_version_requirement: ^9.3 || ^10 || ^11
 description: 'Drupal API Authentication module secures unauthorized access to your Drupal site APIs using different API authentication methods.'
 configure: rest_api_authentication.auth_settings
diff --git a/src/AdvancedSettingsForm.php b/src/AdvancedSettingsForm.php
index 3c5211a..c8c2522 100644
--- a/src/AdvancedSettingsForm.php
+++ b/src/AdvancedSettingsForm.php
@@ -21,7 +21,7 @@ class AdvancedSettingsForm {
    *   The modified form array with the advanced settings elements added.
    */
   public static function insertForm(array &$form, FormStateInterface $form_state) {
-    global $base_url;
+    $base_url = \Drupal::request()->getSchemeAndHttpHost().\Drupal::request()->getBasePath();
     $disabled = TRUE;
     $form['advancedsettings'] = [
       '#type' => 'details',
diff --git a/src/ApiAuthenticationApiToken.php b/src/ApiAuthenticationApiToken.php
index d37f427..4243c92 100644
--- a/src/ApiAuthenticationApiToken.php
+++ b/src/ApiAuthenticationApiToken.php
@@ -59,9 +59,8 @@ class ApiAuthenticationApiToken {
           $user = user_load_by_name($name);
         }
         $api_key = $creds[1];
-
         if (empty($user)) {
-          $api_error = [
+          return [
             'status' => 'error',
             'http_code' => '404',
             "error" => "USER_DOES_NOT_EXIST",
diff --git a/src/Form/MiniOrangeAPIAuth.php b/src/Form/MiniOrangeAPIAuth.php
index fb0adc9..6007d41 100644
--- a/src/Form/MiniOrangeAPIAuth.php
+++ b/src/Form/MiniOrangeAPIAuth.php
@@ -10,6 +10,7 @@ use Drupal\Core\Messenger\MessengerInterface;
 use Drupal\rest_api_authentication\AdvancedSettingsForm;
 use Drupal\rest_api_authentication\CustomerSetupForm;
 use Drupal\rest_api_authentication\MiniorangeRestAPICustomer;
+use Drupal\rest_api_authentication\MoHeadlessIntegration;
 use Drupal\rest_api_authentication\RequestForDemoForm;
 use Drupal\rest_api_authentication\SetupAuthenticationForm;
 use Drupal\rest_api_authentication\UpgradePlansForm;
@@ -116,14 +117,15 @@ class MiniOrangeAPIAuth extends FormBase {
     // Builds and inserts the Advanced Settings form.
     AdvancedSettingsForm::insertForm($form, $form_state);
 
+    // Builds and inserts the headless SSO form.
+    MoHeadlessIntegration::insertForm($form, $form_state);
+
     // Builds and inserts the Request For Demo form.
     RequestForDemoForm::insertForm($form, $form_state);
 
     // Builds and inserts the Upgrade Plans form.
     UpgradePlansForm::insertForm($form, $form_state);
 
-    // Builds and inserts the Register/Login form.
-    CustomerSetupForm::insertForm($form, $form_state);
     $form['rest_api_authentication_background_end'] = [
       '#markup' => '</div>',
     ];
@@ -142,7 +144,7 @@ class MiniOrangeAPIAuth extends FormBase {
    *   return nothing.
    */
   public function restApiAuthenticationSaveBasicConfig(array &$form, FormStateInterface $form_state): void {
-    global $base_url;
+    $base_url = \Drupal::request()->getSchemeAndHttpHost().\Drupal::request()->getBasePath();
     $form_input = $form_state->getValues();
     $enable_authentication = $form_input['enable_authentication'];
 
@@ -164,7 +166,7 @@ class MiniOrangeAPIAuth extends FormBase {
    *   return nothing.
    */
   public function restApiAuthenticationGenerateApiToken(array &$form, FormStateInterface $form_state) {
-    global $base_url;
+    $base_url = \Drupal::request()->getSchemeAndHttpHost().\Drupal::request()->getBasePath();
     $api_key = Utilities::generateRandom(64);
     $this->configFactory->getEditable('rest_api_authentication.settings')
       ->set('api_token', $api_key)
@@ -178,7 +180,7 @@ class MiniOrangeAPIAuth extends FormBase {
    * {@inheritDoc}
    */
   public function submitForm(array &$form, FormStateInterface $form_state) {
-    global $base_url;
+    $base_url = \Drupal::request()->getSchemeAndHttpHost().\Drupal::request()->getBasePath();
     $list_of_apis = $form['advancedsettings']['support_container_outline']['list_apis']['api_textarea']['#value'];
     $api_access = $form['advancedsettings']['support_container_outline']['list_apis']['settings']['#value'];
     $this->configFactory->getEditable('rest_api_authentication.settings')
@@ -193,7 +195,7 @@ class MiniOrangeAPIAuth extends FormBase {
    * Save the basic authentication method.
    */
   public function restApiAuthenticationSaveBasicAuthConf(array &$form, FormStateInterface $form_state) {
-    global $base_url;
+    $base_url = \Drupal::request()->getSchemeAndHttpHost().\Drupal::request()->getBasePath();
     $this->configFactory->getEditable('rest_api_authentication.settings')->set('authentication_method', 0)->save();
     $this->messenger->addMessage($this->t('Configurations saved successfully.'));
     $response = new RedirectResponse($base_url . "/admin/config/people/rest_api_authentication/auth_settings?tab=edit-api-auth");
@@ -204,7 +206,7 @@ class MiniOrangeAPIAuth extends FormBase {
    * Send a request for Demo.
    */
   public function savedDemoRequest(array &$form, FormStateInterface $form_state) {
-    global $base_url;
+    $base_url = \Drupal::request()->getSchemeAndHttpHost().\Drupal::request()->getBasePath();
     $email = trim($form['demo']['container_outline']['rest_api_authentication_email_address']['#value']);
     $phone = $form['demo']['container_outline']['rest_api_authentication_phone_number']['#value'];
     $query = trim($form['demo']['container_outline']['rest_api_authentication_demo_query']['#value']);
@@ -212,61 +214,4 @@ class MiniOrangeAPIAuth extends FormBase {
     $response = new RedirectResponse($base_url . "/admin/config/people/rest_api_authentication/auth_settings?tab=edit-demo");
     $response->send();
   }
-
-  /**
-   * Activating the module.
-   */
-  public function activateModuleRequest(array &$form, FormStateInterface $form_state) {
-    global $base_url;
-    $username = $form['customersetup']['customer_setup_container_outline']['rest_api_authentication_user_email']['#value'];
-    $password = $form['customersetup']['customer_setup_container_outline']['rest_api_authentication_user_password']['#value'];
-    if (empty($username)||empty($password)) {
-      $this->messenger->addMessage($this->t('The <b><u>Email Address</u></b> and the <b><u>Password</u></b> fields are mandatory.'), 'error');
-      return;
-    }
-    if (!$this->emailValidator->isValid($username)) {
-      $this->messenger->addMessage($this->t('The email address <i> %username </i> does not seems to be valid.', ['%username' => $username]), 'error');
-      return;
-    }
-    $customer_config = new MiniorangeRestAPICustomer($username, $password);
-    $check_customer_response = json_decode($customer_config->checkCustomer());
-
-    if (isset($check_customer_response->status) && $check_customer_response->status == 'CUSTOMER_NOT_FOUND') {
-      $this->messenger->addMessage($this->t('Invalid credentials'), 'error');
-      $response = new RedirectResponse($base_url . "/admin/config/people/rest_api_authentication/auth_settings?tab=edit-customersetup");
-      $response->send();
-      return;
-    }
-    elseif (isset($check_customer_response->status) && $check_customer_response->status == 'CURL_ERROR') {
-      $this->messenger->addMessage($this->t('cURL is not enabled. Please enable cURL'), 'error');
-    }
-    else {
-
-      $customer_keys_response = json_decode($customer_config->getCustomerKeys());
-      // $customer_keys_response = json_decode($customer_config->getCustomerKeys()->getBody()->getContents());
-      if (json_last_error() == JSON_ERROR_NONE) {
-        $this->configFactory->getEditable('rest_api_authentication.settings')
-          ->set('rest_api_authentication_customer_id', $customer_keys_response->id)
-          ->set('rest_api_authentication_customer_admin_token', $customer_keys_response->token)
-          ->set('rest_api_authentication_customer_admin_email', $username)
-          ->set('rest_api_authentication_customer_api_key', $customer_keys_response->apiKey)
-          ->set('rest_api_authentication_customer_password', $password)->save();
-        $current_status = 'PLUGIN_CONFIGURATION';
-        $this->configFactory->getEditable('rest_api_authentication.settings')->set('rest_api_authentication_status', $current_status)->save();
-        $this->messenger->addMessage($this->t('Successfully retrieved your account.'));
-        $response = new RedirectResponse($base_url . "/admin/config/people/rest_api_authentication/auth_settings?tab=edit-customersetup");
-        $response->send();
-        return;
-      }
-      else {
-        $this->messenger->addMessage($this->t('Invalid credentials'), 'error');
-        $response = new RedirectResponse($base_url . "/admin/config/people/rest_api_authentication/auth_settings?tab=edit-customersetup");
-        $response->send();
-        return;
-      }
-    }
-    $response = new RedirectResponse($base_url . "/admin/config/people/rest_api_authentication/auth_settings?tab=edit-customersetup");
-    $response->send();
-  }
-
 }
diff --git a/src/Form/MiniornageAPIAuthnRequestSupport.php b/src/Form/MiniornageAPIAuthnRequestSupport.php
index 98d2766..b9e568d 100644
--- a/src/Form/MiniornageAPIAuthnRequestSupport.php
+++ b/src/Form/MiniornageAPIAuthnRequestSupport.php
@@ -113,7 +113,7 @@ class MiniornageAPIAuthnRequestSupport extends FormBase {
       $email = $form_values['rest_api_authentication_support_email_address'];
       $phone = $form_values['rest_api_authentication_support_phone_number'];
       $query = $form_values['rest_api_authentication_support_query'];
-      $query_type = 'Support';
+      $query_type = 'demo';
 
       $support = new MiniorangeApiAuthSupport($email, $phone, $query, $query_type);
       $support_response = $support->sendSupportQuery();
diff --git a/src/Form/MiniornageAPIAuthnRequestTrial.php b/src/Form/MiniornageAPIAuthnRequestTrial.php
index cb03896..fe54ff8 100644
--- a/src/Form/MiniornageAPIAuthnRequestTrial.php
+++ b/src/Form/MiniornageAPIAuthnRequestTrial.php
@@ -8,7 +8,10 @@ use Drupal\Core\Ajax\ReplaceCommand;
 use Drupal\Core\Form\FormBase;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Messenger\MessengerInterface;
+use Drupal\Core\Routing\TrustedRedirectResponse;
+use Drupal\Core\Url;
 use Drupal\rest_api_authentication\MiniorangeApiAuthSupport;
+use Drupal\user\Entity\User;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
@@ -57,39 +60,96 @@ class MiniornageAPIAuthnRequestTrial extends FormBase {
       '#weight' => -10,
     ];
 
+    $form['radio_option'] = [
+      '#type' => 'radios',
+      '#title' => $this->t('Which type of trial would you prefer?'),
+      '#options' => [
+        'option1' => $this->t('Sandbox'),
+        'option2' => $this->t('On-Premise'),
+      ],
+      '#default_value' => ($form_state->getValue('radio_option')) ? $form_state->getValue('radio_option') : 'option1',
+      '#attributes' => array('class' => array('container-inline'),),
+      '#ajax' => [
+        'callback' => '::updateFormElements',
+        'wrapper' => 'additional-fields-wrapper',
+      ],
+    ];
+
+    $form['additional_fields_wrapper'] = [
+      '#type' => 'container',
+      '#attributes' => ['id' => 'additional-fields-wrapper'],
+    ];
+
     $form['rest_api_authentication_trial_email_address'] = [
       '#type' => 'email',
       '#title' => $this->t('Email'),
-      '#required' => TRUE,
       '#attributes' => [
         'placeholder' => $this->t('Enter your email'),
         'style' => 'width:99%;margin-bottom:1%;',
       ],
+      '#states' => [
+        'visible' => [
+          ':input[name="radio_option"]' => ['value' => 'option2'],
+        ],
+        'required' => array(
+          ':input[name="radio_option"]' => ['value' => 'option2'],),
+      ],
+
     ];
 
     $form['rest_api_authentication_trial_description'] = [
       '#type' => 'textarea',
       '#rows' => 4,
-      '#required' => TRUE,
       '#title' => $this->t('Description'),
       '#attributes' => [
         'placeholder' => $this->t('Describe your use case here!'),
         'style' => 'width:99%;',
       ],
+      '#states' => [
+        'visible' => [
+          ':input[name="radio_option"]' => ['value' => 'option2'],
+        ],
+        'required' => array(
+          ':input[name="radio_option"]' => ['value' => 'option2'],),
+      ],
     ];
 
     $form['rest_api_authentication_trial_note'] = [
       '#markup' => $this->t('<div>If you have any questions or in case you need any sort of assistance in configuring our module according to your requirements, you can get in touch with us on <a href="mailto:drupalsupport@xecurify.com">drupalsupport@xecurify.com</a> and we will assist you further.</div>'),
+      '#states' => [
+        'visible' => [
+          ':input[name="radio_option"]' => ['value' => 'option2'],
+        ],
+      ],
+    ];
+
+    $form['submit_button_option1'] = [
+      '#type' => 'submit',
+      '#value' => $this->t('Go to Sandbox'),
+      '#attributes' => [
+        'class' => ['option1-submit','use-ajax', 'button--primary'],
+        'formtarget' => '_blank'
+      ],
+      '#prefix' => '<div class="option1-submit-wrapper">',
+      '#suffix' => '</div>',
+      '#states' => [
+        'visible' => [
+          ':input[name="radio_option"]' => ['value' => 'option1'],],
+      ],
+      '#submit' => ['::goToSandbox',],
     ];
 
-    $form['actions'] = ['#type' => 'actions'];
-    $form['actions']['send'] = [
+    $form['submit_button_other_options'] = [
       '#type' => 'submit',
       '#value' => $this->t('Submit'),
       '#attributes' => [
-        'class' => [
-          'use-ajax',
-          'button--primary',
+        'class' => ['other-options-submit', 'use-ajax', 'button--primary'],
+      ],
+      '#prefix' => '<div class="other-options-submit-wrapper">',
+      '#suffix' => '</div>',
+      '#states' => [
+        'visible' => [
+          ':input[name="radio_option"]' => ['value' => 'option2'],
         ],
       ],
       '#ajax' => [
@@ -102,6 +162,35 @@ class MiniornageAPIAuthnRequestTrial extends FormBase {
     return $form;
   }
 
+  public static function getEmail(){
+    $user  = \Drupal::currentUser()->getEmail();
+    $email = \Drupal::config('rest_api_authentication.settings')->get('rest_api_authentication_customer_admin_email');
+    $email = !empty($email) ? $email : $user;
+    $email = preg_match('/^(?!.*(?:noreply|no-reply)).*$/i', $email) ? $email : '';
+    return $email;
+  }
+  public function goToSandbox(array $form, FormStateInterface $form_state) {
+    $url = Url::fromUri('https://playground.miniorange.com/drupal.php',[
+      'query' => [
+        'email' => self::getEmail(),
+        'mo_module' => 'rest_api_authentication',
+        'drupal_version' => '10',
+      ],
+    ])->toString();
+    $response = new TrustedRedirectResponse($url);
+    $form_state->setResponse($response);
+  }
+  public function updateFormElements(array &$form, FormStateInterface $form_state) {
+    $selected_value = $form_state->getValue('radio_option');
+    if ($selected_value === 'option1') {
+      $form['actions']['send']['submit']['#value'] = t('Confirm Option 1');
+    }
+    elseif ($selected_value === 'option2') {
+      $form['actions']['send']['#value'] = t('Confirm Option 2');
+    }
+    return $form['additional_fields_wrapper'];
+  }
+
   /**
    * Process the 'modal_example_form' Form.
    *
@@ -120,12 +209,10 @@ class MiniornageAPIAuthnRequestTrial extends FormBase {
     // If there are any form errors, AJAX replace the form.
     if ($form_state->hasAnyErrors()) {
       $response->addCommand(new ReplaceCommand('#modal_example_form', $form));
-    }
-    elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
+    } elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
       $this->messenger->addMessage($this->t('The email address <b><em>%email</em></b> is not valid.', ['%email' => $email]), 'error');
       $response->addCommand(new ReplaceCommand('#modal_example_form', $form));
-    }
-    else {
+    } else {
       $query = $form_values['rest_api_authentication_trial_description'];
       $query_type = 'trial';
 
@@ -137,19 +224,19 @@ class MiniornageAPIAuthnRequestTrial extends FormBase {
           '#markup' => $this->t('Your request for a trial module was sent successfully. Please allow us some time and we will send you the trial module as soon as possible.'),
         ];
         $ajax_form = new OpenModalDialogCommand('Thank you!', $message, ['width' => '50%']);
-      }
-      else {
+      } else {
         $error = [
           '#type' => 'item',
           '#markup' => $this->t('Error submitting the support query. Please send us your query at
-				<a href="mailto:drupalsupport@xecurify.com">
-				drupalsupport@xecurify.com</a>.'),
+      <a href="mailto:drupalsupport@xecurify.com">
+      drupalsupport@xecurify.com</a>.'),
         ];
         $ajax_form = new OpenModalDialogCommand('Error!', $error, ['width' => '50%']);
       }
 
       $response->addCommand($ajax_form);
     }
+
     return $response;
   }
 
diff --git a/src/MiniorangeApiAuthSupport.php b/src/MiniorangeApiAuthSupport.php
index 4f574cd..de50014 100644
--- a/src/MiniorangeApiAuthSupport.php
+++ b/src/MiniorangeApiAuthSupport.php
@@ -64,7 +64,7 @@ class MiniorangeApiAuthSupport {
   public function sendSupportQuery() {
     $modules_info = \Drupal::service('extension.list.module')->getExtensionInfo('rest_api_authentication');
     $modules_version = $modules_info['version'];
-    global $base_url;
+    $base_url = \Drupal::request()->getSchemeAndHttpHost().\Drupal::request()->getBasePath();
     if ($this->plan == 'demo') {
       $url = MiniorangeApiAuthConstants::BASE_URL . '/moas/api/notify/send';
 
@@ -173,7 +173,7 @@ class MiniorangeApiAuthSupport {
     catch (\Exception $exception) {
       $error = [
         '%method' => 'sendSupportQuery',
-        '%file' => 'miniorange_oauth_client_support.php',
+        '%file' => 'MiniorangeApiAuthSupport.php',
         '%error' => $exception->getMessage(),
       ];
       \Drupal::logger('rest_api_authentication')->notice('%error', $error);
@@ -182,7 +182,7 @@ class MiniorangeApiAuthSupport {
     catch (GuzzleException $e) {
       $error = [
         '%method' => 'sendSupportQuery',
-        '%file' => 'miniorange_oauth_client_support.php',
+        '%file' => 'MiniorangeApiAuthSupport.php',
         '%error' => $e->getMessage(),
       ];
       \Drupal::logger('rest_api_authentication')->notice('%error', $error);
diff --git a/src/MoHeadlessIntegration.php b/src/MoHeadlessIntegration.php
new file mode 100644
index 0000000..dc07e9b
--- /dev/null
+++ b/src/MoHeadlessIntegration.php
@@ -0,0 +1,122 @@
+<?php
+
+namespace Drupal\rest_api_authentication;
+
+use Drupal\Core\Form\FormBase;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Render\Markup;
+use Drupal\rest_api_authentication\Utilities;
+
+class MoHeadlessIntegration {
+
+  public static function insertForm(array &$form, FormStateInterface $form_state) {
+
+    $form['markup_library_1'] = [
+      '#attached' => [
+        'library' => [
+          "rest_api_authentication/rest_api_authentication.style_settings",
+        ],
+      ],
+    ];
+
+    $form['headless_sso_details'] = [
+      '#type' => 'details',
+      '#title' => t('Headless SSO'),
+      '#open' => TRUE,
+      '#group' => 'verticaltabs',
+    ];
+
+
+    self::headlessSSOFieldset($form,$form_state);
+
+    return $form;
+  }
+
+  private static function headlessSSOFieldset(array &$form, FormStateInterface $form_state) {
+    $base_url = \Drupal::request()->getSchemeAndHttpHost().\Drupal::request()->getBasePath();
+
+    $form['headless_sso_details']['headless_sso'] = [
+      '#markup' => t('<b>Headless SSO (Single Sign On) </b><a href = ":upgradePlan" style="font-size: small" >PREMIUM</a><a style="float: right;" href=":guideUrl" target="_blank" class="button button--small" >setup guide</a>',
+        [
+          ':guideUrl' => 'https://www.drupal.org/docs/contributed-modules/api-authentication',
+          ':upgradePlan' => $base_url . '/admin/config/people/rest_api_authentication/auth_settings?tab=edit-upgrade-plans',
+        ]),
+    ];
+
+    $form ['headless_sso_details']['headless_sso']['sso_protocol'] = [
+      '#prefix' => t('<p  style="font-size: small"> This section help you to setup the headless sso with the help of the <a href=":oauthClient" target="_blank">Drupal OAuth Client</a> or <a href=":saml" target="_blank">miniOrange SAML module</a>.</p> <hr>',
+        [
+          ':oauthClient' => 'https://www.drupal.org/project/miniorange_oauth_client',
+          ':saml' => 'https://www.drupal.org/project/miniorange_saml',
+        ] ),
+    ];
+
+    $form['headless_sso_details']['headless_sso']['headless_sso_table'] = [
+      '#type' => 'table',
+      '#responsive' => TRUE ,
+      '#attributes' => ['style' => 'border-collapse: separate;',],
+    ];
+
+    $configurations  = Utilities::getHeadlessTableAttr();
+
+    foreach ($configurations as $key => $value) {
+      $row = self::generateHeadlessSooTableRow($key, $value);
+      $form['headless_sso_details']['headless_sso']['headless_sso_table'][$key] = $row;
+    }
+
+    $form['headless_sso_details']['headless_sso']['save_button'] = [
+      '#type' => 'submit',
+      '#button_type' => 'primary',
+      '#value' => 'Save Settings',
+      '#disabled' => true,
+
+    ];
+
+  }
+  private static function generateHeadlessSooTableRow(string $key, string $value) {
+    $config = \Drupal::config('rest_api_authentication');
+    $row[$key.$value] = [
+      '#markup' => '<div class="container-inline" ><strong>'.$value.'</strong>',
+    ];
+    $base_url = \Drupal::request()->getSchemeAndHttpHost().\Drupal::request()->getBasePath();
+    if($key == 'module'){
+      $row[$key] = [
+        '#type' => 'radios',
+        '#title' => '',
+        '#options' => [0 => t('OAuth Client module'), 1 => t('SAML SP module')],
+        '#attributes' => [
+          'class' => ['container-inline'],
+        ],
+        '#disabled' => true,
+      ];
+    }else if($key == 'frontend_url'){
+      $row[$key] = [
+        '#type' => 'textfield',
+        '#description' => t('Enter the frontend URL where the user will be redirected after SSO.'),
+        '#attributes' => ['style' => 'width:50%'],
+        '#disabled' => true,
+
+      ];
+    }else if( $key == 'get_token_url'){
+      $row[$key] = [
+        '#markup' => Markup::create('<span id = "'.$key.'">' . $base_url . '/get-token</span>&nbsp;
+                '),
+      ];
+    }else {
+      $row[$key] = [
+        '#type' => 'radios',
+        '#title' => '',
+        '#states' => ['visible' => [':input[name = "module"]' => ['value' => 0 ], ],],
+        '#options' => [
+          0 => t('Send JWT created by the module'),
+          1 => t('send JWT received from the OAuth Server'),
+        ],
+        '#attributes' => [
+          'class' => ['container-inline'],
+        ],
+        '#disabled' => true,
+      ];
+    }
+    return $row;
+  }
+}
diff --git a/src/SetupAuthenticationForm.php b/src/SetupAuthenticationForm.php
index 6bb157b..08bca0f 100644
--- a/src/SetupAuthenticationForm.php
+++ b/src/SetupAuthenticationForm.php
@@ -21,7 +21,7 @@ class SetupAuthenticationForm {
    *   The populated form array.
    */
   public static function insertForm(array &$form, FormStateInterface $form_state) {
-    global $base_url;
+    $base_url = \Drupal::request()->getSchemeAndHttpHost().\Drupal::request()->getBasePath();
     $form['markup_library_3'] = [
       '#attached' => [
         'library' => [
diff --git a/src/Utilities.php b/src/Utilities.php
index 18bc775..4a114cd 100644
--- a/src/Utilities.php
+++ b/src/Utilities.php
@@ -104,5 +104,9 @@ class Utilities {
     }
     return empty($content) ? $currentTimeInMillis : $content;
   }
+  public static function getHeadlessTableAttr() {
+    return ['module' => 'Select Module', 'frontend_url' => 'Frontend redirect URL', 'get_token_url' => 'ID Token Endpoint ', 'send_jwt' => 'Select JWT type' ];
+
+  }
 
 }
-- 
GitLab