From 8e1c9801fb2e2ec7021592afe8ff8c1ef88ed84c Mon Sep 17 00:00:00 2001 From: James Brooks Date: Sun, 3 Dec 2017 17:34:59 +0000 Subject: [PATCH] When disabling third-party deps, don't use Gravatar. Fixes #2810 --- app/Composers/CurrentUserComposer.php | 3 +- app/Models/User.php | 26 +-- app/Presenters/UserPresenter.php | 50 +++++ composer.json | 1 + composer.lock | 185 +++++++++++++++++- config/app.php | 1 + .../dashboard/partials/sidebar.blade.php | 2 +- .../views/dashboard/team/index.blade.php | 2 +- .../views/dashboard/user/index.blade.php | 2 +- 9 files changed, 254 insertions(+), 18 deletions(-) create mode 100644 app/Presenters/UserPresenter.php diff --git a/app/Composers/CurrentUserComposer.php b/app/Composers/CurrentUserComposer.php index f7f8c35d..d7afe3b9 100644 --- a/app/Composers/CurrentUserComposer.php +++ b/app/Composers/CurrentUserComposer.php @@ -13,6 +13,7 @@ namespace CachetHQ\Cachet\Composers; use Illuminate\Contracts\View\View; use Illuminate\Support\Facades\Auth; +use McCool\LaravelAutoPresenter\Facades\AutoPresenter; /** * This is the current user composer class. @@ -32,6 +33,6 @@ class CurrentUserComposer */ public function compose(View $view) { - $view->withCurrentUser(Auth::user()); + $view->withCurrentUser(AutoPresenter::decorate(Auth::user())); } } diff --git a/app/Models/User.php b/app/Models/User.php index 3be0e867..25b9a056 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -12,18 +12,20 @@ namespace CachetHQ\Cachet\Models; use AltThree\Validator\ValidatingTrait; +use CachetHQ\Cachet\Presenters\UserPresenter; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Illuminate\Support\Facades\Hash; +use McCool\LaravelAutoPresenter\HasPresenter; /** * This is the user model. * * @author James Brooks */ -class User extends Authenticatable +class User extends Authenticatable implements HasPresenter { use Notifiable, ValidatingTrait; @@ -162,18 +164,6 @@ class User extends Authenticatable return $this; } - /** - * Returns a Gravatar URL for the users email address. - * - * @param int $size - * - * @return string - */ - public function getGravatarAttribute($size = 200) - { - return sprintf('https://www.gravatar.com/avatar/%s?size=%d', md5(strtolower($this->email)), $size); - } - /** * Find by api_key, or throw an exception. * @@ -220,4 +210,14 @@ class User extends Authenticatable { return trim($this->google_2fa_secret) !== ''; } + + /** + * Get the presenter class. + * + * @return string + */ + public function getPresenterClass() + { + return UserPresenter::class; + } } diff --git a/app/Presenters/UserPresenter.php b/app/Presenters/UserPresenter.php new file mode 100644 index 00000000..2dc8fa33 --- /dev/null +++ b/app/Presenters/UserPresenter.php @@ -0,0 +1,50 @@ + + */ +class UserPresenter extends BasePresenter implements Arrayable +{ + /** + * Returns the users avatar. + * + * @return string + */ + public function avatar() + { + if (setting('enable_external_dependencies')) { + return sprintf('https://www.gravatar.com/avatar/%s?size=%d', md5(strtolower($this->email)), 200); + } + + return Avatar::create($this->username)->toBase64(); + } + + /** + * Convert the presenter instance to an array. + * + * @return string[] + */ + public function toArray() + { + return array_merge($this->wrappedObject->toArray(), [ + 'avatar' => $this->avatar(), + ]); + } +} diff --git a/composer.json b/composer.json index 7b628fa6..d335d9fe 100644 --- a/composer.json +++ b/composer.json @@ -47,6 +47,7 @@ "jenssegers/date": "^3.2", "laravel/framework": "^5.4", "laravel/tinker": "^1.0", + "laravolt/avatar": "^1.8", "mccool/laravel-auto-presenter": "^5.0", "nexmo/client": "@beta", "pragmarx/google2fa": "^0.7.1", diff --git a/composer.lock b/composer.lock index 7137f460..de140a31 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "25204c32b5e7a97cfc7b64872b7e7299", + "content-hash": "70b2147b1fc8086bacd0dff2957d22a1", "packages": [ { "name": "alt-three/badger", @@ -802,6 +802,62 @@ ], "time": "2016-05-05T11:49:03+00:00" }, + { + "name": "danielstjules/stringy", + "version": "2.4.0", + "source": { + "type": "git", + "url": "https://github.com/danielstjules/Stringy.git", + "reference": "edbda419cbe4bcc3cb200b7c9811cb6597bf058b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/danielstjules/Stringy/zipball/edbda419cbe4bcc3cb200b7c9811cb6597bf058b", + "reference": "edbda419cbe4bcc3cb200b7c9811cb6597bf058b", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "symfony/polyfill-mbstring": "~1.1" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Stringy\\": "src/" + }, + "files": [ + "src/Create.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Daniel St. Jules", + "email": "danielst.jules@gmail.com", + "homepage": "http://www.danielstjules.com" + } + ], + "description": "A string manipulation library with multibyte support", + "homepage": "https://github.com/danielstjules/Stringy", + "keywords": [ + "UTF", + "helpers", + "manipulation", + "methods", + "multibyte", + "string", + "utf-8", + "utility", + "utils" + ], + "time": "2017-03-02T20:43:29+00:00" + }, { "name": "dnoegel/php-xdg-base-dir", "version": "0.1", @@ -1900,6 +1956,76 @@ ], "time": "2017-03-20T17:10:46+00:00" }, + { + "name": "intervention/image", + "version": "2.4.1", + "source": { + "type": "git", + "url": "https://github.com/Intervention/image.git", + "reference": "3603dbcc9a17d307533473246a6c58c31cf17919" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Intervention/image/zipball/3603dbcc9a17d307533473246a6c58c31cf17919", + "reference": "3603dbcc9a17d307533473246a6c58c31cf17919", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "guzzlehttp/psr7": "~1.1", + "php": ">=5.4.0" + }, + "require-dev": { + "mockery/mockery": "~0.9.2", + "phpunit/phpunit": "^4.8 || ^5.7" + }, + "suggest": { + "ext-gd": "to use GD library based image processing.", + "ext-imagick": "to use Imagick based image processing.", + "intervention/imagecache": "Caching extension for the Intervention Image library" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + }, + "laravel": { + "providers": [ + "Intervention\\Image\\ImageServiceProvider" + ], + "aliases": { + "Image": "Intervention\\Image\\Facades\\Image" + } + } + }, + "autoload": { + "psr-4": { + "Intervention\\Image\\": "src/Intervention/Image" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Oliver Vogel", + "email": "oliver@olivervogel.com", + "homepage": "http://olivervogel.com/" + } + ], + "description": "Image handling and manipulation library with support for Laravel integration", + "homepage": "http://image.intervention.io/", + "keywords": [ + "gd", + "image", + "imagick", + "laravel", + "thumbnail", + "watermark" + ], + "time": "2017-09-21T16:29:17+00:00" + }, { "name": "jakub-onderka/php-console-color", "version": "0.1", @@ -2244,6 +2370,63 @@ ], "time": "2017-07-13T13:11:05+00:00" }, + { + "name": "laravolt/avatar", + "version": "1.8.1", + "source": { + "type": "git", + "url": "https://github.com/laravolt/avatar.git", + "reference": "7ab8f07333410ddc6f833bd8460fc9bdcab67fb3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravolt/avatar/zipball/7ab8f07333410ddc6f833bd8460fc9bdcab67fb3", + "reference": "7ab8f07333410ddc6f833bd8460fc9bdcab67fb3", + "shasum": "" + }, + "require": { + "danielstjules/stringy": "~2.2", + "illuminate/cache": "~5.2", + "illuminate/support": "~5.2", + "intervention/image": "^2.1", + "php": ">=5.5.0" + }, + "require-dev": { + "mockery/mockery": "0.9.*", + "phpunit/phpunit": "4.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "Laravolt\\Avatar\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bayu Hendra Winata", + "email": "uyab.exe@gmail.com", + "homepage": "http://id-laravel.com", + "role": "Developer" + } + ], + "description": "Display avatar as base64", + "homepage": "https://github.com/laravolt/avatar", + "keywords": [ + "avatar", + "laravel", + "laravolt" + ], + "time": "2017-06-02T16:39:53+00:00" + }, { "name": "lcobucci/jwt", "version": "3.2.2", diff --git a/config/app.php b/config/app.php index 2fcca748..dbbe5132 100644 --- a/config/app.php +++ b/config/app.php @@ -187,6 +187,7 @@ return [ GrahamCampbell\Security\SecurityServiceProvider::class, Jenssegers\Date\DateServiceProvider::class, Laravel\Tinker\TinkerServiceProvider::class, + Laravolt\Avatar\ServiceProvider::class, McCool\LaravelAutoPresenter\AutoPresenterServiceProvider::class, PragmaRX\Google2FA\Vendor\Laravel\ServiceProvider::class, Roumen\Feed\FeedServiceProvider::class, diff --git a/resources/views/dashboard/partials/sidebar.blade.php b/resources/views/dashboard/partials/sidebar.blade.php index cee26e78..9471c891 100644 --- a/resources/views/dashboard/partials/sidebar.blade.php +++ b/resources/views/dashboard/partials/sidebar.blade.php @@ -2,7 +2,7 @@