elearning.kctcs.edu
Open in
urlscan Pro
54.159.87.175
Public Scan
Submitted URL: http://elearning.kctcs.edu/
Effective URL: https://elearning.kctcs.edu/
Submission: On January 16 via api from US — Scanned from DE
Effective URL: https://elearning.kctcs.edu/
Submission: On January 16 via api from US — Scanned from DE
Form analysis
2 forms found in the DOMName: locale_picker — POST /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');
$langMenu.setAttribute('aria-expanded', 'true');
$langMenu.setAttribute('aria-pressed', 'true');
$langButton.setAttribute('aria-expanded', 'true');
$langButton.addClassName('expanded');
$langMenu.firstDescendant().firstDescendant().focus();
}
function hideMenu() {
$langMenu.addClassName('hide');
$langMenu.setAttribute('aria-hidden', 'true');
$langMenu.setAttribute('aria-expanded', 'false');
$langMenu.setAttribute('aria-pressed', 'false');
$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" aria-expanded="false" role="menu">
<li aria-label="Cymraeg (Cymru)"><a href="javascript:loadLocale('cy_GB');" title="Cymraeg (Cymru)" lang="cy_GB">Cymraeg (Cymru)</a></li>
<li aria-label="Dansk (Danmark)"><a href="javascript:loadLocale('da_DK');" title="Dansk (Danmark)" lang="da_DK">Dansk (Danmark)</a></li>
<li aria-label="Deutsch (Deutschland)"><a href="javascript:loadLocale('de_DE');" title="Deutsch (Deutschland)" lang="de_DE">Deutsch (Deutschland)</a></li>
<li aria-label="English (United Kingdom)"><a href="javascript:loadLocale('en_GB');" title="English (United Kingdom)" lang="en_GB">English (United Kingdom)</a></li>
<li aria-label="English (United States)"><a href="javascript:loadLocale('en_US');" title="English (United States)" lang="en_US">English (United States)</a></li>
<li aria-label="English for Pro-Ed (United States)"><a href="javascript:loadLocale('en_US_pro');" title="English for Pro-Ed (United States)" lang="en_US_pro">English for Pro-Ed (United States)</a></li>
<li aria-label="Español (España)"><a href="javascript:loadLocale('es_ES');" title="Español (España)" lang="es_ES">Español (España)</a></li>
<li aria-label="Français (France)"><a href="javascript:loadLocale('fr_FR');" title="Français (France)" lang="fr_FR">Français (France)</a></li>
<li aria-label="Italiano (Italia)"><a href="javascript:loadLocale('it_IT');" title="Italiano (Italia)" lang="it_IT">Italiano (Italia)</a></li>
<li aria-label="Nederlands (Nederland)"><a href="javascript:loadLocale('nl_NL');" title="Nederlands (Nederland)" lang="nl_NL">Nederlands (Nederland)</a></li>
<li aria-label="Português (Brasil)"><a href="javascript:loadLocale('pt_BR');" title="Português (Brasil)" lang="pt_BR">Português (Brasil)</a></li>
<li aria-label="Svenska (Sverige)"><a href="javascript:loadLocale('sv_SE');" title="Svenska (Sverige)" lang="sv_SE">Svenska (Sverige)</a></li>
<li aria-label="Русский (Россия)"><a href="javascript:loadLocale('ru_RU');" title="Русский (Россия)" lang="ru_RU">Русский (Россия)</a></li>
<li aria-label="العربية"><a href="javascript:loadLocale('ar_SA');" title="العربية" lang="ar_SA">العربية</a></li>
<li aria-label="中文 (中国)"><a href="javascript:loadLocale('zh_CN');" title="中文 (中国)" lang="zh_CN">中文 (中国)</a></li>
<li aria-label="中文 (台灣)"><a href="javascript:loadLocale('zh_TW');" title="中文 (台灣)" lang="zh_TW">中文 (台灣)</a></li>
<li aria-label="日本語 (日本)"><a href="javascript:loadLocale('ja_JP');" title="日本語 (日本)" lang="ja_JP">日本語 (日本)</a></li>
</ul>
<input type="hidden" name="locale">
</form>
Name: login — POST /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-BB5beddfe10b70f", null, true);
deleteCookie("JSESSIONID", "/webapps/ai", null, true);
deleteCookie("JSESSIONID", "/webapps/goal", null, true);
deleteCookie("JSESSIONID", "/webapps/bb-social-learning-BB5beddfe10b70f", 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-BB5beddfe10b70f", 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/videointegration", null, true);
deleteCookie("JSESSIONID", "/webapps/vtbe-tinymce-ephox-hyperlinking", null, true);
deleteCookie("JSESSIONID", "/webapps/vtbe-tinymce-ephox-spelling", null, true);
deleteCookie("JSESSIONID", "/webapps/assessment", null, true);
deleteCookie("JSESSIONID", "/webapps/bb-common-styles-BB5beddfe10b70f", null, true);
deleteCookie("JSESSIONID", "/webapps/bb-xss-filter-whitelist-BB5beddfe10b70f", null, true);
deleteCookie("JSESSIONID", "/webapps/bb-xss-filter-BB5beddfe10b70f", 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-BB5beddfe10b70f", 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-BB5beddfe10b70f", null, true);
deleteCookie("JSESSIONID", "/webapps/bb-mygrades-BB5beddfe10b70f", null, true);
deleteCookie("JSESSIONID", "/webapps/assignment", null, true);
deleteCookie("JSESSIONID", "/webapps/allyintegration", null, true);
deleteCookie("JSESSIONID", "/webapps/operational-data-store", null, true);
deleteCookie("JSESSIONID", "/webapps/Bb-wiki-BB5beddfe10b70f", null, true);
deleteCookie("JSESSIONID", "/webapps/retention", null, true);
deleteCookie("JSESSIONID", "/webapps/consulting-central", null, true);
deleteCookie("JSESSIONID", "/webapps/caliper", null, true);
deleteCookie("JSESSIONID", "/webapps/rs-lockdown-BB5beddfe10b70f", null, true);
deleteCookie("JSESSIONID", "/webapps/ultraui", null, true);
deleteCookie("JSESSIONID", "/webapps/school-data-sync", null, true);
deleteCookie("JSESSIONID", "/webapps/foundations-token", null, true);
deleteCookie("JSESSIONID", "/webapps/feature-flags", null, true);
deleteCookie("JSESSIONID", "/webapps/bb-auth-provider-cas-BB5beddfe10b70f", null, true);
deleteCookie("JSESSIONID", "/webapps/auth-provider-foundations", null, true);
deleteCookie("JSESSIONID", "/webapps/bb-auth-provider-ldap-BB5beddfe10b70f", null, true);
deleteCookie("JSESSIONID", "/webapps/Bb-SmartView-BB5beddfe10b70f", null, true);
deleteCookie("JSESSIONID", "/webapps/es-examsoft-BB5beddfe10b70f", null, true);
deleteCookie("JSESSIONID", "/webapps/es-examsoftv2-BB5beddfe10b70f", null, true);
deleteCookie("JSESSIONID", "/webapps/ee-Eesypluginv2-BB5beddfe10b70f", null, true);
deleteCookie("JSESSIONID", "/webapps/Bb-McGrawHill-BB5beddfe10b70f", null, true);
deleteCookie("JSESSIONID", "/webapps/bb-data-integration-ss-xml-BB5beddfe10b70f", null, true);
deleteCookie("JSESSIONID", "/webapps/bb-data-integration-ims-xml-BB5beddfe10b70f", null, true);
deleteCookie("JSESSIONID", "/webapps/dub-mc-BB5beddfe10b70f", null, true);
deleteCookie("JSESSIONID", "/webapps/bb-data-integration-flatfile-BB5beddfe10b70f", null, true);
deleteCookie("JSESSIONID", "/webapps/bb-data-integration-lis-final-BB5beddfe10b70f", null, true);
deleteCookie("JSESSIONID", "/webapps/bb-data-integration-lis-BB5beddfe10b70f", null, true);
deleteCookie("JSESSIONID", "/webapps/time-time-plgnhndl-BB5beddfe10b70f", null, true);
deleteCookie("JSESSIONID", "/webapps/bb-1027720613048-BB5beddfe10b70f", null, true);
deleteCookie("JSESSIONID", "/webapps/mdb-sa-BB5beddfe10b70f", null, true);
deleteCookie("JSESSIONID", "/webapps/bb-theme-diff-BB5beddfe10b70f", null, true);
deleteCookie("JSESSIONID", "/webapps/bbtextbook", null, true);
deleteCookie("JSESSIONID", "/auth-saml", null, true);
deleteCookie("JSESSIONID", "/webapps/bbcxcommoncartridge", null, true);
deleteCookie("JSESSIONID", "/webapps/bb-alerts-BB5beddfe10b70f", null, true);
deleteCookie("JSESSIONID", "/webapps/bbcxcourseconversion", null, true);
deleteCookie("JSESSIONID", "/webapps/bb-financial-aid-BB5beddfe10b70f", null, true);
deleteCookie("JSESSIONID", "/webapps/asset-processor", null, true);
deleteCookie("JSESSIONID", "/webapps/bb-nautilus-BB5beddfe10b70f", null, true);
deleteCookie("JSESSIONID", "/webapps/privacy-disclosure", null, true);
deleteCookie("JSESSIONID", "/webapps/Bb-mobile-BB5beddfe10b70f", null, true);
deleteCookie("JSESSIONID", "/webapps/building-block-conversion", null, true);
deleteCookie("JSESSIONID", "/webapps/bbgs-goal-performance-BB5beddfe10b70f", null, true);
deleteCookie("JSESSIONID", "/webapps/plugins", null, true);
deleteCookie("JSESSIONID", "/webapps/bb-mashups-youtube-BB5beddfe10b70f", null, true);
deleteCookie("JSESSIONID", "/webapps/calendar", null, true);
deleteCookie("JSESSIONID", "/webapps/bb-mashups-slideshare-BB5beddfe10b70f", null, true);
deleteCookie("JSESSIONID", "/webapps/notes", null, true);
deleteCookie("JSESSIONID", "/webapps/bb-mashups-flickr-BB5beddfe10b70f", null, true);
deleteCookie("JSESSIONID", "/webapps/scor-scormengine-BB5beddfe10b70f", null, true);
deleteCookie("JSESSIONID", "/webapps/attendance", null, true);
deleteCookie("JSESSIONID", "/webapps/blackboard", null, true);
deleteCookie("JSESSIONID", "/webapps/telemetry", null, true);
deleteCookie("JSESSIONID", "/webapps/bb-telephony-BB5beddfe10b70f", null, true);
deleteCookie("JSESSIONID", "/webapps/achievements", null, true);
deleteCookie("JSESSIONID", "/webapps/evk-EvalKIT-EUIBB-BB5beddfe10b70f", null, true);
deleteCookie("JSESSIONID", "/webapps/portal", null, true);
deleteCookie("JSESSIONID", "/webapps/insight-report", null, true);
deleteCookie("JSESSIONID", "/webapps/cmsadmin", null, true);
deleteCookie("JSESSIONID", "/webapps/enterpriseSurvey", null, true);
deleteCookie("JSESSIONID", "/webapps/cloudstorageintegration", null, true);
deleteCookie("JSESSIONID", "/webapps/collab-ultra", null, true);
deleteCookie("JSESSIONID", "/webapps/item-analysis", 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">
<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 class="small-6 columns text-right">
<a href="https://kctcs.edu/user" onclick="login_openForgotPassword('https://kctcs.edu/user');return false;">Forgot Password?</a>
</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="ed3e8aaf-80cb-496a-8e41-b76b46831499">
</form>
Text Content
* Cymraeg (Cymru) * Dansk (Danmark) * Deutsch (Deutschland) * English (United Kingdom) * English (United States) * English for Pro-Ed (United States) * Español (España) * Français (France) * Italiano (Italia) * Nederlands (Nederland) * Português (Brasil) * Svenska (Sverige) * Русский (Россия) * العربية * 中文 (中国) * 中文 (台灣) * 日本語 (日本) LOGIN TO KCTCS BLACKBOARD LEARN Please enable JavaScript in your browser for the Blackboard application to function. * Username * Password * Forgot 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 * KCTCS Single Sign On (SS0) KENTUCKY COMMUNITY AND TECHNICAL COLLEGE SYSTEM Welcome to the Kentucky Community and Technical College System online. NEVER UNDERESTIMATE YOU! GET MOBILE Access grades, course content, and more - right from the Blackboard app on your phone. Available today on iOS, Android, or Windows: BB INSTRUCTOR Blackboard Instructor is Blackboard's brand new mobile application that gives instructors a quick and easy way to manage courses, interact with students, and view content. Available today on iOS, Android, or Windows: © 1997-2024 Blackboard Inc. All Rights Reserved. * Help * Privacy and Terms of Use * Accessibility 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