Skip to content

Releases: UltiKits/UltiLogin

Release list

v2.0.0

Choose a tag to compare

@wisdommen wisdommen released this 22 Oct 06:29

Added

  • /setpassword <new> <confirm> (alias /setpw) sets the first game password of an account created on the web
    through /panel. It works only while the player is logged in and the account has no game password, and it follows
    the same password rules as /register; afterwards /login works with it. An account that already has a password
    is told to use /changepassword.

  • /setpassword <新密码> <确认>(别名 /setpw)为通过 /panel 在网页上创建的账号设置第一个游戏密码。仅在玩家已登录且账号没有
    游戏密码时可用,密码规则与 /register 相同;之后即可用 /login 登录。已有密码的账号会被提示使用 /changepassword。

  • A web registration counts as an UltiLogin registration. When a player whose name has no UltiLogin account on this
    server creates a new UltiKits account on the /panel page, the game creates their UltiLogin account without a game
    password, logs them in and tells them once to set one with /setpassword. /login refuses such an account, whatever
    is typed, until a game password is set, and the refused try is not counted as a wrong password. If the player
    registers in game first, that account is kept untouched. A max-register-per-ip limit, when set, applies to it too.
    With gui-mode.enabled: true such an account is never shown the number pad, which no digits could satisfy: on
    joining and at every re-prompt the player is told to log in with /panel and then set a game password.

  • 网页注册视同 UltiLogin 注册。名字在本服务器上没有 UltiLogin 账号的玩家在 /panel 页面上新建 UltiKits 账号后,游戏会为其创建
    一个没有游戏密码的 UltiLogin 账号、让其登录,并提示一次用 /setpassword 设置游戏密码。在设置游戏密码之前,无论输入什么
    /login 都会拒绝该账号,且不计为密码错误。若玩家先在游戏内注册,则保留该账号不变。设置了 max-register-per-ip 时同样适用。
    在 gui-mode.enabled: true 下,这样的账号不会弹出任何数字都无法通过的数字键盘:进入服务器及每次再次提示时,玩家都会被告知
    用 /panel 登录,然后设置游戏密码。

  • Every web outcome of a /panel link is shown in game: cancelled on the page, refused by the web (with the reason),
    expired, signed in, or the server's UltiCloud credential refused (also logged to the console). While a player who
    has not logged in holds a pending link, the login countdown is paused; it resumes with the time that was left when
    the link is cancelled, refused or expires, never with a fresh full timeout. The other restrictions stay. A player who
    leaves the server loses their pending links, so a sign-in completed on the web after they left logs nobody in.

  • /panel 链接在网页上的每种结果都会在游戏内显示:网页取消、网页拒绝(附原因)、链接过期、登录成功,或服务器的 UltiCloud 凭据被
    拒绝(同时写入控制台)。未登录的玩家持有待处理链接期间,登录倒计时暂停;链接被取消、拒绝或过期后,按暂停时剩余的时间继续,
    绝不重新计满。其他限制保持不变。玩家离开服务器后其待处理链接作废,
    此后在网页上完成的登录不会让任何人登录。

Changed

  • Lockout redesign (#50): BOTH now counts and locks each (address, account UUID) pair,
    independently of that account at other addresses, and separately locks an address after max-login-attempts
    different accounts fail there. Success clears only its own pair, never the address's failed-account memberships.
    IP-mode successes no longer clear the shared address count, closing the success-reset bypass. IP counts and
    each BOTH address membership expire lockout-duration seconds after their latest failure; unlocked UUID/pair
    counts still reset only on their own success or corresponding lock expiry. BOTH is the new fresh/missing-key
    default. Existing operator values (including IP and lowercase uuid) stay byte for byte; unusable values warn and
    fall back to BOTH only in memory. Recognised old shipped comments refresh without overwriting custom comments.

  • 登录封禁重构(#50): BOTH 改为按(地址、账号 UUID)组合计数并封禁,同一账号在其他地址不受该组合封禁影响;
    同一地址失败的不同账号数达到 max-login-attempts 时另封禁整个地址。成功只清除自身组合计数,不清除地址集合。
    IP 模式成功不再清除共用地址计数,修复成功登录清零绕过;IP 计数和 BOTH 的每个地址集合成员在最近一次失败的 lockout-duration 秒后过期。
    未封禁的 UUID/组合计数仍只在自身成功或对应封禁到期时重置。新文件或缺少键时默认 BOTH;现有值(含 IP、小写 uuid)逐字节保留,
    无效值只警告并在内存回退到 BOTH。已识别的旧出厂注释更新,自写注释不覆盖。

  • /panel requires the server to be signed in to UltiCloud. Create and poll both use the server owner's
    credential; there is no anonymous fallback or grace period for older plugins. If the server is not signed in,
    no link is created: the player is told to ask the owner to run ulticloud login in the console. A failed creation
    restores the remaining login countdown silently; it does not grant a new timeout. A refused credential (HTTP
    401/403) is reported in game and in the console, never retried without it. Opening a link never logs the player
    in by itself: the page asks for the linked account's password, a device that account told it to remember (one
    click), confirmation by a signed-in account (only for a player logged in in game), or a new account (only for a
    name without an UltiLogin account). A name with an UltiLogin account that is neither logged in in game nor linked
    is refused until the player runs /login once. Normal website account login, browser link verification,
    completion and cancellation, and game /login remain available.

  • /panel 要求服务器先登录 UltiCloud。 创建和轮询链接都使用服务器所有者的凭据;没有匿名回退,也不为旧插件保留宽限期。
    服务器未登录时不生成链接,玩家会被提示请服主在控制台执行 ulticloud login。创建失败会按剩余时间静默恢复登录倒计时,
    不会重新给予完整超时。凭据被拒绝(HTTP 401/403)时会在游戏内及控制台提示,绝不改用无凭据请求重试。仅打开链接不会让玩家登录:
    网页会要求输入关联账号的密码、使用该账号让其记住的设备(点击一次)、由已登录账号确认(仅限已在游戏内登录的玩家),或新建账号
    (仅限没有 UltiLogin 账号的名字)。已有 UltiLogin 账号、但既未在游戏内登录也未关联的名字会被拒绝,直到玩家先执行一次 /login。
    正常网站账号登录、浏览器链接验证/完成/取消,以及游戏 /login 均保留。

  • UltiLogin 2.0.0 requires UltiTools-API 6.3.0 or later and raises api-version in plugin.yml from 620
    (the last released version, 1.0.0) to 630. Older frameworks cannot load this module; upgrade UltiTools before
    installing it. A new module JAR needs a server restart; /ul reload only reloads configuration
    (UltiKits/UltiTools-Reborn#544).

  • UltiLogin 2.0.0 需要 UltiTools-API 6.3.0 或更高版本,plugin.yml 中的 api-version 从上一个发布版本 1.0.0 的 620
    提高到 630。更早的框架无法加载本模块;请先升级 UltiTools,再安装本模块。新的模块 JAR 需要重启服务器,/ul reload 只会
    重载配置(UltiKits/UltiTools-Reborn#544)。

  • plugin.yml now declares identify-string: ultilogin, the key of this module's entry in the UltiCloud catalogue.
    The framework's update check and /upm update skip a module that does not declare it, so this module now takes part
    in both: a later published version carrying the same key is reported at startup and can be installed with
    /upm update (UltiKits/UltiTools-Reborn#474).

  • plugin.yml 现在声明 identify-string: ultilogin,即本模块在 UltiCloud 模块目录中的条目键。框架的更新检查和 /upm update
    会跳过未声明该键的模块,因此本模块现在会参与两者:带有同一键的更高发布版本会在启动时提示,并可用 /upm update 安装
    (UltiKits/UltiTools-Reborn#474)。

  • max-register-per-ip in config/login.yml now ships as 0 (no per-IP registration limit) instead of 3. Many
    players can share one public IP address (carrier-grade NAT, common in mainland China and on mobile and campus
    networks), so a limit can stop legitimate players from registering; the comment above the key now says so. Only a
    file without the key gets the new default: a value already in your file, including 3, is kept, and only the comment
    earlier versions wrote above it is replaced. When you set a limit, it also applies to an account created on the web
    through /panel: the web page reports the registration, but the game refuses the account and the player sees the
    IP-limit message.

  • config/login.yml 中的 max-register-per-ip 出厂值由 3 改为 0(不限制同一 IP 的注册数)。许多玩家可能共用同一个公网
    IP(运营商级 NAT,在中国大陆以及移动网络、校园网中很常见),限制可能导致正常玩家无法注册;该键上方的注释现已写明这一点。
    只有缺少该键的文件才写入新默认值:文件中已有的值(包括 3)保持不变,只替换旧版本写在其上方的注释。设置限制后,它同样
    适用于通过 /panel 在网页上创建的账号:网页会显示注册成功,但游戏内拒绝创建账号,玩家会看到 IP 上限提示。

  • allowed-commands: [] (or ~) in config/login.yml no longer refuses every command to a player who has not
    logged in. The setting is declared @NotEmpty, and from UltiTools 6.3.0 the framework treats an empty value of such a
    list as unusable: the module runs on the shipped list (login, l, register, reg, panel, regs, recover) and logs one
    WARNING naming allowed-commands, the value as written and that default. The file is left exactly as you wrote it.
    Before, [] was loaded as an empty list, so /login and /register were refused too; ~ ran the default list but
    the file was rewritten. To allow fewer commands, list them; to allow more, add them (#52).

  • config/login.yml 中的 allowed-commands: [](或 ~)不再让未登录玩家的所有命令都被拒绝。该设置声明了 @NotEmpty,
    自 UltiTools 6.3.0 起框架把此类列表的空值视为不可用:模块改用出厂列表(login, l, register, reg, panel, regs, recover),并记录一条 WARNING,写明 allowed-commands、你写下的值与该默认值;文件保持你写的原样。此前 [] 按空列表
    加载,连 /login 与 /register 也会被拒绝;~ 会使用默认列表,但文件会被改写。想放行更少的命令,请逐条列出;
    想放行更多,请追加(#52)。

  • Message and title settings in config/login.yml — the three GUI titles (gui-mode.title-login,
    gui-mode.title-register, gui-mode.title-confirm) and the twenty-one messages (messages.register-prompt,
    register-prompt-gui, login-prompt, login-prompt-gui, register-success, login-success, already-logged,
    not-registered, already-registered, password-mismatch, password-too-short, password-too-long,
    timeout-kick, account-locked, attempts-remaining, gui-password-invalid, and messages.admin.password-reset,
    force-login, unregister, player-not-found, account-not-found) — are written in the server's language when
    the module starts, and the file is what the module shows (for example messages.login-success: '&aLogin successful! Welcome back!' under language: en); previously they were fixed Chinese text, so
    language: en had no effect on them. A setting that is still built-in text — in any language, or a default an
    earlier version shipped — follows language: it is rewritten when the module starts or after /ul reload. A
    setting you edited is kept. To keep a built-in text but stop it following language, change at least one
    character (#20). The text written is this module's built-in text: edit these settings in config/login.yml; an edit of the extracted
    language file does not change them (earlier versions never read them from the language file either).

  • config/login.yml 中的消息与标题设置——三个界面标题(`gui-mode.t...

Read more

v1.0.0

Choose a tag to compare

@wisdommen wisdommen released this 15 Feb 11:45

UltiLogin v1.0.0

Initial release.

Changes

  • Login/register system with password hashing, email recovery, lockout protection
  • Fix: eliminate TOCTOU race conditions in lockout checks
  • Test coverage: 88.5% (non-GUI)
  • Migrated to ultikits-module-parent POM