# Instalar TaskMe en taskme.techfor.cl

El paquete usa PHP 8.2+, MySQL/MariaDB y archivos web estáticos. No necesita Node, npm ni compilación en cPanel. El login es de TaskMe, con contraseña y un código TOTP obligatorio. No usa Microsoft To Do.

## 1. Crear el subdominio y activar HTTPS

En **cPanel → Dominios → Crear un dominio**, escribir `taskme.techfor.cl`. Usar una carpeta propia: `public_html/taskme`. No compartir la raíz del sitio principal.

Si el DNS de `techfor.cl` se administra fuera de este hosting, crear allí el registro **A** de `taskme` apuntando a la IP que indique el proveedor de cPanel. No cambiar los registros de `techfor.cl` ni del correo. Si existe un registro AAAA para el subdominio, debe apuntar al hosting correcto también.

Activar el certificado del subdominio en **SSL/TLS Status / AutoSSL**. TaskMe requiere HTTPS para su cookie de sesión. La redirección de `.htaccess` apunta a `https://taskme.techfor.cl`.

## 2. Elegir PHP y crear la base

En **MultiPHP Manager / Select PHP Version**, seleccionar PHP 8.2 o superior para el subdominio. Habilitar `pdo_mysql`, `openssl` y `mbstring`.

En **Database Wizard / Asistente de bases de datos**, crear una base y un usuario exclusivos para TaskMe. cPanel suele agregar el prefijo de tu cuenta: copiar los nombres completos. Asignar el usuario a esa base. Para importar el esquema se necesitan permisos de creación; para funcionar la app necesita SELECT, INSERT, UPDATE y DELETE sobre su base.

En **phpMyAdmin**, seleccionar esa base e importar `database/schema.sql` una sola vez. El archivo crea cinco tablas con el prefijo `tm_`. No incluye datos de ejemplo ni modifica otras bases.

## 3. Subir los archivos en las carpetas correctas

Extraer `taskme-cpanel.zip` en el directorio **home** de la cuenta, no dentro de `public_html`. Si el subdominio ya se creó con una raíz distinta, mover el contenido de `public_html/taskme/` a la carpeta que cPanel muestra como raíz de `taskme.techfor.cl`; no mover `taskme-private`.

```text
/home/TU_USUARIO/
  public_html/
    taskme/
      index.html
      .htaccess
      app.js, model.js, style.css, auth.css, favicon.svg
      api/index.php
  taskme-private/
    config.example.php
    api.php
    security.php
    .htaccess
  taskme-install/
    database/schema.sql
    tools/
    tests/
    INSTALAR-CPANEL.md
```

`taskme-private` debe permanecer fuera de todas las carpetas públicas. En File Manager, activar **Mostrar archivos ocultos** para comprobar que se subió `.htaccess`. La API detecta automáticamente ambas ubicaciones de raíz habituales de cPanel.

## 4. Configurar sin compartir las contraseñas

Copiar `taskme-private/config.example.php` como `taskme-private/config.php`. Completar `db.name`, `db.user` y `db.password` con los datos de cPanel; `db.host` suele ser `localhost`, pero debe coincidir con el valor indicado por tu hosting.

Crear una clave aleatoria de cifrado de 32 bytes (64 caracteres hexadecimales). Si tu cPanel tiene Terminal:

```sh
php ~/taskme-install/tools/generate-key.php
```

Copiar el resultado en `encryption_key`. No pegar esta clave ni la contraseña de MySQL en un chat. Guardar una copia segura: cambiar la clave sin recifrar los secretos dejaría inutilizables los autenticadores existentes. Si no hay Terminal, se puede generar una clave hexadecimal aleatoria de 64 caracteres con un gestor de contraseñas que permita ese formato.

## 5. Verificar antes de usar con tareas reales

Desde Terminal, en `~/taskme-install`, ejecutar:

```sh
php tools/check-hosting.php
php tests/security.php
```

Después abrir `https://taskme.techfor.cl` y comprobar:

1. Crear una cuenta de prueba. Antes de confirmar 2FA, `/api/tasks` debe responder 401.
2. Añadir manualmente la clave a una app autenticadora como código basado en tiempo; confirmar un código y guardar los ocho códigos de recuperación.
3. Crear, editar y completar una tarea; recargar y confirmar que permanece.
4. Cerrar sesión, volver a entrar y verificar que se exige el código después de la contraseña.
5. Crear una segunda cuenta y comprobar que no ve las tareas de la primera.
6. Usar un código de recuperación junto con la contraseña y comprobar que no puede reutilizarse.

No usar información real hasta completar las verificaciones. El entorno donde se preparó este paquete no dispone de PHP/MySQL: las pruebas del servidor están incluidas, pero su ejecución y la instalación en tu hosting siguen pendientes.

## Alcance actual

Incluye registro, login, 2FA, códigos de respaldo, sesiones, tareas persistentes, Mi día, prioridades, notas y fechas. El correo identifica la cuenta; todavía no se verifica por email. No hay recuperación de contraseña olvidada, reemplazo del autenticador ni trabajo compartido entre cuentas. Los códigos de respaldo requieren recordar la contraseña.

La autenticación usa Argon2id cuando PHP lo ofrece; en caso contrario, PBKDF2-HMAC-SHA256 con 600 000 iteraciones. Los secretos TOTP se cifran con AES-256-GCM. Las sesiones completas duran 8 horas, los desafíos 10 minutos y un registro sin terminar expira a los 15 minutos. Hay límites de intentos, rechazo de códigos TOTP repetidos y comprobación de origen en las escrituras.

Fuentes: [Dominios en cPanel](https://docs.cpanel.net/cpanel/domains/domains/create-a-new-domain/110/), [Bases de datos en cPanel](https://docs.cpanel.net/cpanel/databases/manage-my-databases/), [Almacenamiento de contraseñas — OWASP](https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html).
