mirror of
https://github.com/nextcloud/server.git
synced 2026-04-20 22:00:39 -04:00
feat: Limit email input on auth pages to 255 chars
Excessively long emails reported make server unresponsive. We could at some point, consider adding a configuration for sysadmins to bypass this setting on their instance if they want. Signed-off-by: fenn-cs <fenn25.fn@gmail.com>
This commit is contained in:
parent
03f269829f
commit
2792d8b3f5
5 changed files with 65 additions and 2 deletions
|
|
@ -336,9 +336,20 @@ class LoginController extends Controller {
|
|||
);
|
||||
}
|
||||
|
||||
$user = trim($user);
|
||||
|
||||
if (strlen($user) > 255) {
|
||||
return $this->createLoginFailedResponse(
|
||||
$user,
|
||||
$user,
|
||||
$redirect_url,
|
||||
$this->l10n->t('Unsupported email length (>255)')
|
||||
);
|
||||
}
|
||||
|
||||
$data = new LoginData(
|
||||
$this->request,
|
||||
trim($user),
|
||||
$user,
|
||||
$password,
|
||||
$redirect_url,
|
||||
$timezone,
|
||||
|
|
|
|||
|
|
@ -182,6 +182,10 @@ class LostController extends Controller {
|
|||
|
||||
$user = trim($user);
|
||||
|
||||
if (strlen($user) > 255) {
|
||||
return new JSONResponse($this->error($this->l10n->t('Unsupported email length (>255)')));
|
||||
}
|
||||
|
||||
\OCP\Util::emitHook(
|
||||
'\OCA\Files_Sharing\API\Server2Server',
|
||||
'preLoginNameUsedAsUserName',
|
||||
|
|
|
|||
|
|
@ -62,12 +62,15 @@
|
|||
ref="user"
|
||||
:label="loginText"
|
||||
name="user"
|
||||
:maxlength="255"
|
||||
:value.sync="user"
|
||||
:class="{shake: invalidPassword}"
|
||||
autocapitalize="none"
|
||||
:spellchecking="false"
|
||||
:autocomplete="autoCompleteAllowed ? 'username' : 'off'"
|
||||
required
|
||||
:error="userNameInputLengthIs255"
|
||||
:helper-text="userInputHelperText"
|
||||
data-login-form-input-user
|
||||
@change="updateUsername" />
|
||||
|
||||
|
|
@ -117,6 +120,8 @@ import NcNoteCard from '@nextcloud/vue/dist/Components/NcNoteCard.js'
|
|||
|
||||
import LoginButton from './LoginButton.vue'
|
||||
|
||||
import AuthMixin from '../../mixins/auth.js'
|
||||
|
||||
export default {
|
||||
name: 'LoginForm',
|
||||
|
||||
|
|
@ -126,6 +131,7 @@ export default {
|
|||
NcTextField,
|
||||
NcNoteCard,
|
||||
},
|
||||
mixins: [AuthMixin],
|
||||
|
||||
props: {
|
||||
username: {
|
||||
|
|
@ -160,7 +166,7 @@ export default {
|
|||
type: Array,
|
||||
default() {
|
||||
return []
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
|
|
|
|||
|
|
@ -25,8 +25,11 @@
|
|||
<NcTextField id="user"
|
||||
:value.sync="user"
|
||||
name="user"
|
||||
:maxlength="255"
|
||||
autocapitalize="off"
|
||||
:label="t('core', 'Login or email')"
|
||||
:error="userNameInputLengthIs255"
|
||||
:helper-text="userInputHelperText"
|
||||
required
|
||||
@change="updateUsername" />
|
||||
<LoginButton :value="t('core', 'Reset password')" />
|
||||
|
|
@ -60,6 +63,8 @@ import LoginButton from './LoginButton.vue'
|
|||
import NcTextField from '@nextcloud/vue/dist/Components/NcTextField.js'
|
||||
import NcNoteCard from '@nextcloud/vue/dist/Components/NcNoteCard.js'
|
||||
|
||||
import AuthMixin from '../../mixins/auth.js'
|
||||
|
||||
export default {
|
||||
name: 'ResetPassword',
|
||||
components: {
|
||||
|
|
@ -67,6 +72,7 @@ export default {
|
|||
NcNoteCard,
|
||||
NcTextField,
|
||||
},
|
||||
mixins: [AuthMixin],
|
||||
props: {
|
||||
username: {
|
||||
type: String,
|
||||
|
|
|
|||
36
core/src/mixins/auth.js
Normal file
36
core/src/mixins/auth.js
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
/**
|
||||
* @copyright Copyright (c) 2024 Fon E. Noel NFEBE <opensource@nfebe.com>
|
||||
*
|
||||
* @author Fon E. Noel NFEBE <opensource@nfebe.com>
|
||||
*
|
||||
* @license AGPL-3.0-or-later
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
export default {
|
||||
|
||||
computed: {
|
||||
userNameInputLengthIs255() {
|
||||
return this.user.length >= 255
|
||||
},
|
||||
userInputHelperText() {
|
||||
if (this.userNameInputLengthIs255) {
|
||||
return t('core', 'Email length is at max (255)')
|
||||
}
|
||||
return undefined
|
||||
},
|
||||
},
|
||||
}
|
||||
Loading…
Reference in a new issue