PageSourceSearch

https://raph.tv/studio/signin.php

html raph.tv collected 2026-09-29 21:31:33 UTC 13,064 bytes, 339 lines download raw bytes

1<!DOCTYPE html>
2<html>
3<head>
4	<meta charset="utf-8">
5	<meta name="viewport" content="width=device-width, initial-scale=1">
6	<title>xBuddy Studio</title>
7	<link rel="icon" type="image/png" href="https://raph.tv/assets/play_add.png">
8	<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/css/fork-awesome.min.css" integrity="sha256-XoaMnoYC5TH6/+ihMEnospgm0J1PM/nioxbOUdnM8HY=" crossorigin="anonymous">
9	
9<script src="https://raph.tv/assets/jquery-3.6.3.min.js"></script>
9
10	
10<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.form/4.3.0/jquery.form.min.js" integrity="sha512-YUkaLm+KJ5lQXDBdqBqk7EVhJAdxRnVdT2vtCzwPHSweCzyMgYV/tgGF4/dCyqtCC2eCphz0lRQgatGVdfR0ww==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
10
11	
11<script src="https://cdn.jsdelivr.net/npm/@yaireo/tagify"></script>
11
12	
12<script src="https://cdn.jsdelivr.net/npm/@yaireo/tagify/dist/tagify.polyfills.min.js"></script>
12
13	<link href="https://raph.tv/assets/tagify.css" rel="stylesheet" type="text/css" />
14	<link rel="stylesheet" href="https://raph.tv/assets/colors-dark.css?x=1790717493" id="theme">
15	<link rel="stylesheet" href="https://raph.tv/assets/style.css?x=1790717493">
16	<link rel="stylesheet" href="https://raph.tv/assets/studio-style.css?x=1790717493">
17	<link id="general_theme" rel="stylesheet" href="https://raph.tv/assets/rounded.css">
18	<!-- ionicons -->
19	
19<script type="module" src="https://unpkg.com/[email protected]/dist/ionicons/ionicons.esm.js"></script>
19
20	
20<script nomodule src="https://unpkg.com/[email protected]/dist/ionicons/ionicons.js"></script>
20
21	<!-- / ionicons -->
22	<style type="text/css">
23		html, body {
24			margin: 0;
25			background: linear-gradient(145deg, rgba(87,212,255,1) 0%, rgba(205,86,255,1) 100%);
26			background-position: center !important;
27			background-size: cover !important;
28			background-repeat: no-repeat !important;
29			user-select: none;
30			height: 100vh;
31			width: 100vw;
32			transition: background-image 0.2s ease-in-out;
33		}
34		.studio_content {
35			background: transparent !important;
36			backdrop-filter: blur(4px) brightness(0.5) contrast(1) saturate(1.1);
37			margin-top: 0;
38			height: 100%;
39		}
40
41		#connect_box {
42			background-color: #1f1f23a1 !important;
43		}
44
45		.fancy {
46			line-height: 0.5;
47			text-align: center;
48			overflow: hidden;
49			height: 50px;
50			display: flex;
51			align-items: center;
52			justify-content: flex-start;
53			margin: 0 25px;
54		}
55
56		.fancy span {
57			display: inline-block;
58			position: relative;  
59		}
60
61		.fancy span:before,
62		.fancy span:after {
63			content: "";
64			position: absolute;
65			height: 5px;
66			border-bottom: 1px solid #2a2a2a;
67			top: 0;
68			width: 600px;
69		}
70
71		.fancy span:before {
72			right: 100%;
73			margin-right: 15px;
74		}
75
76		.fancy span:after {
77			left: 100%;
78			margin-left: 15px;
79		}
80
81		#studio_body {
82			display: flex;
83			padding-top: 45px;
84			width: 100%;
85			height: 100%;
86			flex-direction: row;
87		}
88
89		input:not(input[type="radio"]):not(input[type="checkbox"]):hover, input:focus {
90			box-shadow: unset;
91		}
92
93		input:-webkit-autofill,
94		input:-webkit-autofill:focus {
95			transition: background-color 600000s 0s, color 600000s 0s;
96		}
97
98		input[data-autocompleted] {
99			background-color: transparent !important;
100		}
101
102		.user_autocomplete:hover{
103			filter: drop-shadow(0px 0px 6px var(--mw-deep-dark));
104			outline: var(--mw-general-border);
105		}
106	</style>
107</head>
108<body>
109<div id="studio_content" class="studio_content " style="margin: 0;width: 100%;">
110	<div id="connect_box" style="position:fixed; max-width:400px; width: 100%; top:50%; left:50%; transform:translate(-50%, -50%); background-color:var(--mw-content-background); padding:40px; border-radius:12px;">
111		<h2 style="text-align:center;"><img src="https://raph.tv/assets/play.png" style="height:30px; vertical-align:middle; margin-right:6px;" title="xBuddy"> xBuddy Studio</h2>
112		<form action="https://raph.tv/studio/connexion.php" method="POST" style="max-width:600px; margin:auto; margin-top:14px;position: relative;">
113			<input type="hidden" name="return_page" value="">
114			<div style="display: flex;flex-direction: row;justify-content: space-between;grid-gap: 10px;color: var(--mw-text);padding: 5px 15px;margin: 8px 0;width: 100%;border-radius: var(--mw-half-radius);font-size: 16px;outline: none;align-items: center;backdrop-filter: blur(20px);background-color: transparent;border: var(--mw-general-border);">
115				<div style="display: flex;align-items: center;justify-content: center;">
116					<img id="user_avatar" src="https://raph.tv/storage/user_avatar.jpg" style="width: 50px;height: 50px;border-radius: 100%;" />
117				</div>
118				<div style="width: calc(100% - 80px);height: 100%;position: absolute;top: 0;bottom: 0;right: 0;">
119					<input id="account_id" style="padding: 10px 0;background-color: transparent;margin: 0;height: 100%;" type="text" name="slug" placeholder="Adresse e-mail ou identifiant" required autocomplete="off">
120				</div>
121			</div>
122			<div id="known_users" style="display: none;position: absolute;width: 100%;z-index: 1;top: 75px;max-height: 250px;overflow-y: auto;background: var(--mw-content-background);padding: 0px 5px;border-radius: var(--mw-half-radius);left: 2px;"></div>
123			<input type="password" name="password" placeholder="Mot de passe" required style="background-color: transparent;backdrop-filter: blur(20px);border: var(--mw-general-border);">
124			<div style="display: flex;flex-direction: row;align-items: center;">
125				<input id="permanent_cnx" type="checkbox" name="permanent_cnx">
126				<label for="permanent_cnx" class="mw-txt txt-red" style="font-size: 12px;font-weight: bold;padding-left: 5px;">Reconnexion automatique sans mot de passe<br><small>(faire confiance à cet ordinateur)</small></label>
127			</div>
128			<input type="text" name="honeypot" value="" style="display: none;">
129			<button class="button" type="submit">Se connecter</button>
130		</form>
131		<div style="position: absolute;text-align: center;width: 100%;left: 0;margin: 50px 0 0 -5px;">
132			<a href="https://raph.tv" style="color: var(--mw-text);text-decoration: none;font-size: smaller;">
133				<i class="fa fa-angle-double-left fa-fw" aria-hidden="true"></i>Retourner sur xBuddy			</a>
134		</div>
135	</div>
136</div>
137<script type="text/javascript">
138var known_users = localStorage.getItem('known_users');
139
140if(known_users !== undefined || known_users !== null || known_users != ""){
141	known_users = JSON.parse(known_users);
142	var users_html = "";
143
144	known_users.forEach(function(user){
145
146		users_html += `<div id="${user.uuid}" data-username="${user.slug}" class="user_autocomplete" style="display: flex;flex-direction: row;grid-gap: 10px;color: var(--mw-text);padding: 5px 15px;margin: 8px 0;width: 100%;border-radius: var(--mw-half-radius);font-size: 16px;align-items: center;backdrop-filter: blur(20px);background-color: var(--mw-content-background);border: var(--mw-general-border);cursor: pointer;">`;
147		users_html += `	<div style="display: flex;align-items: center;justify-content: center;">`;
148		users_html += `		<img src="${user.avatar}" style="width: 50px;height: 50px;border-radius: 100%;">`;
149		users_html += `	</div>`;
150		users_html += `	<div style="style="width: calc(100% - 80px);height: 100%;position: absolute;top: 0;bottom: 0;right: 0;display: flex;align-items: center;justify-content: flex-start;">`;
151		users_html += `		<div style="padding: 10px 0;background-color: var(--mw-content-background);margin: 0;height: 100%;display: flex;align-items: center;justify-content: flex-start;">`;
152		users_html += `			${user.name}`;
153		users_html += `		</div>`;
154		users_html += `		<div style="position: absolute;right: 0;display: flex;height: 100%;align-items: stretch;top: 0;">`;
155		users_html += `			<div data-uuid="${user.uuid}" class="btn btn-sm" onClick="remove_account_list(this);" style="display: flex;align-items: center;">`;
156		users_html += `				<svg class="txt-red" style="cursor: no-drop;" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 512 512"><path fill="none" stroke="currentColor" stroke-miterlimit="10" stroke-width="32" d="M448 256c0-106-86-192-192-192S64 150 64 256s86 192 192 192s192-86 192-192Z"></path><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32" d="M320 320L192 192m0 128l128-128"></path></svg>`;
157		users_html += `			</div>`;
158		users_html += `		</div>`;
159		users_html += `	</div>`;
160		users_html += `</div>`;
161	});
162
163	$('#known_users').html(users_html);
164}
165
166$('#account_id').on('click', function(){
167	$('#known_users').show();
168});
169
170$(document).on('mousedown', function(event){
171	if(!$(event.target).closest('#account_id, #known_users').length){
172		$('#known_users').hide();
173	}
174});
175
176$('#account_id').on('input', function(){
177	var inputVal = $(this).val().toLowerCase();
178	var matched = false;
179
180	$('#known_users [data-username]').each(function(){
181		var username = $(this).data('username').toLowerCase();
182		if(username.includes(inputVal) && username !== inputVal){
183			$(this).show();
184			matched = true;
185		} else {
186			$(this).hide();
187		}
188	});
189
190	if(inputVal === ''){
191		$('#known_users').show();
192	}
193	else if(matched){
194		$('#known_users').show();
195	}
196	else{
197		$('#known_users').hide();
198	}
199});
200
201var isRemoving = false;
202
203$('#known_users').on('click', '[data-username]', function(e){
204	if(isRemoving){
205		isRemoving = false;
206		return;
207    }
208	account_autocomplete(this);
209});
210
211
212function account_autocomplete(e){
213	var this_username = $(e).attr('data-username');
214	$('#account_id').val(this_username);
215	doneTyping();
216	$('#known_users').hide();
217}
218
219function remove_account_list(e){
220	isRemoving = true;
221	var known_users = JSON.parse(localStorage.getItem('known_users')) || [];
222	var this_uuid = $(e).attr('data-uuid');
223	
224	known_users = known_users.filter(function(user) {
225		return user.uuid !== this_uuid;
226	});
227
228	localStorage.setItem('known_users', JSON.stringify(known_users));
229
230	$('#'+this_uuid).detach();
231	$('#account_id').val('');
232
233	setTimeout(function(){
234		isRemoving = false;
235	}, 100);
236}
237
238var typingTimer;
239var doneTypingInterval = 150;
240var $input = $('#account_id');
241var dafault_user_avatar = $('#user_avatar').attr('src');
242
243$input.on('keyup', function () {
244	clearTimeout(typingTimer);
245	typingTimer = setTimeout(doneTyping, doneTypingInterval);
246});
247
248$input.on('keydown', function () {
249	clearTimeout(typingTimer);
250});
251
252var last_input_account = "";
253var last_avatar = "";
254var last_banner = "";
255
256function doneTyping(){
257	let input_account = $('#account_id').val().toLowerCase();
258	let original_input = input_account; // pour garder l'entrée d’origine si besoin
259
260	let known_users = localStorage.getItem('known_users');
261	let known_users_array = known_users ? JSON.parse(known_users) : [];
262
263	// Vérifier si l'input est une adresse mail valide
264	let emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
265	let isEmail = emailPattern.test(input_account);
266
267	let isPseudoKnown = false;
268
269	if(isEmail){
270		// Cherche un utilisateur dont l'email correspond
271		let matchedUser = known_users_array.find(user => user.email === input_account);
272
273		if(matchedUser){
274			// On remplace input_account par le slug
275			input_account = matchedUser.slug;
276			isPseudoKnown = true; // car on a bien trouvé un slug connu
277		}
278	}
279	else{
280		// Si ce n'est pas un email, on vérifie si c’est un pseudo connu
281		isPseudoKnown = known_users_array.some(user => user.slug === input_account);
282	}
283
284	// Si on a quelque chose de valide
285	if(input_account != undefined && input_account != ''){
286		if(isPseudoKnown){
287			if(input_account != last_input_account){
288				last_input_account = input_account;
289				$.ajax({
290					url: 'https://raph.tv/api/v0/account/@'+input_account,
291					type: 'GET',
292					contentType: "text/plain",
293					dataType: "text",
294					success: function(strJSON){
295						let strJSONParsed = JSON.parse(strJSON);
296						let reponse = strJSONParsed.response;
297
298						if(reponse == "valid"){
299							let pseudo = strJSONParsed.name;
300							let avatar = strJSONParsed.avatar.url;
301							let banner = strJSONParsed.banner.url;
302
303							last_avatar = avatar;
304							last_banner = banner;
305
306							$('#user_avatar').attr('src', avatar);
307							$('body').css({'background-image': 'url(' + banner + ')'});
308						}
309						else{
310							$('#user_avatar').attr('src', dafault_user_avatar);
311							$('body').css({'background-image': ''});
312						}
313					},
314					error: function(xx) {
315						console.log("Error");
316					},
317				});
318			}
319			else{
320				$('#user_avatar').attr('src', last_avatar);
321				$('body').css({'background-image': 'url(' + last_banner + ')'});
322			}
323		}
324		else{
325			$('#user_avatar').attr('src', dafault_user_avatar);
326			$('body').css({'background-image': ''});
327		}
328	}
329	else{
330		$('#user_avatar').attr('src', dafault_user_avatar);
331		$('body').css({'background-image': ''});
332	}
333}
334
335$(document).ready(function(){
336	doneTyping();
337});
338</script>
338
339</body>

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.