mirror of https://github.com/nextcloud/server
feat(request): Allow to match the client version with the IRequest::USER_AGENT_* regex
Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
parent
de3b6a2219
commit
2c6f32cb28
|
@ -64,43 +64,51 @@ namespace OCP;
|
|||
interface IRequest {
|
||||
/**
|
||||
* @since 9.1.0
|
||||
* @since 28.0.0 The regex has a group matching the version number
|
||||
*/
|
||||
public const USER_AGENT_CLIENT_ANDROID = '/^Mozilla\/5\.0 \(Android\) (ownCloud|Nextcloud)\-android.*$/';
|
||||
public const USER_AGENT_CLIENT_ANDROID = '/^Mozilla\/5\.0 \(Android\) (?:ownCloud|Nextcloud)\-android\/([^ ]*).*$/';
|
||||
|
||||
/**
|
||||
* @since 13.0.0
|
||||
* @since 28.0.0 The regex has a group matching the version number
|
||||
*/
|
||||
public const USER_AGENT_TALK_ANDROID = '/^Mozilla\/5\.0 \(Android\) Nextcloud\-Talk v.*$/';
|
||||
public const USER_AGENT_TALK_ANDROID = '/^Mozilla\/5\.0 \(Android\) Nextcloud\-Talk v([^ ]*).*$/';
|
||||
|
||||
/**
|
||||
* @since 9.1.0
|
||||
* @since 28.0.0 The regex has a group matching the version number
|
||||
*/
|
||||
public const USER_AGENT_CLIENT_DESKTOP = '/^Mozilla\/5\.0 \([A-Za-z ]+\) (mirall|csyncoC)\/.*$/';
|
||||
public const USER_AGENT_CLIENT_DESKTOP = '/^Mozilla\/5\.0 \([A-Za-z ]+\) (?:mirall|csyncoC)\/([^ ]*).*$/';
|
||||
|
||||
/**
|
||||
* @since 26.0.0
|
||||
* @since 28.0.0 The regex has a group matching the version number
|
||||
*/
|
||||
public const USER_AGENT_TALK_DESKTOP = '/^Mozilla\/5\.0 \((?!Android|iOS)[A-Za-z ]+\) Nextcloud\-Talk v.*$/';
|
||||
public const USER_AGENT_TALK_DESKTOP = '/^Mozilla\/5\.0 \((?!Android|iOS)[A-Za-z ]+\) Nextcloud\-Talk v([^ ]*).*$/';
|
||||
|
||||
/**
|
||||
* @since 9.1.0
|
||||
* @since 28.0.0 The regex has a group matching the version number
|
||||
*/
|
||||
public const USER_AGENT_CLIENT_IOS = '/^Mozilla\/5\.0 \(iOS\) (ownCloud|Nextcloud)\-iOS.*$/';
|
||||
public const USER_AGENT_CLIENT_IOS = '/^Mozilla\/5\.0 \(iOS\) (?:ownCloud|Nextcloud)\-iOS\/([^ ]*).*$/';
|
||||
|
||||
/**
|
||||
* @since 13.0.0
|
||||
* @since 28.0.0 The regex has a group matching the version number
|
||||
*/
|
||||
public const USER_AGENT_TALK_IOS = '/^Mozilla\/5\.0 \(iOS\) Nextcloud\-Talk v.*$/';
|
||||
public const USER_AGENT_TALK_IOS = '/^Mozilla\/5\.0 \(iOS\) Nextcloud\-Talk v([^ ]*).*$/';
|
||||
|
||||
/**
|
||||
* @since 13.0.1
|
||||
* @since 28.0.0 The regex has a group matching the version number
|
||||
*/
|
||||
public const USER_AGENT_OUTLOOK_ADDON = '/^Mozilla\/5\.0 \([A-Za-z ]+\) Nextcloud\-Outlook v.*$/';
|
||||
public const USER_AGENT_OUTLOOK_ADDON = '/^Mozilla\/5\.0 \([A-Za-z ]+\) Nextcloud\-Outlook v([^ ]*).*$/';
|
||||
|
||||
/**
|
||||
* @since 13.0.1
|
||||
* @since 28.0.0 The regex has a group matching the version number
|
||||
*/
|
||||
public const USER_AGENT_THUNDERBIRD_ADDON = '/^Mozilla\/5\.0 \([A-Za-z ]+\) Nextcloud\-Thunderbird v.*$/';
|
||||
public const USER_AGENT_THUNDERBIRD_ADDON = '/^Mozilla\/5\.0 \([A-Za-z ]+\) Nextcloud\-Thunderbird v([^ ]*).*$/';
|
||||
|
||||
/**
|
||||
* @since 26.0.0
|
||||
|
|
|
@ -1265,6 +1265,63 @@ class RequestTest extends \Test\TestCase {
|
|||
];
|
||||
}
|
||||
|
||||
public function dataMatchClientVersion(): array {
|
||||
return [
|
||||
[
|
||||
'Mozilla/5.0 (Android) Nextcloud-android/3.24.1',
|
||||
Request::USER_AGENT_CLIENT_ANDROID,
|
||||
'3.24.1',
|
||||
],
|
||||
[
|
||||
'Mozilla/5.0 (iOS) Nextcloud-iOS/4.8.2',
|
||||
Request::USER_AGENT_CLIENT_IOS,
|
||||
'4.8.2',
|
||||
],
|
||||
[
|
||||
'Mozilla/5.0 (Windows) mirall/3.8.1',
|
||||
Request::USER_AGENT_CLIENT_DESKTOP,
|
||||
'3.8.1',
|
||||
],
|
||||
[
|
||||
'Mozilla/5.0 (Android) Nextcloud-Talk v17.10.0',
|
||||
Request::USER_AGENT_TALK_ANDROID,
|
||||
'17.10.0',
|
||||
],
|
||||
[
|
||||
'Mozilla/5.0 (iOS) Nextcloud-Talk v17.0.1',
|
||||
Request::USER_AGENT_TALK_IOS,
|
||||
'17.0.1',
|
||||
],
|
||||
[
|
||||
'Mozilla/5.0 (Windows) Nextcloud-Talk v0.6.0',
|
||||
Request::USER_AGENT_TALK_DESKTOP,
|
||||
'0.6.0',
|
||||
],
|
||||
[
|
||||
'Mozilla/5.0 (Windows) Nextcloud-Outlook v1.0.0',
|
||||
Request::USER_AGENT_OUTLOOK_ADDON,
|
||||
'1.0.0',
|
||||
],
|
||||
[
|
||||
'Mozilla/5.0 (Linux) Nextcloud-Thunderbird v1.0.0',
|
||||
Request::USER_AGENT_THUNDERBIRD_ADDON,
|
||||
'1.0.0',
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataMatchClientVersion
|
||||
* @param string $testAgent
|
||||
* @param string $userAgent
|
||||
* @param string $version
|
||||
*/
|
||||
public function testMatchClientVersion(string $testAgent, string $userAgent, string $version): void {
|
||||
preg_match($userAgent, $testAgent, $matches);
|
||||
|
||||
$this->assertSame($version, $matches[1]);
|
||||
}
|
||||
|
||||
public function testInsecureServerHostServerNameHeader() {
|
||||
$request = new Request(
|
||||
[
|
||||
|
|
Loading…
Reference in New Issue