PageSourceSearch

https://www.billetweb.fr/bo/login.php?language=fr

html billetweb.fr collected 2026-09-24 08:28:13 UTC 17,565 bytes, 520 lines download raw bytes

1<!DOCTYPE html>
2<!--[if lt IE 7]> <html class="lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]-->
3<!--[if IE 7]> <html class="lt-ie9 lt-ie8" lang="en"> <![endif]-->
4<!--[if IE 8]> <html class="lt-ie9" lang="en"> <![endif]-->
5<!--[if gt IE 8]><!--> <html lang="fr"> <!--<![endif]-->
6
7<html xmlns="http://www.w3.org/1999/xhtml">
8<head>
9
10<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
11<meta http-equiv="pragma" content=no-cache">
12<meta charset="utf-8">
13<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
14<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
15<title>Connexion - Billetweb</title>
16<link rel="stylesheet" href="/css/prismic/style.css?v=16">
17<!--[if lt IE 9]>
17<script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script>
17<![endif]-->
18<script src="/js/public/jquery.js" type="00fac84f55f8b96fd720f295-text/javascript"></script>
vendor: 1 bytes, line 18
18
19<script data-cfasync='true' src="/js/public/jquery-ui.js" type="00fac84f55f8b96fd720f295-text/javascript"></script>
19
20
21<link rel="shortcut icon" class="favicon_replace" href="/images/front/favicon.ico">
22<link rel="icon" class="favicon_replace" type="image/png" href="/images/front/favicon-32x32.png" sizes="32x32" />
23<link rel="icon" class="favicon_replace" type="image/png" href="/images/front/favicon-16x16.png" sizes="16x16" />
24<link rel="apple-touch-icon" class="favicon_replace" href="/images/front/apple-touch-icon.png">
25<link rel="icon" class="favicon_replace" sizes="192x192" href="/images/front/android-chrome-192x192.png">
26<link rel="icon" class="favicon_replace" sizes="512x512" href="/images/front/android-chrome-512x512.png">
27
28</head>
29
30<link href='//fonts.googleapis.com/css?family=Montserrat:thin,extra-light,light,100,200,300,400,500,600,700,800'
31rel='stylesheet' type='text/css'>
32
33<link href='//fonts.googleapis.com/css?family=Barlow:thin,extra-light,light,100,200,300,400,500,600,700,800'
34rel='stylesheet' type='text/css'>
35
36<style>
37
38body, button, input {
39    font-family: 'Montserrat';
40    font-weight: 500;
41}
42
43input:-webkit-autofill,
44input:-webkit-autofill:hover,
45input:-webkit-autofill:focus,
46input:-webkit-autofill:active{
47    -webkit-box-shadow: 0 0 0 30px white inset !important;
48}
49
50section#login .submit button:disabled{
51    opacity: 0.5;
52    cursor: not-allowed;
53}
54
55section#login #reset{
56    padding: 0.8em 2em;
57}
58
59section#login .submit .forgot-password{
60    text-align: center;
61    margin-top: 15px;
62}
63
64section#login #passkey_container{
65    display: block;
66}
67
68section#login #passkey_container .passkey-separator{
69    display: flex;
70    align-items: center;
71    gap: 12px;
72    font-size: 13px;
73    color: #666;
74    margin: 5px 0px 18px 0px;
75}
76
77section#login #passkey_container .passkey-separator:before,
78section#login #passkey_container .passkey-separator:after{
79    content: "";
80    flex: 1;
81    height: 1px;
82    background: #e0e0e0;
83}
84
85section#login .submit button.passkey-button{
86    background: #FFF;
87    border: 1px solid #635BFF;
88    color: #635BFF;
89    margin-top: 0px;
90}
91
92section#login #passkey_error{
93    display: block;
94    color: #b00020;
95    font-weight: bold;
96    margin: 12px 0px 20px 0px;
97}
98
99section#login .submit button.loading{
100    opacity: 0.8;
101    cursor: default;
102}
103
104section#login .passkey-spinner{
105    display: inline-block;
106    width: 14px;
107    height: 14px;
108    margin-right: 8px;
109    vertical-align: -2px;
110    border: 2px solid rgba(255, 255, 255, 0.35);
111    border-top-color: #FFF;
112    border-radius: 50%;
113    animation: passkey-spin 0.8s linear infinite;
114}
115
116section#login .submit button.passkey-button .passkey-spinner{
117    border-color: rgba(99, 91, 255, 0.25);
118    border-top-color: #635BFF;
119}
120
121@keyframes passkey-spin{
122    to { transform: rotate(360deg); }
123}
124
125</style>
126<script type="00fac84f55f8b96fd720f295-text/javascript">
127
128function are_cookies_enabled(){
129    document.cookie="testcookie";
130    cookieEnabled = (document.cookie.indexOf("testcookie") != -1) ? true : false;
131    return (cookieEnabled);
132}
133
134function getURLParameter(name) {
135    return decodeURI(
136        (RegExp(name + '=' + '(.+?)(&|$)').exec(location.search)||[,null])[1]
137    );
138}
139
140$(function(){
141
142	$("#submit").click(function(e) {
143		 $("body").addClass("back").fadeIn(300);
144	});
145
146	$(".next").click(function(e) {
147		if($(".news_image").length>2){
148			 $(".news_image").first().remove();
149			 $(".news_image").first().remove();
150		}
151		else{
152			$(".next").hide();
153		}
154	});
155
156	if(!are_cookies_enabled()){
157		$("#cookies").show();
158	}
159
160
161	try {
162	     $saved_parameters=localStorage.getItem('billetweb');
163
164     	if(getURLParameter('version')!=false && getURLParameter('version')=='3'){
165     		$saved_parameters=null;
166     	}
167
168	     if($saved_parameters!=null || getURLParameter('version')=='2'){
169
170	     	$("#login").addClass('visited');
171
172	     	if(getURLParameter('version')!=false && getURLParameter('version')=='2'){
173	     		$saved_parameters=1;
174	     	}
175
176		    $.ajax({
177		         type: "GET",
178		         url: '/search.php?news='+$saved_parameters,
179		         dataType: 'json',
180		         success: function (response) {
181		        	 if(response.cards && response.cards.length>0){
182		        		 	/*var features=response.features;
183				        	for(i in features){
184				        		var data = features[i];
185				        		html = data['url'].length>0?'<a href="'+data['url']+'" target="_blank">'+data['title']+'</a>':data['title'];
186				        		var html = '<div class="news_item" title="'+data['details']+'">'+html+'<span class="label">'+data['date']+'</span><span ></span></div>';
187
188				        		$("#features .news_text").append(html);
189				        	}*/
190
191				        	var cards=response.cards;
192				        	for(i in cards){
193				        		var data = cards[i];
194				        		var html = '<div class="news_row url_item" data-url="'+data['url']+'"><div class="news_image" style="background-image: url('+data['image']+');"></div><div class="news_label '+data['label_class']+'">'+data['label_text']+'</div><div class="news_image_title">'+data['title']+'</div>';
195				        		/*if(data['url'].length>0){
196				        			html += '<div class="news_link"><a href="'+data['url']+'" target="_blank">Lire plus </a><div></div>';
197				        		}
198				        		else{
199				        			html +='</div>';
200				        		}*/
201				        		$("#cards .news_text").append(html);
202								if(i<cards.length-1){
203									$("#cards .news_text").append('<div class="separator"></div>');
204								}
205				        	}
206				        	if(cards.length==0)
207				        		$("#cards").hide();
208
209				        	//$("#features").hide();
210				        	$("#cards").hide();
211				        	$(".tips_container").show();
212
213				        	//$("#features").fadeIn(100);
214				        	$("#cards").fadeIn(300);
215
216				        	/*var bottom = $(window).outerHeight() - $("#cards").offset().top - $("#cards").outerHeight() + $("#header_image").height();
217				        	var top = $("#features").offset().top;
218				        	$(".news_image_container").height($(".news_image_container").height()-(top-bottom));
219
220				        	$(".news_image_title").each(function(){
221				        		while ($(this).height()>$(this).parent().height()-15) {
222				        			var fontSize = parseInt($(this).css("font-size"));
223				        			fontSize = fontSize - 3 + "px";
224				        			$(this).css('font-size',fontSize)
225				        	    }
226				        	});	*/
227
228							$(".url_item").click(function(e) {
229								e.preventDefault();
230								let url = $(this).data("url");
231								if (url) {
232									window.open(url, "_blank"); // "_blank" = nouvel onglet/fenêtre
233								}
234							});
235
236
237
238		        	 }
239
240			     }
241		    });
242	   	}
243	}
244	catch (e) {
245
246	}
247})
248
249
250
251</script>
251
252
253
254<script type="00fac84f55f8b96fd720f295-text/javascript">
255
256var passkey_auto = '';
257
258function bwB64ToBuf(str){
259	var bin = window.atob(str.replace(/-/g, '+').replace(/_/g, '/'));
260	var bytes = new Uint8Array(bin.length);
261	for (var i = 0; i < bin.length; i++) bytes[i] = bin.charCodeAt(i);
262	return bytes.buffer;
263}
264
265function bwBufToB64(buf){
266	var bytes = new Uint8Array(buf);
267	var bin = '';
268	for (var i = 0; i < bytes.length; i++) bin += String.fromCharCode(bytes[i]);
269	return window.btoa(bin);
270}
271
272// la lib serialise les binaires sous la forme =?BINARY?B?....?=
273function bwRecursiveToBuffer(obj){
274	var prefix = '=?BINARY?B?';
275	var suffix = '?=';
276	if (typeof obj === 'object' && obj !== null) {
277		for (var key in obj) {
278			if (typeof obj[key] === 'string') {
279				var str = obj[key];
280				if (str.substring(0, prefix.length) === prefix && str.substring(str.length - suffix.length) === suffix) {
281					obj[key] = bwB64ToBuf(str.substring(prefix.length, str.length - suffix.length));
282				}
283			} else {
284				bwRecursiveToBuffer(obj[key]);
285			}
286		}
287	}
288}
289
290function bwPasskeyError(code){
291	bwPasskeyBusy(false);
292	var messages = {
293		'wait': "Trop de tentatives, réessayez dans 3 minutes",
294		'unknown': "Passkey non reconnu",
295		'invalid': "La vérification du passkey a échoué",
296		'expired': "Délai dépassé, réessayez",
297		'no_passkey': "Aucun passkey enregistré sur ce compte",
298		'disabled': "Votre compte est désactivé",
299		'locked': "Votre compte est verrouillé"
300	};
301	if (code === 'cancel') return;
302	$("#passkey_error").text(messages[code] ? messages[code] : "Une erreur s'est produite").show();
303}
304
305var bwConditionalCtrl = null;
306
307// état "connexion en cours" : après validation du passkey, le temps de la vérification serveur et de la redirection.
308// porté par les deux boutons : sur mobile la feuille passkey iOS masque le bas de l'écran, seul "Connexion" reste visible
309function bwPasskeyBusy(busy){
310	$("#passkey_button, #submit").each(function(){
311		var btn = $(this);
312		if (busy) {
313			if (btn.hasClass('loading')) { return; }
314			btn.data('label', btn.html());
315			btn.prop('disabled', true).addClass('loading').html('<span class="passkey-spinner"></span>Connexion en cours...');
316		}
317		else if (btn.hasClass('loading')) {
318			btn.html(btn.data('label')).removeClass('loading');
319			// le bouton "Connexion" reste verrouillé tant que le captcha n'a pas fourni de jeton
320			var captcha = btn.closest('form').find('.cf-turnstile');
321			var token = btn.closest('form').find("[name='cf-turnstile-response']").val();
322			btn.prop('disabled', btn.is('#submit') && captcha.length > 0 && !(token && token !== ''));
323		}
324	});
325}
326
327function bwPasskeyVerify(cred, fromConditional){
328	bwPasskeyBusy(true);
329	var params = {
330		action: 'verify',
331		id: cred.rawId ? bwBufToB64(cred.rawId) : '',
332		clientDataJSON: cred.response.clientDataJSON ? bwBufToB64(cred.response.clientDataJSON) : '',
333		authenticatorData: cred.response.authenticatorData ? bwBufToB64(cred.response.authenticatorData) : '',
334		signature: cred.response.signature ? bwBufToB64(cred.response.signature) : '',
335		userHandle: cred.response.userHandle ? bwBufToB64(cred.response.userHandle) : '',
336		url: $("input[name=url]").val()
337	};
338	$.ajax({
339		type: 'POST',
340		url: '/bo/passkey.php',
341		data: params,
342		dataType: 'json'
343	}).done(function(response){
344		if (response.success) {
345			// marqueur local : les prochaines visites déclencheront la popup passkey automatiquement
346			try { localStorage.setItem('bw_passkey', '1'); } catch(e) { }
347			window.location.href = response.url;
348		}
349		else if (fromConditional && response.error === 'expired') { bwPasskeyConditional(); }
350		else {
351			if (response.error === 'unknown') { try { localStorage.removeItem('bw_passkey'); } catch(e) { } }
352			bwPasskeyError(response.error);
353		}
354	}).fail(function(){ bwPasskeyError('error'); });
355}
356
357function bwPasskeyLogin(auto){
358	if (bwConditionalCtrl) { bwConditionalCtrl.abort(); bwConditionalCtrl = null; }
359	if (!auto) { bwPasskeyBusy(true); }
360	$("#passkey_error").hide();
361	$.ajax({
362		type: 'POST',
363		url: '/bo/passkey.php',
364		data: { action: 'options' },
365		dataType: 'json'
366	}).done(function(getArgs){
367		if (getArgs.error) { bwPasskeyError(getArgs.error); return; }
368		bwRecursiveToBuffer(getArgs);
369		navigator.credentials.get(getArgs).then(function(cred){
370			bwPasskeyVerify(cred, false);
371		}).catch(function(err){
372			// annulation d'une popup automatique : on retombe sur l'autofill du champ email
373			if (auto) { bwPasskeyConditional(); }
374			else { bwPasskeyError('cancel'); }
375		});
376	}).fail(function(){ bwPasskeyError('error'); });
377}
378
379// conditional UI : le passkey apparaît dans l'autocomplétion du champ email, sans clic sur le bouton
380function bwPasskeyConditional(){
381	bwPasskeyBusy(false);
382	$.ajax({
383		type: 'POST',
384		url: '/bo/passkey.php',
385		data: { action: 'options', conditional: 1 },
386		dataType: 'json'
387	}).done(function(getArgs){
388		if (getArgs.error) { console.debug('passkey conditional options: ' + getArgs.error); return; }
389		bwRecursiveToBuffer(getArgs);
390		bwConditionalCtrl = new AbortController();
391		navigator.credentials.get({
392			mediation: 'conditional',
393			signal: bwConditionalCtrl.signal,
394			publicKey: getArgs.publicKey
395		}).then(function(cred){
396			bwPasskeyVerify(cred, true);
397		}).catch(function(err){ console.debug('passkey conditional: ' + err.name + ' ' + err.message); });
398	});
399}
400
401$(function(){
402	if (window.PublicKeyCredential && document.getElementById('passkey_button')) {
403		$("#passkey_button").on('click', function(){ bwPasskeyLogin(false); });
404
405		var hint = '';
406		try { hint = localStorage.getItem('bw_passkey'); } catch(e) { }
407
408		if (passkey_auto === '1' || hint === '1') {
409			// étape mfa après mot de passe, ou navigateur déjà utilisé avec un passkey :
410			// popup directe + bouton visible pour relancer en cas d'annulation.
411			// les autres (organisateurs, ou admin sur un navigateur neuf) ne voient rien et n'appellent pas le serveur :
412			// le premier login par mot de passe déclenche l'étape mfa qui pose le marqueur local.
413			$("#passkey_container").show();
414			bwPasskeyLogin(true);
415		}
416	}
417});
418
419</script>
419
420
421<section id="login" class="white_background">
422
423
424
425	<div class="tips_container">
426
427		<a href="/">
428			<div class="image_panel">
429				<img class="logo" src="/images/bo/billetweb-prismic-light.svg?v=1">
430			</div>
431		</a>
432
433		<div class="tips_panel">
434
435			<a href="/">
436				<img class="logo" src="/images/bo/billetweb-prismic-light.svg?v=1">
437				<img id="header_image" src="/images/bo/billetweb_connexion_crop.png?v=1">
438			</a>
439			<!-- <div id="features" class="news_container" >
440				<div class="news_title">Nouveautés <span style="float:right;font-size:0.7em;margin-top: 3px;"><a href="https://billetweb.featureupvote.com/">Suggérer une idée</a></span></div>
441				<div class="news_text"></div>
442				<div class="fade" style="background: linear-gradient(180deg, rgba(2,0,36,0) 0%, rgba(255,255,255,0.5326505602240896) 33%, rgba(255,255,255,1) 67%); height: 70px; position: absolute; bottom: 0px; z-index: 1000; width: 100%;"></div>
443			</div>!-->
444			<div id="highlight" class="news_container url_item"  data-url="https://newsletter.billetweb.fr">
445				<div class="col_1">
446					<div class="highlight_label">Newsletter </div>
447					<div class="highlight_title">La co-construction au coeur de l’innovation</div>
448					<div class="highlight_link">Découvrez nos nouveautés</div>
449				</div>
450				<img src="/images/bo/newsletter_2025.png">
451			</div>
452			<div id="cards" class="news_container"  >
453				<!--<div class="news_title">Améliorer votre expérience</div>!-->
454				<div class="news_text news_image_container"></div>
455				<div class="fade" ></div>
456				<div class="news_footer" style=""></div>
457			</div>
458
459		</div>
460
461	</div>
462
463	<div id="signup_container">
464
465 		<form method="post" action="login.php" class="login">
466
467	  			<input type="hidden" name="url" value="">
468
469		  		<!--<div id="logo" style="min-height:70px;">
470					<a href="/fr/">
471						<img src="/images/front/billetweb_blue.svg" >
472					</a>
473				</div>  -->
474
475				<h1>Se connecter</h1>
476
477				<div class="container" style="padding-bottom:30px;">
478
479			  		<div id="cookies" style="display:none;" class="parameters">
480			  			<div style="border:solid 1px #b00020;padding:12px;border-radius:5px;"> Votre navigateur n'autorise pas les cookies. Ceux ci sont nécéssaires pour utiliser le backoffice.</div>
481			  		</div>
482
483
484				    <p>
485				      <input type="email" autocomplete="username webauthn" name="login" id="login" value="" placeholder="Adresse email">
486				    </p>
487				    <p>
488				      <input type="password" name="password" id="password" value="" placeholder="Mot de passe" autocomplete="current-password">
489				       <p class="forgot-password" style=""><a href="login.php?reset=yes&language=fr">Mot de passe oublié ?</a></p>
490				    </p>
491
492					<div class="submit">
493						 <p>
494						 	<button id="submit" type="submit"  class="btn-primary button medium">
495						     	Connexion
496						     </button>
497							<span id="passkey_container" style="display:none;">
498								<span class="passkey-separator">Ou connectez-vous avec</span>
499								<button id="passkey_button" type="button" class="btn-primary button medium passkey-button">
500									Clé d'accès
501								</button>
502								<div id="passkey_error" style="display:none;"></div>
503							</span>
504						     <p class="create-account"><span class="">Pas encore inscrit ?</span> <a href="/fr-fr/devenir-organisateur">Créer un compte</a></p>
505					   	</div>
506					</div>
507
508
509
510
511
512			</div>
513
514	 	 </form>
515
516	</section>
517
518</body>
vendor: 143 bytes, lines 518-519
518
519<script src="/cdn-cgi/scripts/7d0fa10a/cloudflare-static/rocket-loader.min.js" data-cf-settings="00fac84f55f8b96fd720f295-|49" defer></script>
519</html>
520<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"77d572fed8794033a3fb6d1b9a0eadb0","spa":2}' crossorigin="anonymous"></script>
vendor: 1 bytes, line 520
520

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.