Skip to content

Commit d9ad978

Browse files
Merge pull request #4 from monstar-lab-oss/develop
Develop
2 parents 0cb5899 + 0e9d220 commit d9ad978

File tree

4 files changed

+93
-1
lines changed

4 files changed

+93
-1
lines changed

README.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,21 @@ Used to parse the N-Meta headers using following format:
1313

1414
`Meta: [PLATFORM];[ENVIRONMENT];[APP_VERSION];[DEVICE_OS];[DEVICE]`
1515

16+
#### PLATFORM:
17+
Description of the requesting platform, expects values `android`, `ios` or `web`
18+
19+
#### ENVIRONMENT:
20+
Description of the environment the request is targeted at, normally `staging` or `production`
21+
22+
#### APP_VERSION:
23+
Semantic version sting of the requesting client `x.y.z`
24+
25+
#### DEVICE_OS:
26+
Version of the operating system the request was made from. Not if platform is web, eg. `10.2`
27+
28+
#### DEVICE:
29+
Description of the device making the request, eg. `iphone-x`
30+
1631
## 📦 Installation
1732

1833
To install this package you will need:

composer.json

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,17 @@
66
"php"
77
],
88
"license": "MIT",
9-
"homepage": "http://monstar-lab.com",
9+
"homepage": "https://monstar-lab.com",
1010
"authors": [
1111
{
1212
"name": "Casper Rasmussen",
1313
"email": "cr@nodes.dk",
1414
"role": "CTO & Partner"
15+
},
16+
{
17+
"name": "Rasmus Ebbesen",
18+
"email": "rasmus.ebbesen@monstar-lab.com",
19+
"role": ""
1520
}
1621
],
1722
"require": {

src/NMeta.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,8 +148,31 @@ public function __construct(?string $header = null, Config $config = null)
148148

149149
$this->version = $headerArr[2];
150150
$versionArr = explode('.', $this->version);
151+
152+
if (count($versionArr) != 3) {
153+
$message = 'Meta header: Invalid app version, invalid amount of segments. Expected semver [x.y.z]';
154+
throw new BadRequestException($message);
155+
}
156+
157+
if (!is_numeric($versionArr[0])) {
158+
$message = 'Meta header: Invalid Major version, expected integer';
159+
throw new BadRequestException($message);
160+
}
161+
151162
$this->majorVersion = $versionArr[0] ?? 0;
163+
164+
if (!is_numeric($versionArr[1])) {
165+
$message = 'Meta header: Invalid Minor version, expected integer';
166+
throw new BadRequestException($message);
167+
}
168+
152169
$this->minorVersion = $versionArr[1] ?? 0;
170+
171+
if (!is_numeric($versionArr[2])) {
172+
$message = 'Meta header: Invalid Patch version, expected integer';
173+
throw new BadRequestException($message);
174+
}
175+
153176
$this->patchVersion = $versionArr[2] ?? 0;
154177

155178
// Parse device os version

tests/NMetaTest.php

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,4 +78,53 @@ public function testFailureMissingDevice()
7878
$this->expectException(BadRequestException::class);
7979
$meta = new NMeta('ios;production;1.0.0;10.2');
8080
}
81+
82+
public function testFailureInvalidAppMajorVersion()
83+
{
84+
$this->expectException(BadRequestException::class);
85+
86+
try {
87+
$meta = new NMeta('android;staging;1-staging.0.0;Android 12;SM-G975F');
88+
} catch (BadRequestException $e) {
89+
$this->assertEquals('Meta header: Invalid Major version, expected integer', $e->getMessage());
90+
throw $e;
91+
}
92+
}
93+
94+
public function testFailureInvalidAppMinorVersion()
95+
{
96+
$this->expectException(BadRequestException::class);
97+
98+
try {
99+
$meta = new NMeta('android;staging;1.0-staging.0;Android 12;SM-G975F');
100+
} catch (BadRequestException $e) {
101+
$this->assertEquals('Meta header: Invalid Minor version, expected integer', $e->getMessage());
102+
throw $e;
103+
}
104+
}
105+
106+
public function testFailureInvalidAppPatchVersion()
107+
{
108+
$this->expectException(BadRequestException::class);
109+
110+
try {
111+
$meta = new NMeta('android;staging;1.0.0-staging;Android 12;SM-G975F');
112+
} catch (BadRequestException $e) {
113+
$this->assertEquals('Meta header: Invalid Patch version, expected integer', $e->getMessage());
114+
throw $e;
115+
}
116+
}
117+
118+
public function testFailureInvalidAmountOfVersionSegments()
119+
{
120+
$this->expectException(BadRequestException::class);
121+
122+
try {
123+
$meta = new NMeta('android;staging;1.0;Android 12;SM-G975F');
124+
} catch (BadRequestException $e) {
125+
$expected = 'Meta header: Invalid app version, invalid amount of segments. Expected semver [x.y.z]';
126+
$this->assertEquals($expected, $e->getMessage());
127+
throw $e;
128+
}
129+
}
81130
}

0 commit comments

Comments
 (0)