PageSourceSearch

https://whitehatglobal.org/login?redirect-to=%2F

html whitehatglobal.org collected 2026-10-06 21:36:35 UTC 39,099 bytes, 901 lines download raw bytes

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.