| 1 | // Een slug is een LOKALE sleutel en mag niet uit een vreemde URI komen.
|
|---|
| 2 | //
|
|---|
| 3 | // Robins vraag (11-8): waar communiceren we nog op <slug>, want op een
|
|---|
| 4 | // AP-oppervlak mag dat niet. In de inbox werd hij geraden met
|
|---|
| 5 | // slugFromActorUrl -- die knipt de staart van een pad af zonder naar de host te
|
|---|
| 6 | // kijken. De uri's komen daar uit `to`, uit de relatie en uit act.object, dus
|
|---|
| 7 | // van de AFZENDER. Een activiteit gericht aan andermans actor met dezelfde
|
|---|
| 8 | // padstaart als een van onze sites kwam zo bij ONZE site terecht.
|
|---|
| 9 | import { test } from 'node:test';
|
|---|
| 10 | import assert from 'node:assert/strict';
|
|---|
| 11 |
|
|---|
| 12 | process.env.DATABASE_PATH = ':memory:';
|
|---|
| 13 | process.env.PUBLIC_BASE_URL = 'https://ons.test';
|
|---|
| 14 |
|
|---|
| 15 | const dbMod = await import('../src/config/database.js');
|
|---|
| 16 | const db = dbMod.default;
|
|---|
| 17 | dbMod.initializeDatabase();
|
|---|
| 18 | const AP = await import('../src/services/ActivityPubService.js');
|
|---|
| 19 |
|
|---|
| 20 | db.prepare('INSERT INTO users (id, username, email, password_hash, role) VALUES (?,?,?,?,?)')
|
|---|
| 21 | .run('u1', 'u1', 'u1@t', 'x', 'god');
|
|---|
| 22 | db.prepare('INSERT INTO sites (id, slug, title, owner_id) VALUES (?,?,?,?)').run('s1', 'dev', 'Dev', 'u1');
|
|---|
| 23 |
|
|---|
| 24 | test('een vreemde actor met onze padstaart levert GEEN lokale slug', () => {
|
|---|
| 25 | // Dit is de aanval in een regel: elders heet ook iemand /ap/users/dev.
|
|---|
| 26 | assert.equal(AP.localSlugOf('https://elders.example/ap/users/dev'), null);
|
|---|
| 27 | });
|
|---|
| 28 |
|
|---|
| 29 | test('onze eigen actor levert hem wel', () => {
|
|---|
| 30 | assert.equal(AP.localSlugOf('https://ons.test/ap/users/dev'), 'dev');
|
|---|
| 31 | });
|
|---|
| 32 |
|
|---|
| 33 | test('en een site die niet bestaat ook niet, ook al is de host de onze', () => {
|
|---|
| 34 | // De staart is niet genoeg: hij moet ook echt een site zijn.
|
|---|
| 35 | assert.equal(AP.localSlugOf('https://ons.test/ap/users/bestaatniet'), null);
|
|---|
| 36 | });
|
|---|
| 37 |
|
|---|
| 38 | test('een pad dat er alleen op lijkt telt niet', () => {
|
|---|
| 39 | assert.equal(AP.localSlugOf('https://ons.test/elders/ap/users/dev'), null);
|
|---|
| 40 | assert.equal(AP.localSlugOf('https://kwaad.test/ons.test/ap/users/dev'), null);
|
|---|
| 41 | });
|
|---|