Saltar al contenido principal

StaffAuth

Las cuentas del staff quedan congeladas al entrar hasta que inician sesión con una contraseña con hash BCrypt.

Privadasv0.0.2Utilidades
RequiereTypeWriter0.9.0-beta-177 (BTC build)GUIPermissionsopcional

Creada para la red BornToCraft. Esta extensión está documentada como referencia y no se distribuye.

Descripción general​

StaffAuth protege las cuentas del staff. Cuando un jugador se conecta y tiene el permiso de staff (security.admin por defecto), queda congelado hasta que se autentica: no puede moverse, interactuar, romper ni colocar bloques, abrir inventarios, chatear, pelear ni usar comandos distintos de /staffauth. Un miembro del staff sin contraseña registra una en su primera conexión; después inicia sesión con ella.

Las contraseñas nunca se envían como argumentos de comando ni se escriben en el chat. Se introducen en un diálogo de entrada de Paper, o en un menú opcional de teclado numérico, y se almacenan solo como hashes BCrypt en un artefacto de TypeWriter. Los intentos fallidos tienen un límite de frecuencia con un enfriamiento creciente y pueden expulsar al jugador.

Todos quedan retenidos aproximadamente un tick al conectarse mientras se cargan sus permisos, en silencio, para que un backend de permisos lento nunca deje pasar al staff sin comprobar. Los jugadores que no son staff se liberan después; si los permisos no se establecen en 10 segundos, el jugador es expulsado con una explicación.

Características​

  • Congelación al conectarse — el staff sin autenticar no puede moverse, interactuar, construir, soltar, recoger, consumir, pescar, recibir ni infligir daño, chatear ni ejecutar comandos.
  • Registro e inicio de sesión — el staff que entra por primera vez se registra introduciendo una contraseña dos veces; los demás inician sesión.
  • Almacenamiento con hash — solo se guardan hashes BCrypt, con un factor de coste configurable.
  • Límites de intentos — un enfriamiento que se duplica tras cada fallo (hasta 60 segundos) y una expulsión tras maxAttempts fallos.
  • Tiempo de sesión — opcionalmente, devuelve al staff autenticado al inicio de sesión tras un número de minutos.
  • Diálogo o teclado — un diálogo de entrada de Paper por defecto, además de un menú opcional de teclado de dígitos construido a partir de un layout de GUI.
  • Herramientas de administración — restablece una contraseña almacenada o fuerza un cierre de sesión.
  • Extensión Permissions opcional — espera a que se carguen los permisos antes de decidir quién es staff.

Instalación​

  1. Instala la extensión GUI: el diálogo de inicio de sesión y el menú de teclado se abren a través de ella. Sin ella, /staffauth responde que la interfaz no está disponible.
  2. Opcionalmente, instala la extensión BTC Permissions si tus servidores cargan los permisos desde una base de datos; StaffAuth la detecta automáticamente.
  3. Coloca el JAR de StaffAuth en plugins/Typewriter/extensions/ y reinicia el servidor.
  4. Da el permiso de staff (security.admin) a las cuentas que deban autenticarse.

Primeros pasos​

  1. En el panel web de TypeWriter, abre una página static y añade un artefacto Staff Auth Passwords. No cambies nunca su artifactId después, o se perderán las contraseñas almacenadas.
  2. En la misma página, añade una entrada Staff Auth Config. Revisa staffPermission, adminPermission, maxAttempts, minPasswordLength, bcryptCost y los mensajes.
  3. Publica. StaffAuth necesita ambas entradas: sin la configuración no hace nada, y sin el artefacto se deja pasar al staff (se registra un error).
  4. Conéctate con una cuenta de prueba que tenga el permiso de staff. Quedas congelado y se te pide que te registres: escribe una contraseña en el diálogo y luego confírmala.
  5. Reconéctate: el diálogo te pide ahora la contraseña.
  6. Opcional: añade una acción Staff Auth Menu para usar el teclado. Consulta más abajo.
Un artefacto, una configuración

StaffAuth usa la primera Staff Auth Config y el primer artefacto Staff Auth Passwords que encuentra. No crees varios.

Cómo funciona​

La autenticación dura hasta que el jugador abandona el servidor (el estado solo se guarda en memoria) o caduca el tiempo de sesión opcional. Mientras está restringido, el único comando permitido es /staffauth (y /sa, que solo está exento del bloqueo; no está registrado como alias).

Menús​

Conectarse, /staffauth, login y register abren un diálogo de Paper con una entrada de texto. Al registrarse, el diálogo se muestra una segunda vez para confirmar la contraseña. El texto del aviso proviene de guiLoginPrompt, el título de guiTitle.

La acción Staff Auth Menu abre en su lugar un teclado de inventario (solo dígitos). Actívala desde una cadena de acciones si prefieres ese aspecto. En su layoutPool, dale a los items un tipo de botón para convertirlos en teclas:

Tipo de botónFunción
DIGIT_0 a DIGIT_9Añade un dígito a la contraseña.
PASSWORD_DISPLAYMuestra un punto por cada dígito introducido.
LOGIN / REGISTEREnvía la contraseña; la etiqueta es Register cuando el jugador aún no tiene contraseña.
BACKSPACEElimina el último dígito.
CANCELBorra la entrada y cierra el menú.

El teclado solo puede escribir dígitos, y la contraseña debe seguir respetando minPasswordLength. useGuiWhenAvailable controla si se abre un diálogo automáticamente al conectarse.

Configuración​

Todo se establece en las entradas. En los campos de mensaje, usa {attempts}, {max} y {length} como placeholders (llaves, no etiquetas MiniMessage): {attempts} y {max} en wrongPasswordMessage, {attempts} en maxAttemptsKickMessage, {length} (el mínimo) y {max} en passwordTooShortMessage.

Las contraseñas viven en el archivo del artefacto elegido por artifactId, como un mapa JSON de UUID de jugador a hash BCrypt. El artefacto se mantiene en caché durante 5 segundos.

Comandos​

El nombre del comando proviene del campo commandName de la configuración (por defecto staffauth). El comando base no tiene ningún permiso registrado: cualquiera puede ejecutarlo, pero solo tiene efecto para el staff. Los subcomandos de administración necesitan el permiso establecido en adminPermission.

ComandoDescripción
/staffauthAbre el diálogo de inicio de sesión o registro.
/staffauth open, login, registerIgual que el anterior.
/staffauth logoutTermina tu autenticación y vuelve a mostrar el diálogo.
/staffauth statusMuestra tu estado, si tienes el permiso de staff y si la GUI está disponible.
/staffauth reset <player>Elimina la contraseña almacenada de un jugador (nombre o UUID), que debe registrarse de nuevo. Requiere adminPermission.
/staffauth force-logout <player>Cierra la sesión de un jugador conectado y le muestra el diálogo. Requiere adminPermission.

Permisos​

Los permisos son campos configurables, no nodos fijos.

PermisoConcede
security.admin (staffPermission)Marca a un jugador como staff: debe autenticarse.
security.staffauth.admin (adminPermission)/staffauth reset y /staffauth force-logout.

Entradas​

3 entradas, generadas a partir del código fuente de la extensión.

Acciones1
Comandos1
Artefactos1

Solución de problemas​

El staff entra sin que se le pida una contraseña. Comprueba que tanto la configuración como el artefacto están publicados. Sin artefacto, StaffAuth deja pasar al staff y registra StaffAuth has no artifact entry. Comprueba también que el jugador realmente tiene staffPermission (/staffauth status lo imprime).

El jugador es expulsado con un mensaje sobre permisos. La extensión Permissions no señaló que los permisos del jugador se hubieran cargado en 10 segundos. Reconéctate; si persiste, revisa el backend de Permissions en los registros.

The StaffAuth interface is unavailable. La extensión GUI no está cargada. Instálala y reinicia.

Las contraseñas desaparecieron. Se cambió el artifactId del artefacto o se recreó la entrada. Restaura el id anterior. Un valor almacenado que no es un UUID válido ni una cadena BCrypt hace fallar la carga y se registra como StaffAuth artifact could not be loaded; el jugador permanece congelado y se le informa de que su estado es ilegible.

Registro rechazado. La contraseña debe tener entre minPasswordLength (6) y maxPasswordLength (128) caracteres y no contener espacios ni caracteres de control. Las dos entradas deben coincidir.

Un jugador es expulsado tras inicios de sesión fallidos. Tras maxAttempts (5 por defecto) fallos, el jugador es expulsado con maxAttemptsKickMessage. Establece maxAttempts en 0 para desactivar las expulsiones; el enfriamiento sigue aplicándose. /staffauth reset <player> borra una contraseña olvidada.

Extensiones relacionadas​

  • GUI — abre el diálogo de inicio de sesión y el menú de teclado.