Repository navigation
Say why a sign in was refused when the account can't be used right now - #312
Conversation
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.
An organization owner can choose the repository organization as the billing source for reviews requested by members with a paid Copilot license. Learn about Copilot code review billing.
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info
📝 Summary
Merge Risk: ⚪ Minimal · up to
|
Build SuccessfulThe channel compiled and packaged. The sideload zip is on the run below.
|

Pull Request
Summary
When Jellyfin refuses a sign in because the account can't be used right now, for instance because the user's access schedule doesn't allow the current time, the sign in screen says "Username or password is incorrect, or access is denied." That sends people to retype a password that was right. This says the account can't sign in right now and why that might be. It is the Roku half of Moonfin-Core#1918 and Smart-TV#544.
Related Issues
Type of Change
Changes Made
signInRefusedMessage()insource/api/userauth.bs: a 403 from a Jellyfin password sign in now shows "This account can't sign in right now. It may be outside its allowed hours, locked or disabled. Try again later or ask an administrator." A 401 (wrong password), a 5xx and the timeout and 404 cases keep their messages, and Emby keeps its own message. Jellyfin only puts the reason in the response body when it runs in development, and answers "Error processing request." otherwise, so the status is all the client has. I checked this against the server source and a live server log. The message therefore names the possibilities instead of claiming one.AuthenticateViaQuickConnectnow keeps the HTTP status (it sends the request the way the password sign in does) and reports{ok, refused}. A refusal stops the polling and shows the same message.locale/en_US/translations.ts.test/sign-in-refused.bs, run fromnpm test: the message for 403, 401 and 500, and the refused and server-error cases of the Quick Connect exchange.Testing
Tested on a TCL 43S405 Roku TV (Roku OS 15.3), sideloaded from
npm run build, against a Jellyfin server, signing in as a non-admin user whose access schedule excludes the current time: the sign in screen shows the new message inside the error box. A wrong password for a user without a schedule still shows the old message, and a user whose schedule includes the current time signs in normally.Not tested: Quick Connect for such a user (approving a code means signing in to the web client as them, which the server refuses outside their hours), so that path is covered by the unit test only. Other Roku models.
Jellyfin checks the account's status before it applies the password result, so for such an account a wrong password gets the same 403 and shows this message too. That is the server's order of checks.
npm run lintis clean andnpm testpasses (it needs Node 22 or newer forfs.glob).Test Steps
Screenshots (if applicable)
A photo of the TV will follow in a comment.
Checklist
AI assistance
An AI assistant (Claude) helped write and test this change, as the contributing guide asks me to say. I tested it on the Roku above and can walk through any of it.
🤖 Generated with Claude Code