mirror of
https://github.com/nextcloud/server.git
synced 2026-02-20 00:12:30 -05:00
Limit the length of app password names
Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
parent
b7245ae3fa
commit
7efa2fa3a0
5 changed files with 49 additions and 2 deletions
|
|
@ -145,6 +145,10 @@ class AuthSettingsController extends Controller {
|
|||
return $this->getServiceNotAvailableResponse();
|
||||
}
|
||||
|
||||
if (mb_strlen($name) > 128) {
|
||||
$name = mb_substr($name, 0, 120) . '…';
|
||||
}
|
||||
|
||||
$token = $this->generateRandomDeviceToken();
|
||||
$deviceToken = $this->tokenProvider->generateToken($token, $this->uid, $loginName, $password, $name, IToken::PERMANENT_TOKEN);
|
||||
$tokenData = $deviceToken->jsonSerialize();
|
||||
|
|
@ -241,6 +245,10 @@ class AuthSettingsController extends Controller {
|
|||
$this->publishActivity($scope['filesystem'] ? Provider::APP_TOKEN_FILESYSTEM_GRANTED : Provider::APP_TOKEN_FILESYSTEM_REVOKED, $token->getId(), ['name' => $currentName]);
|
||||
}
|
||||
|
||||
if (mb_strlen($name) > 128) {
|
||||
$name = mb_substr($name, 0, 120) . '…';
|
||||
}
|
||||
|
||||
if ($token instanceof INamedToken && $name !== $currentName) {
|
||||
$token->setName($name);
|
||||
$this->publishActivity(Provider::APP_TOKEN_RENAMED, $token->getId(), ['name' => $currentName, 'newName' => $name]);
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ interface IProvider {
|
|||
* @param string $uid
|
||||
* @param string $loginName
|
||||
* @param string|null $password
|
||||
* @param string $name
|
||||
* @param string $name Name will be trimmed to 120 chars when longer
|
||||
* @param int $type token type
|
||||
* @param int $remember whether the session token should be used for remember-me
|
||||
* @return IToken
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ class Manager implements IProvider {
|
|||
* @param string $uid
|
||||
* @param string $loginName
|
||||
* @param string|null $password
|
||||
* @param string $name
|
||||
* @param string $name Name will be trimmed to 120 chars when longer
|
||||
* @param int $type token type
|
||||
* @param int $remember whether the session token should be used for remember-me
|
||||
* @return IToken
|
||||
|
|
@ -65,6 +65,10 @@ class Manager implements IProvider {
|
|||
string $name,
|
||||
int $type = IToken::TEMPORARY_TOKEN,
|
||||
int $remember = IToken::DO_NOT_REMEMBER): IToken {
|
||||
if (mb_strlen($name) > 128) {
|
||||
$name = mb_substr($name, 0, 120) . '…';
|
||||
}
|
||||
|
||||
try {
|
||||
return $this->publicKeyTokenProvider->generateToken(
|
||||
$token,
|
||||
|
|
|
|||
|
|
@ -84,6 +84,10 @@ class PublicKeyTokenProvider implements IProvider {
|
|||
string $name,
|
||||
int $type = IToken::TEMPORARY_TOKEN,
|
||||
int $remember = IToken::DO_NOT_REMEMBER): IToken {
|
||||
if (mb_strlen($name) > 128) {
|
||||
throw new InvalidTokenException('The given name is too long');
|
||||
}
|
||||
|
||||
$dbToken = $this->newToken($token, $uid, $loginName, $password, $name, $type, $remember);
|
||||
$this->mapper->insert($dbToken);
|
||||
|
||||
|
|
|
|||
|
|
@ -127,6 +127,37 @@ class ManagerTest extends TestCase {
|
|||
$this->assertSame($token, $actual);
|
||||
}
|
||||
|
||||
public function testGenerateTokenTooLongName() {
|
||||
$token = $this->createMock(IToken::class);
|
||||
$token->method('getName')
|
||||
->willReturn(str_repeat('a', 120) . '…');
|
||||
|
||||
|
||||
$this->publicKeyTokenProvider->expects($this->once())
|
||||
->method('generateToken')
|
||||
->with(
|
||||
'token',
|
||||
'uid',
|
||||
'loginName',
|
||||
'password',
|
||||
str_repeat('a', 120) . '…',
|
||||
IToken::TEMPORARY_TOKEN,
|
||||
IToken::REMEMBER
|
||||
)->willReturn($token);
|
||||
|
||||
$actual = $this->manager->generateToken(
|
||||
'token',
|
||||
'uid',
|
||||
'loginName',
|
||||
'password',
|
||||
str_repeat('a', 200),
|
||||
IToken::TEMPORARY_TOKEN,
|
||||
IToken::REMEMBER
|
||||
);
|
||||
|
||||
$this->assertSame(121, mb_strlen($actual->getName()));
|
||||
}
|
||||
|
||||
public function tokenData(): array {
|
||||
return [
|
||||
[new DefaultToken()],
|
||||
|
|
|
|||
Loading…
Reference in a new issue