Require authentication to participate in chat (#4762)

* feat(chat): require authentication to participate in chat

* fix: it's pretty much impossible to bypass the auth requirement, addressing review feedback anyway

* feat(chat): render chat text input as disabled if chat auth is required

* Commit updated API documentation

---------

Co-authored-by: Owncast <owncast@owncast.online>
This commit is contained in:
Gabe Kangas
2026-01-28 11:49:07 -08:00
committed by GitHub
co-authored by Owncast
parent 83c8b2b3d5
commit 93b482871f
29 changed files with 5194 additions and 5143 deletions
+13
View File
@@ -19,6 +19,7 @@ import {
FIELD_PROPS_ENABLE_CHAT_SLUR_FILTER,
CHAT_ESTABLISHED_USER_MODE,
FIELD_PROPS_DISABLE_CHAT,
FIELD_PROPS_CHAT_REQUIRE_AUTHENTICATION,
postConfigUpdateToAPI,
RESET_TIMEOUT,
TEXTFIELD_PROPS_CHAT_FORBIDDEN_USERNAMES,
@@ -47,6 +48,7 @@ export default function ConfigChat() {
chatEstablishedUserMode,
chatSpamProtectionEnabled,
chatSlurFilterEnabled,
chatRequireAuthentication,
} = serverConfig;
const { welcomeMessage } = instanceDetails;
@@ -77,6 +79,10 @@ export default function ConfigChat() {
handleFieldChange({ fieldName: 'chatSlurFilterEnabled', value: enabled });
}
function handleChatRequireAuthenticationChange(enabled: boolean) {
handleFieldChange({ fieldName: 'chatRequireAuthentication', value: enabled });
}
function resetForbiddenUsernameState() {
setForbiddenUsernameSaveState(null);
}
@@ -169,6 +175,7 @@ export default function ConfigChat() {
chatEstablishedUserMode,
chatSpamProtectionEnabled,
chatSlurFilterEnabled,
chatRequireAuthentication,
});
}, [serverConfig]);
@@ -250,6 +257,12 @@ export default function ConfigChat() {
checked={formDataValues.chatSlurFilterEnabled}
onChange={handleChatSlurFilterChange}
/>
<ToggleSwitch
fieldName="chatRequireAuthentication"
{...FIELD_PROPS_CHAT_REQUIRE_AUTHENTICATION}
checked={formDataValues.chatRequireAuthentication}
onChange={handleChatRequireAuthenticationChange}
/>
</div>
</Col>
</Row>