Some fixes related to developing my Micropub client #50
6 changed files with 61 additions and 13 deletions
|
|
@ -51,7 +51,7 @@ class MicropubRequest extends FormRequest
|
||||||
// Convert JSON type (h-entry) to simple type (entry)
|
// Convert JSON type (h-entry) to simple type (entry)
|
||||||
if (isset($data['type']) && is_array($data['type'])) {
|
if (isset($data['type']) && is_array($data['type'])) {
|
||||||
$type = current($data['type']);
|
$type = current($data['type']);
|
||||||
if (strpos($type, 'h-') === 0) {
|
if (str_starts_with($type, 'h-')) {
|
||||||
$this->micropubData['type'] = substr($type, 2);
|
$this->micropubData['type'] = substr($type, 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -67,7 +67,7 @@ class MicropubRequest extends FormRequest
|
||||||
$this->micropubData['content'] = Arr::get($data, 'properties.content.0');
|
$this->micropubData['content'] = Arr::get($data, 'properties.content.0');
|
||||||
$this->micropubData['in-reply-to'] = Arr::get($data, 'properties.in-reply-to.0');
|
$this->micropubData['in-reply-to'] = Arr::get($data, 'properties.in-reply-to.0');
|
||||||
$this->micropubData['published'] = Arr::get($data, 'properties.published.0');
|
$this->micropubData['published'] = Arr::get($data, 'properties.published.0');
|
||||||
$this->micropubData['location'] = Arr::get($data, 'location');
|
$this->micropubData['location'] = $this->getLocationData($data);
|
||||||
$this->micropubData['bookmark-of'] = Arr::get($data, 'properties.bookmark-of.0');
|
$this->micropubData['bookmark-of'] = Arr::get($data, 'properties.bookmark-of.0');
|
||||||
$this->micropubData['like-of'] = Arr::get($data, 'properties.like-of.0');
|
$this->micropubData['like-of'] = Arr::get($data, 'properties.like-of.0');
|
||||||
$this->micropubData['mp-syndicate-to'] = Arr::get($data, 'properties.mp-syndicate-to');
|
$this->micropubData['mp-syndicate-to'] = Arr::get($data, 'properties.mp-syndicate-to');
|
||||||
|
|
@ -103,4 +103,17 @@ class MicropubRequest extends FormRequest
|
||||||
$this->micropubData[$key] = $value;
|
$this->micropubData[$key] = $value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function getLocationData(array $data): array|string|null
|
||||||
|
{
|
||||||
|
if (! Arr::has($data, 'properties.location')) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Arr::has($data, 'properties.location.0')) {
|
||||||
|
return Arr::get($data, 'properties.location.0');
|
||||||
|
}
|
||||||
|
|
||||||
|
return Arr::get($data, 'properties.location');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ services:
|
||||||
dockerfile: Dockerfile
|
dockerfile: Dockerfile
|
||||||
args:
|
args:
|
||||||
WWWGROUP: '${WWWGROUP}'
|
WWWGROUP: '${WWWGROUP}'
|
||||||
image: sail-8.3/app
|
image: sail-8.4/app
|
||||||
extra_hosts:
|
extra_hosts:
|
||||||
- 'host.docker.internal:host-gateway'
|
- 'host.docker.internal:host-gateway'
|
||||||
ports:
|
ports:
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,6 @@
|
||||||
@endforeach
|
@endforeach
|
||||||
</ul>
|
</ul>
|
||||||
<p>
|
<p>
|
||||||
Create a <a href="/admin/clients/new">new entry</a>?
|
Create a <a href="/admin/clients/create">new entry</a>?
|
||||||
</p>
|
</p>
|
||||||
@stop
|
@stop
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,8 @@
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<h2>Login</h2>
|
<h2>Login</h2>
|
||||||
<form action="login" method="post">
|
<form action="{{ route('login') }}" method="post">
|
||||||
<input type="hidden" name="_token" value="{{ csrf_token() }}">
|
@csrf
|
||||||
<input type="text" name="name" placeholder="username">
|
<input type="text" name="name" placeholder="username">
|
||||||
<input type="password" name="password" placeholder="password">
|
<input type="password" name="password" placeholder="password">
|
||||||
<input type="submit" name="submit" value="Login">
|
<input type="submit" name="submit" value="Login">
|
||||||
|
|
|
||||||
|
|
@ -137,6 +137,16 @@ Route::middleware(MyAuthMiddleware::class)->prefix('admin')->group(function () {
|
||||||
Route::delete('/{syndicationTarget}', [SyndicationTargetsController::class, 'destroy']);
|
Route::delete('/{syndicationTarget}', [SyndicationTargetsController::class, 'destroy']);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Clients
|
||||||
|
Route::prefix('clients')->group(function () {
|
||||||
|
Route::get('/', [ClientsController::class, 'index']);
|
||||||
|
Route::get('/create', [ClientsController::class, 'create']);
|
||||||
|
Route::post('/', [ClientsController::class, 'store']);
|
||||||
|
Route::get('/{clientId}/edit', [ClientsController::class, 'edit']);
|
||||||
|
Route::put('/{clientId}', [ClientsController::class, 'update']);
|
||||||
|
Route::delete('/{clientId}', [ClientsController::class, 'destroy']);
|
||||||
|
});
|
||||||
|
|
||||||
// Bio
|
// Bio
|
||||||
Route::prefix('bio')->group(function () {
|
Route::prefix('bio')->group(function () {
|
||||||
Route::get('/', [BioController::class, 'show'])->name('admin.bio.show');
|
Route::get('/', [BioController::class, 'show'])->name('admin.bio.show');
|
||||||
|
|
|
||||||
|
|
@ -278,6 +278,31 @@ class MicropubControllerTest extends TestCase
|
||||||
Queue::assertPushed(SyndicateNoteToBluesky::class);
|
Queue::assertPushed(SyndicateNoteToBluesky::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[Test]
|
||||||
|
public function micropub_client_api_request_creates_new_note_with_geo_location(): void
|
||||||
|
{
|
||||||
|
$faker = Factory::create();
|
||||||
|
$note = $faker->text;
|
||||||
|
$response = $this->postJson(
|
||||||
|
'/api/post',
|
||||||
|
[
|
||||||
|
'type' => ['h-entry'],
|
||||||
|
'properties' => [
|
||||||
|
'content' => [$note],
|
||||||
|
'location' => ['geo:1.23,4.56'],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
['HTTP_Authorization' => 'Bearer ' . $this->getToken()]
|
||||||
|
);
|
||||||
|
$response
|
||||||
|
->assertStatus(201)
|
||||||
|
->assertJson(['response' => 'created']);
|
||||||
|
$this->assertDatabaseHas('notes', [
|
||||||
|
'note' => $note,
|
||||||
|
'location' => '1.23, 4.56',
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test a valid micropub requests using JSON syntax creates a new note with
|
* Test a valid micropub requests using JSON syntax creates a new note with
|
||||||
* existing self-created place.
|
* existing self-created place.
|
||||||
|
|
@ -323,13 +348,13 @@ class MicropubControllerTest extends TestCase
|
||||||
'type' => ['h-entry'],
|
'type' => ['h-entry'],
|
||||||
'properties' => [
|
'properties' => [
|
||||||
'content' => [$note],
|
'content' => [$note],
|
||||||
],
|
'location' => [
|
||||||
'location' => [
|
'type' => ['h-card'],
|
||||||
'type' => ['h-card'],
|
'properties' => [
|
||||||
'properties' => [
|
'name' => ['Awesome Venue'],
|
||||||
'name' => ['Awesome Venue'],
|
'latitude' => ['1.23'],
|
||||||
'latitude' => ['1.23'],
|
'longitude' => ['4.56'],
|
||||||
'longitude' => ['4.56'],
|
],
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue