bbtest.qu.edu.qa Open in urlscan Pro
35.156.11.182  Public Scan

URL: https://bbtest.qu.edu.qa/
Submission: On July 11 via api from US — Scanned from DE

Form analysis 2 forms found in the DOM

Name: locale_pickerPOST /webapps/portal/execute/changeLocale

<form action="/webapps/portal/execute/changeLocale" method="post" name="locale_picker" target="_top">
  <script>
    function loadLocale(code) {
      document.locale_picker.locale.value = code;
      document.locale_picker.submit();
    }
    FastInit.addOnLoad(function() {
      function displayLanguages() {
        var $langButton = $('lang-select-button');
        var $langMenu = $('lang-list');

        function showMenu() {
          $langMenu.removeClassName('hide');
          $langMenu.setAttribute('aria-hidden', 'false');
          $langButton.setAttribute('aria-expanded', 'true');
          $langButton.addClassName('expanded');
          $langMenu.firstDescendant().firstDescendant().focus();
        }

        function hideMenu() {
          $langMenu.addClassName('hide');
          $langMenu.setAttribute('aria-hidden', 'true');
          $langButton.setAttribute('aria-expanded', 'false');
          $langButton.removeClassName('expanded');
        }
        //toggle logic
        if ($langMenu.hasClassName('hide')) {
          showMenu();
        } else {
          hideMenu();
        }
        //Press ESC hides the menu
        $(document).on('keydown', function(e) {
          if (e.which == 27) {
            hideMenu();
          }
        });
        $(document).on('click', function(e) {
          hideMenu();
        });
      }
      // reveal available languages on click
      $('lang-select-button').on('click', 'button', function(e) {
        displayLanguages();
        e.stopPropagation();
      });
    });
  </script>
  <input type="hidden" name="target" value="/webapps/login/?action=login">
  <button type="button" class="icon-languages" id="lang-select-button" aria-haspopup="true" aria-expanded="false" aria-controls="lang-list" aria-owns="lang-list" aria-pressed="false"
    aria-label="Select Language Current Language English (United States‭)‬"></button>
  <ul id="lang-list" class="hide" aria-hidden="true">
    <li><a href="javascript:loadLocale('en_GB');" lang="en_GB">English (United Kingdom‭)‬</a></li>
    <li><a href="javascript:loadLocale('en_US');" lang="en_US">English (United States‭)‬</a></li>
    <li><a href="javascript:loadLocale('fr_FR');" lang="fr_FR">Français (France‭)‬</a></li>
    <li><a href="javascript:loadLocale('ar_SA');" lang="ar_SA">العربية</a></li>
  </ul>
  <input type="hidden" name="locale">
</form>

Name: loginPOST /webapps/login/

<form action="/webapps/login/" onsubmit="return validate_form( this, false, true );" method="POST" name="login">
  <script type="text/javascript">
    function login_openForgotPassword(url) {
      var passwordWin = window.open(url, 'forgotPasswordWindow', 'menubar=1,resizable=1,scrollbars=1,status=1,width=850,height=480');
      passwordWin.focus();
    }
    FastInit.addOnLoad(function() {
      if (typeof ClientCache !== 'undefined') {
        ClientCache.clear();
      }
      var startingJSessionCookie = getCookie("JSESSIONID");
      var guestLocaleCookie = getCookie("guest.session.locale");
      deleteCookie("JSESSIONID", "/@@", null, true);
      deleteCookie("JSESSIONID", "/courses", null, true);
      deleteCookie("JSESSIONID", "/sessions", null, true);
      deleteCookie("JSESSIONID", "/systemdata", null, true);
      deleteCookie("JSESSIONID", "/images", null, true);
      deleteCookie("JSESSIONID", "/images-ltr", null, true);
      deleteCookie("JSESSIONID", "/images-rtl", null, true);
      deleteCookie("JSESSIONID", "/reportbranding", null, true);
      deleteCookie("JSESSIONID", "/reports", null, true);
      deleteCookie("JSESSIONID", "/modules", null, true);
      deleteCookie("JSESSIONID", "/groupjs", null, true);
      deleteCookie("JSESSIONID", "/branding", null, true);
      deleteCookie("JSESSIONID", "/queue_tasks", null, true);
      deleteCookie("JSESSIONID", "/sponsors", null, true);
      deleteCookie("JSESSIONID", "/course_image_main_images", null, true);
      deleteCookie("JSESSIONID", "/course_image_2_images", null, true);
      deleteCookie("JSESSIONID", "/course_image_nav_images", null, true);
      deleteCookie("JSESSIONID", "/org_image_main_images", null, true);
      deleteCookie("JSESSIONID", "/org_image_2_images", null, true);
      deleteCookie("JSESSIONID", "/org_image_nav_images", null, true);
      deleteCookie("JSESSIONID", "/avatar", null, true);
      deleteCookie("JSESSIONID", "/bannerthumbnail", null, true);
      deleteCookie("JSESSIONID", "/deployment", null, true);
      deleteCookie("JSESSIONID", "/content_area", null, true);
      deleteCookie("JSESSIONID", "/portfolio", null, true);
      deleteCookie("JSESSIONID", "/evidence_area", null, true);
      deleteCookie("JSESSIONID", "/public", null, true);
      deleteCookie("JSESSIONID", "/pronunciation_audio", null, true);
      deleteCookie("JSESSIONID", "", null, true);
      deleteCookie("JSESSIONID", "/webapps/login", null, true);
      deleteCookie("JSESSIONID", "/webapps/taglibs", null, true);
      deleteCookie("JSESSIONID", "/webapps/ws", null, true);
      deleteCookie("JSESSIONID", "/webapps/wysiwyg", null, true);
      deleteCookie("JSESSIONID", "/bbcswebdav", null, true);
      deleteCookie("JSESSIONID", "/webapps/cmsmain", null, true);
      deleteCookie("JSESSIONID", "/webapps/xythoswfs", null, true);
      deleteCookie("JSESSIONID", "/admin", null, true);
      deleteCookie("JSESSIONID", "/colorpalettes", null, true);
      deleteCookie("JSESSIONID", "/coursethemes", null, true);
      deleteCookie("JSESSIONID", "/common", null, true);
      deleteCookie("JSESSIONID", "/fonts", null, true);
      deleteCookie("JSESSIONID", "/javascript", null, true);
      deleteCookie("JSESSIONID", "/lib", null, true);
      deleteCookie("JSESSIONID", "/login", null, true);
      deleteCookie("JSESSIONID", "/themes", null, true);
      deleteCookie("JSESSIONID", "/ui", null, true);
      deleteCookie("JSESSIONID", "/ui-ultra", null, true);
      deleteCookie("JSESSIONID", "/learn/api", null, true);
      deleteCookie("JSESSIONID", "/webapps/software-updates", null, true);
      deleteCookie("JSESSIONID", "/webapps/dataIntegration", null, true);
      deleteCookie("JSESSIONID", "/webapps/bb-gate-BB5f7c316a9f36d", null, true);
      deleteCookie("JSESSIONID", "/webapps/ai", null, true);
      deleteCookie("JSESSIONID", "/webapps/goal", null, true);
      deleteCookie("JSESSIONID", "/webapps/bb-social-learning-BB5f7c316a9f36d", null, true);
      deleteCookie("JSESSIONID", "/webapps/api-gateway", null, true);
      deleteCookie("JSESSIONID", "/webapps/rubric", null, true);
      deleteCookie("JSESSIONID", "/webapps/streamViewer", null, true);
      deleteCookie("JSESSIONID", "/webapps/submission-services", null, true);
      deleteCookie("JSESSIONID", "/webapps/bb-content-model-BB5f7c316a9f36d", null, true);
      deleteCookie("JSESSIONID", "/webapps/bb-group-mgmt-LEARN", null, true);
      deleteCookie("JSESSIONID", "/webapps/bb-ultra-conversion", null, true);
      deleteCookie("JSESSIONID", "/webapps/gradebook", null, true);
      deleteCookie("JSESSIONID", "/webapps/assessment", null, true);
      deleteCookie("JSESSIONID", "/webapps/videointegration", null, true);
      deleteCookie("JSESSIONID", "/webapps/vtbe-tinymce-ephox-hyperlinking", null, true);
      deleteCookie("JSESSIONID", "/webapps/vtbe-tinymce-ephox-spelling", null, true);
      deleteCookie("JSESSIONID", "/webapps/bb-common-styles-BB5f7c316a9f36d", null, true);
      deleteCookie("JSESSIONID", "/webapps/bb-xss-filter-whitelist-BB5f7c316a9f36d", null, true);
      deleteCookie("JSESSIONID", "/webapps/bb-xss-filter-BB5f7c316a9f36d", null, true);
      deleteCookie("JSESSIONID", "/webapps/vtbe-tinymce", null, true);
      deleteCookie("JSESSIONID", "/webapps/bbcms", null, true);
      deleteCookie("JSESSIONID", "/webapps/inline-grading", null, true);
      deleteCookie("JSESSIONID", "/webapps/taskprogress", null, true);
      deleteCookie("JSESSIONID", "/webapps/spreview", null, true);
      deleteCookie("JSESSIONID", "/webapps/bb-xss-input-validation-BB5f7c316a9f36d", null, true);
      deleteCookie("JSESSIONID", "/webapps/portfolio", null, true);
      deleteCookie("JSESSIONID", "/webapps/blogs-journals", null, true);
      deleteCookie("JSESSIONID", "/webapps/foundations-connector", null, true);
      deleteCookie("JSESSIONID", "/webapps/partner-cloud", null, true);
      deleteCookie("JSESSIONID", "/webapps/date-management", null, true);
      deleteCookie("JSESSIONID", "/webapps/discussionboard", null, true);
      deleteCookie("JSESSIONID", "/webapps/bb-selfpeer-BB5f7c316a9f36d", null, true);
      deleteCookie("JSESSIONID", "/webapps/bb-mygrades-BB5f7c316a9f36d", null, true);
      deleteCookie("JSESSIONID", "/webapps/assignment", null, true);
      deleteCookie("JSESSIONID", "/webapps/caliper", null, true);
      deleteCookie("JSESSIONID", "/webapps/allyintegration", null, true);
      deleteCookie("JSESSIONID", "/webapps/operational-data-store", null, true);
      deleteCookie("JSESSIONID", "/webapps/Bb-wiki-BB5f7c316a9f36d", null, true);
      deleteCookie("JSESSIONID", "/webapps/retention", null, true);
      deleteCookie("JSESSIONID", "/webapps/consulting-central", null, true);
      deleteCookie("JSESSIONID", "/webapps/bbgs-goal-performance-BB5f7c316a9f36d", null, true);
      deleteCookie("JSESSIONID", "/webapps/bb-auth-provider-cas-BB5f7c316a9f36d", null, true);
      deleteCookie("JSESSIONID", "/webapps/bb-auth-provider-ldap-BB5f7c316a9f36d", null, true);
      deleteCookie("JSESSIONID", "/webapps/bb-alerts-BB5f7c316a9f36d", null, true);
      deleteCookie("JSESSIONID", "/webapps/bb-1027720613048-BB5f7c316a9f36d", null, true);
      deleteCookie("JSESSIONID", "/webapps/time-time-plgnhndl-BB5f7c316a9f36d", null, true);
      deleteCookie("JSESSIONID", "/auth-saml", null, true);
      deleteCookie("JSESSIONID", "/webapps/bb-mashups-slideshare-BB5f7c316a9f36d", null, true);
      deleteCookie("JSESSIONID", "/webapps/attendance", null, true);
      deleteCookie("JSESSIONID", "/webapps/bbcxcourseconversion", null, true);
      deleteCookie("JSESSIONID", "/webapps/bb-nautilus-BB5f7c316a9f36d", null, true);
      deleteCookie("JSESSIONID", "/webapps/scor-scormengine-BB5f7c316a9f36d", null, true);
      deleteCookie("JSESSIONID", "/webapps/bb-data-integration-flatfile-BB5f7c316a9f36d", null, true);
      deleteCookie("JSESSIONID", "/webapps/bb-theme-diff-BB5f7c316a9f36d", null, true);
      deleteCookie("JSESSIONID", "/webapps/item-analysis", null, true);
      deleteCookie("JSESSIONID", "/webapps/achievements", null, true);
      deleteCookie("JSESSIONID", "/webapps/cmsadmin", null, true);
      deleteCookie("JSESSIONID", "/webapps/bb-financial-aid-BB5f7c316a9f36d", null, true);
      deleteCookie("JSESSIONID", "/webapps/bb-mashups-flickr-BB5f7c316a9f36d", null, true);
      deleteCookie("JSESSIONID", "/webapps/bbgs-GradebookExtract-BB5f7c316a9f36d", null, true);
      deleteCookie("JSESSIONID", "/webapps/portal", null, true);
      deleteCookie("JSESSIONID", "/webapps/Bb-mobile-BB5f7c316a9f36d", null, true);
      deleteCookie("JSESSIONID", "/webapps/enterpriseSurvey", null, true);
      deleteCookie("JSESSIONID", "/webapps/plugins", null, true);
      deleteCookie("JSESSIONID", "/webapps/privacy-disclosure", null, true);
      deleteCookie("JSESSIONID", "/webapps/building-block-conversion", null, true);
      deleteCookie("JSESSIONID", "/webapps/cloudstorageintegration", null, true);
      deleteCookie("JSESSIONID", "/webapps/bb-1027954530152-BB5f7c316a9f36d", null, true);
      deleteCookie("JSESSIONID", "/webapps/collab-ultra", null, true);
      deleteCookie("JSESSIONID", "/webapps/blackboard", null, true);
      deleteCookie("JSESSIONID", "/webapps/bbcxcommoncartridge", null, true);
      deleteCookie("JSESSIONID", "/webapps/bb-mashups-youtube-BB5f7c316a9f36d", null, true);
      deleteCookie("JSESSIONID", "/webapps/auth-provider-foundations", null, true);
      deleteCookie("JSESSIONID", "/webapps/calendar", null, true);
      deleteCookie("JSESSIONID", "/webapps/telemetry", null, true);
      deleteCookie("JSESSIONID", "/webapps/bb-telephony-BB5f7c316a9f36d", null, true);
      deleteCookie("JSESSIONID", "/webapps/foundations-token", null, true);
      deleteCookie("JSESSIONID", "/webapps/school-data-sync", null, true);
      deleteCookie("JSESSIONID", "/webapps/bb-data-integration-lis-final-BB5f7c316a9f36d", null, true);
      deleteCookie("JSESSIONID", "/webapps/bb-data-integration-ss-xml-BB5f7c316a9f36d", null, true);
      deleteCookie("JSESSIONID", "/webapps/ultraui", null, true);
      deleteCookie("JSESSIONID", "/webapps/mdb-sa-BB5f7c316a9f36d", null, true);
      deleteCookie("JSESSIONID", "/webapps/bb-data-integration-ims-xml-BB5f7c316a9f36d", null, true);
      deleteCookie("JSESSIONID", "/webapps/notes", null, true);
      deleteCookie("JSESSIONID", "/webapps/bbgs-log-file-downloader-BB5f7c316a9f36d", null, true);
      deleteCookie("JSESSIONID", "/webapps/bbtextbook", null, true);
      deleteCookie("JSESSIONID", "/webapps/feature-flags", null, true);
      deleteCookie("JSESSIONID", "/webapps/insight-report", null, true);
      deleteCookie("JSESSIONID", "/webapps/asset-processor", null, true);
      deleteCookie("JSESSIONID", "/webapps/goal-mastery", null, true);
      deleteCookie("JSESSIONID", "/webapps/searchwidgets", null, true);
      if (guestLocaleCookie != null) {
        setCookie("guest.session.locale", guestLocaleCookie);
      }
      setCookie("JSESSIONID", startingJSessionCookie);
      if (typeof aptrinsic !== 'undefined') {
        window.aptrinsic('reset');
      }
      if (typeof pendo !== 'undefined') {
        pendo.clearSession();
      }
    });
  </script>
  <div id="loginFormFields" class="clearfix" style="display: none;">
    <ul id="loginFormList" class="clearfix">
      <li class="clearfix">
        <label for="user_id">Username</label>
        <input type="text" name="user_id" id="user_id" size="25" maxlength="50" autocomplete="off">
      </li>
      <li class="clearfix">
        <label for="password">Password</label>
        <input size="25" name="password" id="password" type="password" autocomplete="off">
      </li>
      <li class="clearfix">
        <input id="entry-login" type="submit" value="Sign In" name="login" class="button expand inverse outline">
      </li>
    </ul>
    <div class="login-form-footer row collapse">
      <div class="stay-signed-in small-6 columns text-left">
      </div>
    </div>
  </div>
  <script src="/javascript/qrcodejs/qrcode.min.js"></script>
  <dialog id="mfa-registration" role="dialog" class="mfa-modal-container" aria-modal="true" style="display: none;">
    <div class="mfa-registration-modal mfa-modal" aria-labelledby="mfa-registration-title" aria-describedby="mfa-registration-description">
      <div class="mfa-modal-title">
        <h1 id="mfa-registration-title">Multi-Factor Authentication</h1>
      </div>
      <div class="registration-modal-body">
        <div id="mfa-registration-description" class="registration-modal-body-description">
          <div>
            <span>Step 1</span>
            <p>Download and install any authenticator app (e.g. <strong>Microsoft Authenticator, Google Authenticator, or Authy</strong>) on your phone.</p>
          </div>
          <div>
            <span>Step 2</span>
            <p class="web-content">Open the authenticator app and scan the image below using your phone's camera or copy the key.</p>
            <p class="mobile-content">Open the authenticator app and copy the key below.</p>
          </div>
        </div>
        <div class="registration-qr-code">
          <div class="qr-code-img" id="qrcode" tabindex="-1" aria-hidden="true" title="${mfaQRUri}"><canvas width="120" height="120" style="display: none;"></canvas><img
              src="data:image/png;base64,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"
              style="display: block;"></div>
          <input type="hidden" id="qr-uri" tabindex="-1" aria-hidden="true" value="${mfaQRUri}">
          <div class="secret-key-container">
            <p id="secretkey">${mf aSec retK ey}</p>
            <div class="copy-key">
              <a id="copy-secret-key" tabindex="0" onclick="copyTextToClipboard();">Copy key</a>
              <div id="copy-feedback" class="copyfeedback">
                <span style="padding: 4px">-</span>
                <div class="copy-success">
                  <span role="alert" aria-live="assertive" style="color: #007D2C;font-size: 12px;line-height: 18px;">Key copied</span>
                  <img class="check-icon" src="/images/ci/icons/complete.svg" aria-hidden="true">
                </div>
              </div>
            </div>
          </div>
        </div>
        <div class="next-progress-info">
          <span>Step 3</span>
          <p id="next-progress-description">Press next to enter the code and associate it with your account</p>
        </div>
      </div>
      <div class="modal-footer">
        <button id="reg-cancel-button" class="modal-button button-cancel">Cancel</button>
        <button id="reg-next-button" class="modal-button button-next">Next</button>
      </div>
    </div>
  </dialog>
  <script type="text/javascript">
    // Initialize QRCode with the provided URI and set display parameters
    var qrcode = new QRCode(document.getElementById("qrcode"), {
      text: document.getElementById("qr-uri").value,
      width: 120,
      height: 120,
      colorDark: "#000000",
      colorLight: "#ffffff",
      correctLevel: QRCode.CorrectLevel.H
    });
    // Event listener for the 'Next' button click in the registration dialog
    const nextButton = document.getElementById('reg-next-button');
    nextButton.addEventListener('click', function(event) {
      event.preventDefault();
      // Hide registration dialog and show verification dialog
      const registrationDialog = document.getElementById('mfa-registration');
      const verificationDialog = document.getElementById('mfa-totp-verification');
      const inputField = document.getElementById('totp-verification-input');
      registrationDialog.style.display = 'none';
      verificationDialog.style.display = 'flex';
      inputField.focus();
      // Update hidden input values to manage UI states
      document.getElementById('showMFARegistration').value = 'false';
      document.getElementById('showMFAVerification').value = 'true';
      document.getElementById('showMFASuccessFul').value = 'false';
    });
    // Event listener for the 'Cancel' button click in the registration dialog
    const regCancelButton = document.getElementById('reg-cancel-button');
    regCancelButton.addEventListener('click', function(event) {
      event.preventDefault();
      // Navigate to login page.
      window.location.href = '/webapps/login/?action=logout';
    });
    // Function to add a space after every 4 characters in the secret key
    function formatSecretKey() {
      const secretKeyElement = document.getElementById('secretkey');
      const secretKeyText = secretKeyElement.textContent;
      const formattedSecretKey = secretKeyText.replace(/(.{4})/g, '$1 ');
      secretKeyElement.textContent = formattedSecretKey;
    }
    // Call the function to format the displayed secret key
    formatSecretKey();
    // Function to copy text to clipboard
    function copyTextToClipboard(text) {
      const textArea = document.createElement('textarea');
      textArea.value = text;
      document.body.appendChild(textArea);
      textArea.select();
      const copykey = document.execCommand('copy');
      document.body.removeChild(textArea);
      return copykey;
    }
    // Event listener for the 'Copy' button click to copy the secret key to clipboard
    function handleCopykeyEvent() {
      event.preventDefault();
      const secretKeyElement = document.getElementById('secretkey');
      const secretKeyText = secretKeyElement.textContent;
      const unformattedSecretKey = secretKeyText.replace(/\s+/g, '');
      copyTextToClipboard(unformattedSecretKey);
      const copyFeedback = document.getElementById('copy-feedback');
      copyFeedback.style.display = 'flex';
      setTimeout(function() {
        copyFeedback.style.display = 'none';
      }, 10000);
      document.getElementById('copy-secret-key').focus();
    }
    document.getElementById('copy-secret-key').addEventListener('click', handleCopykeyEvent);
    document.getElementById('copy-secret-key').addEventListener('keydown', function(event) {
      if (event.key === 'Enter' || event.code === 'Space') {
        handleCopykeyEvent(event);
      }
    });
  </script>
  <dialog id="mfa-totp-verification" class="mfa-modal-container" style="display: none;">
    <div class="mfa-verification-modal mfa-modal" role="dialog" aria-modal="true" aria-labelledby="mfa-verification-title">
      <div class="mfa-modal-title">
        <h1 id="mfa-verification-title">Multi-Factor Authentication</h1>
      </div>
      <div class="verification-modal-body">
        <div class="verification-modal-body-description">
          <label for="totp-verification-input" class="custom-label">Type the Code</label>
          <p id="mfa-verification-description">Type the 6-digit temporary code generated with your authenticator application</p>
        </div>
        <div id="totp-verification-input-container" class="verification-input">
          <input name="secondaryAuthToken" id="totp-verification-input" type="text" onkeypress="return validateTOTP(event)" maxlength="6" tabindex="0" placeholder="000000" autocomplete="off" aria-describedby="mfa-verification-description"
            aria-invalid="false">
        </div>
        <div id="loading-spinner" class="centered">
          <div class="loader-outer">
            <div id="loader">
              <div class="loader-inner"></div>
            </div>
          </div>
        </div>
      </div>
      <div class="modal-footer">
        <button id="totp-back-button2" class="modal-button button-back">Back</button>
        <button id="totp-submit-button" class="modal-button button-submit" type="submit" onclick="showLoadingSpinner();" disabled="">Submit</button>
      </div>
    </div>
  </dialog>
  <script>
    window.onload = function() {
      const totpInput = document.getElementById("totp-verification-input");
      if (totpInput) {
        totpInput.focus();
      }
    }

    function validateTOTP(event) {
      const inputField = document.getElementById('totp-verification-input');
      const key = event.key;
      if ((key >= '0' && key <= '9') || key === 'Backspace' || (event.metaKey && key === 'a')) // for safari browser compatablity
      {
        return true; // Allow
      } else if (key === 'Enter') {
        if (inputField.value.length !== 6) {
          event.preventDefault();
        } else {
          showLoadingSpinner();
          return true;
        }
      } else {
        return false; // Block
      }
    }
    const inputField = document.getElementById('totp-verification-input');
    // To enable/disable the submit button based on input value.
    inputField.addEventListener('keyup', function() {
      const submitButton = document.getElementById('totp-submit-button');
      submitButton.disabled = !(inputField.value.length === 6);
    });
    inputField.addEventListener('input', function() {
      const errorMessageContainer = document.getElementById('totp-error');
      if (errorMessageContainer) {
        errorMessageContainer.style.display = 'none'; // Hide the error message on focus
      }
    });

    function showLoadingSpinner() {
      const spinner = document.getElementById('loading-spinner');
      const inputField = document.getElementById('totp-verification-input');
      const inputContainer = document.getElementById('totp-verification-input-container');
      const errorMessage = document.getElementById('errorMessage');
      const backbutton1 = document.getElementById('totp-back-button1');
      const backbutton2 = document.getElementById('totp-back-button2');
      if (inputField.value.length === 6 && !errorMessage) {
        inputContainer.style.display = 'none';
        spinner.style.display = "flex";
        if (backbutton1) {
          backbutton1.disabled = true;
        }
        if (backbutton2) {
          backbutton2.disabled = true;
        }
      } else if (errorMessage) {
        spinner.style.display = 'none';
        inputContainer.style.display = 'flex';
        inputField.setAttribute('aria-invalid', 'true');
      }
    }

    function clearTOTPCode() {
      document.getElementById('totp-verification-input').value = '';
    }
    const totpButton2 = document.getElementById('totp-back-button2');
    if (totpButton2) {
      totpButton2.addEventListener('click', function(event) {
        event.preventDefault();
        clearTOTPCode();
        window.location.href = '/webapps/login/?action=logout';
      });
    }
  </script>
  <dialog id="mfa-registration-success" role="dialog" class="mfa-modal-container" aria-modal="true" style="display: none;">
    <div class="success-modal mfa-modal" tabindex="0" aria-labelledby="mfa-success-title" aria-describedby="mfa-success-description">
      <div class="mfa-modal-title">
        <h1 id="mfa-success-title">Multi-Factor Authentication</h1>
      </div>
      <div class="modal-success-body">
        <div id="mfa-success-description" class="success-description">
          <div>
            <span>You are all set</span>
            <p>You have enabled multi-factor authentication using your authenticator app.</p>
          </div>
          <div>
            <p class="web-content">We will now ask for a login code anytime you log in.</p>
            <p class="mobile-content">We will now ask for a login code anytime you log in on a device we don't recognize.</p>
          </div>
        </div>
      </div>
      <div class="modal-footer">
        <button id="mfa-registration-succes-button" class="modal-button button-done">Done</button>
        <input type="hidden" id="mfaSuccessfulNavUrl" value="${mfaSuccessfulNavUrl}">
      </div>
    </div>
  </dialog>
  <script>
    const sucessNavButton = document.getElementById('mfa-registration-succes-button');
    sucessNavButton.addEventListener('click', function(event) {
      event.preventDefault();
      const navUrl = document.getElementById('mfaSuccessfulNavUrl').value;
      window.location = navUrl;
    });
  </script>
  <input type="hidden" name="showMFARegistration" id="showMFARegistration" value="$showMFARegistration">
  <input type="hidden" name="showMFAVerification" id="showMFAVerification" value="$showMFAVerification">
  <input type="hidden" name="showMFASuccessFul" id="showMFASuccessFul" value="$showMFASuccessFul">
  <input type="hidden" name="action" value="login">
  <input type="hidden" name="new_loc" value="">
  <input type="hidden" name="blackboard.platform.security.NonceUtil.nonce.ajax" value="4305bf72-2524-44c9-9a90-71f81d73b3aa">
</form>

Text Content

 * English (United Kingdom‭)‬
 * English (United States‭)‬
 * Français (France‭)‬
 * العربية


BLACKBOARD LEARN ™

Please enable JavaScript in your browser for the Blackboard application to
function.
 * Username
 * Password
 * 




MULTI-FACTOR AUTHENTICATION

Step 1

Download and install any authenticator app (e.g. Microsoft Authenticator, Google
Authenticator, or Authy) on your phone.

Step 2

Open the authenticator app and scan the image below using your phone's camera or
copy the key.

Open the authenticator app and copy the key below.

${mf aSec retK ey}

Copy key
-
Key copied
Step 3

Press next to enter the code and associate it with your account

Cancel Next


MULTI-FACTOR AUTHENTICATION

Type the Code

Type the 6-digit temporary code generated with your authenticator application



Back Submit


MULTI-FACTOR AUTHENTICATION

You are all set

You have enabled multi-factor authentication using your authenticator app.

We will now ask for a login code anytime you log in.

We will now ask for a login code anytime you log in on a device we don't
recognize.

Done
Sign in with third-party account
 * 
   QU User Login - دخول اعضاء جامعة قطر


External User Login

--------------------------------------------------------------------------------

BLACKBOARD STUDENT





BLACKBOARD INSTRUCTOR



© 1997-2024 Blackboard Inc. All Rights Reserved.


Blackboard Learn


CONTENT


PRIVACY, COOKIES AND TERMS OF USE

Blackboard will collect, use, and store your personal information that is
necessary to use this application and the related functionalities. Blackboard
handles this information on behalf of your institution.

The application uses cookies that are required to provide the necessary
functionalities to you. To learn more about the use of cookies and how
Blackboard uses personal information on behalf of your institution, please read
Blackboard's Privacy Statement.

When you select "OK" you are agreeing to Blackboard's Terms of Use.

OK