1jQuery( document ).ready( 2 function($){ 3 4 const WPSEC_2FA_MAIL_ACTIVE = 'wpsec_2fa_mail'; 5 const WPSEC_2FA_APP_ACTIVE = 'wpsec_2fa_enabled_app'; 6 const WPSEC_2FA_YUBIKEY_ACTIVE = 'wpsec_2fa_enabled_yubikey'; 7 const WPSEC_2FA_RESEND_MAIL_ACTION = 'wpsec_2fa_send_email'; 8 const WPSEC_2FA_VERIFY_LOGIN_CODE = 'wpsec_2fa_verify_login_mail_code'; 9 10 let wpsec_2fa_login_app_check_conf = $( "#wpsec_2fa_app_login" ); 11 let wpsec_2fa_login_app_check_header = $( "#wpsec_2fa_app_login_header" ); 12 let wpsec_2fa_mail_login = $( "#wpsec_2fa_email_login" ); 13 let wpsec_2fa_mail_login_header = $( "#wpsec_2fa_email_login_header" ); 14 let wpsec_2fa_yubikey_login = $( "#wpsec_2fa_yubikey_login" ); 15 let wpsec_2fa_yubikey_login_header = $( "#wpsec_2fa_yubikey_login_header" ); 16 let wpsec_2fa_login_mail_check_first_conf = $( "#wpsec_2fa_login_mail_check_configuration" ); 17 let wpsec_2fa_login_mail_check_second_conf = $( "#wpsec_2fa_login_mail_check_second_conf" ); 18 let wpsec_2fa_login_app_auth_icon = $( "#wpsec_2fa_login_app_auth_icon" ); 19 let wpsec_2fa_login_mail_auth_icon = $( "#wpsec_2fa_login_mail_auth_icon" ); 20 let wpsec_2fa_login_yubikey_auth_icon = $( "#wpsec_2fa_login_yubikey_auth_icon" ); 21 let wpsec_2fa_login_mail_next_button = $( "#wpsec_2fa_mail_login_check_next_button" ); 22 let wpsec_2fa_login_title = $( "#wpsec_2fa_login_check_title" ); 23 let wpsec_2fa_login_title_bottom = $( "#wpsec_2fa_login_check_title_bottom" ); 24 let wpsec_2fa_login_mail_title = $( "#wpsec_2fa_login_check_mail_title" ); 25 let wpsec_2fa_login_mail_back_button = $( "#wpsec_2fa_mail_login_check_back_button" ); 26 let wpsec_2fa_login_icons = $( "#wpsec_2fa_login_icons" ); 27 let wpsec_2fa_login_nonce = $( "#wpsec_2fa_auth_nonce" ); 28 29 let wpsec_2fa_login_resend_mail = $( "#wpsec_2fa_login_resend_mail" ); 30 let wpsec_2fa_login_provider = $( "#wpsec_2fa_login_provider" ); 31 let wpsec_2fa_login_mail_submit_button = $( "#wp_wpsec_2fa_login_mail_submit" ); 32 let wpsec_2fa_login_app_submit_button = $( "#wp_wpsec_2fa_login_app_submit" ); 33 let wpsec_2fa_login_yubikey_submit_button = $( "#wp_wpsec_2fa_login_yubikey_submit" ); 34 let wpsec_2fa_login_code_error = $( "#wpsec_2fa_2sv_login_code_error_message" ); 35 let wpsec_2fa_login_expired_code_error = $( "#wpsec_2fa_2sv_login_code_expired_message" ); 36 let wpsec_2fa_login_app_code_check = $( "#wpsec_2fa_login_app_code_check" ); 37 let wpsec_2fa_login_mail_code_check = $( "#wpsec_2fa_login_mail_code_check" ); 38 let wpsec_2fa_login_yubikey_code_check = $( "#wpsec_2fa_login_yubikey_code_check" ); 39 40 instantiate_slider_buttons( [ wpsec_2fa_login_app_check_conf, wpsec_2fa_yubikey_login ] ); 41 42 wpsec_2fa_login_app_auth_icon.on( 43 'click', 44 function() { 45 let app_active = wpsec_2fa_login_provider.val(); 46 if ( app_active !== WPSEC_2FA_APP_ACTIVE ) { 47 deactivate_login_header( wpsec_2fa_login_mail_auth_icon, wpsec_2fa_mail_login ); 48 deactivate_login_header( wpsec_2fa_login_yubikey_auth_icon, wpsec_2fa_yubikey_login ); 49 deactivate_login_header( wpsec_2fa_login_yubikey_auth_icon, wpsec_2fa_yubikey_login_header ); 50 deactivate_login_header( wpsec_2fa_login_yubikey_auth_icon, wpsec_2fa_mail_login_header ); 51 deactivate_mail_configuration( wpsec_2fa_login_mail_check_second_conf ); 52 activate_login_header( wpsec_2fa_login_app_auth_icon, wpsec_2fa_login_app_check_conf, wpsec_2fa_login_app_check_header ); 53 wpsec_2fa_login_provider.val( WPSEC_2FA_APP_ACTIVE ); 54 } 55 } 56 ) 57 58 wpsec_2fa_login_mail_auth_icon.on( 59 'click', 60 function() { 61 let app_active = wpsec_2fa_login_provider.val(); 62 if ( app_active !== WPSEC_2FA_MAIL_ACTIVE) { 63 deactivate_login_header( wpsec_2fa_login_app_auth_icon, wpsec_2fa_login_app_check_conf ); 64 deactivate_login_header( wpsec_2fa_login_yubikey_auth_icon, wpsec_2fa_yubikey_login ); 65 deactivate_login_header( wpsec_2fa_login_yubikey_auth_icon, wpsec_2fa_yubikey_login_header ); 66 deactivate_login_header( wpsec_2fa_login_yubikey_auth_icon, wpsec_2fa_login_app_check_header ); 67 activate_login_header( wpsec_2fa_login_mail_auth_icon, wpsec_2fa_mail_login,wpsec_2fa_mail_login_header ); 68 wpsec_2fa_login_provider.val( WPSEC_2FA_MAIL_ACTIVE ); 69 } 70 } 71 ) 72 73 wpsec_2fa_login_yubikey_auth_icon.on( 74 'click', 75 function() { 76 let app_active = wpsec_2fa_login_provider.val(); 77 if ( app_active !== WPSEC_2FA_YUBIKEY_ACTIVE) { 78 deactivate_login_header( wpsec_2fa_login_app_auth_icon, wpsec_2fa_login_app_check_conf ); 79 deactivate_login_header( wpsec_2fa_login_mail_auth_icon, wpsec_2fa_mail_login ); 80 deactivate_login_header( wpsec_2fa_login_yubikey_auth_icon, wpsec_2fa_login_app_check_header ); 81 deactivate_login_header( wpsec_2fa_login_yubikey_auth_icon, wpsec_2fa_mail_login_header ); 82 deactivate_mail_configuration( wpsec_2fa_login_mail_check_second_conf ); 83 activate_login_header( wpsec_2fa_login_yubikey_auth_icon, wpsec_2fa_yubikey_login, wpsec_2fa_yubikey_login_header ); 84 wpsec_2fa_login_provider.val( WPSEC_2FA_YUBIKEY_ACTIVE ); 85 } 86 } 87 ) 88 89 wpsec_2fa_login_mail_next_button.on( 90 'click', 91 function() { 92 deactivate_mail_configuration( wpsec_2fa_login_mail_check_first_conf ); 93 activate_mail_configuration( wpsec_2fa_login_mail_check_second_conf ); 94 ! wpsec_2fa_login_title.hasClass( 'wpsec-2fa-hidden' ) ? wpsec_2fa_login_title.addClass( 'wpsec-2fa-hidden' ) : ''; 95 ! wpsec_2fa_login_title_bottom.hasClass( 'wpsec-2fa-hidden' ) ? wpsec_2fa_login_title_bottom.addClass( 'wpsec-2fa-hidden' ) : ''; 96 wpsec_2fa_login_mail_title.hasClass( 'wpsec-2fa-hidden' ) ? wpsec_2fa_login_mail_title.removeClass( 'wpsec-2fa-hidden' ) : ''; 97 ! wpsec_2fa_login_icons.hasClass( 'wpsec-2fa-hidden' ) ? wpsec_2fa_login_icons.addClass( 'wpsec-2fa-hidden' ) : ''; 98 let user_id = $( "#wpsec_2fa_login_user_id" ).val(); 99 let nonce = wpsec_2fa_login_nonce.val(); 100 ajax_call_with_response( WPSEC_2FA_RESEND_MAIL_ACTION, user_id, nonce ); 101 } 102 ) 103 104 wpsec_2fa_login_mail_back_button.on( 105 'click', 106 function() { 107 deactivate_mail_configuration( wpsec_2fa_login_mail_check_second_conf ); 108 activate_mail_configuration( wpsec_2fa_login_mail_check_first_conf ); 109 wpsec_2fa_login_title.hasClass( 'wpsec-2fa-hidden' ) ? wpsec_2fa_login_title.removeClass( 'wpsec-2fa-hidden' ) : ''; 110 wpsec_2fa_login_title_bottom.hasClass( 'wpsec-2fa-hidden' ) ? wpsec_2fa_login_title_bottom.addClass( 'wpsec-2fa-hidden' ) : ''; 111 ! wpsec_2fa_login_mail_title.hasClass( 'wpsec-2fa-hidden' ) ? wpsec_2fa_login_mail_title.addClass( 'wpsec-2fa-hidden' ) : ''; 112 wpsec_2fa_login_icons.hasClass( 'wpsec-2fa-hidden' ) ? wpsec_2fa_login_icons.removeClass( 'wpsec-2fa-hidden' ) : ''; 113 } 114 ) 115 116 wpsec_2fa_login_resend_mail.on( 117 'click', 118 function() { 119 let user_id = $( "#wpsec_2fa_login_user_id" ).val(); 120 let nonce = wpsec_2fa_login_nonce.val(); 121 ajax_call_with_response( WPSEC_2FA_RESEND_MAIL_ACTION, user_id, nonce ); 122 } 123 ) 124 125 wpsec_2fa_login_mail_submit_button.on( 126 'click', 127 function() { 128 ! wpsec_2fa_login_code_error.hasClass( 'wpsec_2fa_hidden' ) ? wpsec_2fa_login_code_error.addClass( 'wpsec_2fa_hidden' ) : ''; 129 ! wpsec_2fa_login_expired_code_error.hasClass( 'wpsec_2fa_hidden' ) ? wpsec_2fa_login_expired_code_error.addClass( 'wpsec_2fa_hidden' ) : ''; 130 call_2fa_code_check( WPSEC_2FA_MAIL_ACTIVE ); 131 } 132 ) 133 134 wpsec_2fa_login_app_submit_button.on( 135 'click', 136 function() { 137 call_2fa_code_check( WPSEC_2FA_APP_ACTIVE ); 138 } 139 ) 140 141 wpsec_2fa_login_yubikey_submit_button.on( 142 'click', 143 function() { 144 call_2fa_code_check( WPSEC_2FA_YUBIKEY_ACTIVE ); 145 } 146 ) 147 148 wpsec_2fa_login_app_code_check.on( 149 'keypress', 150 function (e) { 151 if (e.which === 13) { 152 e.preventDefault(); 153 call_2fa_code_check( WPSEC_2FA_APP_ACTIVE ); 154 } 155 } 156 ) 157 158 wpsec_2fa_login_mail_code_check.on( 159 'keypress', 160 function (e) { 161 if (e.which === 13) { 162 e.preventDefault(); 163 ! wpsec_2fa_login_code_error.hasClass( 'wpsec_2fa_hidden' ) ? wpsec_2fa_login_code_error.addClass( 'wpsec_2fa_hidden' ) : ''; 164 ! wpsec_2fa_login_expired_code_error.hasClass( 'wpsec_2fa_hidden' ) ? wpsec_2fa_login_expired_code_error.addClass( 'wpsec_2fa_hidden' ) : ''; 165 call_2fa_code_check( WPSEC_2FA_MAIL_ACTIVE ); 166 } 167 } 168 ) 169 170 wpsec_2fa_login_yubikey_code_check.on( 171 'keypress', 172 function (e) { 173 if (e.which === 13) { 174 e.preventDefault(); 175 call_2fa_code_check( WPSEC_2FA_YUBIKEY_ACTIVE ); 176 } 177 } 178 ) 179 180 /** 181 * Activates login auth header 182 */ 183 function activate_login_header(wrapper, header_config, login_config) { 184 let svg = wrapper.children()[0]; 185 svg.setAttribute( 'fill', '#2271B2' ); 186 svg.setAttribute( 'opacity', '1' ); 187 header_config.hasClass( 'wpsec-2fa-hidden' ) ? header_config.removeClass( 'wpsec-2fa-hidden' ) : ''; 188 189 if (login_config != null || login_config !== undefined) { 190 login_config.hasClass( 'wpsec-2fa-hidden' ) ? login_config.removeClass( 'wpsec-2fa-hidden' ) : ''; 191 } 192 } 193 194 /** 195 * Deactivates login auth header 196 */ 197 function deactivate_login_header(wrapper, header_config) { 198 let svg = wrapper.children()[0]; 199 svg.setAttribute( 'fill', 'black' ); 200 svg.setAttribute( 'opacity', '0.5' ); 201 ! header_config.hasClass( 'wpsec-2fa-hidden' ) ? header_config.addClass( 'wpsec-2fa-hidden' ) : ''; 202 } 203 204 /** 205 * Activates given mail configuration 206 */ 207 function activate_mail_configuration( configuration ) { 208 configuration.hasClass( 'wpsec-2fa-hidden' ) ? configuration.removeClass( 'wpsec-2fa-hidden' ) : ''; 209 } 210 211 /** 212 * Deactivates given mail configuration 213 */ 214 function deactivate_mail_configuration( configuration ) { 215 ! configuration.hasClass( 'wpsec-2fa-hidden' ) ? configuration.addClass( 'wpsec-2fa-hidden' ) : ''; 216 } 217 218 /** 219 * Instantiate button functionality for screen slider 220 * @param parents Array of parent containers 221 */ 222 function instantiate_slider_buttons(parents){
223 parents.forEach( 224 function (parent) { 225 parent.find( "button.wpsec_2fa_login_button_next" ).each( 226 function () { 227 $( this ).on( 228 'click', 229 function () { 230 slider_buttons( 'next', parent ) 231 } 232 ) 233 } 234 ) 235 parent.find( "button.wpsec_2fa_login_button_back" ).each( 236 function () { 237 $( this ).on( 238 'click', 239 function () { 240 slider_buttons( 'previous', parent ); 241 } 242 ) 243 } 244 ) 245 } 246 ) 247 } 248 249 /** 250 * Screen changing functionality for transitioning between screens with buttons 251 * @param direction Direction to scroll to, 'next' for the next slide, 'previous' for the previous slide 252 * @param parent Parent container 253 */ 254 function slider_buttons( direction = 'next', parent ) { 255 console.log( parent ); 256 let currentSlide = parent.find( "#wpsec_2fa_current_slide" ); 257 let wpsec_2fa_login_app_slides = parent.find( "div.ui-dialog-content" ); 258 let currentSlideNumber = Number( currentSlide.val() ); 259 260 console.log( currentSlide, wpsec_2fa_login_app_slides ); 261 hideAllDialogs( wpsec_2fa_login_app_slides ); 262 if ( direction === 'next' ) { 263 currentSlide.val( ! (currentSlideNumber + 1 > wpsec_2fa_login_app_slides.length - 1) ? currentSlideNumber += 1 : currentSlideNumber ); 264 } 265 266 if ( direction === 'previous' ) { 267 currentSlide.val( ! (currentSlideNumber - 1 < 0) ? currentSlideNumber -= 1 : currentSlideNumber ); 268 } 269 270 if (currentSlideNumber > 0) { 271 wpsec_2fa_login_title_bottom.addClass( 'wpsec-2fa-hidden' ) 272 } else { 273 wpsec_2fa_login_title_bottom.removeClass( 'wpsec-2fa-hidden' ) 274 } 275 276 $( wpsec_2fa_login_app_slides[currentSlideNumber] ).removeClass( 'wpsec-2fa-hidden' ); 277 wpsec_2fa_login_icons.hasClass( 'wpsec-2fa-hidden' ) && currentSlideNumber === 0 ? wpsec_2fa_login_icons.removeClass( 'wpsec-2fa-hidden' ) : wpsec_2fa_login_icons.addClass( 'wpsec-2fa-hidden' ); 278 } 279 280 /** 281 * Hides all dialogs that are supplied in array 282 */ 283 function hideAllDialogs( dialogs ) { 284 dialogs.each( function() { deactivate_mail_configuration( $( this ) )} ); 285 } 286 287 /** 288 * Sends ajax call for checking 2fa code 289 */ 290 function call_2fa_code_check( provider ) { 291 let mail_input = wpsec_2fa_login_mail_code_check.val(); 292 let app_input = wpsec_2fa_login_app_code_check.val(); 293 let yubikey_input = wpsec_2fa_login_yubikey_code_check.val(); 294 295 if ( (mail_input === "" && provider === WPSEC_2FA_MAIL_ACTIVE) || (app_input === "" && provider === WPSEC_2FA_APP_ACTIVE) || (yubikey_input === "" && provider === WPSEC_2FA_YUBIKEY_ACTIVE) ) { 296 wpsec_2fa_login_code_error.removeClass( 'wpsec_2fa_hidden' ); 297 return; 298 } 299 300 let data = { 301 "wpsec_2fa_login_provider" : provider, 302 "wpsec_2fa_login_app_code_check" : app_input, 303 "wpsec_2fa_login_mail_code_check" : mail_input, 304 "wpsec_2fa_login_yubikey_code_check" : yubikey_input, 305 }; 306 307 let user_id = $( "#wpsec_2fa_login_user_id" ).val(); 308 let nonce = wpsec_2fa_login_nonce.val(); 309 let json_data = JSON.stringify( data ); 310 ajax_call_with_response( WPSEC_2FA_VERIFY_LOGIN_CODE, json_data, nonce, user_id ); 311 } 312 313 } 314);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.