Skip to content

Commit 4b4eb9c

Browse files
committed
Use MediaWikiHOstResolver for mapping
1 parent 46cea56 commit 4b4eb9c

7 files changed

Lines changed: 109 additions & 88 deletions

File tree

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Backend;
4+
5+
use App\Http\Controllers\Controller;
6+
use App\Services\MediaWikiHostResolver;
7+
use App\Services\UnknownDBVersionException;
8+
use App\Services\UnknownWikiDomainException;
9+
use Illuminate\Http\Request;
10+
11+
12+
class MediaWikiHostController extends Controller {
13+
public function getWikiHostForDomain(Request $request): \Illuminate\Http\JsonResponse
14+
{
15+
$mediawikiHostResolver = new MediaWikiHostResolver();
16+
$domain = $request->query('domain');
17+
try {
18+
$backendHost= $mediawikiHostResolver->getBackendHostForDomain($domain);
19+
$webHost = $mediawikiHostResolver->getWebHostForDomain($domain);
20+
$apiHost = $mediawikiHostResolver->getApiHostForDomain($domain);
21+
} catch (UnknownWikiDomainException $e) {
22+
return response()->json(['error' => 'Domain not found.'], 404 );
23+
} catch (UnknownDBVersionException $e) {
24+
return response()->json(['error' => 'Unknown database version.'], 500 );
25+
}
26+
27+
28+
29+
return response()
30+
->json([
31+
'domain' => $domain,
32+
'backend-host' => $backendHost,
33+
'web-host' => $webHost ,
34+
'api-host' => $apiHost,
35+
])
36+
->header('x-backend-host', $backendHost)
37+
->header('x-web-host', $webHost)
38+
->header('x-api-host', $apiHost);
39+
}
40+
}

app/Http/Controllers/Backend/MediawikiHostMapController.php

Lines changed: 0 additions & 34 deletions
This file was deleted.

app/Services/MediaWikiHostResolver.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,16 @@ public function getBackendHostForDomain(string $domain): string {
3434
return sprintf('mediawiki-%s-app-backend.default.svc.cluster.local', $this->getMwVersionForDomain($domain));
3535
}
3636

37+
public function getWebHostForDomain(string $domain): string {
38+
// TODO: Move 'web.default.svc.cluster.local' to an env variable (e.g. PLATFORM_MW_WEB_HOST_SUFFIX) for flexibility.
39+
return sprintf('mediawiki-%s-app-web.default.svc.cluster.local', $this->getMwVersionForDomain($domain));
40+
}
41+
42+
public function getApiHostForDomain(string $domain): string {
43+
// TODO: Move 'api.default.svc.cluster.local' to an env variable (e.g. PLATFORM_MW_API_HOST_SUFFIX) for flexibility.
44+
return sprintf('mediawiki-%s-app-api.default.svc.cluster.local', $this->getMwVersionForDomain($domain));
45+
}
46+
3747
public function getMwVersionForDomain(string $domain): string {
3848
$wiki = Wiki::where('domain', $domain)->first();
3949

config/mediawiki-host.php

Lines changed: 0 additions & 7 deletions
This file was deleted.

routes/backend.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ function () {
1818
$router->group(['prefix' => 'ingress'], function () use ($router) {
1919
// GET
2020
$router->get('getWikiVersionForDomain', ['uses' => 'IngressController@getWikiVersionForDomain']);
21-
$router->get('getWikiVersionToHostMapForDomain', ['uses' => 'MediawikiHostMapController@getWikiVersionToHostMapForDomain']);
21+
$router->get('getWikiHostForDomain', ['uses' => 'MediaWikiHostController@getWikiHostForDomain']);
2222
});
2323

2424
$router->group(['prefix' => 'wiki'], function () use ($router) {
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
<?php
2+
3+
namespace Tests\Routes\Ingress;
4+
5+
use App\Wiki;
6+
use App\WikiDb;
7+
use Illuminate\Foundation\Testing\RefreshDatabase;
8+
use Tests\TestCase;
9+
10+
class MediaWikiHostControllerTest extends TestCase {
11+
12+
use RefreshDatabase;
13+
14+
private function createWiki(string $domain, string $version) {
15+
$wiki = Wiki::factory()->create(['domain' => $domain]);
16+
WikiDb::create([
17+
'name' => $domain,
18+
'user' => 'someUser',
19+
'password' => 'somePassword',
20+
'version' => $version,
21+
'prefix' => 'somePrefix',
22+
'wiki_id' => $wiki->id,
23+
]);
24+
}
25+
26+
public function testDomainNotfound() {
27+
$this->getJson('/backend/ingress/getWikiHostForDomain?domain=notfound.wikibase.cloud')
28+
->assertStatus(404);
29+
}
30+
31+
public function testDbVersionNotfound() {
32+
$this->createWiki('noversion.wikibase.cloud', 'unknownVersion');
33+
$this->getJson('/backend/ingress/getWikiHostForDomain?domain=noversion.wikibase.cloud')
34+
->assertStatus(500);
35+
}
36+
37+
public function testFoundHost() {
38+
$expectedHosts = [
39+
'backend' => 'mediawiki-143-app-backend.default.svc.cluster.local',
40+
'web' => 'mediawiki-143-app-web.default.svc.cluster.local',
41+
'api' => 'mediawiki-143-app-api.default.svc.cluster.local',
42+
];
43+
$this->createWiki('found.wikibase.cloud', 'mw1.43-wbs1');
44+
$this->createWiki('other.wikibase.cloud', 'otherVersion');
45+
$this->getJson( '/backend/ingress/getWikiHostForDomain?domain=found.wikibase.cloud')
46+
->assertStatus(200)
47+
->assertHeader('x-backend-host', $expectedHosts['backend'])
48+
->assertHeader('x-web-host', $expectedHosts['web'])
49+
->assertHeader('x-api-host', $expectedHosts['api'])
50+
->assertJson([
51+
'backend-host' => $expectedHosts['backend'],
52+
'web-host' => $expectedHosts['web'],
53+
'api-host' => $expectedHosts['api'],
54+
'domain' => 'found.wikibase.cloud'
55+
]);
56+
}
57+
58+
}

tests/Routes/Ingress/getWikiVersionToHostMapForDomainTest.php

Lines changed: 0 additions & 46 deletions
This file was deleted.

0 commit comments

Comments
 (0)