security: eliminar exposición de contraseñas en frontend y proteger endpoints
This commit is contained in:
@@ -41,8 +41,8 @@ export const AdminPanel: React.FC<AdminPanelProps> = ({
|
||||
}
|
||||
|
||||
const trimmedPass = password.trim();
|
||||
if (trimmedPass !== 'REMOVERVOTOE3' && trimmedPass !== 'RESETEOE3') {
|
||||
setAdminMsg({ text: 'Contraseña incorrecta. Se requiere "REMOVERVOTOE3".', type: 'error' });
|
||||
if (!trimmedPass) {
|
||||
setAdminMsg({ text: 'Ingresa la contraseña de autorización.', type: 'error' });
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -60,7 +60,7 @@ export const AdminPanel: React.FC<AdminPanelProps> = ({
|
||||
setPassword('');
|
||||
} catch (err) {
|
||||
setAdminMsg({
|
||||
text: `Error al remover voto: ${err instanceof Error ? err.message : 'Error desconocido'}`,
|
||||
text: err instanceof Error ? err.message : 'Error al remover voto',
|
||||
type: 'error',
|
||||
});
|
||||
} finally {
|
||||
@@ -70,8 +70,8 @@ export const AdminPanel: React.FC<AdminPanelProps> = ({
|
||||
|
||||
const handleResetAllVotes = async () => {
|
||||
const trimmedPass = password.trim();
|
||||
if (trimmedPass !== 'REMOVERVOTOE3' && trimmedPass !== 'RESETEOE3') {
|
||||
setAdminMsg({ text: 'Ingresa la contraseña "REMOVERVOTOE3" para vaciar todos los votos.', type: 'error' });
|
||||
if (!trimmedPass) {
|
||||
setAdminMsg({ text: 'Ingresa la contraseña de autorización para vaciar todos los votos.', type: 'error' });
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -93,7 +93,7 @@ export const AdminPanel: React.FC<AdminPanelProps> = ({
|
||||
setPassword('');
|
||||
} catch (err) {
|
||||
setAdminMsg({
|
||||
text: `Error al vaciar votos: ${err instanceof Error ? err.message : 'Error desconocido'}`,
|
||||
text: err instanceof Error ? err.message : 'Error al vaciar votos',
|
||||
type: 'error',
|
||||
});
|
||||
} finally {
|
||||
@@ -378,7 +378,7 @@ const VOTOS_EMBEBIDOS = ${JSON.stringify(rawVotes, null, 2)};`;
|
||||
Remover Voto Individual o de Pruebas (DELETE)
|
||||
</label>
|
||||
<span className="text-[10px] font-mono text-amber-400/80 bg-amber-400/10 px-2 py-0.5 rounded">
|
||||
Clave requerida: REMOVERVOTOE3
|
||||
Requiere clave de autorización
|
||||
</span>
|
||||
</div>
|
||||
|
||||
@@ -403,7 +403,7 @@ const VOTOS_EMBEBIDOS = ${JSON.stringify(rawVotes, null, 2)};`;
|
||||
type="password"
|
||||
value={password}
|
||||
onChange={(e) => setPassword(e.target.value)}
|
||||
placeholder="Clave: REMOVERVOTOE3"
|
||||
placeholder="Contraseña de autorización"
|
||||
className="w-full px-3 py-2.5 bg-white/[0.04] border border-white/10 rounded-xl text-white text-xs focus:border-[#00B7D4] focus:outline-none"
|
||||
/>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user