-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlib.php
More file actions
executable file
·171 lines (146 loc) · 4.44 KB
/
lib.php
File metadata and controls
executable file
·171 lines (146 loc) · 4.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
<?php
// Inicia a sessão para controlar autenticação e dados do usuário
session_start();
/**
* Caminho do arquivo que armazena os usuários
* Cada usuário contém: login, senha hash, playlists
*/
const USER_FILE = __DIR__ . '/usuarios.json';
/* ============================================================
=============== FUNÇÕES DE USUÁRIOS ===============
============================================================ */
/**
* Lê todos os usuários do arquivo JSON.
*
* @return array Lista de usuários cadastrados
*/
function get_all_users(): array {
if (!file_exists(USER_FILE)) return [];
$json = file_get_contents(USER_FILE);
$data = json_decode($json, true);
return is_array($data) ? $data : [];
}
/**
* Salva a lista completa de usuários no arquivo JSON.
*
* @param array $users Lista de usuários
*/
function save_all_users(array $users): void {
file_put_contents(
USER_FILE,
json_encode($users, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES)
);
}
/**
* Cadastra um novo usuário.
* Verifica se o login já existe, cria senha com hash e salva.
*
* @param string $login Nome do usuário
* @param string $senha Senha em texto puro
* @return bool True se cadastrado / False se já existe
*/
function cadastrar_usuario($login, $senha) {
$users = get_all_users();
// Checa se já existe um login igual
foreach ($users as $u) {
if ($u['login'] === $login) return false;
}
// Adiciona novo usuário com senha criptografada
$users[] = [
'login' => $login,
'senha' => password_hash($senha, PASSWORD_DEFAULT),
'playlists' => [] // Cada usuário tem suas próprias playlists
];
save_all_users($users);
return true;
}
/**
* Realiza o login do usuário.
* Compara o login e verifica se a senha está correta.
*
* @param string $login
* @param string $senha
* @return bool True se logado / False se falhou
*/
function logar_usuario($login, $senha) {
$users = get_all_users();
foreach ($users as $u) {
// Verifica login e compara senha usando password_verify
if ($u['login'] === $login && password_verify($senha, $u['senha'])) {
$_SESSION['usuario'] = $login; // Guarda login na sessão
return true;
}
}
return false;
}
/**
* Verifica se o usuário está logado.
* Caso não esteja, redireciona para o login.
*/
function verificar_auth() {
if (!isset($_SESSION['usuario'])) {
header("Location: login.php");
exit;
}
}
/* ============================================================
=============== FUNÇÕES DE PLAYLISTS ===============
============================================================ */
/**
* Carrega as playlists do usuário logado.
*
* @return array Playlists do usuário atual
*/
function db_load(): array {
if (!isset($_SESSION['usuario'])) return [];
$users = get_all_users();
foreach ($users as $u) {
if ($u['login'] === $_SESSION['usuario']) {
return $u['playlists'] ?? [];
}
}
return [];
}
/**
* Salva as playlists do usuário logado.
*
* @param array $playlists Nova lista de playlists
*/
function db_save(array $playlists): void {
if (!isset($_SESSION['usuario'])) return;
$users = get_all_users();
foreach ($users as &$u) {
if ($u['login'] === $_SESSION['usuario']) {
$u['playlists'] = $playlists;
break;
}
}
save_all_users($users);
}
/**
* Gera o próximo ID numérico disponível para playlists.
*
* @param array $playlists Lista de playlists existentes
* @return int Novo ID único
*/
function next_id(array $playlists): int {
if (empty($playlists)) return 1;
$ids = array_column($playlists, 'id');
return max($ids) + 1;
}
/**
* Extrai o ID de um vídeo do YouTube a partir de uma URL comum.
* Aceita formatos:
* - https://youtube.com/watch?v=ID
* - https://youtu.be/ID
* - https://youtube.com/embed/ID
*
* @param string $url Link do vídeo
* @return string Retorna o ID (11 caracteres) ou "" se inválido
*/
function extract_youtube_id($url) {
if (preg_match('/(?:v=|youtu\.be\/|embed\/)([a-zA-Z0-9_-]{11})/', trim($url), $match)) {
return $match[1];
}
return "";
}