1 2<!DOCTYPE html> 3<!-- Built on Frappe. https://frappeframework.com/ --> 4<html lang="en-US" dir="ltr"> 5<head> 6 <meta charset="utf-8"> 7 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 8 <meta name="generator" content="frappe"> 9 10 11 <meta name="title" content="Login"><meta name="language" content="en-US"><meta property="og:type" content="article"><meta property="og:title" content="Login"><meta name="twitter:title" content="Login"><meta name="twitter:card" content="summary"> 12 13 14 <title>Login</title> 15 16 17 <link 18 rel="shortcut icon" 19 href="/files/KlyONIX Logo Trans2c7e32.png" 20 type="image/x-icon" 21 > 22 <link type="text/css" rel="stylesheet" href="/files/website_theme/klyonix_852c2a4f.css"> 23<link type="text/css" rel="stylesheet" href="/assets/erpnext/dist/css/erpnext-web.bundle.GIDHWZWR.css"> 24<link type="text/css" rel="stylesheet" href="/assets/blog/dist/css/blog.bundle.OCSR32EG.css"> 25<link type="text/css" rel="stylesheet" href="/assets/frappe/dist/css/login.bundle.AB5MVHY4.css"> 26 27 28 29
29<script> 30 window.frappe = {}; 31 window._version_number = "1791312621.3877478"; 32 frappe.ready_events = []; 33 frappe.ready = function(fn) { 34 frappe.ready_events.push(fn); 35 } 36 window.dev_server = 0; 37 window.socketio_port = 9000; 38 window.show_language_picker = false; 39 </script>
39 40</head> 41<body frappe-session-status="logged-out" data-path="login" class=""> 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56<div id="page-login" data-path="login"> 57 58<div class="page-content-wrapper"> 59 <!-- breadcrumbs --> 60 <div class="page-breadcrumbs"> 61 62 63 64 </div> 65 66 67 <main class="container"> 68 <div class="page-header-wrapper"> 69 <div class="page-header"> 70 71 </div> 72 73 74 </div> 75 76 <div class="page_content"> 77 78<!-- login.html --> 79<div> 80 <noscript> 81 <div class="text-center my-5"> 82 <h4>Javascript is disabled on your browser</h4> 83 <p class="text-muted"> 84 You need to enable JavaScript for your app to work.<br>To enable it follow the instructions in the following link: <a href='https://enable-javascript.com/'>enable-javascript.com</a></p> 85 </div> 86 </noscript> 87 <section class='for-login'> 88 <div class="login-content page-card flex flex-col gap-5"> 89 90<div class="page-card-head flex flex-col items-start gap-4 text-left"> 91 <img class="app-logo" src="/files/KlyONIX Logo Trans2c7e32.png"> 92 <div class="page-card-head-text flex flex-col gap-1.5 w-full"> 93 94 <h4 class="text-3xl-bold text-ink-gray-9 w-full mt-0 mb-0">Sign In</h4> 95 96 97 <p class="page-card-subtitle text-p-base text-ink-gray-6 mb-0">Welcome! Please sign in to continue.</p> 98 99 </div> 100</div> 101 102 <form class="form-signin form-login flex flex-col gap-8" role="form" novalidate> 103 104<div class="page-card-body flex flex-col gap-4"> 105 <div class="login-error-banner es-alert hidden" role="alert" data-theme="red"> 106 <svg fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"> 107 <use href="#icon-circle-alert"></use> 108 </svg> 109 <div class="es-alert__content"> 110 <span class="es-alert__title"></span> 111 </div> 112</div> 113 <div class="form-group flex flex-col items-start gap-1.5 mb-0"> 114 <label class="text-base text-ink-gray-5 w-full mb-0" for="login_email">Email</label> 115 <div class="email-field"> 116 <input type="text" id="login_email" class="form-control" 117 placeholder="[email protected]" 118 required autofocus autocomplete="username"> 119 </div> 120 <p class="field-error text-base text-ink-red-8 mb-0"></p> 121 </div> 122 123 <div class="form-group flex flex-col items-start gap-2 mb-0"> 124 <div class="flex flex-col items-start gap-1.5 w-full"> 125 <label class="text-base text-ink-gray-5 w-full mb-0" for="login_password">Password</label> 126 <div class="password-field"> 127 <input type="password" id="login_password" class="form-control" placeholder="â¢â¢â¢â¢â¢â¢â¢â¢" 128 autocomplete="current-password" required> 129 130 <svg toggle="#login_password" class="icon icon-sm toggle-password" xmlns="http://www.w3.org/2000/svg"> 131 <use href="#icon-eye"></use> 132 </svg> 133 </div> 134 <p class="field-error text-base text-ink-red-8 mb-0"></p> 135 </div> 136 137 <p class="text-lg text-right w-full mb-0"> 138 <a href="#forgot" class="text-base text-ink-gray-5">Forgot password?</a> 139 </p> 140 141 </div> 142</div> 143 144<div class="page-card-actions flex flex-col gap-3"> 145 146 <button class="es-button w-full" data-variant="solid" type="submit"> 147 Continue</button> 148 149 150 151 152 <div class="social-logins text-center text-base"> 153 <div class="social-login-buttons"> 154 155 <div class="login-button-wrapper"> 156 <a href="https://login.microsoftonline.com/common/oauth2/authorize?redirect_uri=https%3A%2F%2Ferp.klyonix.com%2Fapi%2Fmethod%2Ffrappe.integrations.oauth2_logins.login_via_office365&state=654fa4d750168aa38edd18a9c1c2aafb&response_type=code&scope=openid&client_id=33dff376-a181-42dd-ba41-5acc8731651c" 157 class="es-button w-full btn-login-option btn-office_365"> 158 159 <img src='/assets/frappe/icons/social/office_365.svg' alt='Office 365'> 160 161 Login with Office 365</a> 162 </div> 163 164 </div> 165 </div> 166 167</div> 168 169 </form></div> 170 </section><section class='for-email-login'> 171 <div class="login-content page-card flex flex-col gap-5"> 172 173<div class="page-card-head flex flex-col items-start gap-4 text-left"> 174 <img class="app-logo" src="/files/KlyONIX Logo Trans2c7e32.png"> 175 <div class="page-card-head-text flex flex-col gap-1.5 w-full"> 176 177 <h4 class="text-3xl-bold text-ink-gray-9 w-full mt-0 mb-0">Sign In</h4> 178 179 180 <p class="page-card-subtitle text-p-base text-ink-gray-6 mb-0">Welcome! Please sign in to continue.</p> 181 182 </div> 183</div> 184 185 <form class="form-signin form-login flex flex-col gap-8" role="form" novalidate> 186 187<div class="page-card-body flex flex-col gap-4"> 188 <div class="login-error-banner es-alert hidden" role="alert" data-theme="red"> 189 <svg fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"> 190 <use href="#icon-circle-alert"></use> 191 </svg> 192 <div class="es-alert__content"> 193 <span class="es-alert__title"></span> 194 </div> 195</div> 196 <div class="form-group flex flex-col items-start gap-1.5 mb-0"> 197 <label class="text-base text-ink-gray-5 w-full mb-0" for="login_email">Email</label> 198 <div class="email-field"> 199 <input type="text" id="login_email" class="form-control" 200 placeholder="[email protected]" 201 required autofocus autocomplete="username"> 202 </div> 203 <p class="field-error text-base text-ink-red-8 mb-0"></p> 204 </div> 205 206 <div class="form-group flex flex-col items-start gap-2 mb-0"> 207 <div class="flex flex-col items-start gap-1.5 w-full"> 208 <label class="text-base text-ink-gray-5 w-full mb-0" for="login_password">Password</label> 209 <div class="password-field"> 210 <input type="password" id="login_password" class="form-control" placeholder="â¢â¢â¢â¢â¢â¢â¢â¢" 211 autocomplete="current-password" required> 212 213 <svg toggle="#login_password" class="icon icon-sm toggle-password" xmlns="http://www.w3.org/2000/svg"> 214 <use href="#icon-eye"></use> 215 </svg> 216 </div> 217 <p class="field-error text-base text-ink-red-8 mb-0"></p> 218 </div> 219 220 <p class="text-lg text-right w-full mb-0"> 221 <a href="#forgot" class="text-base text-ink-gray-5">Forgot password?</a> 222 </p> 223 224 </div> 225</div> 226 227<div class="page-card-actions flex flex-col gap-3"> 228 229 <button class="es-button w-full" data-variant="solid" type="submit"> 230 Continue</button> 231 232 233 234 235 <div class="social-logins text-center text-base"> 236 <div class="social-login-buttons"> 237 238 <div class="login-button-wrapper">
239 <a href="https://login.microsoftonline.com/common/oauth2/authorize?redirect_uri=https%3A%2F%2Ferp.klyonix.com%2Fapi%2Fmethod%2Ffrappe.integrations.oauth2_logins.login_via_office365&state=654fa4d750168aa38edd18a9c1c2aafb&response_type=code&scope=openid&client_id=33dff376-a181-42dd-ba41-5acc8731651c" 240 class="es-button w-full btn-login-option btn-office_365"> 241 242 <img src='/assets/frappe/icons/social/office_365.svg' alt='Office 365'> 243 244 Login with Office 365</a> 245 </div> 246 247 </div> 248 </div> 249 250</div> 251 252 </form></div> 253 </section><section class='for-signup signup-disabled'> 254 <div class="login-content page-card flex flex-col gap-5"> 255 256<div class="page-card-head flex flex-col items-start gap-4 text-left"> 257 <img class="app-logo" src="/files/KlyONIX Logo Trans2c7e32.png"> 258 <div class="page-card-head-text flex flex-col gap-1.5 w-full"> 259 260 <h4 class="text-3xl-bold text-ink-gray-9 w-full mt-0 mb-0">Sign Up</h4> 261 262 263 <p class="page-card-subtitle text-p-base text-ink-gray-6 mb-0">Let's setup your account.</p> 264 265 </div> 266</div> 267<div class="signup-disabled-message"> 268 <span class='indicator gray'>Signup Disabled</span> 269 <p class="text-muted text-normal sign-up-message mt-1 mb-8">Signups have been disabled for this website.</p> 270 <div><a href='/' class='es-button' data-variant="solid">Home</a></div> 271 </div></div> 272 </section> 273 274 <section class='for-forgot'> 275 <div class="login-content page-card flex flex-col gap-5"> 276 277<div class="page-card-head flex flex-col items-start gap-4 text-left"> 278 <img class="app-logo" src="/files/KlyONIX Logo Trans2c7e32.png"> 279 <div class="page-card-head-text flex flex-col gap-1.5 w-full"> 280 281 <h4 class="text-3xl-bold text-ink-gray-9 w-full mt-0 mb-0">Forgot Password?</h4> 282 283 284 <p class="page-card-subtitle text-p-base text-ink-gray-6 mb-0">Please enter your email, we'll send you password reset link</p> 285 286 </div> 287</div> 288 289 <form class="form-signin form-forgot hide flex flex-col gap-8" role="form" novalidate> 290 <div class="page-card-body flex flex-col gap-4"> 291 <div class="login-success-banner es-alert hidden" role="alert" data-theme="green"> 292 <svg fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"> 293 <use href="#icon-circle-check"></use> 294 </svg> 295 <div class="es-alert__content"> 296 <span class="es-alert__title"></span> 297 </div> 298</div> 299 <div class="login-error-banner es-alert hidden" role="alert" data-theme="red"> 300 <svg fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"> 301 <use href="#icon-circle-alert"></use> 302 </svg> 303 <div class="es-alert__content"> 304 <span class="es-alert__title"></span> 305 </div> 306</div> 307 <div class="form-group flex flex-col items-start gap-1.5 mb-0"> 308 <label class="text-base text-ink-gray-5 w-full mb-0" for="forgot_email">Email</label> 309 <div class="email-field"> 310 <input type="email" id="forgot_email" class="form-control" 311 placeholder="[email protected]" required autofocus autocomplete="username"> 312 </div> 313 <p class="field-error text-base text-ink-red-8 mb-0"></p> 314 </div> 315 </div> 316 <div class="page-card-actions flex flex-col gap-3"> 317 <button class="es-button w-full btn-forgot" data-variant="solid" 318 type="submit" disabled>Send Link</button> 319 </div> 320 </form> 321 <div class="text-center sign-up-message text-p-sm text-ink-gray-6 mt-auto mb-0"> 322 <a href="#login" class="text-p-sm-semibold text-ink-gray-6">Back to sign in</a> 323 </div> 324 </div> 325 </section> 326 327 <section class='for-login-with-email-link'> 328 <div class="login-content page-card flex flex-col gap-5"> 329 330<div class="page-card-head flex flex-col items-start gap-4 text-left"> 331 <img class="app-logo" src="/files/KlyONIX Logo Trans2c7e32.png"> 332 <div class="page-card-head-text flex flex-col gap-1.5 w-full"> 333 334 <h4 class="text-3xl-bold text-ink-gray-9 w-full mt-0 mb-0">Sign In</h4> 335 336 337 <p class="page-card-subtitle text-p-base text-ink-gray-6 mb-0">Welcome! Please sign in to continue.</p> 338 339 </div> 340</div> 341 342 <form class="form-signin form-login-with-email-link hide flex flex-col gap-8" role="form" novalidate> 343 <div class="page-card-body flex flex-col gap-4"> 344 <div class="login-success-banner es-alert hidden" role="alert" data-theme="green"> 345 <svg fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"> 346 <use href="#icon-circle-check"></use> 347 </svg> 348 <div class="es-alert__content"> 349 <span class="es-alert__title">Please check your email.</span> 350 </div> 351</div> 352 <div class="login-error-banner es-alert hidden" role="alert" data-theme="red"> 353 <svg fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"> 354 <use href="#icon-circle-alert"></use> 355 </svg> 356 <div class="es-alert__content"> 357 <span class="es-alert__title"></span> 358 </div> 359</div> 360 <div class="form-group flex flex-col items-start gap-1.5 mb-0"> 361 <label class="text-base text-ink-gray-5 w-full mb-0" for="login_with_email_link_email">Email</label> 362 <div class="email-field"> 363 <input type="email" id="login_with_email_link_email" class="form-control" 364 placeholder="[email protected]" required autofocus autocomplete="username"> 365 </div> 366 <p class="field-error text-base text-ink-red-8 mb-0"></p> 367 </div>
368 </div> 369 <div class="page-card-actions flex flex-col gap-3"> 370 <p class="resend-link hidden flex items-center gap-2 w-full text-base text-ink-gray-6 mb-0"> 371 Didn't receive the link? <a href="#" class="btn-resend-link text-base-semibold text-ink-gray-6">Resend</a> 372 </p> 373 <button class="es-button w-full btn-login-with-email-link" data-variant="solid" 374 type="submit">Send login link</button> 375 <a href="#login" class="es-button w-full btn-login-option"> 376 Login with password</a> 377 </div> 378 </form></div> 379 </section> 380</div> 381</div> 382 383 <div class="page-footer"></div> 384 </main> 385 386</div> 387 388</div> 389 390 391<footer class="web-footer"> 392<div class="container"> 393<div class="footer-logo-extension"> 394<div class="row"> 395<div class="text-left col-md-6"></div> 396<div class="text-right col-md-6"> 397</div> 398</div> 399</div> 400<div class="footer-links"> 401<div class="row"> 402<div class="footer-col-left col-sm-6"></div> 403<div class="footer-col-right col-sm-6"></div> 404</div> 405</div> 406<div class="footer-info"> 407<div class="row"> 408<div class="footer-col-left col-sm-6 col-12"> 409 410 © KlyONIX Tech Consulting Pvt Ltd 411 412 413 </div> 414<div class="footer-col-right col-sm-6 col-12 footer-powered"> 415 KlyONIX Tech Consulting Pvt Ltd 416 </div> 417</div> 418</div> 419</div> 420</footer><div id="all-symbols" style="display:none"></div>
420<script type="text/javascript">fetch(`/assets/frappe/icons/lucide/icons.svg?v=${window._version_number}`, {credentials: "same-origin"}).then((r) => r.text()).then((svg) => {let c = document.getElementById("all-symbols"); c.insertAdjacentHTML("beforeend", svg);});</script>
420<script type="text/javascript">fetch(`/assets/frappe/icons/timeless/icons.svg?v=${window._version_number}`, {credentials: "same-origin"}).then((r) => r.text()).then((svg) => {let c = document.getElementById("all-symbols"); c.insertAdjacentHTML("beforeend", svg);});</script>
420<script type="text/javascript">fetch(`/assets/frappe/icons/espresso/icons.svg?v=${window._version_number}`, {credentials: "same-origin"}).then((r) => r.text()).then((svg) => {let c = document.getElementById("all-symbols"); c.insertAdjacentHTML("beforeend", svg);});</script>
420<script type="text/javascript">fetch(`/assets/erpnext/icons/pos-icons.svg?v=${window._version_number}`, {credentials: "same-origin"}).then((r) => r.text()).then((svg) => {let c = document.getElementById("all-symbols"); c.insertAdjacentHTML("beforeend", svg);});</script>
420 421 <!-- js should be loaded in body! --> 422
422<script> 423 frappe.boot = {"lang":"en-US","apps_data":{"apps":[],"is_desk_apps":1,"default_path":""},"sysdefaults":{"float_precision":3,"currency_precision":null,"date_format":"dd-mm-yyyy","time_format":"HH:mm:ss","first_day_of_the_week":"Sunday","number_format":"#,##,###.##","rounding_method":"Banker's Rounding","currency":"INR"},"time_zone":{"system":"Asia/Kolkata","user":"Asia/Kolkata"},"assets_json":{"arrangement_editor.bundle.js":"/assets/frappe/dist/js/arrangement_editor.bundle.NEWMJB76.js","billing.bundle.js":"/assets/frappe/dist/js/billing.bundle.H53FAIQO.js","bootstrap-4-web.bundle.js":"/assets/frappe/dist/js/bootstrap-4-web.bundle.OGQ7JEDG.js","calendar.bundle.js":"/assets/frappe/dist/js/calendar.bundle.4A4YITIU.js","controls.bundle.js":"/assets/frappe/dist/js/controls.bundle.LI43ZJ32.js","data_import_tools.bundle.js":"/assets/frappe/dist/js/data_import_tools.bundle.T72GIFVK.js","data_import_wizard.bundle.js":"/assets/frappe/dist/js/data_import_wizard.bundle.Q3W2M5V6.js","desk.bundle.js":"/assets/frappe/dist/js/desk.bundle.EBZWTP45.js","desktop_icons.bundle.js":"/assets/frappe/dist/js/desktop_icons.bundle.IXFTZ5YB.js","dialog.bundle.js":"/assets/frappe/dist/js/dialog.bundle.UTGERW3T.js","doctype_settings.bundle.js":"/assets/frappe/dist/js/doctype_settings.bundle.EJKZU3UE.js","embedded_list.bundle.js":"/assets/frappe/dist/js/embedded_list.bundle.H5EEZKJH.js","form.bundle.js":"/assets/frappe/dist/js/form.bundle.R3J64OOK.js","frappe-web.bundle.js":"/assets/frappe/dist/js/frappe-web.bundle.WG7HPFAP.js","leaflet.bundle.js":"/assets/frappe/dist/js/leaflet.bundle.XQBWTHH6.js","libs.bundle.js":"/assets/frappe/dist/js/libs.bundle.LDNONUAV.js","list.bundle.js":"/assets/frappe/dist/js/list.bundle.WYRL2FGF.js","list_filter.bundle.js":"/assets/frappe/dist/js/list_filter.bundle.UV4YPE6W.js","list_view_virtualization.bundle.js":"/assets/frappe/dist/js/list_view_virtualization.bundle.SM6SDIQP.js","logtypes.bundle.js":"/assets/frappe/dist/js/logtypes.bundle.WKQH7KBM.js","onboarding_tours.bundle.js":"/assets/frappe/dist/js/onboarding_tours.bundle.3QPQU5AO.js","photoswipe.bundle.js":"/assets/frappe/dist/js/photoswipe.bundle.YSXZQA64.js","print.bundle.js":"/assets/frappe/dist/js/print.bundle.27VKHZQE.js","report.bundle.js":"/assets/frappe/dist/js/report.bundle.BBHHK7PB.js","sentry.bundle.js":"/assets/frappe/dist/js/sentry.bundle.AX44GVWW.js","side_panel.bundle.js":"/assets/frappe/dist/js/side_panel.bundle.EYJHVFWP.js","syntax_highlighting.bundle.js":"/assets/frappe/dist/js/syntax_highlighting.bundle.YHGNRCUE.js","telemetry.bundle.js":"/assets/frappe/dist/js/telemetry.bundle.RXBBNH3H.js","user_settings_dialog.bundle.js":"/assets/frappe/dist/js/user_settings_dialog.bundle.NKBJKITN.js","video_player.bundle.js":"/assets/frappe/dist/js/video_player.bundle.DUYYLSFO.js","web_form.bundle.js":"/assets/frappe/dist/js/web_form.bundle.JT4O4WNO.js","kanban_board.bundle.js":"/assets/frappe/dist/js/kanban_board.bundle.UVNSIH5U.js","kanban.bundle.js":"/assets/frappe/dist/js/kanban.bundle.BBG4VOBK.js","kanban_settings.bundle.js":"/assets/frappe/dist/js/kanban_settings.bundle.2MU5TTLL.js","form_builder.bundle.js":"/assets/frappe/dist/js/form_builder.bundle.IDL7MI3Z.js","print_format_builder.bundle.js":"/assets/frappe/dist/js/print_format_builder.bundle.M4XJFQBI.js","workflow_builder.bundle.js":"/assets/frappe/dist/js/workflow_builder.bundle.A75VTGLH.js","build_events.bundle.js":"/assets/frappe/dist/js/build_events.bundle.33E37SY5.js","file_uploader.bundle.js":"/assets/frappe/dist/js/file_uploader.bundle.TVM6DKK3.js","desk.bundle.css":"/assets/frappe/dist/css/desk.bundle.UVTTVNE3.css","email.bundle.css":"/assets/frappe/dist/css/email.bundle.NZ5D67M6.css","leaflet.bundle.css":"/assets/frappe/dist/css/leaflet.bundle.5GSNHUGG.css","login.bundle.css":"/assets/frappe/dist/css/login.bundle.AB5MVHY4.css","print.bundle.css":"/assets/frappe/dist/css/print.bundle.DSH2GEBH.css","print_format.bundle.css":"/assets/frappe/dist/css/print_format.bundle.D6BLWAVJ.css","report.bundle.css":"/assets/frappe/dist/css/report.bundle.DIORYVKC.css","web_form.bundle.css":"/assets/frappe/dist/css/web_form.bundle.P7CPAM6K.css","website.bundle.css":"/assets/frappe/dist/css/website.bundle.ITIDBWOM.css","bank-reconciliation-tool.bundle.js":"/assets/erpnext/dist/js/bank-reconciliation-tool.bundle.ZWXYTTTM.js","erpnext.bundle.js":"/assets/erpnext/dist/js/erpnext.bundle.YPTIJPHB.js","item-dashboard.bundle.js":"/assets/erpnext/dist/js/item-dashboard.bundle.E26PYQJB.js","point-of-sale.bundle.js":"/assets/erpnext/dist/js/point-of-sale.bundle.WNKTPMOV.js","bom_configurator.bundle.js":"/assets/erpnext/dist/js/bom_configurator.bundle.ZKILGIKP.js","erpnext-web.bundle.css":"/assets/erpnext/dist/css/erpnext-web.bundle.GIDHWZWR.css","erpnext.bundle.css":"/assets/erpnext/dist/css/erpnext.bundle.VDIEGPOZ.css","erpnext_email.bundle.css":"/assets/erpnext/dist/css/erpnext_email.bundle.XA2PUGD5.css","hierarchy-chart.bundle.js":"/assets/hrms/dist/js/hierarchy-chart.bundle.5E224PCR.js","hrms.bundle.js":"/assets/hrms/dist/js/hrms.bundle.4ZPKX5BG.js","interview.bundle.js":"/assets/hrms/dist/js/interview.bundle.C7CDEMYA.js","performance.bundle.js":"/assets/hrms/dist/js/performance.bundle.63UL5NS7.js","hrms.bundle.css":"/assets/hrms/dist/css/hrms.bundle.CVUDLUAZ.css","gstr1.bundle.js":"/assets/india_compliance/dist/js/gstr1.bundle.3FFJ3RKM.js","ims.bundle.js":"/assets/india_compliance/dist/js/ims.bundle.3MSMHBAK.js","india_compliance.bundle.js":"/assets/india_compliance/dist/js/india_compliance.bundle.SN323ARE.js","purchase_reconciliation_tool.bundle.js":"/assets/india_compliance/dist/js/purchase_reconciliation_tool.bundle.YIJHRUA7.js","india_compliance_account.bundle.js":"/assets/india_compliance/dist/js/india_compliance_account.bundle.WLQAKAC4.js","india_compliance.bundle.css":"/assets/india_compliance/dist/css/india_compliance.bundle.NATWP5H4.css","india_compliance_account.bundle.css":"/assets/india_compliance/dist/css/india_compliance_account.bundle.OJFGWFBL.css","insights_nudge.bundle.js":"/assets/insights/dist/js/insights_nudge.bundle.5P5T7ADA.js","raven.bundle.js":"/assets/raven/dist/js/raven.bundle.W6KQGWID.js","raven_chat.bundle.jsx":"/assets/raven/dist/raven_chat.bundle.L3ZA7AIY.js","raven.bundle.css":"/assets/raven/dist/css/raven.bundle.4JFAL3QE.css","blog.bundle.css":"/assets/blog/dist/css/blog.bundle.OCSR32EG.css","tax_regime_selector.bundle.js":"/assets/india_payroll/dist/js/tax_regime_selector.bundle.BBRKYPAO.js","tax_regime_selector.bundle.css":"/assets/india_payroll/dist/css/tax_regime_selector.bundle.3VKMLTSZ.css","education.bundle.js":"/assets/education/dist/js/education.bundle.PSPI3YNS.js","healthcare.bundle.js":"/assets/healthcare/dist/js/healthcare.bundle.TSGU3FES.js","lending.bundle.js":"/assets/lending/dist/js/lending.bundle.FCOA2VFZ.js","rtl_desk.bundle.css":"/assets/frappe/dist/css-rtl/desk.bundle.DVG7C43S.css","rtl_email.bundle.css":"/assets/frappe/dist/css-rtl/email.bundle.SFJIRVNV.css","rtl_leaflet.bundle.css":"/assets/frappe/dist/css-rtl/leaflet.bundle.HKQ2HQHZ.css","rtl_login.bundle.css":"/assets/frappe/dist/css-rtl/login.bundle.7J2T3BQT.css","rtl_print.bundle.css":"/assets/frappe/dist/css-rtl/print.bundle.SLPYCEGP.css","rtl_print_format.bundle.css":"/assets/frappe/dist/css-rtl/print_format.bundle.2UFW4DXJ.css","rtl_report.bundle.css":"/assets/frappe/dist/css-rtl/report.bundle.DIUX2NOT.css","rtl_web_form.bundle.css":"/assets/frappe/dist/css-rtl/web_form.bundle.YYRW7V6H.css","rtl_website.bundle.css":"/assets/frappe/dist/css-rtl/website.bundle.V244ILZA.css","rtl_erpnext-web.bundle.css":"/assets/erpnext/dist/css-rtl/erpnext-web.bundle.XYGLOLOR.css","rtl_erpnext.bundle.css":"/assets/erpnext/dist/css-rtl/erpnext.bundle.IZJOC2K5.css","rtl_erpnext_email.bundle.css":"/assets/erpnext/dist/css-rtl/erpnext_email.bundle.URXT7WFH.css","rtl_hrms.bundle.css":"/assets/hrms/dist/css-rtl/hrms.bundle.GRGCKED6.css","rtl_india_compliance.bundle.css":"/assets/india_compliance/dist/css-rtl/india_compliance.bundle.F2KFV4TV.css","rtl_india_compliance_account.bundle.css":"/assets/india_compliance/dist/css-rtl/india_compliance_account.bundle.RDSXWNWB.css","rtl_raven.bundle.css":"/assets/raven/dist/css-rtl/raven.bundle.YLAAKZLB.css","rtl_blog.bundle.css":"/assets/blog/dist/css-rtl/blog.bundle.UTNZ5C4O.css","rtl_tax_regime_selector.bundle.css":"/assets/india_payroll/dist/css-rtl/tax_regime_selector.bundle.4CY4AOTB.css"},"sitename":"klyonix.m.frappe.cloud","is_fc_site":0} 424 // for backward compatibility of some libs 425 frappe.sys_defaults = frappe.boot.sysdefaults; 426 </script>
426 427
427<script type="text/javascript" src="/assets/frappe/dist/js/frappe-web.bundle.WG7HPFAP.js"></script>
427 428 429
429<script type="text/javascript" src="/website_script.js"></script>
vendor: 1 bytes, line 429
429
430<script>// login.js 431// don't remove this line (used in test) 432 433window.disable_signup = true; 434window.show_footer_on_login = false; 435 436window.login = {}; 437 438window.verify = {}; 439 440login.bind_events = function () { 441 $(window).on("hashchange", function () { 442 login.route(); 443 }); 444 445 $(".form-login").on("submit", function (event) { 446 event.preventDefault(); 447 var args = {}; 448 args.cmd = "login"; 449 args.usr = ($("#login_email").val() || "").trim(); 450 args.pwd = $("#login_password").val(); 451 let hasError = false; 452 if (!args.usr) { 453 login.show_field_error("login_email", "Email is required."); 454 hasError = true; 455 } 456 if (!args.pwd) { 457 login.show_field_error("login_password", "Password is required."); 458 hasError = true; 459 } 460 if (hasError) return false; 461 login.call(args, null, "/api/method/login"); 462 return false; 463 }); 464 465 $(".page-card-body input").on("input", function () { 466 $(this).closest(".form-group").removeClass("invalid").find(".field-error").text(""); 467 $(this).closest(".page-card-body").removeClass("invalid").find(".login-error-banner, .login-success-banner").addClass("hidden"); 468 }); 469 470 $(".form-signup").on("submit", function (event) { 471 event.preventDefault(); 472 var args = {}; 473 args.cmd = "frappe.core.doctype.user.user.sign_up"; 474 args.email = ($("#signup_email").val() || "").trim(); 475 args.redirect_to = frappe.utils.sanitise_redirect(frappe.utils.get_url_arg("redirect-to")); 476 args.full_name = frappe.utils.xss_sanitise(($("#signup_fullname").val() || "").trim()); 477 if (!args.email || !validate_email(args.email)) { 478 login.show_field_error("signup_email", "Please enter a valid email."); 479 return false; 480 } 481 if (!args.full_name) { 482 login.show_field_error("signup_fullname", "Full name is required."); 483 return false; 484 } 485 login.call(args); 486 return false; 487 }); 488 489 $(".form-forgot").on("submit", function (event) { 490 event.preventDefault(); 491 var args = {}; 492 args.cmd = "frappe.core.doctype.user.user.reset_password"; 493 args.user = ($("#forgot_email").val() || "").trim(); 494 if (!args.user || !validate_email(args.user)) { 495 login.show_field_error("forgot_email", "Invalid Email."); 496 return false; 497 } 498 login.call(args, null, "/", "section.for-forgot .login-success-banner .es-alert__title"); 499 return false; 500 }); 501 502 $("#forgot_email").on("input", function () { 503 $(".btn-forgot").text("Send Link").prop("disabled", !$(this).val().trim()); 504 }); 505 506 $("#login_with_email_link_email").on("input", function () { 507 $(".form-login-with-email-link .btn-login-with-email-link") 508 .text("Send login link").prop("disabled", false); 509 $("section.for-login-with-email-link .resend-link").addClass("hidden"); 510 }); 511 512 $(".form-login-with-email-link").on("submit", function (event) { 513 event.preventDefault(); 514 var args = {}; 515 args.cmd = "frappe.www.login.send_login_link"; 516 args.email = ($("#login_with_email_link_email").val() || "").trim(); 517 if (!args.email || !validate_email(args.email)) { 518 login.show_field_error("login_with_email_link_email", "Invalid Email."); 519 return false; 520 } 521 login.call(args, null, "/", "section.for-login-with-email-link .login-error-banner .es-alert__title").then(() => { 522 $("section:visible .login-success-banner").removeClass("hidden"); 523 $("section:visible .resend-link").removeClass("hidden"); 524 login.set_status("Sent"); 525 $("section:visible .btn-login-with-email-link").prop("disabled", true); 526 }).catch(() => { 527 login.set_status("Send login link", 'blue'); 528 }); 529 530 return false; 531 }); 532 533 $("#signup_fullname, #signup_email").on("input", function () { 534 var name = $("#signup_fullname").val().trim(); 535 var email = $("#signup_email").val().trim(); 536 $(".form-signup .btn-signup").text("Create Account").prop("disabled", !(name && email)); 537 }); 538 539 $(".btn-resend-link").on("click", function (e) { 540 e.preventDefault(); 541 $(".form-login-with-email-link").trigger("submit"); 542 }); 543 544 $(".toggle-password").click(function () { 545 var input = $($(this).attr("toggle")); 546 var isPassword = input.attr("type") == "password"; 547 input.attr("type", isPassword ? "text" : "password"); 548 $(this).find("use").attr("href", isPassword ? "#icon-eye-off" : "#icon-eye"); 549 }); 550 551 552} 553 554 555login.route = function () { 556 var route = window.location.hash.slice(1); 557 if (!route) route = "login"; 558 route = route.replaceAll("-", "_"); 559 login[route](); 560} 561 562login.reset_sections = function (hide) { 563 if (hide || hide === undefined) { 564 $("section.for-login").toggle(false); 565 $("section.for-email-login").toggle(false); 566 $("section.for-forgot").toggle(false); 567 $("section.for-login-with-email-link").toggle(false); 568 $("section.for-signup").toggle(false); 569 var $forms = $(".form-forgot, .form-signup, .form-login-with-email-link"); 570 $forms.find("input:not([type='submit'])").val(""); 571 $forms.find(".page-card-body").removeClass("invalid"); 572 $forms.find(".form-group").removeClass("invalid").find(".field-error").text(""); 573 $forms.find(".login-error-banner, .login-success-banner").addClass("hidden"); 574 $(".es-button[aria-busy]").removeAttr("aria-busy"); 575 $(".form-forgot .btn-forgot").prop("disabled", true).text("Send Link"); 576 $(".form-signup .btn-signup").prop("disabled", true).text("Create Account"); 577 $(".form-login-with-email-link .btn-login-with-email-link").prop("disabled", false).text("Send login link"); 578 $(".btn-login-option.btn-login-with-email-link").prop("disabled", false); 579 $("section.for-login-with-email-link .resend-link").addClass("hidden"); 580 } 581 $('section:not(.signup-disabled) .indicator').each(function () { 582 $(this).removeClass().addClass('indicator').addClass('blue') 583 .text($(this).attr('data-text')); 584 }); 585} 586 587login.login = function () { 588 login.reset_sections(); 589 $(".for-login").toggle(true); 590} 591 592login.email = function () { 593 login.reset_sections(); 594 $(".for-email-login").toggle(true); 595 $("#login_email").focus(); 596} 597 598login.steptwo = function () { 599 login.reset_sections(); 600 $(".for-login").toggle(true); 601 $("#login_email").focus(); 602} 603 604login.forgot = function () { 605 login.reset_sections(); 606 if ($("#login_email").val()) { 607 $("#forgot_email").val($("#login_email").val()); 608 $(".btn-forgot").prop("disabled", false); 609 } 610 $(".for-forgot").toggle(true); 611 $("#forgot_email").focus(); 612} 613 614login.login_with_email_link = function () { 615 login.reset_sections(); 616 if ($("#login_email").val()) { 617 $("#login_with_email_link_email").val($("#login_email").val()); 618 } 619 $(".for-login-with-email-link").toggle(true); 620 $("#login_with_email_link_email").focus(); 621} 622 623login.signup = function () { 624 login.reset_sections(); 625 $(".for-signup").toggle(true); 626 $("#signup_fullname").focus(); 627} 628 629 630// Login 631login.call = function (args, callback, url="/", error_msg=null) { 632 login.show_loading(); 633 634 return frappe.call({ 635 type: "POST", 636 url: url, 637 args: args, 638 callback: callback, 639 freeze: true, 640 error_msg: error_msg, 641 statusCode: login.login_handlers 642 }); 643} 644 645login.show_loading = function () { 646 var $btn = $(document.activeElement).filter('section:visible .es-button[data-variant="solid"]'); 647 if (!$btn.length) { 648 $btn = $('section:visible .es-button[data-variant="solid"]').first(); 649 } 650 $btn.not("[aria-busy]").each(function () { 651 $(this) 652 .data("label", $(this).text().trim()) 653 .attr("aria-busy", "true") 654 .html('<span class="es-spinner" aria-hidden="true"></span>'); 655 }); 656}; 657 658login.hide_loading = function () { 659 $('.es-button[aria-busy="true"]').each(function () { 660 $(this).removeAttr("aria-busy").text($(this).data("label") || ""); 661 }); 662}; 663 664login.set_status = function (message, color) { 665 var $btn = $('section:visible .es-button[aria-busy="true"]'); 666 if (!$btn.length) { 667 $btn = $('section:visible .es-button[data-variant="solid"]').first(); 668 } 669 $btn.removeAttr("aria-busy").text(message); 670 if (color == "red") { 671 $('section:visible .page-card-body').addClass("invalid"); 672 } 673} 674 675login.show_field_error = function (input_id, message) { 676 var $formGroup = $("#" + input_id).closest(".form-group"); 677 $formGroup.addClass("invalid").find(".field-error").text(message); 678}; 679 680login.show_error_banner = function (message) { 681 $("section:visible .login-error-banner").removeClass("hidden").find(".es-alert__title").text(message); 682}; 683 684login.show_success_banner = function (message) { 685 $("section:visible .login-success-banner").removeClass("hidden").find(".es-alert__title").text(message); 686}; 687 688login.set_invalid = function (message) { 689 $(".login-content.page-card").addClass('invalid-login'); 690 setTimeout(() => { 691 $(".login-content.page-card").removeClass('invalid-login'); 692 }, 500) 693 if ($("section.for-forgot").is(":visible")) { 694 login.hide_loading(); 695 login.show_error_banner(message); 696 return; 697 } 698 if ($("section.for-login-with-email-link").is(":visible")) { 699 login.show_error_banner(message); 700 return; 701 } 702 login.hide_loading(); 703 $("section:visible .page-card-body").addClass("invalid"); 704 if ($("section:visible .login-error-banner").length) { 705 login.show_error_banner(message); 706 } else { 707 login.set_status(message, 'red'); 708 } 709 $("#login_password").focus(); 710} 711 712login.login_handlers = (function () { 713 var get_error_handler = function (default_message) { 714 return function (xhr, data) { 715 if (xhr.responseJSON) { 716 data = xhr.responseJSON; 717 } 718 719 var message = default_message; 720 if (data._server_messages) { 721 message = ($.map(JSON.parse(data._server_messages || '[]'), function (v) { 722 // temp fix for messages sent as dict 723 try { 724 return JSON.parse(v).message; 725 } catch (e) { 726 return v; 727 } 728 }) || []).join('<br>') || default_message; 729 } 730 731 login.set_invalid(message); 732 if (message !== default_message) { 733 login.reset_sections(false); 734 } 735 }; 736 } 737 738 var login_handlers = { 739 200: function (data) { 740 if (data.message == 'Logged In') { 741 login.set_status("Success", 'green'); 742 document.body.innerHTML = `<div class="centered splash"> 743 <img src="/files/KlyONIX Logo Trans2c7e32.png" 744 style="width: auto; max-width: 200px;"> 745</div>`; 746 window.location.href = frappe.utils.sanitise_redirect(frappe.utils.get_url_arg("redirect-to")) || data.home_page; 747 } else if (data.message == 'Password Reset') { 748 login.set_status("Reset link emailed", 'green'); 749 } else if (data.message == "No App") { 750 login.set_status("Success", 'green'); 751 if (localStorage) { 752 var last_visited = 753 localStorage.getItem("last_visited") 754 || frappe.utils.sanitise_redirect(frappe.utils.get_url_arg("redirect-to")); 755 localStorage.removeItem("last_visited"); 756 } 757 758 if (data.redirect_to) { 759 window.location.href = frappe.utils.sanitise_redirect(data.redirect_to); 760 } 761 762 if (last_visited && last_visited != "/login") { 763 window.location.href = last_visited; 764 } else { 765 window.location.href = data.home_page; 766 } 767 } else if (window.location.hash === '#forgot') { 768 // Always show the same message regardless of whether the account 769 // exists or not, to prevent username enumeration (CWE-204). 770 login.set_status("Sent", 'green'); 771 $("section:visible .login-success-banner").removeClass("hidden"); 772 } else if (window.location.hash === '#signup') { 773 if (cint(data.message[0]) == 0) { 774 login.hide_loading(); 775 $("section:visible .login-success-banner").addClass("hidden");
776 login.show_error_banner(data.message[1]); 777 } else { 778 login.set_status("Success", 'green'); 779 $("section:visible .login-error-banner").addClass("hidden"); 780 login.show_success_banner(data.message[1]); 781 } 782 } 783 784 //OTP verification 785 if (data.verification && data.message != 'Logged In') { 786 login.set_status("Success", 'green'); 787 788 document.cookie = "tmp_id=" + data.tmp_id; 789 790 if (data.verification.method == 'OTP App') { 791 continue_otp_app(data.verification.setup, data.verification.qrcode); 792 } else if (data.verification.method == 'SMS') { 793 continue_sms(data.verification.setup, data.verification.prompt); 794 } else if (data.verification.method == 'Email') { 795 continue_email(data.verification.setup, data.verification.prompt); 796 } 797 } 798 }, 799 401: get_error_handler("Invalid credentials, try again."), 800 417: get_error_handler("Oops! Something went wrong."), 801 429: get_error_handler("Too many requests. Please try again later."), 802 500: get_error_handler("Something went wrong."), 803 }; 804 805 return login_handlers; 806})(); 807 808frappe.ready(function () { 809 810 login.bind_events(); 811 if (window.show_footer_on_login) { 812 $("body .web-footer").show(); 813 } 814 815 $(".form-signup, .form-forgot, .form-login-with-email-link").removeClass("hide"); 816 $(document).trigger('login_rendered'); 817}); 818 819var verify_token = function (event) { 820 $(".form-verify").on("submit", function (eventx) { 821 eventx.preventDefault(); 822 var args = {}; 823 args.cmd = "login"; 824 args.otp = $("#login_token").val(); 825 args.tmp_id = frappe.get_cookie('tmp_id'); 826 if (!args.otp) { 827 828 frappe.msgprint("Login token required"); 829 return false; 830 } 831 login.call(args); 832 return false; 833 }); 834} 835 836var request_otp = function (r) { 837 $('.login-content').empty(); 838 $('.login-content:visible').append( 839 `<div id="twofactor_div"> 840 <form class="form-verify"> 841 <div class="page-card-head p-0"> 842 <span class="indicator blue" data-text="Verification">Verification</span> 843 </div> 844 <div id="otp_div"></div> 845 <input type="text" id="login_token" autocomplete="off" class="form-control" placeholder="Verification Code" required=""> 846 <button class="es-button w-full mt-3" data-variant="solid" id="verify_token">Verify</button> 847 </form> 848 </div>` 849 ); 850 // add event handler for submit button 851 verify_token(); 852 $("#login_token").get(0)?.focus(); 853} 854 855var continue_otp_app = function (setup, qrcode) { 856 request_otp(); 857 var qrcode_div = $('<div class="text-muted" style="padding-bottom: 15px;"></div>'); 858 859 if (setup) { 860 direction = $('<div>').attr('id', 'qr_info').text("Enter Code displayed in OTP App."); 861 qrcode_div.append(direction); 862 $('#otp_div').prepend(qrcode_div); 863 } else { 864 direction = $('<div>').attr('id', 'qr_info').text("OTP setup using OTP App was not completed. Please contact Administrator."); 865 qrcode_div.append(direction); 866 $('#otp_div').prepend(qrcode_div); 867 } 868} 869 870var continue_sms = function (setup, prompt) { 871 request_otp(); 872 var sms_div = $('<div class="text-muted" style="padding-bottom: 15px;"></div>'); 873 874 if (setup) { 875 sms_div.append(prompt) 876 $('#otp_div').prepend(sms_div); 877 } else { 878 direction = $('<div>').attr('id', 'qr_info').html(prompt || "SMS was not sent. Please contact Administrator."); 879 sms_div.append(direction); 880 $('#otp_div').prepend(sms_div) 881 } 882} 883 884var continue_email = function (setup, prompt) { 885 request_otp(); 886 var email_div = $('<div class="text-muted" style="padding-bottom: 15px;"></div>'); 887 888 if (setup) { 889 email_div.append(prompt) 890 $('#otp_div').prepend(email_div); 891 } else { 892 var direction = $('<div>').attr('id', 'qr_info').html(prompt || "Verification code email not sent. Please contact Administrator."); 893 email_div.append(direction); 894 $('#otp_div').prepend(email_div); 895 } 896} 897 898login.route();</script>
898 899 900
900<script>frappe.csrf_token = "None";</script>
900</body> 901</html>
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.