Merge branch 'release/0.18'
This commit is contained in:
commit
b9fb0f7427
245 changed files with 10881 additions and 9709 deletions
11
.gitignore
vendored
11
.gitignore
vendored
|
|
@ -3,14 +3,13 @@
|
||||||
/public/storage
|
/public/storage
|
||||||
/storage/*.key
|
/storage/*.key
|
||||||
/vendor
|
/vendor
|
||||||
/.idea
|
.env
|
||||||
/.vagrant
|
.phpunit.result.cache
|
||||||
Homestead.yaml
|
|
||||||
Homestead.json
|
Homestead.json
|
||||||
|
Homestead.yaml
|
||||||
npm-debug.log
|
npm-debug.log
|
||||||
yarn-error.log
|
yarn-error.log
|
||||||
.env
|
# Custom paths in /public
|
||||||
|
/public/coverage
|
||||||
/public/files
|
/public/files
|
||||||
/public/keybase.txt
|
/public/keybase.txt
|
||||||
/coverage
|
|
||||||
/LegacyTests
|
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,7 @@ env:
|
||||||
|
|
||||||
php:
|
php:
|
||||||
- 7.2
|
- 7.2
|
||||||
|
- 7.3
|
||||||
|
|
||||||
before_install:
|
before_install:
|
||||||
- printf "\n" | pecl install imagick
|
- printf "\n" | pecl install imagick
|
||||||
|
|
@ -43,7 +44,7 @@ before_install:
|
||||||
- psql -U travis -c 'create database travis_ci_test'
|
- psql -U travis -c 'create database travis_ci_test'
|
||||||
- psql -U travis -d travis_ci_test -c 'create extension postgis'
|
- psql -U travis -d travis_ci_test -c 'create extension postgis'
|
||||||
- travis_retry composer self-update --preview
|
- travis_retry composer self-update --preview
|
||||||
- pear install pear/PHP_CodeSniffer && phpenv rehash
|
- curl -OL https://squizlabs.github.io/PHP_CodeSniffer/phpcs.phar
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- if [[ $setup = 'basic' ]]; then travis_retry composer install --no-interaction --prefer-dist; fi
|
- if [[ $setup = 'basic' ]]; then travis_retry composer install --no-interaction --prefer-dist; fi
|
||||||
|
|
@ -63,7 +64,7 @@ before_script:
|
||||||
#- sleep 5
|
#- sleep 5
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- php vendor/bin/phpunit --coverage-text
|
- php vendor/bin/phpunit
|
||||||
- phpcs
|
- php phpcs.phar
|
||||||
#- php artisan dusk
|
#- php artisan dusk
|
||||||
- php vendor/bin/security-checker security:check --end-point=http://security.sensiolabs.org/check_lock
|
- php vendor/bin/security-checker security:check --end-point=http://security.sensiolabs.org/check_lock
|
||||||
|
|
|
||||||
7
app/Exceptions/TwitterContentException.php
Normal file
7
app/Exceptions/TwitterContentException.php
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Exceptions;
|
||||||
|
|
||||||
|
class TwitterContentException extends \Exception
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
@ -14,7 +14,7 @@ class Kernel extends HttpKernel
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $middleware = [
|
protected $middleware = [
|
||||||
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
|
\App\Http\Middleware\CheckForMaintenanceMode::class,
|
||||||
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
|
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
|
||||||
\App\Http\Middleware\TrimStrings::class,
|
\App\Http\Middleware\TrimStrings::class,
|
||||||
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
|
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
|
||||||
|
|
@ -58,11 +58,30 @@ class Kernel extends HttpKernel
|
||||||
'auth' => \App\Http\Middleware\Authenticate::class,
|
'auth' => \App\Http\Middleware\Authenticate::class,
|
||||||
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
|
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
|
||||||
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
|
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
|
||||||
|
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
|
||||||
'can' => \Illuminate\Auth\Middleware\Authorize::class,
|
'can' => \Illuminate\Auth\Middleware\Authorize::class,
|
||||||
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
|
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
|
||||||
|
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
|
||||||
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
|
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
|
||||||
|
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
|
||||||
'micropub.token' => \App\Http\Middleware\VerifyMicropubToken::class,
|
'micropub.token' => \App\Http\Middleware\VerifyMicropubToken::class,
|
||||||
'myauth' => \App\Http\Middleware\MyAuthMiddleware::class,
|
'myauth' => \App\Http\Middleware\MyAuthMiddleware::class,
|
||||||
'cors' => \App\Http\Middleware\CorsHeaders::class,
|
'cors' => \App\Http\Middleware\CorsHeaders::class,
|
||||||
];
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The priority-sorted list of middleware.
|
||||||
|
*
|
||||||
|
* This forces non-global middleware to always be in the given order.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $middlewarePriority = [
|
||||||
|
\Illuminate\Session\Middleware\StartSession::class,
|
||||||
|
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
|
||||||
|
\App\Http\Middleware\Authenticate::class,
|
||||||
|
\Illuminate\Session\Middleware\AuthenticateSession::class,
|
||||||
|
\Illuminate\Routing\Middleware\SubstituteBindings::class,
|
||||||
|
\Illuminate\Auth\Middleware\Authorize::class,
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
21
app/Http/Middleware/Authenticate.php
Normal file
21
app/Http/Middleware/Authenticate.php
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Middleware;
|
||||||
|
|
||||||
|
use Illuminate\Auth\Middleware\Authenticate as Middleware;
|
||||||
|
|
||||||
|
class Authenticate extends Middleware
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Get the path the user should be redirected to when they are not authenticated.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
protected function redirectTo($request)
|
||||||
|
{
|
||||||
|
if (! $request->expectsJson()) {
|
||||||
|
return route('login');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
17
app/Http/Middleware/CheckForMaintenanceMode.php
Normal file
17
app/Http/Middleware/CheckForMaintenanceMode.php
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Middleware;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode as Middleware;
|
||||||
|
|
||||||
|
class CheckForMaintenanceMode extends Middleware
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The URIs that should be reachable while maintenance mode is enabled.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $except = [
|
||||||
|
//
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
@ -10,7 +10,7 @@ use Illuminate\Bus\Queueable;
|
||||||
use Thujohn\Twitter\Facades\Twitter;
|
use Thujohn\Twitter\Facades\Twitter;
|
||||||
use Illuminate\Queue\SerializesModels;
|
use Illuminate\Queue\SerializesModels;
|
||||||
use Illuminate\Queue\InteractsWithQueue;
|
use Illuminate\Queue\InteractsWithQueue;
|
||||||
use GuzzleHttp\Exception\ClientException;
|
use GuzzleHttp\Exception\RequestException;
|
||||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
use Illuminate\Foundation\Bus\Dispatchable;
|
use Illuminate\Foundation\Bus\Dispatchable;
|
||||||
use Jonnybarnes\WebmentionsParser\Authorship;
|
use Jonnybarnes\WebmentionsParser\Authorship;
|
||||||
|
|
@ -60,7 +60,7 @@ class ProcessLike implements ShouldQueue
|
||||||
],
|
],
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
} catch (ClientException $exception) {
|
} catch (RequestException $exception) {
|
||||||
//no biggie
|
//no biggie
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -67,7 +67,7 @@ class ProcessWebMention implements ShouldQueue
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ($webmention->type == 'like-of') {
|
if ($webmention->type == 'like-of') {
|
||||||
if ($parser->checkLikeOf($microformats, $note->longurl) == false) {
|
if ($parser->checkLikeOf($microformats, $this->note->longurl) == false) {
|
||||||
// it doesn’t so delete
|
// it doesn’t so delete
|
||||||
$webmention->delete();
|
$webmention->delete();
|
||||||
|
|
||||||
|
|
@ -75,7 +75,7 @@ class ProcessWebMention implements ShouldQueue
|
||||||
} // note we don’t need to do anything if it still is a like
|
} // note we don’t need to do anything if it still is a like
|
||||||
}
|
}
|
||||||
if ($webmention->type == 'repost-of') {
|
if ($webmention->type == 'repost-of') {
|
||||||
if ($parser->checkRepostOf($microformats, $note->longurl) == false) {
|
if ($parser->checkRepostOf($microformats, $this->note->longurl) == false) {
|
||||||
// it doesn’t so delete
|
// it doesn’t so delete
|
||||||
$webmention->delete();
|
$webmention->delete();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,11 +4,16 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace App\Models;
|
namespace App\Models;
|
||||||
|
|
||||||
|
use League\CommonMark\Environment;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
use Cviebrock\EloquentSluggable\Sluggable;
|
use Cviebrock\EloquentSluggable\Sluggable;
|
||||||
use League\CommonMark\CommonMarkConverter;
|
use League\CommonMark\CommonMarkConverter;
|
||||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||||
|
use League\CommonMark\Block\Element\FencedCode;
|
||||||
|
use League\CommonMark\Block\Element\IndentedCode;
|
||||||
|
use Spatie\CommonMarkHighlighter\FencedCodeRenderer;
|
||||||
|
use Spatie\CommonMarkHighlighter\IndentedCodeRenderer;
|
||||||
|
|
||||||
class Article extends Model
|
class Article extends Model
|
||||||
{
|
{
|
||||||
|
|
@ -57,15 +62,12 @@ class Article extends Model
|
||||||
*/
|
*/
|
||||||
public function getHtmlAttribute(): string
|
public function getHtmlAttribute(): string
|
||||||
{
|
{
|
||||||
$markdown = new CommonMarkConverter();
|
$environment = Environment::createCommonMarkEnvironment();
|
||||||
$html = $markdown->convertToHtml($this->main);
|
$environment->addBlockRenderer(FencedCode::class, new FencedCodeRenderer());
|
||||||
// changes <pre><code>[lang] ~> <pre><code data-language="lang">
|
$environment->addBlockRenderer(IndentedCode::class, new IndentedCodeRenderer());
|
||||||
$match = '/<pre><code>\[(.*)\]\n/';
|
$commonMarkConverter = new CommonMarkConverter([], $environment);
|
||||||
$replace = '<pre><code class="language-$1">';
|
|
||||||
$text = preg_replace($match, $replace, $html);
|
|
||||||
$default = preg_replace('/<pre><code>/', '<pre><code class="language-markdown">', $text);
|
|
||||||
|
|
||||||
return $default;
|
return $commonMarkConverter->convertToHtml($this->main);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -5,12 +5,13 @@ declare(strict_types=1);
|
||||||
namespace App\Models;
|
namespace App\Models;
|
||||||
|
|
||||||
use Mf2;
|
use Mf2;
|
||||||
use HTMLPurifier;
|
use App\Traits\FilterHtml;
|
||||||
use HTMLPurifier_Config;
|
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
class Like extends Model
|
class Like extends Model
|
||||||
{
|
{
|
||||||
|
use FilterHtml;
|
||||||
|
|
||||||
protected $fillable = ['url'];
|
protected $fillable = ['url'];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -48,27 +49,11 @@ class Like extends Model
|
||||||
$mf2 = Mf2\parse($value, $this->url);
|
$mf2 = Mf2\parse($value, $this->url);
|
||||||
|
|
||||||
if (array_get($mf2, 'items.0.properties.content.0.html')) {
|
if (array_get($mf2, 'items.0.properties.content.0.html')) {
|
||||||
return $this->filterHTML(
|
return $this->filterHtml(
|
||||||
$mf2['items'][0]['properties']['content'][0]['html']
|
$mf2['items'][0]['properties']['content'][0]['html']
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $value;
|
return $value;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Filter some HTML with HTMLPurifier.
|
|
||||||
*
|
|
||||||
* @param string $html
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
private function filterHTML(string $html): string
|
|
||||||
{
|
|
||||||
$config = HTMLPurifier_Config::createDefault();
|
|
||||||
$config->set('Cache.SerializerPath', storage_path() . '/HTMLPurifier');
|
|
||||||
$config->set('HTML.TargetBlank', true);
|
|
||||||
$purifier = new HTMLPurifier($config);
|
|
||||||
|
|
||||||
return $purifier->purify($html);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,16 +9,19 @@ use Twitter;
|
||||||
use Normalizer;
|
use Normalizer;
|
||||||
use GuzzleHttp\Client;
|
use GuzzleHttp\Client;
|
||||||
use Laravel\Scout\Searchable;
|
use Laravel\Scout\Searchable;
|
||||||
use League\CommonMark\Converter;
|
|
||||||
use League\CommonMark\DocParser;
|
|
||||||
use Jonnybarnes\IndieWeb\Numbers;
|
use Jonnybarnes\IndieWeb\Numbers;
|
||||||
use League\CommonMark\Environment;
|
use League\CommonMark\Environment;
|
||||||
use League\CommonMark\HtmlRenderer;
|
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Jonnybarnes\EmojiA11y\EmojiModifier;
|
use Jonnybarnes\EmojiA11y\EmojiModifier;
|
||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
use League\CommonMark\CommonMarkConverter;
|
||||||
|
use App\Exceptions\TwitterContentException;
|
||||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||||
|
use League\CommonMark\Block\Element\FencedCode;
|
||||||
|
use League\CommonMark\Block\Element\IndentedCode;
|
||||||
use Jonnybarnes\CommonmarkLinkify\LinkifyExtension;
|
use Jonnybarnes\CommonmarkLinkify\LinkifyExtension;
|
||||||
|
use Spatie\CommonMarkHighlighter\FencedCodeRenderer;
|
||||||
|
use Spatie\CommonMarkHighlighter\IndentedCodeRenderer;
|
||||||
|
|
||||||
class Note extends Model
|
class Note extends Model
|
||||||
{
|
{
|
||||||
|
|
@ -362,21 +365,20 @@ class Note extends Model
|
||||||
*
|
*
|
||||||
* That is we swap the contacts names for their known Twitter handles.
|
* That is we swap the contacts names for their known Twitter handles.
|
||||||
*
|
*
|
||||||
* @return string|null
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getTwitterContentAttribute(): ?string
|
public function getTwitterContentAttribute(): string
|
||||||
{
|
{
|
||||||
if ($this->contacts === null) {
|
// check for contacts
|
||||||
return null;
|
if ($this->contacts === null || count($this->contacts) === 0) {
|
||||||
}
|
throw new TwitterContentException('There are no contacts for this note');
|
||||||
|
|
||||||
if (count($this->contacts) === 0) {
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// here we check the matched contact from the note corresponds to a contact
|
||||||
|
// in the database
|
||||||
if (count(array_unique(array_values($this->contacts))) === 1
|
if (count(array_unique(array_values($this->contacts))) === 1
|
||||||
&& array_unique(array_values($this->contacts))[0] === null) {
|
&& array_unique(array_values($this->contacts))[0] === null) {
|
||||||
return null;
|
throw new TwitterContentException('The matched contact is not in the database');
|
||||||
}
|
}
|
||||||
|
|
||||||
// swap in twitter usernames
|
// swap in twitter usernames
|
||||||
|
|
@ -513,7 +515,9 @@ class Note extends Model
|
||||||
{
|
{
|
||||||
$environment = Environment::createCommonMarkEnvironment();
|
$environment = Environment::createCommonMarkEnvironment();
|
||||||
$environment->addExtension(new LinkifyExtension());
|
$environment->addExtension(new LinkifyExtension());
|
||||||
$converter = new Converter(new DocParser($environment), new HtmlRenderer($environment));
|
$environment->addBlockRenderer(FencedCode::class, new FencedCodeRenderer());
|
||||||
|
$environment->addBlockRenderer(IndentedCode::class, new IndentedCodeRenderer());
|
||||||
|
$converter = new CommonMarkConverter([], $environment);
|
||||||
|
|
||||||
return $converter->convertToHtml($note);
|
return $converter->convertToHtml($note);
|
||||||
}
|
}
|
||||||
|
|
@ -530,7 +534,7 @@ class Note extends Model
|
||||||
$latlng = $latitude . ',' . $longitude;
|
$latlng = $latitude . ',' . $longitude;
|
||||||
|
|
||||||
return Cache::get($latlng, function () use ($latlng, $latitude, $longitude) {
|
return Cache::get($latlng, function () use ($latlng, $latitude, $longitude) {
|
||||||
$guzzle = new Client();
|
$guzzle = resolve(Client::class);
|
||||||
$response = $guzzle->request('GET', 'https://nominatim.openstreetmap.org/reverse', [
|
$response = $guzzle->request('GET', 'https://nominatim.openstreetmap.org/reverse', [
|
||||||
'query' => [
|
'query' => [
|
||||||
'format' => 'json',
|
'format' => 'json',
|
||||||
|
|
@ -542,9 +546,13 @@ class Note extends Model
|
||||||
'headers' => ['User-Agent' => 'jonnybarnes.uk via Guzzle, email jonny@jonnybarnes.uk'],
|
'headers' => ['User-Agent' => 'jonnybarnes.uk via Guzzle, email jonny@jonnybarnes.uk'],
|
||||||
]);
|
]);
|
||||||
$json = json_decode((string) $response->getBody());
|
$json = json_decode((string) $response->getBody());
|
||||||
if (isset($json->address->town)) {
|
if (isset($json->address->suburb)) {
|
||||||
|
$locality = $json->address->suburb;
|
||||||
|
if (isset($json->address->city)) {
|
||||||
|
$locality .= ', ' . $json->address->city;
|
||||||
|
}
|
||||||
$address = '<span class="p-locality">'
|
$address = '<span class="p-locality">'
|
||||||
. $json->address->town
|
. $locality
|
||||||
. '</span>, <span class="p-country-name">'
|
. '</span>, <span class="p-country-name">'
|
||||||
. $json->address->country
|
. $json->address->country
|
||||||
. '</span>';
|
. '</span>';
|
||||||
|
|
@ -553,7 +561,11 @@ class Note extends Model
|
||||||
return $address;
|
return $address;
|
||||||
}
|
}
|
||||||
if (isset($json->address->city)) {
|
if (isset($json->address->city)) {
|
||||||
$address = $json->address->city . ', ' . $json->address->country;
|
$address = '<span class="p-locality">'
|
||||||
|
. $json->address->city
|
||||||
|
. '</span>, <span class="p-country-name">'
|
||||||
|
. $json->address->country
|
||||||
|
. '</span>';
|
||||||
Cache::forever($latlng, $address);
|
Cache::forever($latlng, $address);
|
||||||
|
|
||||||
return $address;
|
return $address;
|
||||||
|
|
|
||||||
|
|
@ -6,14 +6,15 @@ namespace App\Models;
|
||||||
|
|
||||||
use Cache;
|
use Cache;
|
||||||
use Twitter;
|
use Twitter;
|
||||||
use HTMLPurifier;
|
use App\Traits\FilterHtml;
|
||||||
use HTMLPurifier_Config;
|
|
||||||
use Illuminate\Filesystem\Filesystem;
|
use Illuminate\Filesystem\Filesystem;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Jonnybarnes\WebmentionsParser\Authorship;
|
use Jonnybarnes\WebmentionsParser\Authorship;
|
||||||
|
|
||||||
class WebMention extends Model
|
class WebMention extends Model
|
||||||
{
|
{
|
||||||
|
use FilterHtml;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The database table used by the model.
|
* The database table used by the model.
|
||||||
*
|
*
|
||||||
|
|
@ -92,7 +93,7 @@ class WebMention extends Model
|
||||||
}
|
}
|
||||||
$microformats = json_decode($this->mf2, true);
|
$microformats = json_decode($this->mf2, true);
|
||||||
if (isset($microformats['items'][0]['properties']['content'][0]['html'])) {
|
if (isset($microformats['items'][0]['properties']['content'][0]['html'])) {
|
||||||
return $this->filterHTML($microformats['items'][0]['properties']['content'][0]['html']);
|
return $this->filterHtml($microformats['items'][0]['properties']['content'][0]['html']);
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
|
@ -130,20 +131,4 @@ class WebMention extends Model
|
||||||
|
|
||||||
return $url;
|
return $url;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Filter the HTML in a reply webmention.
|
|
||||||
*
|
|
||||||
* @param string $html
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
private function filterHTML(string $html): string
|
|
||||||
{
|
|
||||||
$config = HTMLPurifier_Config::createDefault();
|
|
||||||
$config->set('Cache.SerializerPath', storage_path() . '/HTMLPurifier');
|
|
||||||
$config->set('HTML.TargetBlank', true);
|
|
||||||
$purifier = new HTMLPurifier($config);
|
|
||||||
|
|
||||||
return $purifier->purify($html);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -139,18 +139,7 @@ class NoteService
|
||||||
*/
|
*/
|
||||||
private function getCheckin(array $request): ?Place
|
private function getCheckin(array $request): ?Place
|
||||||
{
|
{
|
||||||
$location = array_get($request, 'properties.location.0');
|
$location = array_get($request, 'location');
|
||||||
if (array_get($location, 'type.0') === 'h-card') {
|
|
||||||
try {
|
|
||||||
$place = resolve(PlaceService::class)->createPlaceFromCheckin(
|
|
||||||
$location
|
|
||||||
);
|
|
||||||
} catch (\InvalidArgumentException $e) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $place;
|
|
||||||
}
|
|
||||||
if (is_string($location) && starts_with($location, config('app.url'))) {
|
if (is_string($location) && starts_with($location, config('app.url'))) {
|
||||||
return Place::where(
|
return Place::where(
|
||||||
'slug',
|
'slug',
|
||||||
|
|
@ -162,10 +151,21 @@ class NoteService
|
||||||
)
|
)
|
||||||
)->first();
|
)->first();
|
||||||
}
|
}
|
||||||
if (array_get($request, 'properties.checkin')) {
|
if (array_get($request, 'checkin')) {
|
||||||
try {
|
try {
|
||||||
$place = resolve(PlaceService::class)->createPlaceFromCheckin(
|
$place = resolve(PlaceService::class)->createPlaceFromCheckin(
|
||||||
array_get($request, 'properties.checkin.0')
|
array_get($request, 'checkin')
|
||||||
|
);
|
||||||
|
} catch (\InvalidArgumentException $e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $place;
|
||||||
|
}
|
||||||
|
if (array_get($location, 'type.0') === 'h-card') {
|
||||||
|
try {
|
||||||
|
$place = resolve(PlaceService::class)->createPlaceFromCheckin(
|
||||||
|
$location
|
||||||
);
|
);
|
||||||
} catch (\InvalidArgumentException $e) {
|
} catch (\InvalidArgumentException $e) {
|
||||||
return null;
|
return null;
|
||||||
|
|
|
||||||
24
app/Traits/FilterHtml.php
Normal file
24
app/Traits/FilterHtml.php
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace App\Traits;
|
||||||
|
|
||||||
|
use HtmlSanitizer\Sanitizer;
|
||||||
|
|
||||||
|
trait FilterHtml
|
||||||
|
{
|
||||||
|
public function filterHtml(string $html): string
|
||||||
|
{
|
||||||
|
return Sanitizer::create([
|
||||||
|
'extensions' => [
|
||||||
|
'basic',
|
||||||
|
'code',
|
||||||
|
'image',
|
||||||
|
'list',
|
||||||
|
'table',
|
||||||
|
'extra',
|
||||||
|
],
|
||||||
|
])->sanitize($html);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -12,7 +12,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$app = new Illuminate\Foundation\Application(
|
$app = new Illuminate\Foundation\Application(
|
||||||
realpath(__DIR__.'/../')
|
$_ENV['APP_BASE_PATH'] ?? dirname(__DIR__)
|
||||||
);
|
);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
||||||
621
changelog.md
621
changelog.md
|
|
@ -1,621 +0,0 @@
|
||||||
# Changelog
|
|
||||||
|
|
||||||
## Version 0.17.1 (2018-10-12)
|
|
||||||
- Remove settinga and code for syndicatong to Facebook (issue#88)
|
|
||||||
|
|
||||||
## Version 0.17
|
|
||||||
- Update the underlying Laravel framework to release 5.7
|
|
||||||
|
|
||||||
## Version 0.16.6
|
|
||||||
- Improve micropub media endpoint by inlining the initial upload to S3 so the returned URL will never 404
|
|
||||||
|
|
||||||
## Version 0.16.5
|
|
||||||
- Hotfix: adding a new note meant some tests were running against the wrong note
|
|
||||||
|
|
||||||
## Version 0.16.4
|
|
||||||
- Improve CSP headers
|
|
||||||
- Fix the map style menu in mapbox maps
|
|
||||||
|
|
||||||
## Version 0.16.3 (2018-04-12)
|
|
||||||
- Improve JSON feed conformance
|
|
||||||
|
|
||||||
## Version 0.16.2 (2018-04-07)
|
|
||||||
- Add CORS headers as necessary in the Laravel app (as oppose to using nginx)
|
|
||||||
- Add CSP headers
|
|
||||||
|
|
||||||
## Version 0.16.1 (2018-02-17)
|
|
||||||
- Fix issue where OwnYourSwarm requests include h-adr block for location
|
|
||||||
|
|
||||||
## Version 0.16 (2018-02-16)
|
|
||||||
- Update Laravel to 5.6
|
|
||||||
- Fix issue with creating alternative Facebook content when no contacts
|
|
||||||
|
|
||||||
## Version 0.15.7 (2018-02-01)
|
|
||||||
- Send tokens as a json response
|
|
||||||
|
|
||||||
## Version 0.15.6 (2018-01-27)
|
|
||||||
- Fix uploading files sent to the media endpoint to S3
|
|
||||||
|
|
||||||
## Version 0.15.5 (2018-01-21)
|
|
||||||
- Formally bump PHP requirement to 7.2
|
|
||||||
- Add [a11y.css](https://github.com/ffoodd/a11y.css)
|
|
||||||
- Make some a11y improvements
|
|
||||||
- Fix: remove a css property that caused words to be split at a line-break
|
|
||||||
|
|
||||||
## Version 0.15.4
|
|
||||||
- Improve code-base by liberal use of `strict_types`
|
|
||||||
- Added some basic CSS text styling
|
|
||||||
|
|
||||||
## Version 0.15.3 (2018-01-12)
|
|
||||||
- Improve `likes`, including adding a new section in the admin cp
|
|
||||||
- Add the ability to POSSE the like of a Tweet
|
|
||||||
|
|
||||||
## Version 0.15.2 (2018-01-11)
|
|
||||||
- Update micropub endpoint to support access tokens being sent in either acceptable form
|
|
||||||
- Improve admin control panel forms
|
|
||||||
|
|
||||||
## Version 0.15.1 (2018-01-06)
|
|
||||||
- Update dependencies and recompile frontend assets, fix tests
|
|
||||||
- Only normalise tags in the URL, not in the actual link text
|
|
||||||
- Make sure when a note has no content, null is saved to the db, not `''`
|
|
||||||
|
|
||||||
## Version 0.15 (2017-12-24)
|
|
||||||
- Add simple checkins, i.e. checkins with no note content, for now add a default note for these
|
|
||||||
|
|
||||||
## Version 0.14 (2017-12-22)
|
|
||||||
- Tests
|
|
||||||
- Refactor
|
|
||||||
- More tests, seriously, code-coverage to now above 90%
|
|
||||||
|
|
||||||
## Version 0.13.1 (2017-11-20)
|
|
||||||
- A small fix when adding a new bookmark
|
|
||||||
|
|
||||||
## Version 0.13 (2017-11-17)
|
|
||||||
- Update Browsershot to v3, uses puppeteer to control Chrome
|
|
||||||
- Improve bookmarks syndication
|
|
||||||
|
|
||||||
## Version 0.12.6.1 (2017-11-13)
|
|
||||||
- `.1` fixes a typo
|
|
||||||
- Fix issue with generating image links from images uploaded to `/api/media`
|
|
||||||
|
|
||||||
## Version 0.12.5 (2017-11-09)
|
|
||||||
- Fix style of tags on bookmarks page that had been visited
|
|
||||||
- Fix style of notes listed on `/notes/tagged/tag`
|
|
||||||
- Move code manging tagging of notes to NoteObserver
|
|
||||||
|
|
||||||
## Version 0.12.4 (2017-11-07)
|
|
||||||
- Pull in newer version of my linkify extension to fix errors
|
|
||||||
|
|
||||||
## Version 0.12.3 (2017-11-07)
|
|
||||||
- Add a link to the `colours.js` so the colour scheme can be changed
|
|
||||||
|
|
||||||
## Version 0.12.2 (2017-11-07)
|
|
||||||
- Limit screen size of images in notes
|
|
||||||
|
|
||||||
## Version 0.12.1 (2017-11-07)
|
|
||||||
- Change font
|
|
||||||
|
|
||||||
## Version 0.12 (2017-11-07)
|
|
||||||
- New style
|
|
||||||
- Here we improve the sass code as well, better modularisation
|
|
||||||
- Colour schemes are now selectable and stored in the session
|
|
||||||
- Added a typekit font again
|
|
||||||
|
|
||||||
## Version 0.11.2 (2017-10-22)
|
|
||||||
- This hotfix removes reference to a dev package not installed on production
|
|
||||||
|
|
||||||
## Version 0.11.1 (2017-10-22)
|
|
||||||
- Improve eloquent queries for rendering notes with contacts
|
|
||||||
|
|
||||||
## Version 0.11 (2017-10-19)
|
|
||||||
- No more built-in micropub client
|
|
||||||
|
|
||||||
## Version 0.10 (20017-10-13)
|
|
||||||
- Bookmarks!
|
|
||||||
- They can only be added via micropub
|
|
||||||
- A screenshot is taken
|
|
||||||
- The page is saved to the internet archive
|
|
||||||
|
|
||||||
## Version 0.9 (2017-10-06)
|
|
||||||
- Add support for `likes` (issue#69)
|
|
||||||
- Only included links on truncated syndicated notes https://brid.gy/about#omit-link
|
|
||||||
|
|
||||||
## Version 0.8.1 (2017-09-16)
|
|
||||||
- Order notes by latest (issue#70)
|
|
||||||
- AcitivtyStream support is now indicated with HTTP Link headers
|
|
||||||
|
|
||||||
## Version 0.8 (2017-09-16)
|
|
||||||
- Improve embedding of tweets (issue#66)
|
|
||||||
- Allow for “responsive” images (issue#62)
|
|
||||||
|
|
||||||
## Version 0.7.3 (2017-09-13)
|
|
||||||
- Fix a test
|
|
||||||
|
|
||||||
## Version 0.7.2 (2017-09-13)
|
|
||||||
- Small AS2.0 improvements
|
|
||||||
|
|
||||||
## Version 0.7.1 (2017-09-13)
|
|
||||||
- Add content-negotiated AS data for homepage and single notes
|
|
||||||
|
|
||||||
## Version 0.7 (2017-09-08)
|
|
||||||
- Add Laravel Horizon
|
|
||||||
|
|
||||||
## Version 0.6 (2017-09-06)
|
|
||||||
- Update laravel version to 5.5
|
|
||||||
- Improve .travis.yml and add back dusk tests
|
|
||||||
|
|
||||||
## Version 0.5.28 (2017-08-20)
|
|
||||||
- Improve Swarm checkin code to allow checkins without text
|
|
||||||
+ this required a change in the notes table schema
|
|
||||||
- Improve code by bringing in latest changes in laravel/laravel
|
|
||||||
- Improve POSSE compatability with bridgy and silos
|
|
||||||
|
|
||||||
## Version 0.5.27 (2017-07-24)
|
|
||||||
- Just a bump in dependency versions used
|
|
||||||
|
|
||||||
## Version 0.5.26 (2017-07-20)
|
|
||||||
- Remove some file checking to see if we can get uploads working again
|
|
||||||
|
|
||||||
## Version 0.5.25 (2017-07-20)
|
|
||||||
- Update npm dev dependencies to use local installs over global installs
|
|
||||||
- Improve contact info display in note mentions by using hovercards
|
|
||||||
- Add some error messages when trying to upload media to aid debugging
|
|
||||||
|
|
||||||
## Version 0.5.24 (2017-07-13)
|
|
||||||
- Add my `commonmark-linkify` extension
|
|
||||||
- Some minor tweaks, including logging of micropub media requests
|
|
||||||
|
|
||||||
## Version 0.5.23 (2017-07-07)
|
|
||||||
- Add emoji 5.0 support with newer `emoji-a11y` package
|
|
||||||
- Places can be “added” to a note in the mp-client again, (issue#47)
|
|
||||||
|
|
||||||
## Version 0.5.22 (2017-07-06)
|
|
||||||
- A small improvement to the piwik tracking script
|
|
||||||
|
|
||||||
## Version 0.5.21 (2017-07-04)
|
|
||||||
- Better logging of micropub requests
|
|
||||||
- fix a style issue with images
|
|
||||||
|
|
||||||
## Version 0.5.20 (2017-06-30)
|
|
||||||
- Transition to using a JSON column for external urls of places
|
|
||||||
|
|
||||||
## Version 0.5.19 (2017-06-27)
|
|
||||||
- Fix error in App\\WebMention.php
|
|
||||||
|
|
||||||
## Version 0.5.18 (2017-06-23)
|
|
||||||
- Minor change in deploy script to speed things up
|
|
||||||
|
|
||||||
## Version 0.5.17 (2017-06-22)
|
|
||||||
- Lots of code tidying, especially in the notes controller
|
|
||||||
- Fix issue#53 regarding uploading photos
|
|
||||||
|
|
||||||
## Version 0.5.16 (2017-06-17)
|
|
||||||
- Allow place `slug`s to be re-generated
|
|
||||||
- Add syndication links for swarm and instagram
|
|
||||||
- Move bio to its own template, next step database?
|
|
||||||
|
|
||||||
## Version 0.5.15 (2017-06-17)
|
|
||||||
- Add support for ownyourgram.com sending h-card locations
|
|
||||||
- change sluggable implementation
|
|
||||||
- Add tests for uploading new articles from .md files
|
|
||||||
- Fix issue with maps not loading geojson data
|
|
||||||
|
|
||||||
## Version 0.5.14 (2017-06-11)
|
|
||||||
- Remove some Log statements in-appropriate for porduction
|
|
||||||
|
|
||||||
## Version 0.5.13 (2017-06-11)
|
|
||||||
- Fix issues around using ownyourgram.com
|
|
||||||
|
|
||||||
## Version 0.5.12 (2017-06-11)
|
|
||||||
- Add ability to delete notes
|
|
||||||
|
|
||||||
## Version 0.5.11 (2017-06-11)
|
|
||||||
- to help with micropub clients, log requests made to micropub endpoint
|
|
||||||
|
|
||||||
## Version 0.5.10 (2017-06-09)
|
|
||||||
- Add a link to instagram account
|
|
||||||
- Add syndication feeds for articles/notes, supporting RSS/Atom/JSON (issue#52)
|
|
||||||
|
|
||||||
## Version 0.5.9 (2017-05-31)
|
|
||||||
- Mapping improvements
|
|
||||||
- Basic place merging
|
|
||||||
|
|
||||||
## Version 0.5.8 (2017-05-21)
|
|
||||||
- Hotfix: if Carbon can’t parse the supplied published date of a webmention, use the Model’s `updated_at` value
|
|
||||||
|
|
||||||
## Version 0.5.7 (2017-05-19)
|
|
||||||
- Hotfix: make sure `mpSyndicateTo` variable exists when accessed in if statements
|
|
||||||
|
|
||||||
## Version 0.5.6 (2017-05-19)
|
|
||||||
- Update micropub code to support html-form and json syntax for mp-syndicate-to and photos
|
|
||||||
|
|
||||||
## Version 0.5.5 (2017-05-19)
|
|
||||||
- improve test suite
|
|
||||||
- Syndication should now work
|
|
||||||
|
|
||||||
## Version 0.5.4 (2017-05-18)
|
|
||||||
- Fix issues with using the indieauth client
|
|
||||||
|
|
||||||
## Version 0.5.3 (2017-05-18)
|
|
||||||
- Tweak config page and get token method to better handle/show errors
|
|
||||||
|
|
||||||
## Version 0.5.2 (2017-05-18)
|
|
||||||
- Fix variable issues in making client page
|
|
||||||
|
|
||||||
## Version 0.5.1 (2017-05-18)
|
|
||||||
- Fix issue on micropub create page when not logged in
|
|
||||||
|
|
||||||
## Version 0.5 (2017-05-18)
|
|
||||||
- Update micropub client to allow indieweb users
|
|
||||||
- Update micropub endpoint to allow for entry updates
|
|
||||||
- Add support for checkins, so we can use ownyourswarm
|
|
||||||
|
|
||||||
## Version 0.4.2 (2017-03-24)
|
|
||||||
- fixed issue#47, only the slug was being sent by client, which was messing up endpoint code
|
|
||||||
- minor changes to es6 code, bet lint-staged working again
|
|
||||||
- Make processed article content its own fake attribute, articles can now be uploaded as a file
|
|
||||||
|
|
||||||
## Version 0.4.1 (2017-03-18)
|
|
||||||
- Improve HTML Purification, target=blank rel-nofollow and rel-noopener should
|
|
||||||
now be added to external links
|
|
||||||
- Better handling of javascript compilation/minification and source-map generation
|
|
||||||
|
|
||||||
## Version 0.4 (2017-03-18)
|
|
||||||
- Media endpoint added
|
|
||||||
|
|
||||||
## Version 0.3.6 (2017-03-07)
|
|
||||||
- Pull in Piwik’s own piwik.js manually, again for CSP
|
|
||||||
|
|
||||||
## Version 0.3.5 (2017-03-07)
|
|
||||||
- Move piwik code into its own js file to allow for CSP
|
|
||||||
|
|
||||||
## Version 0.3.4 (2017-03-07)
|
|
||||||
- Remove document.write to allow CSP to work
|
|
||||||
|
|
||||||
## Version 0.3.3 (2017-03-03)
|
|
||||||
- Fix issue when accessing /admin
|
|
||||||
|
|
||||||
## Version 0.3.2 (2017-03-03)
|
|
||||||
- Remove route closures to allow route:cache-ing
|
|
||||||
|
|
||||||
## Version 0.3.1 (2017-03-03)
|
|
||||||
- Correct command to restart daemon queues in deploy.sh
|
|
||||||
- Improve Admin CP by “resource”-ifying the controllers
|
|
||||||
|
|
||||||
## Version 0.3 (2017-03-02)
|
|
||||||
- convert env() calls to config() calls for cacheing
|
|
||||||
- refactor routes and give important one names
|
|
||||||
- Add Dusk tests
|
|
||||||
- Add a deploy script
|
|
||||||
- Add a .editorconfig file
|
|
||||||
- Bump to PHP 7.1 to start using nullable return types and strict types
|
|
||||||
|
|
||||||
## Version 0.2.5 (2017-02-15)
|
|
||||||
- Small fix for homepage bio, removed confusing un-needed view that caused fix to be necessary
|
|
||||||
|
|
||||||
## Version 0.2.4 (2017-02-15)
|
|
||||||
- Make embedded youtube iframe a dynamic size
|
|
||||||
- Add Piwik tracking code
|
|
||||||
- Minor profile tweaks
|
|
||||||
|
|
||||||
## Version 0.2.3 (2017-02-05)
|
|
||||||
- Autolink/embed youtube videos and spotify links
|
|
||||||
|
|
||||||
## Version 0.2.2 (2017-02-05)
|
|
||||||
- Fix: allow syndication to work again (issue#42)
|
|
||||||
|
|
||||||
## Version 0.2.1 (2017-02-03)
|
|
||||||
- Add css for emoji labels
|
|
||||||
|
|
||||||
## Version 0.2 (2017-02-03)
|
|
||||||
- Update `syndicate-to` property to `mp-syndicate-to`
|
|
||||||
- Add my emoji-a11y dependency
|
|
||||||
- Upgrade to Laravel 5.4
|
|
||||||
|
|
||||||
## Version 0.1.7 (2017-01-27)
|
|
||||||
- Add a rel=me link to my own domain in my h-card.
|
|
||||||
|
|
||||||
## Version 0.1.6 (2017-01-27)
|
|
||||||
- Update the webmention parser to a version with a verified fix
|
|
||||||
|
|
||||||
## Version 0.1.5 (2017-01-27)
|
|
||||||
- Update the webmention parser version to fix a bug with displaying webmentions
|
|
||||||
|
|
||||||
## Version 0.1.4 (2017-01-27)
|
|
||||||
- Fix: refactor code slightly to allow multiple maps to be added to a page
|
|
||||||
|
|
||||||
## Version 0.1.3 (2017-01-26)
|
|
||||||
- cleanup frontend assets, update compressed versions
|
|
||||||
|
|
||||||
## Version 0.1.2 (2017-01-26)
|
|
||||||
- Improve syndication flow when working out which targets to use
|
|
||||||
- Use webpack/babel/es6 (this was a big one, code wise, functionality now basically the same though)
|
|
||||||
|
|
||||||
## Version 0.1.1 (2016-12-10)
|
|
||||||
- Fix: use correct link for footer iwc icon
|
|
||||||
|
|
||||||
## Version 0.1 (2016-12-10)
|
|
||||||
- Much better testing of micropub endpoints locally and on TravisCI
|
|
||||||
- Updating README
|
|
||||||
- Add IWC logo to footer
|
|
||||||
|
|
||||||
## Version 0.0.18 (2016-12-08)
|
|
||||||
- Some minor style tweaks
|
|
||||||
- Fix some validation issues
|
|
||||||
- Switch to Makefile for front-end build tasks
|
|
||||||
- Switch to Postgres based search
|
|
||||||
- Update travis to use aforementioned search and php 7.1
|
|
||||||
- Move syndication targets into a config file (issue#27)
|
|
||||||
|
|
||||||
## Version 0.0.17 (2016-11-25)
|
|
||||||
- Add a basic search feature using Laravel Scout and Algolia (issue#38)
|
|
||||||
- Get CI testing working with algolia
|
|
||||||
- Slightly better layout of replies
|
|
||||||
|
|
||||||
## Version 0.0.16.3 (2016-11-25)
|
|
||||||
- StyleCI fix
|
|
||||||
|
|
||||||
## Version 0.0.16.2 (2016-11-25)
|
|
||||||
- improved contact h-cards
|
|
||||||
- Better look in /contacts
|
|
||||||
- h-cards now have person-tags (issue#36)
|
|
||||||
- maps now have zoom controls (issue#37)
|
|
||||||
|
|
||||||
## Version 0.0.16.1 (2016-11-22)
|
|
||||||
- Break words
|
|
||||||
- Added a footer to all pages
|
|
||||||
- Added a colophon page
|
|
||||||
|
|
||||||
## Version 0.0.16 (2016-11-22)
|
|
||||||
- Much simpler website design
|
|
||||||
- Update mapbox to use Mapbox GL JS, things can be improved
|
|
||||||
- Make the homepage show notes, as well as bio (issue#16)
|
|
||||||
|
|
||||||
## Verison 0.0.15.13 (2016-11-08)
|
|
||||||
- Link to the source of a reply correctly (issue#33)
|
|
||||||
|
|
||||||
## Version 0.0.15.12 (2016-11-07)
|
|
||||||
- Fix micropub client in-reply-to name
|
|
||||||
|
|
||||||
## Version 0.0.15.11 (2016-11-07)
|
|
||||||
- Fix send webmention
|
|
||||||
|
|
||||||
## Version 0.0.15.10 (2016-11-07)
|
|
||||||
- Update typekit’s sri hash
|
|
||||||
|
|
||||||
## Version 0.0.15.9 (2016-11-07)
|
|
||||||
- Hotfix: not using cerated variable of foreach loop
|
|
||||||
|
|
||||||
## Version 0.0.15.8 (2016-11-07)
|
|
||||||
- Hotfix: facebook’s love-of appears as an in-reply-to without a published date
|
|
||||||
|
|
||||||
## Version 0.0.15.7 (2016-11-07)
|
|
||||||
- Add a reply icon in note metadata
|
|
||||||
- Allow notes to be deleted
|
|
||||||
|
|
||||||
## Version 0.0.15.6 (2016-11-03)
|
|
||||||
- Remove reply/like/repost links, not needed without indie-action
|
|
||||||
- Add facebook syndication link (issue#29)
|
|
||||||
|
|
||||||
## Version 0.0.15.5 (2016-10-31)
|
|
||||||
- Fix: update note view to use longitude in h-card for a place
|
|
||||||
|
|
||||||
## Version 0.0.15.4 (2016-10-26)
|
|
||||||
- Use an array with `syndicate-to` to allow multiple values
|
|
||||||
|
|
||||||
## Version 0.0.15.3 (2016-10-26)
|
|
||||||
- Fix: didn’t import the namespace for the facebook job
|
|
||||||
|
|
||||||
## Version 0.0.15.2 (2016-10-26)
|
|
||||||
- Fix: syntax error introduced in v0.0.15.1
|
|
||||||
|
|
||||||
## Version 0.0.15.1 (2016-10-26)
|
|
||||||
- Add facebook as a syndication target
|
|
||||||
|
|
||||||
## Version 0.0.15 (2016-10-26)
|
|
||||||
- Modify SyndicateToTwitter to use bridgy publish
|
|
||||||
- Add a SyndicateToFacebook job which also uses bridgy publish (issue#24)
|
|
||||||
- Modify views to facilitate bridgy publish (issue#26)
|
|
||||||
|
|
||||||
## Version 0.0.14.13 (2016-10-26)
|
|
||||||
- Fix: correct the syntax of Link headers (issue#25)
|
|
||||||
|
|
||||||
## Version 0.0.14.12 (2016-10-24)
|
|
||||||
- Attempt to fix some HTML validation issues
|
|
||||||
|
|
||||||
## Version 0.0.14.11 (2016-10-24)
|
|
||||||
- Having used `yarn` for npm packages, we now also use it for bower packages
|
|
||||||
- Update typekit sri hash
|
|
||||||
- Hide co-ordinates, in data tags, we want them to be read by machines, but not humans
|
|
||||||
- Use `h-card` for “places”, and`h-adr` for reverse lookup location name
|
|
||||||
|
|
||||||
## Version 0.0.14.10 (2016-10-21)
|
|
||||||
- Fix: Trying to get brid.gy markup compatibility
|
|
||||||
|
|
||||||
## Version 0.0.14.9 (2016-10-21)
|
|
||||||
- Include co-ordinates with notes and markup with appropriate microformats
|
|
||||||
- Add correct microformats for photos
|
|
||||||
|
|
||||||
## Version 0.0.14.8 (2016-10-20)
|
|
||||||
- Use the correct namespace
|
|
||||||
|
|
||||||
## Version 0.0.14.7 (2016-10-20)
|
|
||||||
- Add needed namespace (issue#23)
|
|
||||||
|
|
||||||
## Version 0.0.14.6 (2016-10-20)
|
|
||||||
- issue#23 again, also pinning against a tagged webmentions-parser release
|
|
||||||
|
|
||||||
## Version 0.0.14.5 (2016-10-20)
|
|
||||||
- Fix an issue in the save profile image job (issue#23)
|
|
||||||
|
|
||||||
## Version 0.0.14.4 (2016-10-19)
|
|
||||||
- Fix a bad explode() call in the syndicate job
|
|
||||||
|
|
||||||
## Version 0.0.14.3 (2016-10-19)
|
|
||||||
- Allow co-ordinates to be used for note location, reverse geocode place name will be used (w/o map)
|
|
||||||
- Switch from npm to yarn
|
|
||||||
|
|
||||||
## Version 0.0.14.2 (2016-10-17)
|
|
||||||
- Update .lock, particularly trying to get medialibrary working
|
|
||||||
|
|
||||||
## Version 0.0.14.1 (2016-10-10)
|
|
||||||
- Allow files uploaded to the client to be sent to the endoint without needing to use `media-tmp`
|
|
||||||
|
|
||||||
## Version 0.0.14 (2016-10-07)
|
|
||||||
- Fix image upload for notes
|
|
||||||
- Allow co-ordinates to be sent by the client as a geo: URI
|
|
||||||
- Allow endpoint to process geo: URIs for location
|
|
||||||
|
|
||||||
## Version 0.0.13.9 (2016-10-06)
|
|
||||||
- Hotfix, add missing semi-colon
|
|
||||||
|
|
||||||
## Version 0.0.13.8 (2016-10-06)
|
|
||||||
- Create a Place model instance in SyndicateToTwitter job to force laravel to access postgis methods
|
|
||||||
|
|
||||||
## Version 0.0.13.7 (2016-10-05)
|
|
||||||
- Use the correct `laravel-postgis` method call during syndication
|
|
||||||
|
|
||||||
## Version 0.0.13.6 (2016-10-05)
|
|
||||||
- Syndicate lat/lng values (issue#22)
|
|
||||||
|
|
||||||
## Version 0.0.13.5 (2016-10-05)
|
|
||||||
- Places can now be added to a new note created via micropub
|
|
||||||
|
|
||||||
## Version 0.0.13.4 (2016-10-03)
|
|
||||||
- Better working code for places in newnote.js (issue#21)
|
|
||||||
* In aid of this add ability to run micropub code locally
|
|
||||||
|
|
||||||
## Version 0.0.13.3 (2016-10-03)
|
|
||||||
- Use the actual results of places in `newnote.js` (issue#21)
|
|
||||||
|
|
||||||
## Version 0.0.13.2 (2016-10-03)
|
|
||||||
- Fix issues with fetch API and places when using micropub client
|
|
||||||
|
|
||||||
## Version 0.0.13.1 (2016-10-01)
|
|
||||||
- Add support for accuracy/uncertainty in geo URIs (issue#20,issue#9)
|
|
||||||
- Add some places tests
|
|
||||||
|
|
||||||
## Version 0.0.13 (2016-09-26)
|
|
||||||
- Better places support, particularly with micropub (issue#9)
|
|
||||||
- Uglify javascript for better performance (issue#19)
|
|
||||||
- Auto-link Spotify links (issue#18)
|
|
||||||
|
|
||||||
## Version 0.0.12 (2016-09-21)
|
|
||||||
- Better indication of number of replies to a note (issue#17)
|
|
||||||
- Use generic twitter status URL so my own profile name isn’t hardcoded (issue#14)
|
|
||||||
|
|
||||||
## Version 0.0.11.9 (2016-09-21)
|
|
||||||
- Fix: Correctly parse microformats data for single note view
|
|
||||||
|
|
||||||
## Version 0.0.11.8 (2016-09-21)
|
|
||||||
- Fix: remove index.html from generated url
|
|
||||||
|
|
||||||
## Version 0.0.11.7 (2016-09-21)
|
|
||||||
- Fix: need to create necessary directories first
|
|
||||||
|
|
||||||
## Version 0.0.11.6 (2016-09-20)
|
|
||||||
- Fix: save webmention HTML to correct location
|
|
||||||
|
|
||||||
## Version 0.0.11.5 (2016-09-20)
|
|
||||||
- Fix job dispatching to more in line with Laravel 5.3 practices
|
|
||||||
|
|
||||||
## Version 0.0.11.4 (2016-09-19)
|
|
||||||
- Better console output for the new webmention commands
|
|
||||||
|
|
||||||
## Version 0.0.11.3 (2016-09-19)
|
|
||||||
- Simplify how we filter/cache reply html
|
|
||||||
- Better handling of webmention reply HTML cache
|
|
||||||
|
|
||||||
## Version 0.0.11.2 (2016-09-19)
|
|
||||||
- Update Typekit’s javascript sri hash
|
|
||||||
|
|
||||||
## Version 0.0.11.1 (2016-09-17)
|
|
||||||
- Fix a syntax issue in the download webmention job
|
|
||||||
|
|
||||||
## Version 0.0.11 (2016-09-17)
|
|
||||||
- update linked GPG key (issue#7)
|
|
||||||
- Added `integrity` values to external assets (issue#10)
|
|
||||||
- Move Mapbox links into own sub-view (issue#11)
|
|
||||||
- Updated Mapbox version (issue#12)
|
|
||||||
- Massive refactor of webmention code, allowing for re-parse command (issue#8)
|
|
||||||
- Add license file (issue#13)
|
|
||||||
|
|
||||||
## Version 0.0.10 (2016-09-10)
|
|
||||||
- Add an artisan command for Sensiolab’s security check
|
|
||||||
- Remove `filp/whoops`, just use Laravel’s error reporting
|
|
||||||
- Better TokenMismatchException handling (issue#5)
|
|
||||||
|
|
||||||
## Version 0.0.9.2 (2016-09-08)
|
|
||||||
- Remove Piwik
|
|
||||||
- Updated some bower dependencies
|
|
||||||
- Tidy some `.git*` files
|
|
||||||
|
|
||||||
## Version 0.0.9.1 (2016-09-07)
|
|
||||||
- Fix an issue with syndicating notes.
|
|
||||||
|
|
||||||
## Version 0.0.9 (2016-09-06)
|
|
||||||
- Adding `jsonb` column to store webmentions’ microformats.
|
|
||||||
* As of L5.2 this needs a custom command to drop NOT NULL from content, L5.3 should allow a fix for this
|
|
||||||
- Refactor receiving webmention code
|
|
||||||
- Refactor sending webmention code to pass `webmention.rocks`
|
|
||||||
- Update to use Laravel 5.3
|
|
||||||
|
|
||||||
## Version 0.0.8.5 (2016-07-18)
|
|
||||||
- Set the size of the `textarea` in a form better
|
|
||||||
- Update to latest Guzzle to fix CVE-2016-5385
|
|
||||||
|
|
||||||
## Version 0.0.8.4 (2016-07-18)
|
|
||||||
- Make the revised non-elixir asset links absolute
|
|
||||||
|
|
||||||
## Version 0.0.8.3 (2016-07-18)
|
|
||||||
- Dump `laravel-elixir`, use gulp natively. Also this means using nginx and etags for cache-busting
|
|
||||||
|
|
||||||
## Version 0.0.8.2 (2016-07-15)
|
|
||||||
- Improve syndication parsing to allow better name display on new note form
|
|
||||||
|
|
||||||
## Version 0.0.8.1 (2016-07-13)
|
|
||||||
- Fix an issue in the syndication target parsing method
|
|
||||||
|
|
||||||
## Version 0.0.8 (2016-07-13)
|
|
||||||
- Allow new notes to be made by a JSON request from a micropub client
|
|
||||||
- Add DependencyCI support
|
|
||||||
|
|
||||||
## Version 0.0.7.1 (2016-07-04)
|
|
||||||
- Minor style fixes
|
|
||||||
|
|
||||||
## Version 0.0.7 (2016-07-04)
|
|
||||||
- Use JSON for syndication endpoint query response
|
|
||||||
- Use JSON for all micropub requests
|
|
||||||
- Add support for `q=config` query of the micropub endpoint
|
|
||||||
|
|
||||||
## Version 0.0.6.3 (2016-06-29)
|
|
||||||
- Fix an issue with dispatching the syndication job
|
|
||||||
|
|
||||||
## Version 0.0.6.2 (2016-06-28)
|
|
||||||
- Fix an issue with sending webmentions
|
|
||||||
|
|
||||||
## Version 0.0.6 (2016-06-28)
|
|
||||||
- Better use of `laravel-postgis`
|
|
||||||
- Change style for inline mini-profile images
|
|
||||||
|
|
||||||
## Version 0.0.5 (2016-06-23)
|
|
||||||
- Automatically send webmentions
|
|
||||||
- Change `mp-syndicate-to` to `syndicate-to`
|
|
||||||
|
|
||||||
## Version 0.0.4 (2016-06-21)
|
|
||||||
- Move bower components into their own subdir
|
|
||||||
- Move my js into `resources/`, apply an eslint pre-commit hook
|
|
||||||
- Better guplfile, next thing is to add cleanup of old compressed files
|
|
||||||
- Update `spatie/laravel-medialibrary` to v4, tweak associated code
|
|
||||||
- Merge in upstream changes
|
|
||||||
- Add a stylelint lint-staged hook
|
|
||||||
|
|
||||||
## Version 0.0.3 (2013-06-09)
|
|
||||||
- Better tag normalisation code organisation
|
|
||||||
- Remove `jonnybarnes/unicode-tools` dependency and clean up relevant code
|
|
||||||
|
|
||||||
## Version 0.0.2 (2016-05-25)
|
|
||||||
- Fix issue#1: tagged notes page needs the tag from the URL normalising.
|
|
||||||
|
|
||||||
## Version 0.0.1 (2016-05-25)
|
|
||||||
- Initial release
|
|
||||||
|
|
@ -1,13 +1,16 @@
|
||||||
{
|
{
|
||||||
"name": "jonnybarnes/jonnybarnes.uk",
|
"name": "jonnybarnes/jonnybarnes.uk",
|
||||||
"description": "The code for jonnybanres.uk, based on Laravel 5.4",
|
|
||||||
"keywords": ["framework", "laravel", "indieweb"],
|
|
||||||
"license": "CC0-1.0",
|
|
||||||
"type": "project",
|
"type": "project",
|
||||||
|
"description": "The code for jonnybanres.uk, based on Laravel 5.4",
|
||||||
|
"keywords": [
|
||||||
|
"framework",
|
||||||
|
"laravel",
|
||||||
|
"indieweb"
|
||||||
|
],
|
||||||
|
"license": "CC0-1.0",
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.2.0",
|
"php": ">=7.2.0",
|
||||||
"cviebrock/eloquent-sluggable": "~4.3",
|
"cviebrock/eloquent-sluggable": "~4.3",
|
||||||
"ezyang/htmlpurifier": "~4.6",
|
|
||||||
"fideloper/proxy": "~4.0",
|
"fideloper/proxy": "~4.0",
|
||||||
"guzzlehttp/guzzle": "~6.0",
|
"guzzlehttp/guzzle": "~6.0",
|
||||||
"indieauth/client": "~0.1",
|
"indieauth/client": "~0.1",
|
||||||
|
|
@ -30,28 +33,40 @@
|
||||||
"ramsey/uuid": "^3.5",
|
"ramsey/uuid": "^3.5",
|
||||||
"sensiolabs/security-checker": "^5.0",
|
"sensiolabs/security-checker": "^5.0",
|
||||||
"spatie/browsershot": "~3.0",
|
"spatie/browsershot": "~3.0",
|
||||||
|
"spatie/commonmark-highlighter": "^1.0",
|
||||||
|
"tgalopin/html-sanitizer": "^1.1",
|
||||||
"thujohn/twitter": "~2.0"
|
"thujohn/twitter": "~2.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
|
"beyondcode/laravel-dump-server": "^1.0",
|
||||||
"barryvdh/laravel-debugbar": "~3.0",
|
"barryvdh/laravel-debugbar": "~3.0",
|
||||||
"codedungeon/phpunit-result-printer": "^0.22.0",
|
"codedungeon/phpunit-result-printer": "^0.24.0",
|
||||||
"filp/whoops": "~2.0",
|
"filp/whoops": "~2.0",
|
||||||
"fzaninotto/faker": "~1.4",
|
"fzaninotto/faker": "~1.4",
|
||||||
"jakub-onderka/php-parallel-lint": "^1.0.0",
|
|
||||||
"laravel/dusk": "^4.0",
|
"laravel/dusk": "^4.0",
|
||||||
"mockery/mockery": "~1.0",
|
"mockery/mockery": "~1.0",
|
||||||
"nunomaduro/collision": "^2.0",
|
"nunomaduro/collision": "^2.0",
|
||||||
"phpunit/phpunit": "~7.0",
|
"phpunit/phpunit": "~7.0",
|
||||||
"symfony/thanks": "~1.0"
|
"symfony/thanks": "~1.0"
|
||||||
},
|
},
|
||||||
|
"config": {
|
||||||
|
"optimize-autoloader": true,
|
||||||
|
"preferred-install": "dist",
|
||||||
|
"sort-packages": true
|
||||||
|
},
|
||||||
|
"extra": {
|
||||||
|
"laravel": {
|
||||||
|
"dont-discover": []
|
||||||
|
}
|
||||||
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"App\\": "app/"
|
||||||
|
},
|
||||||
"classmap": [
|
"classmap": [
|
||||||
"database/seeds",
|
"database/seeds",
|
||||||
"database/factories"
|
"database/factories"
|
||||||
],
|
],
|
||||||
"psr-4": {
|
|
||||||
"App\\": "app/"
|
|
||||||
},
|
|
||||||
"files": [
|
"files": [
|
||||||
"helpers.php"
|
"helpers.php"
|
||||||
]
|
]
|
||||||
|
|
@ -61,29 +76,18 @@
|
||||||
"Tests\\": "tests"
|
"Tests\\": "tests"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"extra": {
|
"minimum-stability": "dev",
|
||||||
"laravel": {
|
"prefer-stable": true,
|
||||||
"dont-discover": [
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
"post-autoload-dump": [
|
||||||
|
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
|
||||||
|
"@php artisan package:discover --ansi"
|
||||||
|
],
|
||||||
"post-root-package-install": [
|
"post-root-package-install": [
|
||||||
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
|
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
|
||||||
],
|
],
|
||||||
"post-create-project-cmd": [
|
"post-create-project-cmd": [
|
||||||
"@php artisan key:generate"
|
"@php artisan key:generate --ansi"
|
||||||
],
|
|
||||||
"post-autoload-dump": [
|
|
||||||
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
|
|
||||||
"@php artisan package:discover"
|
|
||||||
]
|
]
|
||||||
},
|
}
|
||||||
"config": {
|
|
||||||
"preferred-install": "dist",
|
|
||||||
"sort-packages": true,
|
|
||||||
"optimize-autoloader": true
|
|
||||||
},
|
|
||||||
"minimum-stability": "dev",
|
|
||||||
"prefer-stable": true
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
1644
composer.lock
generated
1644
composer.lock
generated
File diff suppressed because it is too large
Load diff
|
|
@ -54,6 +54,8 @@ return [
|
||||||
|
|
||||||
'url' => env('APP_URL', 'http://localhost'),
|
'url' => env('APP_URL', 'http://localhost'),
|
||||||
|
|
||||||
|
'asset_url' => env('ASSET_URL', null),
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
| Application Long URL
|
| Application Long URL
|
||||||
|
|
@ -126,6 +128,19 @@ return [
|
||||||
|
|
||||||
'fallback_locale' => 'en',
|
'fallback_locale' => 'en',
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Faker Locale
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| This locale will be used by the Faker PHP library when generating fake
|
||||||
|
| data for your database seeds. For example, this will be used to get
|
||||||
|
| localized telephone numbers, street address information and more.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'faker_locale' => 'en_US',
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
| Encryption Key
|
| Encryption Key
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Support\Str;
|
||||||
|
|
||||||
return [
|
return [
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -86,6 +88,6 @@ return [
|
||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'prefix' => 'laravel',
|
'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache'),
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue