# Registrar una aplicación en OpenPlatform

> Los campos del registro de una aplicación en OpenPlatform: dirección, los dos tokens compartidos, las banderas que deciden cómo se abre, sus permisos y quién puede acceder a ella.

Framework: openplatform
Product: OpenPlatform (openplatform@5)
Language: es
Content-SHA256: eabf06378a53b91dd27a6dcd7abaeda93b44e9c8598765f94868a538e42ba2ff
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: 
Review: not-recorded

Una aplicación es un registro que el administrador crea en la pantalla de **configuración** (`/setup/`, la API de apps del plugin `setup`). El registro es el contrato entre OpenPlatform y tu aplicación: dónde vive, cómo se demuestran mutuamente quiénes son y qué puede hacer el usuario en ella. El esquema del registro es `@Apps` en `plugins/setup/schemas/apps.js`.

| Campo | Obligatorio | Significado |
|---|---|---|
| `name` | sí | el nombre que se muestra en el portal |
| `url` | sí | la dirección que abre OpenPlatform |
| `reqtoken` | sí | un secreto que eliges y que **conocen ambas partes**: firma la petición |
| `restoken` | sí | un segundo secreto, también compartido: la aplicación lo usa para firmar su respuesta |
| `color`, `icon` | no | el aspecto de la aplicación en el portal |
| `meta` | no | una dirección (URL) que devuelve los metadatos de la aplicación: la pantalla de configuración puede descargarlos (`Apps/download`) para rellenar el registro |
| `sortindex` | no | el orden en la lista (una aplicación nueva va al final) |
| `notifications` | no | si la aplicación puede enviar notificaciones |
| `isexternal` | no | la aplicación **no** se abre dentro del marco del portal: la respuesta a la aplicación dice `iframe: false` |
| `isbookmark` | no | la aplicación es un simple enlace: sin protocolo de tokens, solo un identificador de sesión en la query string |
| `isnewtab` | no | ábrela en una pestaña nueva del navegador en lugar de en el marco del portal (el ajuste `newtab` lo hace para todas las aplicaciones) |
| `isscrollbar` | no | el marco de la aplicación en el portal conserva su barra de desplazamiento (el portal pone `scrolling` en `yes` o `no`) |
| `isdisabled` | no | apágala para todos: el usuario recibe "App has been temporary disabled" |
| `permissions` | no | la lista de permisos de la aplicación: cada uno tiene un `id`, un `name` y un `value` (consulta [grupos y permisos](/en/openplatform/groups-and-permissions/)) |

La tabla `tbl_app` tiene además una columna `allow` ("permite solo direcciones IP concretas"): cuando contiene direcciones, la aplicación solo puede llamar a los endpoints del protocolo de OpenPlatform desde ellas. El esquema de configuración anterior no la lista, así que es una columna de la base de datos que rellenas directamente.

## Los dos tokens

`reqtoken` y `restoken` nunca se envían al navegador. OpenPlatform deriva de ellos, para cada lanzamiento, los valores que viajan: el token en la dirección de la aplicación y la cabecera que la aplicación devuelve. La derivación está en [cómo se conecta una app](/en/openplatform/how-an-app-connects/). Usa valores aleatorios largos y un par distinto para cada aplicación.

## Eliminar y cambiar

Una aplicación nunca se borra de la tabla: eliminarla (`Apps/remove`) marca `isremoved` y la fecha de eliminación y limpia la caché de los usuarios que la tenían, y `isdisabled` la apaga sin eliminarla. Cuando cambia la dirección de la plataforma (el ajuste `url`), OpenPlatform limpia los enlaces de notificación de todos los usuarios y borra las sesiones de aplicación abiertas, porque ambos contienen esa dirección ([ajustes y base de datos](/en/openplatform/settings-and-database/)).

Recuerda la regla del README: una aplicación registrada no es visible para nadie hasta que se le asigna un grupo.
