https://github.com/franciscorojas27/hostpot
Aplicación de escritorio (Windows) construida con Tauri 2, React 19, TypeScript y TailwindCSS, para gestionar y automatizar un punto de acceso (Hosted Network) Wi‑Fi en Windows mediante los comandos netsh.
https://github.com/franciscorojas27/hostpot
hostednetwork netsh netsh-wlan react reactjs rust tauri tauri2 ts typescript wifi wifi-hotspot
Last synced: 29 days ago
JSON representation
Aplicación de escritorio (Windows) construida con Tauri 2, React 19, TypeScript y TailwindCSS, para gestionar y automatizar un punto de acceso (Hosted Network) Wi‑Fi en Windows mediante los comandos netsh.
- Host: GitHub
- URL: https://github.com/franciscorojas27/hostpot
- Owner: franciscorojas27
- Created: 2025-09-14T23:02:26.000Z (9 months ago)
- Default Branch: master
- Last Pushed: 2025-09-15T00:51:33.000Z (9 months ago)
- Last Synced: 2025-09-15T01:07:39.722Z (9 months ago)
- Topics: hostednetwork, netsh, netsh-wlan, react, reactjs, rust, tauri, tauri2, ts, typescript, wifi, wifi-hotspot
- Language: TypeScript
- Homepage:
- Size: 249 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Tauri + React + Typescript
This template should help get you started developing with Tauri, React and Typescript in Vite.
## Recomendaciones de Configuración del IDE
# HostPot
Aplicación de escritorio (Windows) construida con **Tauri 2**, **React 19**, **TypeScript** y **TailwindCSS**, para gestionar y automatizar un punto de acceso (Hosted Network) Wi‑Fi en Windows mediante los comandos `netsh`.
   
## 🚀 Objetivo
Simplificar el inicio, configuración y monitoreo de un Hosted Network en Windows, mostrando estado, SSID, clientes máximos, autenticación, cifrado y contraseña; además de permitir autostart y notificaciones del sistema.
## ✨ Características Principales
- Inicio / detención del Hosted Network (elevado con `ShellExecuteW runas`).
- Configuración de SSID y contraseña persistente.
- Almacenamiento local usando `tauri-plugin-store` (`app_data.json`).
- Autenticación básica (login / logout en memoria con bandera global atómica).
- Auto Start opcional del hotspot al abrir la aplicación.
- Notificaciones nativas (plugin notification).
- Modal personalizado para mensajes en lugar de `alert`.
- Sanitización y migración de valores (ej. `autoStart` de string -> boolean).
- Arquitectura segura de mutabilidad usando `Arc>` para el estado del hotspot.
## 🧱 Stack Técnico
Frontend:
- React 19 + TypeScript
- Vite 7
- TailwindCSS 4 (a través de `@tailwindcss/vite`)
Backend (Tauri / Rust):
- Tauri 2 (runtime WRY)
- Plugins: store, notification, dialog, opener, autostart
- Acceso Win32 (`windows` crate) para elevar comandos `netsh`.
## 📂 Estructura Resumida
```
root
├─ src/ (React UI)
│ ├─ pages/Home.tsx # Pantalla principal (estado y controles)
│ ├─ contexts/AuthContext.tsx
│ └─ middleware/Guard.tsx
├─ src-tauri/
│ ├─ src/lib.rs # Comandos Tauri y lógica Hosted Network
│ ├─ src/main.rs # Entrada binaria
│ ├─ tauri.conf.json # Configuración Tauri
│ └─ Cargo.toml # Dependencias Rust
└─ public/
```
## 🔐 Autenticación
Se maneja un usuario único almacenado en el Store bajo la clave `usuario` con estructura `{ name, password }`. El estado de sesión se mantiene con una `AtomicBool`. (No apto aún para producción: faltan hashing y múltiples usuarios.)
## 🛰️ Comandos Principales (Rust / Tauri)
| Comando | Descripción |
|---------|-------------|
| `login` | Valida credenciales y activa sesión |
| `logout` | Cierra sesión |
| `is_authenticated` | Retorna booleano de sesión |
| `get_hosted_network_settings_to_fronted` | Devuelve estado actual del Hosted Network |
| `config_hosted_network` | Configura SSID y clave persistente |
| `start_hosted_network` / `stop_hosted_network` | Controla el hotspot |
| `is_alive` | Verifica si está iniciado |
| `get_auto_start` / `set_auto_start` | Gestión de inicio automático |
## 🛠️ Requisitos Previos
- Windows 10/11 con soporte Hosted Network (algunos adaptadores nuevos lo desactivan).
- Rust (toolchain estable) -> https://www.rust-lang.org
- Node.js / Bun (estás usando Bun para scripts; también funciona npm/pnpm si se adapta).
## ▶️ Ejecución en Desarrollo
Instala dependencias JS y ejecuta el modo dev (Tauri compila el lado Rust automáticamente):
```powershell
# Instalar dependencias (ej: bun)
bun install
# Modo desarrollo (frontend + backend)
```
Si prefieres npm:
```powershell
npm install
npm run tauri dev
```
## 📦 Build Producción
```powershell
# Generar ejecutable
bun run tauri build
```
El binario y artefactos quedarán en `src-tauri/target/release/` y el bundle según el configurador (NSIS / MSI / etc.).
## 🧪 Notas sobre Estado y Persistencia
- El store `app_data.json` puede contener: `usuario`, `autoStart`, `password`.
- Migraciones simples: si `autoStart` era string, se convierte automáticamente a boolean.
- La contraseña por defecto se fuerza a `"12345678"` si no existe.
## ⚠️ Limitaciones Actuales
- No gestiona múltiples interfaces de red.
- No reintenta elevación fallida.
- No hay hashing de contraseña (solo desarrollo / demo).
- Posible incompatibilidad si Microsoft deshabilita Hosted Network en el adaptador.
## 🧩 Próximas Mejores (Ideas)
- Hash + sal para credenciales.
- UI para regenerar / mostrar clave parcialmente enmascarada.
- Logs persistentes de eventos (inicio/detención/error).
- Internacionalización (i18n) multi-idioma.
- Test unitarios en Rust (parsing salida de `netsh`).
- Integración con bandeja del sistema (icono dinámico según estado).
## 🛡️ Seguridad Básica
Actualmente orientado a entorno cerrado/desarrollo. Para producción considera:
- Evitar exponer comandos peligrosos sin validación.
- Encriptar (o al menos ofuscar) valores sensibles en el store.
- Añadir sandboxing y hardening (Tauri ya reduce superficie, pero hay más por hacer).
## 🤝 Contribución
1. Haz fork / rama.
2. Crea cambios pequeños y descriptivos.
3. Ejecuta `bun run tauri dev` para validar.
4. Envía PR con contexto claro.
## 🐞 Depuración Rápida
Si la app se cierra con panic por datos corruptos en el store:
1. Cierra la app.
2. Localiza el archivo `app_data.json` (normalmente en la carpeta de datos de la app / `%APPDATA%`).
3. Elimínalo o corrígelo manualmente.
## 📜 Licencia
MIT. Si usas este código para algo productivo, añade mención y endurece seguridad.
---