From 128f649722c05c87d990fa1fa96a0d135a7436d0 Mon Sep 17 00:00:00 2001 From: Jonny Barnes Date: Mon, 4 Jul 2016 13:53:33 +0100 Subject: [PATCH] Use JSON with micripub endpoint responses --- app/Http/Controllers/MicropubController.php | 89 +++++++++++++++------ tests/MicropubClientTest.php | 5 +- tests/MicropubTest.php | 6 +- 3 files changed, 71 insertions(+), 29 deletions(-) diff --git a/app/Http/Controllers/MicropubController.php b/app/Http/Controllers/MicropubController.php index 3b180ee1..35df30fa 100644 --- a/app/Http/Controllers/MicropubController.php +++ b/app/Http/Controllers/MicropubController.php @@ -27,7 +27,7 @@ class MicropubController extends Controller protected $placeService; /** - * Injest the dependency. + * Inject the dependencies. */ public function __construct( TokenService $tokenService = null, @@ -59,31 +59,53 @@ class MicropubController extends Controller $type = $request->input('h'); if ($type == 'entry') { $note = $this->noteService->createNote($request, $clientId); - $content = 'Note created at ' . $note->longurl; + $content = <<longurl" +} +EOD; return (new Response($content, 201)) - ->header('Location', $note->longurl); + ->header('Location', $note->longurl) + ->header('Content-Type', 'application/json'); } if ($type == 'card') { $place = $this->placeService->createPlace($request); - $content = 'Place created at ' . $place->longurl; + $content = <<longurl" +} +EOD; return (new Response($content, 201)) - ->header('Location', $place->longurl); + ->header('Location', $place->longurl) + ->header('Content-Type', 'application/json'); } } } - $content = http_build_query([ - 'error' => 'invalid_token', - 'error_description' => 'The token provided is not valid or does not have the necessary scope', - ]); + $content = <<header('Content-Type', 'application/x-www-form-urlencoded'); + ->header('Content-Type', 'application/json'); } - $content = 'No OAuth token sent with request.'; + $content = <<header('Content-Type', 'application/json'); } /** @@ -104,7 +126,15 @@ class MicropubController extends Controller $valid = $this->tokenService->validateToken($token); if ($valid === null) { - return new Response('Invalid token', 400); + $content = <<header('Content-Type', 'application/json'); } //we have a valid token, is `syndicate-to` set? if ($request->input('q') === 'syndicate-to') { @@ -133,21 +163,32 @@ class MicropubController extends Controller $longitude = $latlng[1]; $places = Place::near($latitude, $longitude, 1000); - return (new Response(json_encode($places), 200)) - ->header('Content-Type', 'application/json'); + return response()->json([ + 'response' => 'places', + 'places' => $places + ]); } - //nope, just return the token - $content = http_build_query([ - 'me' => $valid->getClaim('me'), - 'scope' => $valid->getClaim('scope'), - 'client_id' => $valid->getClaim('client_id'), - ]); - return (new Response($content, 200)) - ->header('Content-Type', 'application/x-www-form-urlencoded'); + //nope, just return the token + return response()->json([ + 'response' => 'token', + 'token' => [ + 'me' => $valid->getClaim('me'), + 'scope' => $valid->getClaim('scope'), + 'client_id' => $valid->getClaim('client_id'), + ], + ]); } $content = 'No OAuth token sent with request.'; + $content = <<header('Content-Type', 'application/json'); } } diff --git a/tests/MicropubClientTest.php b/tests/MicropubClientTest.php index d0c47e4d..0fb4bdf3 100644 --- a/tests/MicropubClientTest.php +++ b/tests/MicropubClientTest.php @@ -32,12 +32,13 @@ class MicropubClientTest extends TestCase public function testClientPageRecentAuth() { + $syndication = ['https://twitter.com/jonnybarnes']; $this->withSession([ 'me' => $this->appurl, - 'syndication' => 'mp-syndicate-to=twitter.com%2Fjbl5', + 'syndication' => $syndication, ])->visit($this->appurl . '/notes/new') ->see($this->appurl) - ->see('twitter.com/jbl5'); + ->see('https://twitter.com/jonnybarnes'); } /** diff --git a/tests/MicropubTest.php b/tests/MicropubTest.php index cdc1e4a4..6d100d9a 100644 --- a/tests/MicropubTest.php +++ b/tests/MicropubTest.php @@ -25,20 +25,20 @@ class MicropubTest extends TestCase { $this->call('GET', $this->appurl . '/api/post'); $this->assertResponseStatus(400); - $this->see('No OAuth token sent with request.'); + $this->seeJson(['error_description' => 'No token provided with request']); } public function testMicropubRequestWithoutValidToken() { $this->call('GET', $this->appurl . '/api/post', [], [], [], ['HTTP_Authorization' => 'Bearer abc123']); $this->assertResponseStatus(400); - $this->see('Invalid token'); + $this->seeJson(['error_description' => 'The provided token did not pass validation']); } public function testMicropubRequestWithValidToken() { $this->call('GET', $this->appurl . '/api/post', [], [], [], ['HTTP_Authorization' => 'Bearer ' . $this->getToken()]); - $this->see('me=https%3A%2F%2Fjonnybarnes.localhost'); + $this->seeJson(['response' => 'token']); } public function testMicropubRequestForSyndication()