diff --git a/.gitignore b/.gitignore
index 69f0e2909..7417bbdd8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,4 +10,5 @@ Homestead.yaml
/public/bower
/storage/images
_ide_helper.php
-/storage/debugbar
\ No newline at end of file
+/storage/debugbar
+.phpstorm.meta.php
\ No newline at end of file
diff --git a/app/EmailConfirmation.php b/app/EmailConfirmation.php
deleted file mode 100644
index e77b754bb..000000000
--- a/app/EmailConfirmation.php
+++ /dev/null
@@ -1,16 +0,0 @@
-belongsTo(User::class);
- }
-
-}
diff --git a/app/Events/Event.php b/app/Events/Event.php
deleted file mode 100644
index dfe173828..000000000
--- a/app/Events/Event.php
+++ /dev/null
@@ -1,8 +0,0 @@
-getPrevious());
return $message;
}
+
+ /**
+ * Convert an authentication exception into an unauthenticated response.
+ *
+ * @param \Illuminate\Http\Request $request
+ * @param \Illuminate\Auth\AuthenticationException $exception
+ * @return \Illuminate\Http\Response
+ */
+ protected function unauthenticated($request, AuthenticationException $exception)
+ {
+ if ($request->expectsJson()) {
+ return response()->json(['error' => 'Unauthenticated.'], 401);
+ }
+
+ return redirect()->guest('login');
+ }
}
diff --git a/app/Http/Controllers/Auth/ForgotPasswordController.php b/app/Http/Controllers/Auth/ForgotPasswordController.php
new file mode 100644
index 000000000..d93854e23
--- /dev/null
+++ b/app/Http/Controllers/Auth/ForgotPasswordController.php
@@ -0,0 +1,33 @@
+middleware('guest');
+ parent::__construct();
+ }
+}
\ No newline at end of file
diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php
new file mode 100644
index 000000000..0de4a8282
--- /dev/null
+++ b/app/Http/Controllers/Auth/LoginController.php
@@ -0,0 +1,123 @@
+middleware('guest', ['only' => ['getLogin', 'postLogin']]);
+ $this->socialAuthService = $socialAuthService;
+ $this->userRepo = $userRepo;
+ $this->redirectPath = baseUrl('/');
+ $this->redirectAfterLogout = baseUrl('/login');
+ parent::__construct();
+ }
+
+ public function username()
+ {
+ return config('auth.method') === 'standard' ? 'email' : 'username';
+ }
+
+ /**
+ * Overrides the action when a user is authenticated.
+ * If the user authenticated but does not exist in the user table we create them.
+ * @param Request $request
+ * @param Authenticatable $user
+ * @return \Illuminate\Http\RedirectResponse
+ * @throws AuthException
+ */
+ protected function authenticated(Request $request, Authenticatable $user)
+ {
+ // Explicitly log them out for now if they do no exist.
+ if (!$user->exists) auth()->logout($user);
+
+ if (!$user->exists && $user->email === null && !$request->has('email')) {
+ $request->flash();
+ session()->flash('request-email', true);
+ return redirect('/login');
+ }
+
+ if (!$user->exists && $user->email === null && $request->has('email')) {
+ $user->email = $request->get('email');
+ }
+
+ if (!$user->exists) {
+
+ // Check for users with same email already
+ $alreadyUser = $user->newQuery()->where('email', '=', $user->email)->count() > 0;
+ if ($alreadyUser) {
+ throw new AuthException('A user with the email ' . $user->email . ' already exists but with different credentials.');
+ }
+
+ $user->save();
+ $this->userRepo->attachDefaultRole($user);
+ auth()->login($user);
+ }
+
+ $path = session()->pull('url.intended', '/');
+ $path = baseUrl($path, true);
+ return redirect($path);
+ }
+
+ /**
+ * Show the application login form.
+ * @return \Illuminate\Http\Response
+ */
+ public function getLogin()
+ {
+ $socialDrivers = $this->socialAuthService->getActiveDrivers();
+ $authMethod = config('auth.method');
+ return view('auth/login', ['socialDrivers' => $socialDrivers, 'authMethod' => $authMethod]);
+ }
+
+ /**
+ * Redirect to the relevant social site.
+ * @param $socialDriver
+ * @return \Symfony\Component\HttpFoundation\RedirectResponse
+ */
+ public function getSocialLogin($socialDriver)
+ {
+ session()->put('social-callback', 'login');
+ return $this->socialAuthService->startLogIn($socialDriver);
+ }
+}
\ No newline at end of file
diff --git a/app/Http/Controllers/Auth/AuthController.php b/app/Http/Controllers/Auth/RegisterController.php
similarity index 68%
rename from app/Http/Controllers/Auth/AuthController.php
rename to app/Http/Controllers/Auth/RegisterController.php
index f2d3b2741..5b3719bc0 100644
--- a/app/Http/Controllers/Auth/AuthController.php
+++ b/app/Http/Controllers/Auth/RegisterController.php
@@ -1,62 +1,68 @@
-middleware('guest', ['only' => ['getLogin', 'postLogin', 'getRegister', 'postRegister']]);
+ $this->middleware('guest');
$this->socialAuthService = $socialAuthService;
$this->emailConfirmationService = $emailConfirmationService;
$this->userRepo = $userRepo;
+ $this->redirectTo = baseUrl('/');
$this->redirectPath = baseUrl('/');
- $this->redirectAfterLogout = baseUrl('/login');
$this->username = config('auth.method') === 'standard' ? 'email' : 'username';
parent::__construct();
}
/**
* Get a validator for an incoming registration request.
+ *
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
@@ -69,6 +75,10 @@ class AuthController extends Controller
]);
}
+ /**
+ * Check whether or not registrations are allowed in the app settings.
+ * @throws UserRegistrationException
+ */
protected function checkRegistrationAllowed()
{
if (!setting('registration-enabled')) {
@@ -78,7 +88,7 @@ class AuthController extends Controller
/**
* Show the application registration form.
- * @return \Illuminate\Http\Response
+ * @return Response
*/
public function getRegister()
{
@@ -89,9 +99,10 @@ class AuthController extends Controller
/**
* Handle a registration request for the application.
- * @param \Illuminate\Http\Request $request
- * @return \Illuminate\Http\Response
+ * @param Request|\Illuminate\Http\Request $request
+ * @return Response
* @throws UserRegistrationException
+ * @throws \Illuminate\Foundation\Validation\ValidationException
*/
public function postRegister(Request $request)
{
@@ -108,66 +119,18 @@ class AuthController extends Controller
return $this->registerUser($userData);
}
-
/**
- * Overrides the action when a user is authenticated.
- * If the user authenticated but does not exist in the user table we create them.
- * @param Request $request
- * @param Authenticatable $user
- * @return \Illuminate\Http\RedirectResponse
- * @throws AuthException
+ * Create a new user instance after a valid registration.
+ * @param array $data
+ * @return User
*/
- protected function authenticated(Request $request, Authenticatable $user)
+ protected function create(array $data)
{
- // Explicitly log them out for now if they do no exist.
- if (!$user->exists) auth()->logout($user);
-
- if (!$user->exists && $user->email === null && !$request->has('email')) {
- $request->flash();
- session()->flash('request-email', true);
- return redirect('/login');
- }
-
- if (!$user->exists && $user->email === null && $request->has('email')) {
- $user->email = $request->get('email');
- }
-
- if (!$user->exists) {
-
- // Check for users with same email already
- $alreadyUser = $user->newQuery()->where('email', '=', $user->email)->count() > 0;
- if ($alreadyUser) {
- throw new AuthException('A user with the email ' . $user->email . ' already exists but with different credentials.');
- }
-
- $user->save();
- $this->userRepo->attachDefaultRole($user);
- auth()->login($user);
- }
-
- $path = session()->pull('url.intended', '/');
- $path = baseUrl($path, true);
- return redirect($path);
- }
-
- /**
- * Register a new user after a registration callback.
- * @param $socialDriver
- * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
- * @throws UserRegistrationException
- */
- protected function socialRegisterCallback($socialDriver)
- {
- $socialUser = $this->socialAuthService->handleRegistrationCallback($socialDriver);
- $socialAccount = $this->socialAuthService->fillSocialAccount($socialDriver, $socialUser);
-
- // Create an array of the user data to create a new user instance
- $userData = [
- 'name' => $socialUser->getName(),
- 'email' => $socialUser->getEmail(),
- 'password' => str_random(30)
- ];
- return $this->registerUser($userData, $socialAccount);
+ return User::create([
+ 'name' => $data['name'],
+ 'email' => $data['email'],
+ 'password' => bcrypt($data['password']),
+ ]);
}
/**
@@ -176,7 +139,7 @@ class AuthController extends Controller
* @param bool|false|SocialAccount $socialAccount
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
* @throws UserRegistrationException
- * @throws \BookStack\Exceptions\ConfirmationEmailException
+ * @throws ConfirmationEmailException
*/
protected function registerUser(array $userData, $socialAccount = false)
{
@@ -213,18 +176,6 @@ class AuthController extends Controller
return view('auth/register-confirm');
}
- /**
- * View the confirmation email as a standard web page.
- * @param $token
- * @return \Illuminate\View\View
- * @throws UserRegistrationException
- */
- public function viewConfirmEmail($token)
- {
- $confirmation = $this->emailConfirmationService->getEmailConfirmationFromToken($token);
- return view('emails/email-confirmation', ['token' => $confirmation->token]);
- }
-
/**
* Confirms an email via a token and logs the user into the system.
* @param $token
@@ -237,7 +188,7 @@ class AuthController extends Controller
$user = $confirmation->user;
$user->email_confirmed = true;
$user->save();
- auth()->login($confirmation->user);
+ auth()->login($user);
session()->flash('success', 'Your email has been confirmed!');
$this->emailConfirmationService->deleteConfirmationsByUser($user);
return redirect($this->redirectPath);
@@ -269,28 +220,6 @@ class AuthController extends Controller
return redirect('/register/confirm');
}
- /**
- * Show the application login form.
- * @return \Illuminate\Http\Response
- */
- public function getLogin()
- {
- $socialDrivers = $this->socialAuthService->getActiveDrivers();
- $authMethod = config('auth.method');
- return view('auth/login', ['socialDrivers' => $socialDrivers, 'authMethod' => $authMethod]);
- }
-
- /**
- * Redirect to the relevant social site.
- * @param $socialDriver
- * @return \Symfony\Component\HttpFoundation\RedirectResponse
- */
- public function getSocialLogin($socialDriver)
- {
- session()->put('social-callback', 'login');
- return $this->socialAuthService->startLogIn($socialDriver);
- }
-
/**
* Redirect to the social site for authentication intended to register.
* @param $socialDriver
@@ -334,4 +263,25 @@ class AuthController extends Controller
return $this->socialAuthService->detachSocialAccount($socialDriver);
}
-}
+ /**
+ * Register a new user after a registration callback.
+ * @param $socialDriver
+ * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
+ * @throws UserRegistrationException
+ */
+ protected function socialRegisterCallback($socialDriver)
+ {
+ $socialUser = $this->socialAuthService->handleRegistrationCallback($socialDriver);
+ $socialAccount = $this->socialAuthService->fillSocialAccount($socialDriver, $socialUser);
+
+ // Create an array of the user data to create a new user instance
+ $userData = [
+ 'name' => $socialUser->getName(),
+ 'email' => $socialUser->getEmail(),
+ 'password' => str_random(30)
+ ];
+ return $this->registerUser($userData, $socialAccount);
+ }
+
+
+}
\ No newline at end of file
diff --git a/app/Http/Controllers/Auth/PasswordController.php b/app/Http/Controllers/Auth/ResetPasswordController.php
similarity index 82%
rename from app/Http/Controllers/Auth/PasswordController.php
rename to app/Http/Controllers/Auth/ResetPasswordController.php
index 038e444d2..656b8cc42 100644
--- a/app/Http/Controllers/Auth/PasswordController.php
+++ b/app/Http/Controllers/Auth/ResetPasswordController.php
@@ -5,7 +5,7 @@ namespace BookStack\Http\Controllers\Auth;
use BookStack\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ResetsPasswords;
-class PasswordController extends Controller
+class ResetPasswordController extends Controller
{
/*
|--------------------------------------------------------------------------
@@ -20,13 +20,14 @@ class PasswordController extends Controller
use ResetsPasswords;
- protected $redirectTo = '/';
-
/**
- * Create a new password controller instance.
+ * Create a new controller instance.
+ *
+ * @return void
*/
public function __construct()
{
$this->middleware('guest');
+ parent::__construct();
}
-}
+}
\ No newline at end of file
diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php
index 26eeb3002..43292d941 100644
--- a/app/Http/Controllers/Controller.php
+++ b/app/Http/Controllers/Controller.php
@@ -30,17 +30,22 @@ abstract class Controller extends BaseController
*/
public function __construct()
{
- // Get a user instance for the current user
- $user = auth()->user();
- if (!$user) $user = User::getDefault();
+ $this->middleware(function ($request, $next) {
- // Share variables with views
- view()->share('signedIn', auth()->check());
- view()->share('currentUser', $user);
+ // Get a user instance for the current user
+ $user = auth()->user();
+ if (!$user) $user = User::getDefault();
- // Share variables with controllers
- $this->currentUser = $user;
- $this->signedIn = auth()->check();
+ // Share variables with views
+ view()->share('signedIn', auth()->check());
+ view()->share('currentUser', $user);
+
+ // Share variables with controllers
+ $this->currentUser = $user;
+ $this->signedIn = auth()->check();
+
+ return $next($request);
+ });
}
/**
diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php
index a1f2a581f..f1d95f5c0 100644
--- a/app/Http/Kernel.php
+++ b/app/Http/Kernel.php
@@ -9,15 +9,32 @@ class Kernel extends HttpKernel
/**
* The application's global HTTP middleware stack.
*
+ * These middleware are run during every request to your application.
+ *
* @var array
*/
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
- \BookStack\Http\Middleware\EncryptCookies::class,
- \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
- \Illuminate\Session\Middleware\StartSession::class,
- \Illuminate\View\Middleware\ShareErrorsFromSession::class,
- \BookStack\Http\Middleware\VerifyCsrfToken::class,
+ ];
+
+ /**
+ * The application's route middleware groups.
+ *
+ * @var array
+ */
+ protected $middlewareGroups = [
+ 'web' => [
+ \BookStack\Http\Middleware\EncryptCookies::class,
+ \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
+ \Illuminate\Session\Middleware\StartSession::class,
+ \Illuminate\View\Middleware\ShareErrorsFromSession::class,
+ \BookStack\Http\Middleware\VerifyCsrfToken::class,
+ \Illuminate\Routing\Middleware\SubstituteBindings::class,
+ ],
+ 'api' => [
+ 'throttle:60,1',
+ 'bindings',
+ ],
];
/**
@@ -26,6 +43,7 @@ class Kernel extends HttpKernel
* @var array
*/
protected $routeMiddleware = [
+ 'can' => \Illuminate\Auth\Middleware\Authorize::class,
'auth' => \BookStack\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'guest' => \BookStack\Http\Middleware\RedirectIfAuthenticated::class,
diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php
index 372f30bf6..8461ed0ba 100644
--- a/app/Http/Middleware/Authenticate.php
+++ b/app/Http/Middleware/Authenticate.php
@@ -33,7 +33,7 @@ class Authenticate
public function handle($request, Closure $next)
{
if ($this->auth->check() && setting('registration-confirmation') && !$this->auth->user()->email_confirmed) {
- return redirect()->guest(baseUrl('/register/confirm/awaiting'));
+ return redirect(baseUrl('/register/confirm/awaiting'));
}
if ($this->auth->guest() && !setting('app-public')) {
diff --git a/app/Http/Middleware/RedirectIfAuthenticated.php b/app/Http/Middleware/RedirectIfAuthenticated.php
index ab8ce4d3a..2b3c64695 100644
--- a/app/Http/Middleware/RedirectIfAuthenticated.php
+++ b/app/Http/Middleware/RedirectIfAuthenticated.php
@@ -34,7 +34,8 @@ class RedirectIfAuthenticated
*/
public function handle($request, Closure $next)
{
- if ($this->auth->check()) {
+ $requireConfirmation = setting('registration-confirmation');
+ if ($this->auth->check() && (!$requireConfirmation || ($requireConfirmation && $this->auth->user()->email_confirmed))) {
return redirect('/');
}
diff --git a/app/Jobs/Job.php b/app/Jobs/Job.php
deleted file mode 100644
index 780af746b..000000000
--- a/app/Jobs/Job.php
+++ /dev/null
@@ -1,21 +0,0 @@
-token = $token;
+ }
+
+ /**
+ * Get the notification's delivery channels.
+ *
+ * @param mixed $notifiable
+ * @return array
+ */
+ public function via($notifiable)
+ {
+ return ['mail'];
+ }
+
+ /**
+ * Get the mail representation of the notification.
+ *
+ * @param mixed $notifiable
+ * @return \Illuminate\Notifications\Messages\MailMessage
+ */
+ public function toMail($notifiable)
+ {
+ return (new MailMessage)
+ ->subject('Confirm your email on ' . session('app-name'))
+ ->greeting('Thanks for joining ' . setting('app-name') . '!')
+ ->line('Please confirm your email address by clicking the button below:')
+ ->action('Confirm Email', baseUrl('/register/confirm/' . $this->token));
+ }
+
+}
diff --git a/app/Notifications/ResetPassword.php b/app/Notifications/ResetPassword.php
new file mode 100644
index 000000000..646030a10
--- /dev/null
+++ b/app/Notifications/ResetPassword.php
@@ -0,0 +1,50 @@
+token = $token;
+ }
+
+ /**
+ * Get the notification's channels.
+ *
+ * @param mixed $notifiable
+ * @return array|string
+ */
+ public function via($notifiable)
+ {
+ return ['mail'];
+ }
+
+ /**
+ * Build the mail representation of the notification.
+ *
+ * @return \Illuminate\Notifications\Messages\MailMessage
+ */
+ public function toMail()
+ {
+ return (new MailMessage)
+ ->line('You are receiving this email because we received a password reset request for your account.')
+ ->action('Reset Password', baseUrl('password/reset/' . $this->token))
+ ->line('If you did not request a password reset, no further action is required.');
+ }
+}
diff --git a/app/Providers/BroadcastServiceProvider.php b/app/Providers/BroadcastServiceProvider.php
new file mode 100644
index 000000000..11e3cc6d2
--- /dev/null
+++ b/app/Providers/BroadcastServiceProvider.php
@@ -0,0 +1,26 @@
+id === (int) $userId;
+// });
+ }
+}
diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php
index f754b87a9..3802f20c0 100644
--- a/app/Providers/EventServiceProvider.php
+++ b/app/Providers/EventServiceProvider.php
@@ -21,13 +21,10 @@ class EventServiceProvider extends ServiceProvider
/**
* Register any other events for your application.
*
- * @param \Illuminate\Contracts\Events\Dispatcher $events
* @return void
*/
- public function boot(DispatcherContract $events)
+ public function boot()
{
- parent::boot($events);
-
- //
+ parent::boot();
}
}
diff --git a/app/Providers/PaginationServiceProvider.php b/app/Providers/PaginationServiceProvider.php
index a0e97f70d..ec41267a4 100644
--- a/app/Providers/PaginationServiceProvider.php
+++ b/app/Providers/PaginationServiceProvider.php
@@ -1,11 +1,12 @@
app['view'];
+ });
+
Paginator::currentPathResolver(function () {
return baseUrl($this->app['request']->path());
});
diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php
index 2d9cd3b85..88ab23526 100644
--- a/app/Providers/RouteServiceProvider.php
+++ b/app/Providers/RouteServiceProvider.php
@@ -4,6 +4,7 @@ namespace BookStack\Providers;
use Illuminate\Routing\Router;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
+use Route;
class RouteServiceProvider extends ServiceProvider
{
@@ -19,26 +20,54 @@ class RouteServiceProvider extends ServiceProvider
/**
* Define your route model bindings, pattern filters, etc.
*
- * @param \Illuminate\Routing\Router $router
* @return void
*/
- public function boot(Router $router)
+ public function boot()
{
- //
-
- parent::boot($router);
+ parent::boot();
}
/**
* Define the routes for the application.
*
- * @param \Illuminate\Routing\Router $router
* @return void
*/
- public function map(Router $router)
+ public function map()
{
- $router->group(['namespace' => $this->namespace], function ($router) {
- require app_path('Http/routes.php');
+ $this->mapWebRoutes();
+// $this->mapApiRoutes();
+ }
+ /**
+ * Define the "web" routes for the application.
+ *
+ * These routes all receive session state, CSRF protection, etc.
+ *
+ * @return void
+ */
+ protected function mapWebRoutes()
+ {
+ Route::group([
+ 'middleware' => 'web',
+ 'namespace' => $this->namespace,
+ ], function ($router) {
+ require base_path('routes/web.php');
+ });
+ }
+ /**
+ * Define the "api" routes for the application.
+ *
+ * These routes are typically stateless.
+ *
+ * @return void
+ */
+ protected function mapApiRoutes()
+ {
+ Route::group([
+ 'middleware' => 'api',
+ 'namespace' => $this->namespace,
+ 'prefix' => 'api',
+ ], function ($router) {
+ require base_path('routes/api.php');
});
}
}
diff --git a/app/Repos/PageRepo.php b/app/Repos/PageRepo.php
index 235246f82..7255ad05f 100644
--- a/app/Repos/PageRepo.php
+++ b/app/Repos/PageRepo.php
@@ -110,31 +110,6 @@ class PageRepo extends EntityRepo
return $this->page->where('slug', '=', $slug)->where('book_id', '=', $bookId)->count();
}
- /**
- * Save a new page into the system.
- * Input validation must be done beforehand.
- * @param array $input
- * @param Book $book
- * @param int $chapterId
- * @return Page
- */
- public function saveNew(array $input, Book $book, $chapterId = null)
- {
- $page = $this->newFromInput($input);
- $page->slug = $this->findSuitableSlug($page->name, $book->id);
-
- if ($chapterId) $page->chapter_id = $chapterId;
-
- $page->html = $this->formatHtml($input['html']);
- $page->text = strip_tags($page->html);
- $page->created_by = auth()->user()->id;
- $page->updated_by = auth()->user()->id;
-
- $book->pages()->save($page);
- return $page;
- }
-
-
/**
* Publish a draft page to make it a normal page.
* Sets the slug and updates the content.
@@ -371,7 +346,7 @@ class PageRepo extends EntityRepo
*/
public function saveRevision(Page $page, $summary = null)
{
- $revision = $this->pageRevision->fill($page->toArray());
+ $revision = $this->pageRevision->newInstance($page->toArray());
if (setting('app-editor') !== 'markdown') $revision->markdown = '';
$revision->page_id = $page->id;
$revision->slug = $page->slug;
@@ -381,11 +356,13 @@ class PageRepo extends EntityRepo
$revision->type = 'version';
$revision->summary = $summary;
$revision->save();
+
// Clear old revisions
if ($this->pageRevision->where('page_id', '=', $page->id)->count() > 50) {
$this->pageRevision->where('page_id', '=', $page->id)
->orderBy('created_at', 'desc')->skip(50)->take(5)->delete();
}
+
return $revision;
}
diff --git a/app/Services/EmailConfirmationService.php b/app/Services/EmailConfirmationService.php
index c3096c654..d4ec1e976 100644
--- a/app/Services/EmailConfirmationService.php
+++ b/app/Services/EmailConfirmationService.php
@@ -1,30 +1,27 @@
mailer = $mailer;
- $this->emailConfirmation = $emailConfirmation;
+ $this->db = $db;
+ $this->users = $users;
}
/**
@@ -38,16 +35,28 @@ class EmailConfirmationService
if ($user->email_confirmed) {
throw new ConfirmationEmailException('Email has already been confirmed, Try logging in.', '/login');
}
+
$this->deleteConfirmationsByUser($user);
+ $token = $this->createEmailConfirmation($user);
+
+ $user->notify(new ConfirmEmail($token));
+ }
+
+ /**
+ * Creates a new email confirmation in the database and returns the token.
+ * @param User $user
+ * @return string
+ */
+ public function createEmailConfirmation(User $user)
+ {
$token = $this->getToken();
- $this->emailConfirmation->create([
+ $this->db->table('email_confirmations')->insert([
'user_id' => $user->id,
- 'token' => $token,
+ 'token' => $token,
+ 'created_at' => Carbon::now(),
+ 'updated_at' => Carbon::now()
]);
- $this->mailer->send('emails/email-confirmation', ['token' => $token], function (Message $message) use ($user) {
- $appName = setting('app-name', 'BookStack');
- $message->to($user->email, $user->name)->subject('Confirm your email on ' . $appName . '.');
- });
+ return $token;
}
/**
@@ -59,22 +68,24 @@ class EmailConfirmationService
*/
public function getEmailConfirmationFromToken($token)
{
- $emailConfirmation = $this->emailConfirmation->where('token', '=', $token)->first();
- // If not found
+ $emailConfirmation = $this->db->table('email_confirmations')->where('token', '=', $token)->first();
+
+ // If not found show error
if ($emailConfirmation === null) {
throw new UserRegistrationException('This confirmation token is not valid or has already been used, Please try registering again.', '/register');
}
// If more than a day old
- if (Carbon::now()->subDay()->gt($emailConfirmation->created_at)) {
- $this->sendConfirmation($emailConfirmation->user);
+ if (Carbon::now()->subDay()->gt(new Carbon($emailConfirmation->created_at))) {
+ $user = $this->users->getById($emailConfirmation->user_id);
+ $this->sendConfirmation($user);
throw new UserRegistrationException('The confirmation token has expired, A new confirmation email has been sent.', '/register/confirm');
}
+ $emailConfirmation->user = $this->users->getById($emailConfirmation->user_id);
return $emailConfirmation;
}
-
/**
* Delete all email confirmations that belong to a user.
* @param User $user
@@ -82,7 +93,7 @@ class EmailConfirmationService
*/
public function deleteConfirmationsByUser(User $user)
{
- return $this->emailConfirmation->where('user_id', '=', $user->id)->delete();
+ return $this->db->table('email_confirmations')->where('user_id', '=', $user->id)->delete();
}
/**
@@ -92,7 +103,7 @@ class EmailConfirmationService
protected function getToken()
{
$token = str_random(24);
- while ($this->emailConfirmation->where('token', '=', $token)->exists()) {
+ while ($this->db->table('email_confirmations')->where('token', '=', $token)->exists()) {
$token = str_random(25);
}
return $token;
diff --git a/app/Services/PermissionService.php b/app/Services/PermissionService.php
index cee074cd7..341a69edb 100644
--- a/app/Services/PermissionService.php
+++ b/app/Services/PermissionService.php
@@ -9,14 +9,15 @@ use BookStack\Page;
use BookStack\Role;
use BookStack\User;
use Illuminate\Support\Collection;
+use Illuminate\Support\Facades\Log;
class PermissionService
{
- protected $userRoles;
- protected $isAdmin;
protected $currentAction;
- protected $currentUser;
+ protected $isAdminUser;
+ protected $userRoles = false;
+ protected $currentUserModel = false;
public $book;
public $chapter;
@@ -37,12 +38,6 @@ class PermissionService
*/
public function __construct(JointPermission $jointPermission, Book $book, Chapter $chapter, Page $page, Role $role)
{
- $this->currentUser = auth()->user();
- $userSet = $this->currentUser !== null;
- $this->userRoles = false;
- $this->isAdmin = $userSet ? $this->currentUser->hasRole('admin') : false;
- if (!$userSet) $this->currentUser = new User();
-
$this->jointPermission = $jointPermission;
$this->role = $role;
$this->book = $book;
@@ -117,7 +112,7 @@ class PermissionService
}
- foreach ($this->currentUser->roles as $role) {
+ foreach ($this->currentUser()->roles as $role) {
$roles[] = $role->id;
}
return $roles;
@@ -389,7 +384,11 @@ class PermissionService
*/
public function checkOwnableUserAccess(Ownable $ownable, $permission)
{
- if ($this->isAdmin) return true;
+ if ($this->isAdmin()) {
+ $this->clean();
+ return true;
+ }
+
$explodedPermission = explode('-', $permission);
$baseQuery = $ownable->where('id', '=', $ownable->id);
@@ -400,10 +399,10 @@ class PermissionService
// Handle non entity specific jointPermissions
if (in_array($explodedPermission[0], $nonJointPermissions)) {
- $allPermission = $this->currentUser && $this->currentUser->can($permission . '-all');
- $ownPermission = $this->currentUser && $this->currentUser->can($permission . '-own');
+ $allPermission = $this->currentUser() && $this->currentUser()->can($permission . '-all');
+ $ownPermission = $this->currentUser() && $this->currentUser()->can($permission . '-own');
$this->currentAction = 'view';
- $isOwner = $this->currentUser && $this->currentUser->id === $ownable->created_by;
+ $isOwner = $this->currentUser() && $this->currentUser()->id === $ownable->created_by;
return ($allPermission || ($isOwner && $ownPermission));
}
@@ -413,7 +412,9 @@ class PermissionService
}
- return $this->entityRestrictionQuery($baseQuery)->count() > 0;
+ $q = $this->entityRestrictionQuery($baseQuery)->count() > 0;
+ $this->clean();
+ return $q;
}
/**
@@ -443,7 +444,7 @@ class PermissionService
*/
protected function entityRestrictionQuery($query)
{
- return $query->where(function ($parentQuery) {
+ $q = $query->where(function ($parentQuery) {
$parentQuery->whereHas('jointPermissions', function ($permissionQuery) {
$permissionQuery->whereIn('role_id', $this->getRoles())
->where('action', '=', $this->currentAction)
@@ -451,11 +452,13 @@ class PermissionService
$query->where('has_permission', '=', true)
->orWhere(function ($query) {
$query->where('has_permission_own', '=', true)
- ->where('created_by', '=', $this->currentUser->id);
+ ->where('created_by', '=', $this->currentUser()->id);
});
});
});
});
+ $this->clean();
+ return $q;
}
/**
@@ -469,9 +472,9 @@ class PermissionService
// Prevent drafts being visible to others.
$query = $query->where(function ($query) {
$query->where('draft', '=', false);
- if ($this->currentUser) {
+ if ($this->currentUser()) {
$query->orWhere(function ($query) {
- $query->where('draft', '=', true)->where('created_by', '=', $this->currentUser->id);
+ $query->where('draft', '=', true)->where('created_by', '=', $this->currentUser()->id);
});
}
});
@@ -509,7 +512,10 @@ class PermissionService
*/
public function enforceEntityRestrictions($query, $action = 'view')
{
- if ($this->isAdmin) return $query;
+ if ($this->isAdmin()) {
+ $this->clean();
+ return $query;
+ }
$this->currentAction = $action;
return $this->entityRestrictionQuery($query);
}
@@ -524,11 +530,15 @@ class PermissionService
*/
public function filterRestrictedEntityRelations($query, $tableName, $entityIdColumn, $entityTypeColumn)
{
- if ($this->isAdmin) return $query;
+ if ($this->isAdmin()) {
+ $this->clean();
+ return $query;
+ }
+
$this->currentAction = 'view';
$tableDetails = ['tableName' => $tableName, 'entityIdColumn' => $entityIdColumn, 'entityTypeColumn' => $entityTypeColumn];
- return $query->where(function ($query) use ($tableDetails) {
+ $q = $query->where(function ($query) use ($tableDetails) {
$query->whereExists(function ($permissionQuery) use (&$tableDetails) {
$permissionQuery->select('id')->from('joint_permissions')
->whereRaw('joint_permissions.entity_id=' . $tableDetails['tableName'] . '.' . $tableDetails['entityIdColumn'])
@@ -538,12 +548,12 @@ class PermissionService
->where(function ($query) {
$query->where('has_permission', '=', true)->orWhere(function ($query) {
$query->where('has_permission_own', '=', true)
- ->where('created_by', '=', $this->currentUser->id);
+ ->where('created_by', '=', $this->currentUser()->id);
});
});
});
});
-
+ return $q;
}
/**
@@ -555,11 +565,15 @@ class PermissionService
*/
public function filterRelatedPages($query, $tableName, $entityIdColumn)
{
- if ($this->isAdmin) return $query;
+ if ($this->isAdmin()) {
+ $this->clean();
+ return $query;
+ }
+
$this->currentAction = 'view';
$tableDetails = ['tableName' => $tableName, 'entityIdColumn' => $entityIdColumn];
- return $query->where(function ($query) use ($tableDetails) {
+ $q = $query->where(function ($query) use ($tableDetails) {
$query->where(function ($query) use (&$tableDetails) {
$query->whereExists(function ($permissionQuery) use (&$tableDetails) {
$permissionQuery->select('id')->from('joint_permissions')
@@ -570,12 +584,50 @@ class PermissionService
->where(function ($query) {
$query->where('has_permission', '=', true)->orWhere(function ($query) {
$query->where('has_permission_own', '=', true)
- ->where('created_by', '=', $this->currentUser->id);
+ ->where('created_by', '=', $this->currentUser()->id);
});
});
});
})->orWhere($tableDetails['entityIdColumn'], '=', 0);
});
+ $this->clean();
+ return $q;
+ }
+
+ /**
+ * Check if the current user is an admin.
+ * @return bool
+ */
+ private function isAdmin()
+ {
+ if ($this->isAdminUser === null) {
+ $this->isAdminUser = ($this->currentUser()->id !== null) ? $this->currentUser()->hasRole('admin') : false;
+ }
+
+ return $this->isAdminUser;
+ }
+
+ /**
+ * Get the current user
+ * @return User
+ */
+ private function currentUser()
+ {
+ if ($this->currentUserModel === false) {
+ $this->currentUserModel = auth()->user() ? auth()->user() : new User();
+ }
+
+ return $this->currentUserModel;
+ }
+
+ /**
+ * Clean the cached user elements.
+ */
+ private function clean()
+ {
+ $this->currentUserModel = false;
+ $this->userRoles = false;
+ $this->isAdminUser = null;
}
}
\ No newline at end of file
diff --git a/app/User.php b/app/User.php
index 32449971d..8c39d81be 100644
--- a/app/User.php
+++ b/app/User.php
@@ -1,13 +1,15 @@
notify(new ResetPassword($token));
+ }
}
diff --git a/app/helpers.php b/app/helpers.php
index b8abb1006..dd835fbf6 100644
--- a/app/helpers.php
+++ b/app/helpers.php
@@ -63,7 +63,7 @@ function userCan($permission, Ownable $ownable = null)
*/
function setting($key, $default = false)
{
- $settingService = app('BookStack\Services\SettingService');
+ $settingService = app(\BookStack\Services\SettingService::class);
return $settingService->get($key, $default);
}
@@ -79,11 +79,17 @@ function baseUrl($path, $forceAppDomain = false)
if ($isFullUrl && !$forceAppDomain) return $path;
$path = trim($path, '/');
+ // Remove non-specified domain if forced and we have a domain
if ($isFullUrl && $forceAppDomain) {
$explodedPath = explode('/', $path);
$path = implode('/', array_splice($explodedPath, 3));
}
+ // Return normal url path if not specified in config
+ if (config('app.url') === '') {
+ return url($path);
+ }
+
return rtrim(config('app.url'), '/') . '/' . $path;
}
diff --git a/composer.json b/composer.json
index 5c77a68c4..d96037019 100644
--- a/composer.json
+++ b/composer.json
@@ -5,23 +5,22 @@
"license": "MIT",
"type": "project",
"require": {
- "php": ">=5.5.9",
- "laravel/framework": "5.2.*",
+ "php": ">=5.6.4",
+ "laravel/framework": "^5.3.4",
"intervention/image": "^2.3",
"laravel/socialite": "^2.0",
"barryvdh/laravel-ide-helper": "^2.1",
- "barryvdh/laravel-debugbar": "^2.0",
+ "barryvdh/laravel-debugbar": "^2.2.3",
"league/flysystem-aws-s3-v3": "^1.0",
- "barryvdh/laravel-dompdf": "0.6.*",
- "predis/predis": "^1.0"
+ "barryvdh/laravel-dompdf": "^0.7",
+ "predis/predis": "^1.1"
},
"require-dev": {
"fzaninotto/faker": "~1.4",
"mockery/mockery": "0.9.*",
- "phpunit/phpunit": "~4.0",
- "phpspec/phpspec": "~2.1",
- "symfony/dom-crawler": "~3.0",
- "symfony/css-selector": "~3.0"
+ "phpunit/phpunit": "~5.0",
+ "symfony/css-selector": "3.1.*",
+ "symfony/dom-crawler": "3.1.*"
},
"autoload": {
"classmap": [
@@ -37,21 +36,19 @@
]
},
"scripts": {
- "post-install-cmd": [
- "php artisan clear-compiled",
- "php artisan optimize"
- ],
- "pre-update-cmd": [
- "php artisan clear-compiled"
- ],
- "post-update-cmd": [
- "php artisan optimize"
- ],
"post-root-package-install": [
- "php -r \"copy('.env.example', '.env');\""
+ "php -r \"file_exists('.env') || copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"php artisan key:generate"
+ ],
+ "post-install-cmd": [
+ "Illuminate\\Foundation\\ComposerScripts::postInstall",
+ "php artisan optimize"
+ ],
+ "post-update-cmd": [
+ "Illuminate\\Foundation\\ComposerScripts::postUpdate",
+ "php artisan optimize"
]
},
"config": {
diff --git a/composer.lock b/composer.lock
index 63d378753..c1c80e100 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,27 +4,27 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
- "hash": "eb7c71e9ed116d3fd2a1d0af07f9f134",
- "content-hash": "17d2d7fc5fed682f2a290d6588538035",
+ "hash": "c90a6e41767306ceb3b8cedb91468390",
+ "content-hash": "3b5d2d6b77fbe71101e7e8eaff0754fe",
"packages": [
{
"name": "aws/aws-sdk-php",
- "version": "3.17.5",
+ "version": "3.19.6",
"source": {
"type": "git",
"url": "https://github.com/aws/aws-sdk-php.git",
- "reference": "1cef9b334729b3564c9aef15481a55561c54b53f"
+ "reference": "34060bf0db260031697b17dbb37fa1bbec92f1c4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/1cef9b334729b3564c9aef15481a55561c54b53f",
- "reference": "1cef9b334729b3564c9aef15481a55561c54b53f",
+ "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/34060bf0db260031697b17dbb37fa1bbec92f1c4",
+ "reference": "34060bf0db260031697b17dbb37fa1bbec92f1c4",
"shasum": ""
},
"require": {
- "guzzlehttp/guzzle": "~5.3|~6.0.1|~6.1",
+ "guzzlehttp/guzzle": "^5.3.1|^6.2.1",
"guzzlehttp/promises": "~1.0",
- "guzzlehttp/psr7": "~1.0",
+ "guzzlehttp/psr7": "~1.3.1",
"mtdowling/jmespath.php": "~2.2",
"php": ">=5.5"
},
@@ -85,25 +85,25 @@
"s3",
"sdk"
],
- "time": "2016-04-07 22:44:13"
+ "time": "2016-09-08 20:27:15"
},
{
"name": "barryvdh/laravel-debugbar",
- "version": "v2.2.0",
+ "version": "V2.2.3",
"source": {
"type": "git",
"url": "https://github.com/barryvdh/laravel-debugbar.git",
- "reference": "13b7058d2120c8d5af7f1ada21b7c44dd87b666a"
+ "reference": "ecd1ce5c4a827e2f6a8fb41bcf67713beb1c1cbd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/13b7058d2120c8d5af7f1ada21b7c44dd87b666a",
- "reference": "13b7058d2120c8d5af7f1ada21b7c44dd87b666a",
+ "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/ecd1ce5c4a827e2f6a8fb41bcf67713beb1c1cbd",
+ "reference": "ecd1ce5c4a827e2f6a8fb41bcf67713beb1c1cbd",
"shasum": ""
},
"require": {
- "illuminate/support": "5.1.*|5.2.*",
- "maximebf/debugbar": "~1.11.0",
+ "illuminate/support": "5.1.*|5.2.*|5.3.*",
+ "maximebf/debugbar": "~1.11.0|~1.12.0",
"php": ">=5.5.9",
"symfony/finder": "~2.7|~3.0"
},
@@ -139,31 +139,31 @@
"profiler",
"webprofiler"
],
- "time": "2016-02-17 08:32:21"
+ "time": "2016-07-29 15:00:36"
},
{
"name": "barryvdh/laravel-dompdf",
- "version": "v0.6.1",
+ "version": "v0.7.0",
"source": {
"type": "git",
"url": "https://github.com/barryvdh/laravel-dompdf.git",
- "reference": "b606788108833f7765801dca35455fb23ce9f869"
+ "reference": "9b8bd179262ad6b200a11edfe7b53516afcfc42a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/barryvdh/laravel-dompdf/zipball/b606788108833f7765801dca35455fb23ce9f869",
- "reference": "b606788108833f7765801dca35455fb23ce9f869",
+ "url": "https://api.github.com/repos/barryvdh/laravel-dompdf/zipball/9b8bd179262ad6b200a11edfe7b53516afcfc42a",
+ "reference": "9b8bd179262ad6b200a11edfe7b53516afcfc42a",
"shasum": ""
},
"require": {
- "dompdf/dompdf": "0.6.*",
- "illuminate/support": "5.0.x|5.1.x|5.2.x",
- "php": ">=5.4.0"
+ "dompdf/dompdf": "^0.7",
+ "illuminate/support": "5.1.x|5.2.x|5.3.x",
+ "php": ">=5.5.9"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "0.6-dev"
+ "dev-master": "0.7-dev"
}
},
"autoload": {
@@ -187,32 +187,35 @@
"laravel",
"pdf"
],
- "time": "2015-12-21 19:51:22"
+ "time": "2016-08-17 08:17:33"
},
{
"name": "barryvdh/laravel-ide-helper",
- "version": "v2.1.4",
+ "version": "v2.2.1",
"source": {
"type": "git",
"url": "https://github.com/barryvdh/laravel-ide-helper.git",
- "reference": "f1ebd847aac9a4545325d35108cafc285fe1605f"
+ "reference": "28af7cd19ca41cc0c63dd1de2b46c2b84d31c463"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/f1ebd847aac9a4545325d35108cafc285fe1605f",
- "reference": "f1ebd847aac9a4545325d35108cafc285fe1605f",
+ "url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/28af7cd19ca41cc0c63dd1de2b46c2b84d31c463",
+ "reference": "28af7cd19ca41cc0c63dd1de2b46c2b84d31c463",
"shasum": ""
},
"require": {
- "illuminate/console": "5.0.x|5.1.x|5.2.x",
- "illuminate/filesystem": "5.0.x|5.1.x|5.2.x",
- "illuminate/support": "5.0.x|5.1.x|5.2.x",
+ "barryvdh/reflection-docblock": "^2.0.4",
+ "illuminate/console": "^5.0,<5.4",
+ "illuminate/filesystem": "^5.0,<5.4",
+ "illuminate/support": "^5.0,<5.4",
"php": ">=5.4.0",
- "phpdocumentor/reflection-docblock": "^2.0.4",
- "symfony/class-loader": "~2.3|~3.0"
+ "symfony/class-loader": "^2.3|^3.0"
},
"require-dev": {
- "doctrine/dbal": "~2.3"
+ "doctrine/dbal": "~2.3",
+ "phpunit/phpunit": "4.*",
+ "scrutinizer/ocular": "~1.1",
+ "squizlabs/php_codesniffer": "~2.3"
},
"suggest": {
"doctrine/dbal": "Load information from the database about models for phpdocs (~2.3)"
@@ -220,7 +223,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.1-dev"
+ "dev-master": "2.2-dev"
}
},
"autoload": {
@@ -250,7 +253,56 @@
"phpstorm",
"sublime"
],
- "time": "2016-03-03 08:45:00"
+ "time": "2016-07-04 11:52:48"
+ },
+ {
+ "name": "barryvdh/reflection-docblock",
+ "version": "v2.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/barryvdh/ReflectionDocBlock.git",
+ "reference": "3dcbd98b5d9384a5357266efba8fd29884458e5c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/barryvdh/ReflectionDocBlock/zipball/3dcbd98b5d9384a5357266efba8fd29884458e5c",
+ "reference": "3dcbd98b5d9384a5357266efba8fd29884458e5c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.0,<4.5"
+ },
+ "suggest": {
+ "dflydev/markdown": "~1.0",
+ "erusev/parsedown": "~1.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Barryvdh": [
+ "src/"
+ ]
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mike van Riel",
+ "email": "mike.vanriel@naenius.com"
+ }
+ ],
+ "time": "2016-06-13 19:28:20"
},
{
"name": "classpreloader/classpreloader",
@@ -408,30 +460,46 @@
},
{
"name": "dompdf/dompdf",
- "version": "v0.6.2",
+ "version": "v0.7.0",
"source": {
"type": "git",
"url": "https://github.com/dompdf/dompdf.git",
- "reference": "cc06008f75262510ee135b8cbb14e333a309f651"
+ "reference": "5c98652b1a5beb7e3cc8ec35419b2828dd63ab14"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/dompdf/dompdf/zipball/cc06008f75262510ee135b8cbb14e333a309f651",
- "reference": "cc06008f75262510ee135b8cbb14e333a309f651",
+ "url": "https://api.github.com/repos/dompdf/dompdf/zipball/5c98652b1a5beb7e3cc8ec35419b2828dd63ab14",
+ "reference": "5c98652b1a5beb7e3cc8ec35419b2828dd63ab14",
"shasum": ""
},
"require": {
- "phenx/php-font-lib": "0.2.*"
+ "ext-dom": "*",
+ "ext-gd": "*",
+ "ext-mbstring": "*",
+ "phenx/php-font-lib": "0.4.*",
+ "phenx/php-svg-lib": "0.1.*",
+ "php": ">=5.3.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "3.7.*"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-develop": "0.7-dev"
+ }
+ },
"autoload": {
+ "psr-4": {
+ "Dompdf\\": "src/"
+ },
"classmap": [
- "include/"
+ "lib/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "LGPL"
+ "LGPL-2.1"
],
"authors": [
{
@@ -441,127 +509,39 @@
{
"name": "Brian Sweeney",
"email": "eclecticgeek@gmail.com"
+ },
+ {
+ "name": "Gabriel Bull",
+ "email": "me@gabrielbull.com"
}
],
"description": "DOMPDF is a CSS 2.1 compliant HTML to PDF converter",
"homepage": "https://github.com/dompdf/dompdf",
- "time": "2015-12-07 04:07:13"
- },
- {
- "name": "guzzle/guzzle",
- "version": "v3.8.1",
- "source": {
- "type": "git",
- "url": "https://github.com/guzzle/guzzle.git",
- "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/guzzle/guzzle/zipball/4de0618a01b34aa1c8c33a3f13f396dcd3882eba",
- "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba",
- "shasum": ""
- },
- "require": {
- "ext-curl": "*",
- "php": ">=5.3.3",
- "symfony/event-dispatcher": ">=2.1"
- },
- "replace": {
- "guzzle/batch": "self.version",
- "guzzle/cache": "self.version",
- "guzzle/common": "self.version",
- "guzzle/http": "self.version",
- "guzzle/inflection": "self.version",
- "guzzle/iterator": "self.version",
- "guzzle/log": "self.version",
- "guzzle/parser": "self.version",
- "guzzle/plugin": "self.version",
- "guzzle/plugin-async": "self.version",
- "guzzle/plugin-backoff": "self.version",
- "guzzle/plugin-cache": "self.version",
- "guzzle/plugin-cookie": "self.version",
- "guzzle/plugin-curlauth": "self.version",
- "guzzle/plugin-error-response": "self.version",
- "guzzle/plugin-history": "self.version",
- "guzzle/plugin-log": "self.version",
- "guzzle/plugin-md5": "self.version",
- "guzzle/plugin-mock": "self.version",
- "guzzle/plugin-oauth": "self.version",
- "guzzle/service": "self.version",
- "guzzle/stream": "self.version"
- },
- "require-dev": {
- "doctrine/cache": "*",
- "monolog/monolog": "1.*",
- "phpunit/phpunit": "3.7.*",
- "psr/log": "1.0.*",
- "symfony/class-loader": "*",
- "zendframework/zend-cache": "<2.3",
- "zendframework/zend-log": "<2.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.8-dev"
- }
- },
- "autoload": {
- "psr-0": {
- "Guzzle": "src/",
- "Guzzle\\Tests": "tests/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Michael Dowling",
- "email": "mtdowling@gmail.com",
- "homepage": "https://github.com/mtdowling"
- },
- {
- "name": "Guzzle Community",
- "homepage": "https://github.com/guzzle/guzzle/contributors"
- }
- ],
- "description": "Guzzle is a PHP HTTP client library and framework for building RESTful web service clients",
- "homepage": "http://guzzlephp.org/",
- "keywords": [
- "client",
- "curl",
- "framework",
- "http",
- "http client",
- "rest",
- "web service"
- ],
- "time": "2014-01-28 22:29:15"
+ "time": "2016-05-11 00:36:29"
},
{
"name": "guzzlehttp/guzzle",
- "version": "6.2.0",
+ "version": "6.2.1",
"source": {
"type": "git",
"url": "https://github.com/guzzle/guzzle.git",
- "reference": "d094e337976dff9d8e2424e8485872194e768662"
+ "reference": "3f808fba627f2c5b69e2501217bf31af349c1427"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d094e337976dff9d8e2424e8485872194e768662",
- "reference": "d094e337976dff9d8e2424e8485872194e768662",
+ "url": "https://api.github.com/repos/guzzle/guzzle/zipball/3f808fba627f2c5b69e2501217bf31af349c1427",
+ "reference": "3f808fba627f2c5b69e2501217bf31af349c1427",
"shasum": ""
},
"require": {
- "guzzlehttp/promises": "~1.0",
- "guzzlehttp/psr7": "~1.1",
- "php": ">=5.5.0"
+ "guzzlehttp/promises": "^1.0",
+ "guzzlehttp/psr7": "^1.3.1",
+ "php": ">=5.5"
},
"require-dev": {
"ext-curl": "*",
- "phpunit/phpunit": "~4.0",
- "psr/log": "~1.0"
+ "phpunit/phpunit": "^4.0",
+ "psr/log": "^1.0"
},
"type": "library",
"extra": {
@@ -599,20 +579,20 @@
"rest",
"web service"
],
- "time": "2016-03-21 20:02:09"
+ "time": "2016-07-15 17:22:37"
},
{
"name": "guzzlehttp/promises",
- "version": "1.1.0",
+ "version": "1.2.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/promises.git",
- "reference": "bb9024c526b22f3fe6ae55a561fd70653d470aa8"
+ "reference": "c10d860e2a9595f8883527fa0021c7da9e65f579"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/promises/zipball/bb9024c526b22f3fe6ae55a561fd70653d470aa8",
- "reference": "bb9024c526b22f3fe6ae55a561fd70653d470aa8",
+ "url": "https://api.github.com/repos/guzzle/promises/zipball/c10d860e2a9595f8883527fa0021c7da9e65f579",
+ "reference": "c10d860e2a9595f8883527fa0021c7da9e65f579",
"shasum": ""
},
"require": {
@@ -650,20 +630,20 @@
"keywords": [
"promise"
],
- "time": "2016-03-08 01:15:46"
+ "time": "2016-05-18 16:56:05"
},
{
"name": "guzzlehttp/psr7",
- "version": "1.2.3",
+ "version": "1.3.1",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
- "reference": "2e89629ff057ebb49492ba08e6995d3a6a80021b"
+ "reference": "5c6447c9df362e8f8093bda8f5d8873fe5c7f65b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/psr7/zipball/2e89629ff057ebb49492ba08e6995d3a6a80021b",
- "reference": "2e89629ff057ebb49492ba08e6995d3a6a80021b",
+ "url": "https://api.github.com/repos/guzzle/psr7/zipball/5c6447c9df362e8f8093bda8f5d8873fe5c7f65b",
+ "reference": "5c6447c9df362e8f8093bda8f5d8873fe5c7f65b",
"shasum": ""
},
"require": {
@@ -679,7 +659,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.0-dev"
+ "dev-master": "1.4-dev"
}
},
"autoload": {
@@ -708,20 +688,20 @@
"stream",
"uri"
],
- "time": "2016-02-18 21:54:00"
+ "time": "2016-06-24 23:00:38"
},
{
"name": "intervention/image",
- "version": "2.3.6",
+ "version": "2.3.8",
"source": {
"type": "git",
"url": "https://github.com/Intervention/image.git",
- "reference": "e368d262887dbb2fdfaf710880571ede51e9c0e6"
+ "reference": "4064a980324f6c3bfa2bd981dfb247afa705ec3c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Intervention/image/zipball/e368d262887dbb2fdfaf710880571ede51e9c0e6",
- "reference": "e368d262887dbb2fdfaf710880571ede51e9c0e6",
+ "url": "https://api.github.com/repos/Intervention/image/zipball/4064a980324f6c3bfa2bd981dfb247afa705ec3c",
+ "reference": "4064a980324f6c3bfa2bd981dfb247afa705ec3c",
"shasum": ""
},
"require": {
@@ -770,7 +750,7 @@
"thumbnail",
"watermark"
],
- "time": "2016-02-26 18:18:19"
+ "time": "2016-09-01 17:04:03"
},
{
"name": "jakub-onderka/php-console-color",
@@ -919,16 +899,16 @@
},
{
"name": "laravel/framework",
- "version": "v5.2.29",
+ "version": "v5.3.9",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
- "reference": "e3d644eb131f18c5f3d28ff7bc678bc797091f20"
+ "reference": "f6fbb481672f8dc4bc6882d5d654bbfa3588c8ec"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/framework/zipball/e3d644eb131f18c5f3d28ff7bc678bc797091f20",
- "reference": "e3d644eb131f18c5f3d28ff7bc678bc797091f20",
+ "url": "https://api.github.com/repos/laravel/framework/zipball/f6fbb481672f8dc4bc6882d5d654bbfa3588c8ec",
+ "reference": "f6fbb481672f8dc4bc6882d5d654bbfa3588c8ec",
"shasum": ""
},
"require": {
@@ -941,20 +921,20 @@
"monolog/monolog": "~1.11",
"mtdowling/cron-expression": "~1.0",
"nesbot/carbon": "~1.20",
- "paragonie/random_compat": "~1.4",
- "php": ">=5.5.9",
+ "paragonie/random_compat": "~1.4|~2.0",
+ "php": ">=5.6.4",
"psy/psysh": "0.7.*",
+ "ramsey/uuid": "~3.0",
"swiftmailer/swiftmailer": "~5.1",
- "symfony/console": "2.8.*|3.0.*",
- "symfony/debug": "2.8.*|3.0.*",
- "symfony/finder": "2.8.*|3.0.*",
- "symfony/http-foundation": "2.8.*|3.0.*",
- "symfony/http-kernel": "2.8.*|3.0.*",
- "symfony/polyfill-php56": "~1.0",
- "symfony/process": "2.8.*|3.0.*",
- "symfony/routing": "2.8.*|3.0.*",
- "symfony/translation": "2.8.*|3.0.*",
- "symfony/var-dumper": "2.8.*|3.0.*",
+ "symfony/console": "3.1.*",
+ "symfony/debug": "3.1.*",
+ "symfony/finder": "3.1.*",
+ "symfony/http-foundation": "3.1.*",
+ "symfony/http-kernel": "3.1.*",
+ "symfony/process": "3.1.*",
+ "symfony/routing": "3.1.*",
+ "symfony/translation": "3.1.*",
+ "symfony/var-dumper": "3.1.*",
"vlucas/phpdotenv": "~2.2"
},
"replace": {
@@ -985,16 +965,17 @@
"illuminate/support": "self.version",
"illuminate/translation": "self.version",
"illuminate/validation": "self.version",
- "illuminate/view": "self.version"
+ "illuminate/view": "self.version",
+ "tightenco/collect": "self.version"
},
"require-dev": {
"aws/aws-sdk-php": "~3.0",
- "mockery/mockery": "~0.9.2",
+ "mockery/mockery": "~0.9.4",
"pda/pheanstalk": "~3.0",
- "phpunit/phpunit": "~4.1",
+ "phpunit/phpunit": "~5.4",
"predis/predis": "~1.0",
- "symfony/css-selector": "2.8.*|3.0.*",
- "symfony/dom-crawler": "2.8.*|3.0.*"
+ "symfony/css-selector": "3.1.*",
+ "symfony/dom-crawler": "3.1.*"
},
"suggest": {
"aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (~3.0).",
@@ -1006,19 +987,17 @@
"pda/pheanstalk": "Required to use the beanstalk queue driver (~3.0).",
"predis/predis": "Required to use the redis cache and queue drivers (~1.0).",
"pusher/pusher-php-server": "Required to use the Pusher broadcast driver (~2.0).",
- "symfony/css-selector": "Required to use some of the crawler integration testing tools (2.8.*|3.0.*).",
- "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (2.8.*|3.0.*)."
+ "symfony/css-selector": "Required to use some of the crawler integration testing tools (3.1.*).",
+ "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (3.1.*).",
+ "symfony/psr-http-message-bridge": "Required to psr7 bridging features (0.2.*)."
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.2-dev"
+ "dev-master": "5.3-dev"
}
},
"autoload": {
- "classmap": [
- "src/Illuminate/Queue/IlluminateQueueClosure.php"
- ],
"files": [
"src/Illuminate/Foundation/helpers.php",
"src/Illuminate/Support/helpers.php"
@@ -1034,29 +1013,29 @@
"authors": [
{
"name": "Taylor Otwell",
- "email": "taylorotwell@gmail.com"
+ "email": "taylor@laravel.com"
}
],
"description": "The Laravel Framework.",
- "homepage": "http://laravel.com",
+ "homepage": "https://laravel.com",
"keywords": [
"framework",
"laravel"
],
- "time": "2016-04-03 01:43:55"
+ "time": "2016-09-12 14:08:29"
},
{
"name": "laravel/socialite",
- "version": "v2.0.15",
+ "version": "v2.0.18",
"source": {
"type": "git",
"url": "https://github.com/laravel/socialite.git",
- "reference": "edd00ab96933e3ef053533cce81e958fb26921af"
+ "reference": "76ee5397fcdea5a062361392abca4eb397e519a3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/socialite/zipball/edd00ab96933e3ef053533cce81e958fb26921af",
- "reference": "edd00ab96933e3ef053533cce81e958fb26921af",
+ "url": "https://api.github.com/repos/laravel/socialite/zipball/76ee5397fcdea5a062361392abca4eb397e519a3",
+ "reference": "76ee5397fcdea5a062361392abca4eb397e519a3",
"shasum": ""
},
"require": {
@@ -1069,7 +1048,7 @@
},
"require-dev": {
"mockery/mockery": "~0.9",
- "phpunit/phpunit": "~4.0"
+ "phpunit/phpunit": "~4.0|~5.0"
},
"type": "library",
"extra": {
@@ -1097,20 +1076,20 @@
"laravel",
"oauth"
],
- "time": "2016-03-21 14:30:30"
+ "time": "2016-06-22 12:40:16"
},
{
"name": "league/flysystem",
- "version": "1.0.20",
+ "version": "1.0.27",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/flysystem.git",
- "reference": "e87a786e3ae12a25cf78a71bb07b4b384bfaa83a"
+ "reference": "50e2045ed70a7e75a5e30bc3662904f3b67af8a9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/e87a786e3ae12a25cf78a71bb07b4b384bfaa83a",
- "reference": "e87a786e3ae12a25cf78a71bb07b4b384bfaa83a",
+ "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/50e2045ed70a7e75a5e30bc3662904f3b67af8a9",
+ "reference": "50e2045ed70a7e75a5e30bc3662904f3b67af8a9",
"shasum": ""
},
"require": {
@@ -1123,7 +1102,7 @@
"ext-fileinfo": "*",
"mockery/mockery": "~0.9",
"phpspec/phpspec": "^2.2",
- "phpunit/phpunit": "~4.8 || ~5.0"
+ "phpunit/phpunit": "~4.8"
},
"suggest": {
"ext-fileinfo": "Required for MimeType",
@@ -1180,20 +1159,20 @@
"sftp",
"storage"
],
- "time": "2016-03-14 21:54:11"
+ "time": "2016-08-10 08:55:11"
},
{
"name": "league/flysystem-aws-s3-v3",
- "version": "1.0.9",
+ "version": "1.0.13",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git",
- "reference": "595e24678bf78f8107ebc9355d8376ae0eb712c6"
+ "reference": "dc56a8faf3aff0841f9eae04b6af94a50657896c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/595e24678bf78f8107ebc9355d8376ae0eb712c6",
- "reference": "595e24678bf78f8107ebc9355d8376ae0eb712c6",
+ "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/dc56a8faf3aff0841f9eae04b6af94a50657896c",
+ "reference": "dc56a8faf3aff0841f9eae04b6af94a50657896c",
"shasum": ""
},
"require": {
@@ -1227,30 +1206,30 @@
}
],
"description": "Flysystem adapter for the AWS S3 SDK v3.x",
- "time": "2015-11-19 08:44:16"
+ "time": "2016-06-21 21:34:35"
},
{
"name": "league/oauth1-client",
- "version": "1.6.1",
+ "version": "1.7.0",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/oauth1-client.git",
- "reference": "cef3ceda13c78f89c323e4d5e6301c0eb7cea422"
+ "reference": "fca5f160650cb74d23fc11aa570dd61f86dcf647"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/oauth1-client/zipball/cef3ceda13c78f89c323e4d5e6301c0eb7cea422",
- "reference": "cef3ceda13c78f89c323e4d5e6301c0eb7cea422",
+ "url": "https://api.github.com/repos/thephpleague/oauth1-client/zipball/fca5f160650cb74d23fc11aa570dd61f86dcf647",
+ "reference": "fca5f160650cb74d23fc11aa570dd61f86dcf647",
"shasum": ""
},
"require": {
- "guzzle/guzzle": "3.*",
- "php": ">=5.3.0"
+ "guzzlehttp/guzzle": "^6.0",
+ "php": ">=5.5.0"
},
"require-dev": {
- "mockery/mockery": "~0.9",
- "phpunit/phpunit": "~4.0",
- "squizlabs/php_codesniffer": "~2.0"
+ "mockery/mockery": "^0.9",
+ "phpunit/phpunit": "^4.0",
+ "squizlabs/php_codesniffer": "^2.0"
},
"type": "library",
"extra": {
@@ -1290,20 +1269,20 @@
"tumblr",
"twitter"
],
- "time": "2015-10-23 04:02:07"
+ "time": "2016-08-17 00:36:58"
},
{
"name": "maximebf/debugbar",
- "version": "v1.11.1",
+ "version": "v1.12.0",
"source": {
"type": "git",
"url": "https://github.com/maximebf/php-debugbar.git",
- "reference": "d9302891c1f0a0ac5a4f66725163a00537c6359f"
+ "reference": "e634fbd32cd6bc3fa0e8c972b52d4bf49bab3988"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/d9302891c1f0a0ac5a4f66725163a00537c6359f",
- "reference": "d9302891c1f0a0ac5a4f66725163a00537c6359f",
+ "url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/e634fbd32cd6bc3fa0e8c972b52d4bf49bab3988",
+ "reference": "e634fbd32cd6bc3fa0e8c972b52d4bf49bab3988",
"shasum": ""
},
"require": {
@@ -1322,7 +1301,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.11-dev"
+ "dev-master": "1.12-dev"
}
},
"autoload": {
@@ -1351,20 +1330,20 @@
"debug",
"debugbar"
],
- "time": "2016-01-22 12:22:23"
+ "time": "2016-05-15 13:11:34"
},
{
"name": "monolog/monolog",
- "version": "1.18.2",
+ "version": "1.21.0",
"source": {
"type": "git",
"url": "https://github.com/Seldaek/monolog.git",
- "reference": "064b38c16790249488e7a8b987acf1c9d7383c09"
+ "reference": "f42fbdfd53e306bda545845e4dbfd3e72edb4952"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Seldaek/monolog/zipball/064b38c16790249488e7a8b987acf1c9d7383c09",
- "reference": "064b38c16790249488e7a8b987acf1c9d7383c09",
+ "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f42fbdfd53e306bda545845e4dbfd3e72edb4952",
+ "reference": "f42fbdfd53e306bda545845e4dbfd3e72edb4952",
"shasum": ""
},
"require": {
@@ -1383,8 +1362,8 @@
"php-console/php-console": "^3.1.3",
"phpunit/phpunit": "~4.5",
"phpunit/phpunit-mock-objects": "2.3.0",
- "raven/raven": "^0.13",
"ruflin/elastica": ">=0.90 <3.0",
+ "sentry/sentry": "^0.13",
"swiftmailer/swiftmailer": "~5.3"
},
"suggest": {
@@ -1396,9 +1375,9 @@
"mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver",
"php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
"php-console/php-console": "Allow sending log messages to Google Chrome",
- "raven/raven": "Allow sending log messages to a Sentry server",
"rollbar/rollbar": "Allow sending log messages to Rollbar",
- "ruflin/elastica": "Allow sending log messages to an Elastic Search server"
+ "ruflin/elastica": "Allow sending log messages to an Elastic Search server",
+ "sentry/sentry": "Allow sending log messages to a Sentry server"
},
"type": "library",
"extra": {
@@ -1429,7 +1408,7 @@
"logging",
"psr-3"
],
- "time": "2016-04-02 13:12:58"
+ "time": "2016-07-29 03:23:52"
},
{
"name": "mtdowling/cron-expression",
@@ -1579,16 +1558,16 @@
},
{
"name": "nikic/php-parser",
- "version": "v2.0.1",
+ "version": "v2.1.0",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "ce5be709d59b32dd8a88c80259028759991a4206"
+ "reference": "47b254ea51f1d6d5dc04b9b299e88346bf2369e3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/ce5be709d59b32dd8a88c80259028759991a4206",
- "reference": "ce5be709d59b32dd8a88c80259028759991a4206",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/47b254ea51f1d6d5dc04b9b299e88346bf2369e3",
+ "reference": "47b254ea51f1d6d5dc04b9b299e88346bf2369e3",
"shasum": ""
},
"require": {
@@ -1604,7 +1583,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.0-dev"
+ "dev-master": "2.1-dev"
}
},
"autoload": {
@@ -1626,20 +1605,20 @@
"parser",
"php"
],
- "time": "2016-02-28 19:48:28"
+ "time": "2016-04-19 13:41:41"
},
{
"name": "paragonie/random_compat",
- "version": "v1.4.1",
+ "version": "v2.0.2",
"source": {
"type": "git",
"url": "https://github.com/paragonie/random_compat.git",
- "reference": "c7e26a21ba357863de030f0b9e701c7d04593774"
+ "reference": "088c04e2f261c33bed6ca5245491cfca69195ccf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/paragonie/random_compat/zipball/c7e26a21ba357863de030f0b9e701c7d04593774",
- "reference": "c7e26a21ba357863de030f0b9e701c7d04593774",
+ "url": "https://api.github.com/repos/paragonie/random_compat/zipball/088c04e2f261c33bed6ca5245491cfca69195ccf",
+ "reference": "088c04e2f261c33bed6ca5245491cfca69195ccf",
"shasum": ""
},
"require": {
@@ -1674,31 +1653,31 @@
"pseudorandom",
"random"
],
- "time": "2016-03-18 20:34:03"
+ "time": "2016-04-03 06:00:07"
},
{
"name": "phenx/php-font-lib",
- "version": "0.2.2",
+ "version": "0.4",
"source": {
"type": "git",
"url": "https://github.com/PhenX/php-font-lib.git",
- "reference": "c30c7fc00a6b0d863e9bb4c5d5dd015298b2dc82"
+ "reference": "b8af0cacdc3cbf1e41a586fcb78f506f4121a088"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PhenX/php-font-lib/zipball/c30c7fc00a6b0d863e9bb4c5d5dd015298b2dc82",
- "reference": "c30c7fc00a6b0d863e9bb4c5d5dd015298b2dc82",
+ "url": "https://api.github.com/repos/PhenX/php-font-lib/zipball/b8af0cacdc3cbf1e41a586fcb78f506f4121a088",
+ "reference": "b8af0cacdc3cbf1e41a586fcb78f506f4121a088",
"shasum": ""
},
"type": "library",
"autoload": {
- "classmap": [
- "classes/"
- ]
+ "psr-0": {
+ "FontLib\\": "src/"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "LGPL"
+ "LGPL-3.0"
],
"authors": [
{
@@ -1708,76 +1687,61 @@
],
"description": "A library to read, parse, export and make subsets of different types of font files.",
"homepage": "https://github.com/PhenX/php-font-lib",
- "time": "2014-02-01 15:22:28"
+ "time": "2015-05-06 20:02:39"
},
{
- "name": "phpdocumentor/reflection-docblock",
- "version": "2.0.4",
+ "name": "phenx/php-svg-lib",
+ "version": "0.1",
"source": {
"type": "git",
- "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
- "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8"
+ "url": "https://github.com/PhenX/php-svg-lib.git",
+ "reference": "b419766515b3426c6da74b0e29e93d71c4f17099"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8",
- "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8",
+ "url": "https://api.github.com/repos/PhenX/php-svg-lib/zipball/b419766515b3426c6da74b0e29e93d71c4f17099",
+ "reference": "b419766515b3426c6da74b0e29e93d71c4f17099",
"shasum": ""
},
- "require": {
- "php": ">=5.3.3"
- },
- "require-dev": {
- "phpunit/phpunit": "~4.0"
- },
- "suggest": {
- "dflydev/markdown": "~1.0",
- "erusev/parsedown": "~1.0"
- },
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0.x-dev"
- }
- },
"autoload": {
"psr-0": {
- "phpDocumentor": [
- "src/"
- ]
+ "Svg\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "LGPL-3.0"
],
"authors": [
{
- "name": "Mike van Riel",
- "email": "mike.vanriel@naenius.com"
+ "name": "Fabien MĂ©nager",
+ "email": "fabien.menager@gmail.com"
}
],
- "time": "2015-02-03 12:10:50"
+ "description": "A library to read, parse and export to PDF SVG files.",
+ "homepage": "https://github.com/PhenX/php-svg-lib",
+ "time": "2015-05-06 18:49:49"
},
{
"name": "predis/predis",
- "version": "v1.0.3",
+ "version": "v1.1.1",
"source": {
"type": "git",
"url": "https://github.com/nrk/predis.git",
- "reference": "84060b9034d756b4d79641667d7f9efe1aeb8e04"
+ "reference": "f0210e38881631afeafb56ab43405a92cafd9fd1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nrk/predis/zipball/84060b9034d756b4d79641667d7f9efe1aeb8e04",
- "reference": "84060b9034d756b4d79641667d7f9efe1aeb8e04",
+ "url": "https://api.github.com/repos/nrk/predis/zipball/f0210e38881631afeafb56ab43405a92cafd9fd1",
+ "reference": "f0210e38881631afeafb56ab43405a92cafd9fd1",
"shasum": ""
},
"require": {
- "php": ">=5.3.2"
+ "php": ">=5.3.9"
},
"require-dev": {
- "phpunit/phpunit": "~4.0"
+ "phpunit/phpunit": "~4.8"
},
"suggest": {
"ext-curl": "Allows access to Webdis when paired with phpiredis",
@@ -1800,27 +1764,27 @@
"homepage": "http://clorophilla.net"
}
],
- "description": "Flexible and feature-complete PHP client library for Redis",
+ "description": "Flexible and feature-complete Redis client for PHP and HHVM",
"homepage": "http://github.com/nrk/predis",
"keywords": [
"nosql",
"predis",
"redis"
],
- "time": "2015-07-30 18:34:15"
+ "time": "2016-06-16 16:22:20"
},
{
"name": "psr/http-message",
- "version": "1.0",
+ "version": "1.0.1",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-message.git",
- "reference": "85d63699f0dbedb190bbd4b0d2b9dc707ea4c298"
+ "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/http-message/zipball/85d63699f0dbedb190bbd4b0d2b9dc707ea4c298",
- "reference": "85d63699f0dbedb190bbd4b0d2b9dc707ea4c298",
+ "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
+ "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
"shasum": ""
},
"require": {
@@ -1848,6 +1812,7 @@
}
],
"description": "Common interface for HTTP messages",
+ "homepage": "https://github.com/php-fig/http-message",
"keywords": [
"http",
"http-message",
@@ -1856,7 +1821,7 @@
"request",
"response"
],
- "time": "2015-05-04 20:22:00"
+ "time": "2016-08-06 14:39:51"
},
{
"name": "psr/log",
@@ -1969,24 +1934,104 @@
"time": "2016-03-09 05:03:14"
},
{
- "name": "swiftmailer/swiftmailer",
- "version": "v5.4.1",
+ "name": "ramsey/uuid",
+ "version": "3.5.0",
"source": {
"type": "git",
- "url": "https://github.com/swiftmailer/swiftmailer.git",
- "reference": "0697e6aa65c83edf97bb0f23d8763f94e3f11421"
+ "url": "https://github.com/ramsey/uuid.git",
+ "reference": "a6d15c8618ea3951fd54d34e326b68d3d0bc0786"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/0697e6aa65c83edf97bb0f23d8763f94e3f11421",
- "reference": "0697e6aa65c83edf97bb0f23d8763f94e3f11421",
+ "url": "https://api.github.com/repos/ramsey/uuid/zipball/a6d15c8618ea3951fd54d34e326b68d3d0bc0786",
+ "reference": "a6d15c8618ea3951fd54d34e326b68d3d0bc0786",
+ "shasum": ""
+ },
+ "require": {
+ "paragonie/random_compat": "^1.0|^2.0",
+ "php": ">=5.4"
+ },
+ "replace": {
+ "rhumsaa/uuid": "self.version"
+ },
+ "require-dev": {
+ "apigen/apigen": "^4.1",
+ "codeception/aspect-mock": "1.0.0",
+ "goaop/framework": "1.0.0-alpha.2",
+ "ircmaxell/random-lib": "^1.1",
+ "jakub-onderka/php-parallel-lint": "^0.9.0",
+ "mockery/mockery": "^0.9.4",
+ "moontoast/math": "^1.1",
+ "phpunit/phpunit": "^4.7|>=5.0 <5.4",
+ "satooshi/php-coveralls": "^0.6.1",
+ "squizlabs/php_codesniffer": "^2.3"
+ },
+ "suggest": {
+ "ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator",
+ "ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator",
+ "ircmaxell/random-lib": "Provides RandomLib for use with the RandomLibAdapter",
+ "moontoast/math": "Provides support for converting UUID to 128-bit integer (in string form).",
+ "ramsey/uuid-console": "A console application for generating UUIDs with ramsey/uuid",
+ "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Ramsey\\Uuid\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Marijn Huizendveld",
+ "email": "marijn.huizendveld@gmail.com"
+ },
+ {
+ "name": "Thibaud Fabre",
+ "email": "thibaud@aztech.io"
+ },
+ {
+ "name": "Ben Ramsey",
+ "email": "ben@benramsey.com",
+ "homepage": "https://benramsey.com"
+ }
+ ],
+ "description": "Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).",
+ "homepage": "https://github.com/ramsey/uuid",
+ "keywords": [
+ "guid",
+ "identifier",
+ "uuid"
+ ],
+ "time": "2016-08-02 18:39:32"
+ },
+ {
+ "name": "swiftmailer/swiftmailer",
+ "version": "v5.4.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/swiftmailer/swiftmailer.git",
+ "reference": "4cc92842069c2bbc1f28daaaf1d2576ec4dfe153"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/4cc92842069c2bbc1f28daaaf1d2576ec4dfe153",
+ "reference": "4cc92842069c2bbc1f28daaaf1d2576ec4dfe153",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"require-dev": {
- "mockery/mockery": "~0.9.1,<0.9.4"
+ "mockery/mockery": "~0.9.1"
},
"type": "library",
"extra": {
@@ -2019,20 +2064,20 @@
"mail",
"mailer"
],
- "time": "2015-06-06 14:19:39"
+ "time": "2016-07-08 11:51:25"
},
{
"name": "symfony/class-loader",
- "version": "v3.0.4",
+ "version": "v3.1.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/class-loader.git",
- "reference": "cbb7e6a9c0213a0cffa5d9065ee8214ca4e83877"
+ "reference": "2d0ba77c46ecc96a6641009a98f72632216811ba"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/class-loader/zipball/cbb7e6a9c0213a0cffa5d9065ee8214ca4e83877",
- "reference": "cbb7e6a9c0213a0cffa5d9065ee8214ca4e83877",
+ "url": "https://api.github.com/repos/symfony/class-loader/zipball/2d0ba77c46ecc96a6641009a98f72632216811ba",
+ "reference": "2d0ba77c46ecc96a6641009a98f72632216811ba",
"shasum": ""
},
"require": {
@@ -2048,7 +2093,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.0-dev"
+ "dev-master": "3.1-dev"
}
},
"autoload": {
@@ -2075,20 +2120,20 @@
],
"description": "Symfony ClassLoader Component",
"homepage": "https://symfony.com",
- "time": "2016-03-30 10:41:14"
+ "time": "2016-08-23 13:39:15"
},
{
"name": "symfony/console",
- "version": "v3.0.4",
+ "version": "v3.1.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "6b1175135bc2a74c08a28d89761272de8beed8cd"
+ "reference": "8ea494c34f0f772c3954b5fbe00bffc5a435e563"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/6b1175135bc2a74c08a28d89761272de8beed8cd",
- "reference": "6b1175135bc2a74c08a28d89761272de8beed8cd",
+ "url": "https://api.github.com/repos/symfony/console/zipball/8ea494c34f0f772c3954b5fbe00bffc5a435e563",
+ "reference": "8ea494c34f0f772c3954b5fbe00bffc5a435e563",
"shasum": ""
},
"require": {
@@ -2108,7 +2153,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.0-dev"
+ "dev-master": "3.1-dev"
}
},
"autoload": {
@@ -2135,20 +2180,20 @@
],
"description": "Symfony Console Component",
"homepage": "https://symfony.com",
- "time": "2016-03-16 17:00:50"
+ "time": "2016-08-19 06:48:39"
},
{
"name": "symfony/debug",
- "version": "v3.0.4",
+ "version": "v3.1.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/debug.git",
- "reference": "a06d10888a45afd97534506afb058ec38d9ba35b"
+ "reference": "34f6ac18c2974ca5fce68adf419ee7d15def6f11"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/debug/zipball/a06d10888a45afd97534506afb058ec38d9ba35b",
- "reference": "a06d10888a45afd97534506afb058ec38d9ba35b",
+ "url": "https://api.github.com/repos/symfony/debug/zipball/34f6ac18c2974ca5fce68adf419ee7d15def6f11",
+ "reference": "34f6ac18c2974ca5fce68adf419ee7d15def6f11",
"shasum": ""
},
"require": {
@@ -2165,7 +2210,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.0-dev"
+ "dev-master": "3.1-dev"
}
},
"autoload": {
@@ -2192,20 +2237,20 @@
],
"description": "Symfony Debug Component",
"homepage": "https://symfony.com",
- "time": "2016-03-30 10:41:14"
+ "time": "2016-08-23 13:39:15"
},
{
"name": "symfony/event-dispatcher",
- "version": "v3.0.4",
+ "version": "v3.1.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
- "reference": "9002dcf018d884d294b1ef20a6f968efc1128f39"
+ "reference": "c0c00c80b3a69132c4e55c3e7db32b4a387615e5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9002dcf018d884d294b1ef20a6f968efc1128f39",
- "reference": "9002dcf018d884d294b1ef20a6f968efc1128f39",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/c0c00c80b3a69132c4e55c3e7db32b4a387615e5",
+ "reference": "c0c00c80b3a69132c4e55c3e7db32b4a387615e5",
"shasum": ""
},
"require": {
@@ -2225,7 +2270,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.0-dev"
+ "dev-master": "3.1-dev"
}
},
"autoload": {
@@ -2252,20 +2297,20 @@
],
"description": "Symfony EventDispatcher Component",
"homepage": "https://symfony.com",
- "time": "2016-03-10 10:34:12"
+ "time": "2016-07-19 10:45:57"
},
{
"name": "symfony/finder",
- "version": "v3.0.4",
+ "version": "v3.1.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
- "reference": "c54e407b35bc098916704e9fd090da21da4c4f52"
+ "reference": "e568ef1784f447a0e54dcb6f6de30b9747b0f577"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/c54e407b35bc098916704e9fd090da21da4c4f52",
- "reference": "c54e407b35bc098916704e9fd090da21da4c4f52",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/e568ef1784f447a0e54dcb6f6de30b9747b0f577",
+ "reference": "e568ef1784f447a0e54dcb6f6de30b9747b0f577",
"shasum": ""
},
"require": {
@@ -2274,7 +2319,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.0-dev"
+ "dev-master": "3.1-dev"
}
},
"autoload": {
@@ -2301,20 +2346,20 @@
],
"description": "Symfony Finder Component",
"homepage": "https://symfony.com",
- "time": "2016-03-10 11:13:05"
+ "time": "2016-08-26 12:04:02"
},
{
"name": "symfony/http-foundation",
- "version": "v3.0.4",
+ "version": "v3.1.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
- "reference": "99f38445a874e7becb8afc4b4a79ee181cf6ec3f"
+ "reference": "63592e00fd90632b57ee50220a1ddb29b6bf3bb4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-foundation/zipball/99f38445a874e7becb8afc4b4a79ee181cf6ec3f",
- "reference": "99f38445a874e7becb8afc4b4a79ee181cf6ec3f",
+ "url": "https://api.github.com/repos/symfony/http-foundation/zipball/63592e00fd90632b57ee50220a1ddb29b6bf3bb4",
+ "reference": "63592e00fd90632b57ee50220a1ddb29b6bf3bb4",
"shasum": ""
},
"require": {
@@ -2327,7 +2372,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.0-dev"
+ "dev-master": "3.1-dev"
}
},
"autoload": {
@@ -2354,20 +2399,20 @@
],
"description": "Symfony HttpFoundation Component",
"homepage": "https://symfony.com",
- "time": "2016-03-27 14:50:32"
+ "time": "2016-08-22 12:11:19"
},
{
"name": "symfony/http-kernel",
- "version": "v3.0.4",
+ "version": "v3.1.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
- "reference": "579f828489659d7b3430f4bd9b67b4618b387dea"
+ "reference": "aeda215d6b01f119508c090d2a09ebb5b0bc61f3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-kernel/zipball/579f828489659d7b3430f4bd9b67b4618b387dea",
- "reference": "579f828489659d7b3430f4bd9b67b4618b387dea",
+ "url": "https://api.github.com/repos/symfony/http-kernel/zipball/aeda215d6b01f119508c090d2a09ebb5b0bc61f3",
+ "reference": "aeda215d6b01f119508c090d2a09ebb5b0bc61f3",
"shasum": ""
},
"require": {
@@ -2375,7 +2420,7 @@
"psr/log": "~1.0",
"symfony/debug": "~2.8|~3.0",
"symfony/event-dispatcher": "~2.8|~3.0",
- "symfony/http-foundation": "~2.8|~3.0"
+ "symfony/http-foundation": "~2.8.8|~3.0.8|~3.1.2|~3.2"
},
"conflict": {
"symfony/config": "<2.8"
@@ -2409,7 +2454,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.0-dev"
+ "dev-master": "3.1-dev"
}
},
"autoload": {
@@ -2436,20 +2481,20 @@
],
"description": "Symfony HttpKernel Component",
"homepage": "https://symfony.com",
- "time": "2016-03-25 01:41:20"
+ "time": "2016-09-03 15:28:24"
},
{
"name": "symfony/polyfill-mbstring",
- "version": "v1.1.1",
+ "version": "v1.2.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "1289d16209491b584839022f29257ad859b8532d"
+ "reference": "dff51f72b0706335131b00a7f49606168c582594"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/1289d16209491b584839022f29257ad859b8532d",
- "reference": "1289d16209491b584839022f29257ad859b8532d",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/dff51f72b0706335131b00a7f49606168c582594",
+ "reference": "dff51f72b0706335131b00a7f49606168c582594",
"shasum": ""
},
"require": {
@@ -2461,7 +2506,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.1-dev"
+ "dev-master": "1.2-dev"
}
},
"autoload": {
@@ -2495,20 +2540,20 @@
"portable",
"shim"
],
- "time": "2016-01-20 09:13:37"
+ "time": "2016-05-18 14:26:46"
},
{
"name": "symfony/polyfill-php56",
- "version": "v1.1.1",
+ "version": "v1.2.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php56.git",
- "reference": "4d891fff050101a53a4caabb03277284942d1ad9"
+ "reference": "3edf57a8fbf9a927533344cef65ad7e1cf31030a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/4d891fff050101a53a4caabb03277284942d1ad9",
- "reference": "4d891fff050101a53a4caabb03277284942d1ad9",
+ "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/3edf57a8fbf9a927533344cef65ad7e1cf31030a",
+ "reference": "3edf57a8fbf9a927533344cef65ad7e1cf31030a",
"shasum": ""
},
"require": {
@@ -2518,7 +2563,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.1-dev"
+ "dev-master": "1.2-dev"
}
},
"autoload": {
@@ -2551,20 +2596,20 @@
"portable",
"shim"
],
- "time": "2016-01-20 09:13:37"
+ "time": "2016-05-18 14:26:46"
},
{
"name": "symfony/polyfill-util",
- "version": "v1.1.1",
+ "version": "v1.2.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-util.git",
- "reference": "8de62801aa12bc4dfcf85eef5d21981ae7bb3cc4"
+ "reference": "ef830ce3d218e622b221d6bfad42c751d974bf99"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/8de62801aa12bc4dfcf85eef5d21981ae7bb3cc4",
- "reference": "8de62801aa12bc4dfcf85eef5d21981ae7bb3cc4",
+ "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/ef830ce3d218e622b221d6bfad42c751d974bf99",
+ "reference": "ef830ce3d218e622b221d6bfad42c751d974bf99",
"shasum": ""
},
"require": {
@@ -2573,7 +2618,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.1-dev"
+ "dev-master": "1.2-dev"
}
},
"autoload": {
@@ -2603,20 +2648,20 @@
"polyfill",
"shim"
],
- "time": "2016-01-20 09:13:37"
+ "time": "2016-05-18 14:26:46"
},
{
"name": "symfony/process",
- "version": "v3.0.4",
+ "version": "v3.1.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
- "reference": "e6f1f98bbd355d209a992bfff45e7edfbd4a0776"
+ "reference": "e64e93041c80e77197ace5ab9385dedb5a143697"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/e6f1f98bbd355d209a992bfff45e7edfbd4a0776",
- "reference": "e6f1f98bbd355d209a992bfff45e7edfbd4a0776",
+ "url": "https://api.github.com/repos/symfony/process/zipball/e64e93041c80e77197ace5ab9385dedb5a143697",
+ "reference": "e64e93041c80e77197ace5ab9385dedb5a143697",
"shasum": ""
},
"require": {
@@ -2625,7 +2670,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.0-dev"
+ "dev-master": "3.1-dev"
}
},
"autoload": {
@@ -2652,20 +2697,20 @@
],
"description": "Symfony Process Component",
"homepage": "https://symfony.com",
- "time": "2016-03-30 10:41:14"
+ "time": "2016-08-16 14:58:24"
},
{
"name": "symfony/routing",
- "version": "v3.0.4",
+ "version": "v3.1.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
- "reference": "d061b609f2d0769494c381ec92f5c5cc5e4a20aa"
+ "reference": "8edf62498a1a4c57ba317664a4b698339c10cdf6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/routing/zipball/d061b609f2d0769494c381ec92f5c5cc5e4a20aa",
- "reference": "d061b609f2d0769494c381ec92f5c5cc5e4a20aa",
+ "url": "https://api.github.com/repos/symfony/routing/zipball/8edf62498a1a4c57ba317664a4b698339c10cdf6",
+ "reference": "8edf62498a1a4c57ba317664a4b698339c10cdf6",
"shasum": ""
},
"require": {
@@ -2694,7 +2739,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.0-dev"
+ "dev-master": "3.1-dev"
}
},
"autoload": {
@@ -2727,20 +2772,20 @@
"uri",
"url"
],
- "time": "2016-03-23 13:23:25"
+ "time": "2016-08-16 14:58:24"
},
{
"name": "symfony/translation",
- "version": "v3.0.4",
+ "version": "v3.1.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
- "reference": "f7a07af51ea067745a521dab1e3152044a2fb1f2"
+ "reference": "a35edc277513c9bc0f063ca174c36b346f974528"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/translation/zipball/f7a07af51ea067745a521dab1e3152044a2fb1f2",
- "reference": "f7a07af51ea067745a521dab1e3152044a2fb1f2",
+ "url": "https://api.github.com/repos/symfony/translation/zipball/a35edc277513c9bc0f063ca174c36b346f974528",
+ "reference": "a35edc277513c9bc0f063ca174c36b346f974528",
"shasum": ""
},
"require": {
@@ -2764,7 +2809,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.0-dev"
+ "dev-master": "3.1-dev"
}
},
"autoload": {
@@ -2791,20 +2836,20 @@
],
"description": "Symfony Translation Component",
"homepage": "https://symfony.com",
- "time": "2016-03-25 01:41:20"
+ "time": "2016-08-05 08:37:39"
},
{
"name": "symfony/var-dumper",
- "version": "v3.0.4",
+ "version": "v3.1.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
- "reference": "3841ed86527d18ee2c35fe4afb1b2fc60f8fae79"
+ "reference": "62ee73706c421654a4c840028954510277f7dfc8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/var-dumper/zipball/3841ed86527d18ee2c35fe4afb1b2fc60f8fae79",
- "reference": "3841ed86527d18ee2c35fe4afb1b2fc60f8fae79",
+ "url": "https://api.github.com/repos/symfony/var-dumper/zipball/62ee73706c421654a4c840028954510277f7dfc8",
+ "reference": "62ee73706c421654a4c840028954510277f7dfc8",
"shasum": ""
},
"require": {
@@ -2820,7 +2865,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.0-dev"
+ "dev-master": "3.1-dev"
}
},
"autoload": {
@@ -2854,32 +2899,32 @@
"debug",
"dump"
],
- "time": "2016-03-10 10:34:12"
+ "time": "2016-08-31 09:05:42"
},
{
"name": "vlucas/phpdotenv",
- "version": "v2.2.0",
+ "version": "v2.4.0",
"source": {
"type": "git",
"url": "https://github.com/vlucas/phpdotenv.git",
- "reference": "9caf304153dc2288e4970caec6f1f3b3bc205412"
+ "reference": "3cc116adbe4b11be5ec557bf1d24dc5e3a21d18c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/9caf304153dc2288e4970caec6f1f3b3bc205412",
- "reference": "9caf304153dc2288e4970caec6f1f3b3bc205412",
+ "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/3cc116adbe4b11be5ec557bf1d24dc5e3a21d18c",
+ "reference": "3cc116adbe4b11be5ec557bf1d24dc5e3a21d18c",
"shasum": ""
},
"require": {
"php": ">=5.3.9"
},
"require-dev": {
- "phpunit/phpunit": "^4.8|^5.0"
+ "phpunit/phpunit": "^4.8 || ^5.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.2-dev"
+ "dev-master": "2.4-dev"
}
},
"autoload": {
@@ -2889,7 +2934,7 @@
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD"
+ "BSD-3-Clause-Attribution"
],
"authors": [
{
@@ -2899,13 +2944,12 @@
}
],
"description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.",
- "homepage": "http://github.com/vlucas/phpdotenv",
"keywords": [
"dotenv",
"env",
"environment"
],
- "time": "2015-12-29 15:10:30"
+ "time": "2016-09-01 10:05:43"
}
],
"packages-dev": [
@@ -2965,33 +3009,29 @@
},
{
"name": "fzaninotto/faker",
- "version": "v1.5.0",
+ "version": "v1.6.0",
"source": {
"type": "git",
"url": "https://github.com/fzaninotto/Faker.git",
- "reference": "d0190b156bcca848d401fb80f31f504f37141c8d"
+ "reference": "44f9a286a04b80c76a4e5fb7aad8bb539b920123"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/d0190b156bcca848d401fb80f31f504f37141c8d",
- "reference": "d0190b156bcca848d401fb80f31f504f37141c8d",
+ "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/44f9a286a04b80c76a4e5fb7aad8bb539b920123",
+ "reference": "44f9a286a04b80c76a4e5fb7aad8bb539b920123",
"shasum": ""
},
"require": {
- "php": ">=5.3.3"
+ "php": "^5.3.3|^7.0"
},
"require-dev": {
+ "ext-intl": "*",
"phpunit/phpunit": "~4.0",
"squizlabs/php_codesniffer": "~1.5"
},
- "suggest": {
- "ext-intl": "*"
- },
"type": "library",
"extra": {
- "branch-alias": {
- "dev-master": "1.5.x-dev"
- }
+ "branch-alias": []
},
"autoload": {
"psr-4": {
@@ -3013,7 +3053,7 @@
"faker",
"fixtures"
],
- "time": "2015-05-29 06:29:14"
+ "time": "2016-04-29 12:21:54"
},
{
"name": "hamcrest/hamcrest-php",
@@ -3062,16 +3102,16 @@
},
{
"name": "mockery/mockery",
- "version": "0.9.4",
+ "version": "0.9.5",
"source": {
"type": "git",
"url": "https://github.com/padraic/mockery.git",
- "reference": "70bba85e4aabc9449626651f48b9018ede04f86b"
+ "reference": "4db079511a283e5aba1b3c2fb19037c645e70fc2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/padraic/mockery/zipball/70bba85e4aabc9449626651f48b9018ede04f86b",
- "reference": "70bba85e4aabc9449626651f48b9018ede04f86b",
+ "url": "https://api.github.com/repos/padraic/mockery/zipball/4db079511a283e5aba1b3c2fb19037c645e70fc2",
+ "reference": "4db079511a283e5aba1b3c2fb19037c645e70fc2",
"shasum": ""
},
"require": {
@@ -3123,90 +3163,81 @@
"test double",
"testing"
],
- "time": "2015-04-02 19:54:00"
+ "time": "2016-05-22 21:52:33"
},
{
- "name": "phpspec/php-diff",
- "version": "v1.0.2",
+ "name": "myclabs/deep-copy",
+ "version": "1.5.2",
"source": {
"type": "git",
- "url": "https://github.com/phpspec/php-diff.git",
- "reference": "30e103d19519fe678ae64a60d77884ef3d71b28a"
+ "url": "https://github.com/myclabs/DeepCopy.git",
+ "reference": "da8529775f14f4fdae33f916eb0cf65f6afbddbc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpspec/php-diff/zipball/30e103d19519fe678ae64a60d77884ef3d71b28a",
- "reference": "30e103d19519fe678ae64a60d77884ef3d71b28a",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/da8529775f14f4fdae33f916eb0cf65f6afbddbc",
+ "reference": "da8529775f14f4fdae33f916eb0cf65f6afbddbc",
"shasum": ""
},
+ "require": {
+ "php": ">=5.4.0"
+ },
+ "require-dev": {
+ "doctrine/collections": "1.*",
+ "phpunit/phpunit": "~4.1"
+ },
"type": "library",
"autoload": {
- "psr-0": {
- "Diff": "lib/"
+ "psr-4": {
+ "DeepCopy\\": "src/DeepCopy/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
+ "MIT"
],
- "authors": [
- {
- "name": "Chris Boulton",
- "homepage": "http://github.com/chrisboulton",
- "role": "Original developer"
- }
+ "description": "Create deep copies (clones) of your objects",
+ "homepage": "https://github.com/myclabs/DeepCopy",
+ "keywords": [
+ "clone",
+ "copy",
+ "duplicate",
+ "object",
+ "object graph"
],
- "description": "A comprehensive library for generating differences between two hashable objects (strings or arrays).",
- "time": "2013-11-01 13:02:21"
+ "time": "2016-09-06 16:07:05"
},
{
- "name": "phpspec/phpspec",
- "version": "2.5.0",
+ "name": "phpdocumentor/reflection-common",
+ "version": "1.0",
"source": {
"type": "git",
- "url": "https://github.com/phpspec/phpspec.git",
- "reference": "385ecb015e97c13818074f1517928b24d4a26067"
+ "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
+ "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpspec/phpspec/zipball/385ecb015e97c13818074f1517928b24d4a26067",
- "reference": "385ecb015e97c13818074f1517928b24d4a26067",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/144c307535e82c8fdcaacbcfc1d6d8eeb896687c",
+ "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c",
"shasum": ""
},
"require": {
- "doctrine/instantiator": "^1.0.1",
- "ext-tokenizer": "*",
- "php": ">=5.3.3",
- "phpspec/php-diff": "~1.0.0",
- "phpspec/prophecy": "~1.4",
- "sebastian/exporter": "~1.0",
- "symfony/console": "~2.3|~3.0",
- "symfony/event-dispatcher": "~2.1|~3.0",
- "symfony/finder": "~2.1|~3.0",
- "symfony/process": "^2.6|~3.0",
- "symfony/yaml": "~2.1|~3.0"
+ "php": ">=5.5"
},
"require-dev": {
- "behat/behat": "^3.0.11",
- "bossa/phpspec2-expect": "~1.0",
- "phpunit/phpunit": "~4.4",
- "symfony/filesystem": "~2.1|~3.0"
+ "phpunit/phpunit": "^4.6"
},
- "suggest": {
- "phpspec/nyan-formatters": "~1.0 – Adds Nyan formatters"
- },
- "bin": [
- "bin/phpspec"
- ],
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.2.x-dev"
+ "dev-master": "1.0.x-dev"
}
},
"autoload": {
- "psr-0": {
- "PhpSpec": "src/"
+ "psr-4": {
+ "phpDocumentor\\Reflection\\": [
+ "src"
+ ]
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -3215,56 +3246,141 @@
],
"authors": [
{
- "name": "Konstantin Kudryashov",
- "email": "ever.zet@gmail.com",
- "homepage": "http://everzet.com"
- },
- {
- "name": "Marcello Duarte",
- "homepage": "http://marcelloduarte.net/"
+ "name": "Jaap van Otterdijk",
+ "email": "opensource@ijaap.nl"
}
],
- "description": "Specification-oriented BDD framework for PHP 5.3+",
- "homepage": "http://phpspec.net/",
+ "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
+ "homepage": "http://www.phpdoc.org",
"keywords": [
- "BDD",
- "SpecBDD",
- "TDD",
- "spec",
- "specification",
- "testing",
- "tests"
+ "FQSEN",
+ "phpDocumentor",
+ "phpdoc",
+ "reflection",
+ "static analysis"
],
- "time": "2016-03-20 20:34:32"
+ "time": "2015-12-27 11:43:31"
},
{
- "name": "phpspec/prophecy",
- "version": "v1.6.0",
+ "name": "phpdocumentor/reflection-docblock",
+ "version": "3.1.0",
"source": {
"type": "git",
- "url": "https://github.com/phpspec/prophecy.git",
- "reference": "3c91bdf81797d725b14cb62906f9a4ce44235972"
+ "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
+ "reference": "9270140b940ff02e58ec577c237274e92cd40cdd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpspec/prophecy/zipball/3c91bdf81797d725b14cb62906f9a4ce44235972",
- "reference": "3c91bdf81797d725b14cb62906f9a4ce44235972",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/9270140b940ff02e58ec577c237274e92cd40cdd",
+ "reference": "9270140b940ff02e58ec577c237274e92cd40cdd",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.5",
+ "phpdocumentor/reflection-common": "^1.0@dev",
+ "phpdocumentor/type-resolver": "^0.2.0",
+ "webmozart/assert": "^1.0"
+ },
+ "require-dev": {
+ "mockery/mockery": "^0.9.4",
+ "phpunit/phpunit": "^4.4"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "phpDocumentor\\Reflection\\": [
+ "src/"
+ ]
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mike van Riel",
+ "email": "me@mikevanriel.com"
+ }
+ ],
+ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
+ "time": "2016-06-10 09:48:41"
+ },
+ {
+ "name": "phpdocumentor/type-resolver",
+ "version": "0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpDocumentor/TypeResolver.git",
+ "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/b39c7a5b194f9ed7bd0dd345c751007a41862443",
+ "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.5",
+ "phpdocumentor/reflection-common": "^1.0"
+ },
+ "require-dev": {
+ "mockery/mockery": "^0.9.4",
+ "phpunit/phpunit": "^5.2||^4.8.24"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "phpDocumentor\\Reflection\\": [
+ "src/"
+ ]
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mike van Riel",
+ "email": "me@mikevanriel.com"
+ }
+ ],
+ "time": "2016-06-10 07:14:17"
+ },
+ {
+ "name": "phpspec/prophecy",
+ "version": "v1.6.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpspec/prophecy.git",
+ "reference": "58a8137754bc24b25740d4281399a4a3596058e0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpspec/prophecy/zipball/58a8137754bc24b25740d4281399a4a3596058e0",
+ "reference": "58a8137754bc24b25740d4281399a4a3596058e0",
"shasum": ""
},
"require": {
"doctrine/instantiator": "^1.0.2",
"php": "^5.3|^7.0",
- "phpdocumentor/reflection-docblock": "~2.0",
- "sebastian/comparator": "~1.1",
- "sebastian/recursion-context": "~1.0"
+ "phpdocumentor/reflection-docblock": "^2.0|^3.0.2",
+ "sebastian/comparator": "^1.1",
+ "sebastian/recursion-context": "^1.0"
},
"require-dev": {
- "phpspec/phpspec": "~2.0"
+ "phpspec/phpspec": "^2.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.5.x-dev"
+ "dev-master": "1.6.x-dev"
}
},
"autoload": {
@@ -3297,43 +3413,44 @@
"spy",
"stub"
],
- "time": "2016-02-15 07:46:21"
+ "time": "2016-06-07 08:13:47"
},
{
"name": "phpunit/php-code-coverage",
- "version": "2.2.4",
+ "version": "4.0.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979"
+ "reference": "5f3f7e736d6319d5f1fc402aff8b026da26709a3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979",
- "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/5f3f7e736d6319d5f1fc402aff8b026da26709a3",
+ "reference": "5f3f7e736d6319d5f1fc402aff8b026da26709a3",
"shasum": ""
},
"require": {
- "php": ">=5.3.3",
+ "php": "^5.6 || ^7.0",
"phpunit/php-file-iterator": "~1.3",
"phpunit/php-text-template": "~1.2",
- "phpunit/php-token-stream": "~1.3",
- "sebastian/environment": "^1.3.2",
- "sebastian/version": "~1.0"
+ "phpunit/php-token-stream": "^1.4.2",
+ "sebastian/code-unit-reverse-lookup": "~1.0",
+ "sebastian/environment": "^1.3.2 || ^2.0",
+ "sebastian/version": "~1.0|~2.0"
},
"require-dev": {
"ext-xdebug": ">=2.1.4",
- "phpunit/phpunit": "~4"
+ "phpunit/phpunit": "^5.4"
},
"suggest": {
"ext-dom": "*",
- "ext-xdebug": ">=2.2.1",
+ "ext-xdebug": ">=2.4.0",
"ext-xmlwriter": "*"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.2.x-dev"
+ "dev-master": "4.0.x-dev"
}
},
"autoload": {
@@ -3359,7 +3476,7 @@
"testing",
"xunit"
],
- "time": "2015-10-06 15:47:00"
+ "time": "2016-07-26 14:39:29"
},
{
"name": "phpunit/php-file-iterator",
@@ -3451,21 +3568,24 @@
},
{
"name": "phpunit/php-timer",
- "version": "1.0.7",
+ "version": "1.0.8",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-timer.git",
- "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b"
+ "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3e82f4e9fc92665fafd9157568e4dcb01d014e5b",
- "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260",
+ "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
+ "require-dev": {
+ "phpunit/phpunit": "~4|~5"
+ },
"type": "library",
"autoload": {
"classmap": [
@@ -3488,7 +3608,7 @@
"keywords": [
"timer"
],
- "time": "2015-06-21 08:01:12"
+ "time": "2016-05-12 18:03:57"
},
{
"name": "phpunit/php-token-stream",
@@ -3541,16 +3661,16 @@
},
{
"name": "phpunit/phpunit",
- "version": "4.8.24",
+ "version": "5.5.4",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "a1066c562c52900a142a0e2bbf0582994671385e"
+ "reference": "3e6e88e56c912133de6e99b87728cca7ed70c5f5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a1066c562c52900a142a0e2bbf0582994671385e",
- "reference": "a1066c562c52900a142a0e2bbf0582994671385e",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3e6e88e56c912133de6e99b87728cca7ed70c5f5",
+ "reference": "3e6e88e56c912133de6e99b87728cca7ed70c5f5",
"shasum": ""
},
"require": {
@@ -3559,21 +3679,27 @@
"ext-pcre": "*",
"ext-reflection": "*",
"ext-spl": "*",
- "php": ">=5.3.3",
+ "myclabs/deep-copy": "~1.3",
+ "php": "^5.6 || ^7.0",
"phpspec/prophecy": "^1.3.1",
- "phpunit/php-code-coverage": "~2.1",
+ "phpunit/php-code-coverage": "^4.0.1",
"phpunit/php-file-iterator": "~1.4",
"phpunit/php-text-template": "~1.2",
- "phpunit/php-timer": ">=1.0.6",
- "phpunit/phpunit-mock-objects": "~2.3",
+ "phpunit/php-timer": "^1.0.6",
+ "phpunit/phpunit-mock-objects": "^3.2",
"sebastian/comparator": "~1.1",
"sebastian/diff": "~1.2",
- "sebastian/environment": "~1.3",
+ "sebastian/environment": "^1.3 || ^2.0",
"sebastian/exporter": "~1.2",
"sebastian/global-state": "~1.0",
- "sebastian/version": "~1.0",
+ "sebastian/object-enumerator": "~1.0",
+ "sebastian/resource-operations": "~1.0",
+ "sebastian/version": "~1.0|~2.0",
"symfony/yaml": "~2.1|~3.0"
},
+ "conflict": {
+ "phpdocumentor/reflection-docblock": "3.0.2"
+ },
"suggest": {
"phpunit/php-invoker": "~1.1"
},
@@ -3583,7 +3709,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.8.x-dev"
+ "dev-master": "5.5.x-dev"
}
},
"autoload": {
@@ -3609,30 +3735,33 @@
"testing",
"xunit"
],
- "time": "2016-03-14 06:16:08"
+ "time": "2016-08-26 07:11:44"
},
{
"name": "phpunit/phpunit-mock-objects",
- "version": "2.3.8",
+ "version": "3.2.7",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
- "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983"
+ "reference": "546898a2c0c356ef2891b39dd7d07f5d82c8ed0a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983",
- "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/546898a2c0c356ef2891b39dd7d07f5d82c8ed0a",
+ "reference": "546898a2c0c356ef2891b39dd7d07f5d82c8ed0a",
"shasum": ""
},
"require": {
"doctrine/instantiator": "^1.0.2",
- "php": ">=5.3.3",
- "phpunit/php-text-template": "~1.2",
- "sebastian/exporter": "~1.2"
+ "php": "^5.6 || ^7.0",
+ "phpunit/php-text-template": "^1.2",
+ "sebastian/exporter": "^1.2"
+ },
+ "conflict": {
+ "phpunit/phpunit": "<5.4.0"
},
"require-dev": {
- "phpunit/phpunit": "~4.4"
+ "phpunit/phpunit": "^5.4"
},
"suggest": {
"ext-soap": "*"
@@ -3640,7 +3769,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.3.x-dev"
+ "dev-master": "3.2.x-dev"
}
},
"autoload": {
@@ -3665,7 +3794,52 @@
"mock",
"xunit"
],
- "time": "2015-10-02 06:51:40"
+ "time": "2016-09-06 16:07:45"
+ },
+ {
+ "name": "sebastian/code-unit-reverse-lookup",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
+ "reference": "c36f5e7cfce482fde5bf8d10d41a53591e0198fe"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/c36f5e7cfce482fde5bf8d10d41a53591e0198fe",
+ "reference": "c36f5e7cfce482fde5bf8d10d41a53591e0198fe",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.6"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Looks up which function or method a line of code belongs to",
+ "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
+ "time": "2016-02-13 06:45:14"
},
{
"name": "sebastian/comparator",
@@ -3785,23 +3959,23 @@
},
{
"name": "sebastian/environment",
- "version": "1.3.5",
+ "version": "1.3.8",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/environment.git",
- "reference": "dc7a29032cf72b54f36dac15a1ca5b3a1b6029bf"
+ "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/dc7a29032cf72b54f36dac15a1ca5b3a1b6029bf",
- "reference": "dc7a29032cf72b54f36dac15a1ca5b3a1b6029bf",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea",
+ "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea",
"shasum": ""
},
"require": {
- "php": ">=5.3.3"
+ "php": "^5.3.3 || ^7.0"
},
"require-dev": {
- "phpunit/phpunit": "~4.4"
+ "phpunit/phpunit": "^4.8 || ^5.0"
},
"type": "library",
"extra": {
@@ -3831,20 +4005,20 @@
"environment",
"hhvm"
],
- "time": "2016-02-26 18:40:46"
+ "time": "2016-08-18 05:49:44"
},
{
"name": "sebastian/exporter",
- "version": "1.2.1",
+ "version": "1.2.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/exporter.git",
- "reference": "7ae5513327cb536431847bcc0c10edba2701064e"
+ "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/7ae5513327cb536431847bcc0c10edba2701064e",
- "reference": "7ae5513327cb536431847bcc0c10edba2701064e",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4",
+ "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4",
"shasum": ""
},
"require": {
@@ -3852,12 +4026,13 @@
"sebastian/recursion-context": "~1.0"
},
"require-dev": {
+ "ext-mbstring": "*",
"phpunit/phpunit": "~4.4"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.2.x-dev"
+ "dev-master": "1.3.x-dev"
}
},
"autoload": {
@@ -3897,7 +4072,7 @@
"export",
"exporter"
],
- "time": "2015-06-21 07:55:53"
+ "time": "2016-06-17 09:04:28"
},
{
"name": "sebastian/global-state",
@@ -3950,6 +4125,52 @@
],
"time": "2015-10-12 03:26:01"
},
+ {
+ "name": "sebastian/object-enumerator",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/object-enumerator.git",
+ "reference": "d4ca2fb70344987502567bc50081c03e6192fb26"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/d4ca2fb70344987502567bc50081c03e6192fb26",
+ "reference": "d4ca2fb70344987502567bc50081c03e6192fb26",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.6",
+ "sebastian/recursion-context": "~1.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Traverses array structures and object graphs to enumerate all referenced objects",
+ "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
+ "time": "2016-01-28 13:25:10"
+ },
{
"name": "sebastian/recursion-context",
"version": "1.0.2",
@@ -4004,20 +4225,70 @@
"time": "2015-11-11 19:50:13"
},
{
- "name": "sebastian/version",
- "version": "1.0.6",
+ "name": "sebastian/resource-operations",
+ "version": "1.0.0",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/version.git",
- "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6"
+ "url": "https://github.com/sebastianbergmann/resource-operations.git",
+ "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
- "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
+ "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
+ "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52",
"shasum": ""
},
+ "require": {
+ "php": ">=5.6.0"
+ },
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides a list of PHP built-in functions that operate on resources",
+ "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
+ "time": "2015-07-28 20:34:47"
+ },
+ {
+ "name": "sebastian/version",
+ "version": "2.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/version.git",
+ "reference": "c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5",
+ "reference": "c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.6"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
"autoload": {
"classmap": [
"src/"
@@ -4036,20 +4307,20 @@
],
"description": "Library that helps with managing the version number of Git-hosted PHP projects",
"homepage": "https://github.com/sebastianbergmann/version",
- "time": "2015-06-21 13:59:46"
+ "time": "2016-02-04 12:56:52"
},
{
"name": "symfony/css-selector",
- "version": "v3.0.4",
+ "version": "v3.1.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
- "reference": "65e764f404685f2dc20c057e889b3ad04b2e2db0"
+ "reference": "2851e1932d77ce727776154d659b232d061e816a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/css-selector/zipball/65e764f404685f2dc20c057e889b3ad04b2e2db0",
- "reference": "65e764f404685f2dc20c057e889b3ad04b2e2db0",
+ "url": "https://api.github.com/repos/symfony/css-selector/zipball/2851e1932d77ce727776154d659b232d061e816a",
+ "reference": "2851e1932d77ce727776154d659b232d061e816a",
"shasum": ""
},
"require": {
@@ -4058,7 +4329,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.0-dev"
+ "dev-master": "3.1-dev"
}
},
"autoload": {
@@ -4089,20 +4360,20 @@
],
"description": "Symfony CssSelector Component",
"homepage": "https://symfony.com",
- "time": "2016-03-04 07:55:57"
+ "time": "2016-06-29 05:41:56"
},
{
"name": "symfony/dom-crawler",
- "version": "v3.0.4",
+ "version": "v3.1.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/dom-crawler.git",
- "reference": "18a06d7a9af41718c20764a674a0ebba3bc40d1f"
+ "reference": "bb7395e8b1db3654de82b9f35d019958276de4d7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/18a06d7a9af41718c20764a674a0ebba3bc40d1f",
- "reference": "18a06d7a9af41718c20764a674a0ebba3bc40d1f",
+ "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/bb7395e8b1db3654de82b9f35d019958276de4d7",
+ "reference": "bb7395e8b1db3654de82b9f35d019958276de4d7",
"shasum": ""
},
"require": {
@@ -4118,7 +4389,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.0-dev"
+ "dev-master": "3.1-dev"
}
},
"autoload": {
@@ -4145,20 +4416,20 @@
],
"description": "Symfony DomCrawler Component",
"homepage": "https://symfony.com",
- "time": "2016-03-23 13:23:25"
+ "time": "2016-08-05 08:37:39"
},
{
"name": "symfony/yaml",
- "version": "v3.0.4",
+ "version": "v3.1.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
- "reference": "0047c8366744a16de7516622c5b7355336afae96"
+ "reference": "f291ed25eb1435bddbe8a96caaef16469c2a092d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/0047c8366744a16de7516622c5b7355336afae96",
- "reference": "0047c8366744a16de7516622c5b7355336afae96",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/f291ed25eb1435bddbe8a96caaef16469c2a092d",
+ "reference": "f291ed25eb1435bddbe8a96caaef16469c2a092d",
"shasum": ""
},
"require": {
@@ -4167,7 +4438,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.0-dev"
+ "dev-master": "3.1-dev"
}
},
"autoload": {
@@ -4194,7 +4465,57 @@
],
"description": "Symfony Yaml Component",
"homepage": "https://symfony.com",
- "time": "2016-03-04 07:55:57"
+ "time": "2016-09-02 02:12:52"
+ },
+ {
+ "name": "webmozart/assert",
+ "version": "1.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/webmozart/assert.git",
+ "reference": "bb2d123231c095735130cc8f6d31385a44c7b308"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/webmozart/assert/zipball/bb2d123231c095735130cc8f6d31385a44c7b308",
+ "reference": "bb2d123231c095735130cc8f6d31385a44c7b308",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.3.3|^7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.6",
+ "sebastian/version": "^1.0.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.2-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Webmozart\\Assert\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@gmail.com"
+ }
+ ],
+ "description": "Assertions to validate method input/output with nice error messages.",
+ "keywords": [
+ "assert",
+ "check",
+ "validate"
+ ],
+ "time": "2016-08-09 15:02:57"
}
],
"aliases": [],
@@ -4203,7 +4524,7 @@
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
- "php": ">=5.5.9"
+ "php": ">=5.6.4"
},
"platform-dev": []
}
diff --git a/config/app.php b/config/app.php
index 0d6f6f2b0..a5b0d2fe0 100644
--- a/config/app.php
+++ b/config/app.php
@@ -138,6 +138,7 @@ return [
Illuminate\Translation\TranslationServiceProvider::class,
Illuminate\Validation\ValidationServiceProvider::class,
Illuminate\View\ViewServiceProvider::class,
+ Illuminate\Notifications\NotificationServiceProvider::class,
Laravel\Socialite\SocialiteServiceProvider::class,
/**
@@ -156,6 +157,7 @@ return [
BookStack\Providers\AuthServiceProvider::class,
BookStack\Providers\AppServiceProvider::class,
+ BookStack\Providers\BroadcastServiceProvider::class,
BookStack\Providers\EventServiceProvider::class,
BookStack\Providers\RouteServiceProvider::class,
BookStack\Providers\CustomFacadeProvider::class,
@@ -194,6 +196,7 @@ return [
'Lang' => Illuminate\Support\Facades\Lang::class,
'Log' => Illuminate\Support\Facades\Log::class,
'Mail' => Illuminate\Support\Facades\Mail::class,
+ 'Notification' => Illuminate\Support\Facades\Notification::class,
'Password' => Illuminate\Support\Facades\Password::class,
'Queue' => Illuminate\Support\Facades\Queue::class,
'Redirect' => Illuminate\Support\Facades\Redirect::class,
diff --git a/database/migrations/2015_08_29_105422_add_roles_and_permissions.php b/database/migrations/2015_08_29_105422_add_roles_and_permissions.php
index 763a33fec..47a77e29f 100644
--- a/database/migrations/2015_08_29_105422_add_roles_and_permissions.php
+++ b/database/migrations/2015_08_29_105422_add_roles_and_permissions.php
@@ -129,7 +129,7 @@ class AddRolesAndPermissions extends Migration
// Set all current users as admins
// (At this point only the initially create user should be an admin)
- $users = DB::table('users')->get();
+ $users = DB::table('users')->get()->all();
foreach ($users as $user) {
DB::table('role_user')->insert([
'role_id' => $adminId,
diff --git a/phpspec.yml b/phpspec.yml
deleted file mode 100644
index 58f1d982e..000000000
--- a/phpspec.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-suites:
- main:
- namespace: BookStack
- psr4_prefix: BookStack
- src_path: app
\ No newline at end of file
diff --git a/resources/lang/en/auth.php b/resources/lang/en/auth.php
new file mode 100644
index 000000000..cbf4ec7f5
--- /dev/null
+++ b/resources/lang/en/auth.php
@@ -0,0 +1,15 @@
+ 'These credentials do not match our records.',
+ 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
+];
\ No newline at end of file
diff --git a/resources/views/auth/password.blade.php b/resources/views/auth/passwords/email.blade.php
similarity index 100%
rename from resources/views/auth/password.blade.php
rename to resources/views/auth/passwords/email.blade.php
diff --git a/resources/views/auth/reset.blade.php b/resources/views/auth/passwords/reset.blade.php
similarity index 100%
rename from resources/views/auth/reset.blade.php
rename to resources/views/auth/passwords/reset.blade.php
diff --git a/resources/views/emails/email-confirmation.blade.php b/resources/views/emails/email-confirmation.blade.php
deleted file mode 100644
index 6a0dc0378..000000000
--- a/resources/views/emails/email-confirmation.blade.php
+++ /dev/null
@@ -1,190 +0,0 @@
-
-
-
-
-
-
- Confirm Your Email At {{ setting('app-name')}}
-
-
-
-
-
-
-
- |
-
-
-
-
-
-
-
- Email Confirmation
-
- Thanks for joining {{ setting('app-name')}}.
- Please confirm your email address by clicking the button below.
-
- |
-
-
-
-
- |
- |
-
-
-
-
-
-
diff --git a/resources/views/emails/password.blade.php b/resources/views/emails/password.blade.php
deleted file mode 100644
index dfd8f3db5..000000000
--- a/resources/views/emails/password.blade.php
+++ /dev/null
@@ -1 +0,0 @@
-
Password Reset From {{ setting('app-name')}}
|
Password Reset
A password reset was requested for this email address on {{ setting('app-name')}}. If you did not request
a password change please ignore this email.
|
|
|
\ No newline at end of file
diff --git a/resources/views/users/index.blade.php b/resources/views/users/index.blade.php
index e72a9e61a..105fddb5b 100644
--- a/resources/views/users/index.blade.php
+++ b/resources/views/users/index.blade.php
@@ -22,7 +22,7 @@
- {!! $users->links() !!}
+ {{ $users->links() }}
@@ -76,7 +76,7 @@
- {!! $users->links() !!}
+ {{ $users->links() }}
diff --git a/resources/views/vendor/.gitkeep b/resources/views/vendor/.gitkeep
deleted file mode 100644
index e69de29bb..000000000
diff --git a/resources/views/vendor/notifications/email-plain.blade.php b/resources/views/vendor/notifications/email-plain.blade.php
new file mode 100644
index 000000000..acefa6523
--- /dev/null
+++ b/resources/views/vendor/notifications/email-plain.blade.php
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+ 'margin: 0; padding: 0; width: 100%; background-color: #F2F4F6;',
+ 'email-wrapper' => 'width: 100%; margin: 0; padding: 0; background-color: #F2F4F6;',
+
+ /* Masthead ----------------------- */
+
+ 'email-masthead' => 'padding: 25px 0; text-align: center;',
+ 'email-masthead_name' => 'font-size: 24px; font-weight: 400; color: #2F3133; text-decoration: none; text-shadow: 0 1px 0 white;',
+
+ 'email-body' => 'width: 100%; margin: 0; padding: 0; border-top: 4px solid '.setting('app-color').'; border-bottom: 1px solid #EDEFF2; background-color: #FFF;',
+ 'email-body_inner' => 'width: auto; max-width: 100%; margin: 0 auto; padding: 0;',
+ 'email-body_cell' => 'padding: 35px;',
+
+ 'email-footer' => 'width: auto; max-width: 570px; margin: 0 auto; padding: 0; text-align: center;',
+ 'email-footer_cell' => 'color: #AEAEAE; padding: 35px; text-align: center;',
+
+ /* Body ------------------------------ */
+
+ 'body_action' => 'width: 100%; margin: 30px auto; padding: 0; text-align: center;',
+ 'body_sub' => 'margin-top: 25px; padding-top: 25px; border-top: 1px solid #EDEFF2;',
+
+ /* Type ------------------------------ */
+
+ 'anchor' => 'color: '.setting('app-color').';overflow-wrap: break-word;word-wrap: break-word;word-break: break-all;word-break:break-word;',
+ 'header-1' => 'margin-top: 0; color: #2F3133; font-size: 19px; font-weight: bold; text-align: left;',
+ 'paragraph' => 'margin-top: 0; color: #74787E; font-size: 16px; line-height: 1.5em;',
+ 'paragraph-sub' => 'margin-top: 0; color: #74787E; font-size: 12px; line-height: 1.5em;',
+ 'paragraph-center' => 'text-align: center;',
+
+ /* Buttons ------------------------------ */
+
+ 'button' => 'display: block; display: inline-block; width: 200px; min-height: 20px; padding: 10px;
+ background-color: #3869D4; border-radius: 3px; color: #ffffff; font-size: 15px; line-height: 25px;
+ text-align: center; text-decoration: none; -webkit-text-size-adjust: none;',
+
+ 'button--green' => 'background-color: #22BC66;',
+ 'button--red' => 'background-color: #dc4d2f;',
+ 'button--blue' => 'background-color: '.setting('app-color').';',
+];
+?>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ setting('app-name') }}
+
+ |
+
+
+
+
+
+
+
+
+
+
+ @if (!empty($greeting) || $level == 'error')
+
+ @if (! empty($greeting))
+ {{ $greeting }}
+ @else
+ @if ($level == 'error')
+ Whoops!
+ @endif
+ @endif
+
+ @endif
+
+
+ @foreach ($introLines as $line)
+
+ {{ $line }}
+
+ @endforeach
+
+
+ @if (isset($actionText))
+
+ @endif
+
+
+ @foreach ($outroLines as $line)
+
+ {{ $line }}
+
+ @endforeach
+
+
+
+ @if (isset($actionText))
+
+
+
+
+ If you’re having trouble clicking the "{{ $actionText }}" button,
+ copy and paste the URL below into your web browser:
+
+
+
+
+ {{ $actionUrl }}
+
+
+ |
+
+
+ @endif
+
+ |
+
+
+ |
+
+
+
+
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+
+
diff --git a/app/Http/routes.php b/routes/web.php
similarity index 84%
rename from app/Http/routes.php
rename to routes/web.php
index eb35f2a11..58ceb5f3b 100644
--- a/app/Http/routes.php
+++ b/routes/web.php
@@ -139,27 +139,27 @@ Route::group(['middleware' => 'auth'], function () {
});
-// Login using social authentication
-Route::get('/login/service/{socialDriver}', 'Auth\AuthController@getSocialLogin');
-Route::get('/login/service/{socialDriver}/callback', 'Auth\AuthController@socialCallback');
-Route::get('/login/service/{socialDriver}/detach', 'Auth\AuthController@detachSocialAccount');
+// Social auth routes
+Route::get('/login/service/{socialDriver}', 'Auth\RegisterController@getSocialLogin');
+Route::get('/login/service/{socialDriver}/callback', 'Auth\RegisterController@socialCallback');
+Route::get('/login/service/{socialDriver}/detach', 'Auth\RegisterController@detachSocialAccount');
+Route::get('/register/service/{socialDriver}', 'Auth\RegisterController@socialRegister');
// Login/Logout routes
-Route::get('/login', 'Auth\AuthController@getLogin');
-Route::post('/login', 'Auth\AuthController@postLogin');
-Route::get('/logout', 'Auth\AuthController@getLogout');
-Route::get('/register', 'Auth\AuthController@getRegister');
-Route::get('/register/confirm', 'Auth\AuthController@getRegisterConfirmation');
-Route::get('/register/confirm/awaiting', 'Auth\AuthController@showAwaitingConfirmation');
-Route::post('/register/confirm/resend', 'Auth\AuthController@resendConfirmation');
-Route::get('/register/confirm/{token}', 'Auth\AuthController@confirmEmail');
-Route::get('/register/confirm/{token}/email', 'Auth\AuthController@viewConfirmEmail');
-Route::get('/register/service/{socialDriver}', 'Auth\AuthController@socialRegister');
-Route::post('/register', 'Auth\AuthController@postRegister');
+Route::get('/login', 'Auth\LoginController@getLogin');
+Route::post('/login', 'Auth\LoginController@login');
+Route::get('/logout', 'Auth\LoginController@logout');
+Route::get('/register', 'Auth\RegisterController@getRegister');
+Route::get('/register/confirm', 'Auth\RegisterController@getRegisterConfirmation');
+Route::get('/register/confirm/awaiting', 'Auth\RegisterController@showAwaitingConfirmation');
+Route::post('/register/confirm/resend', 'Auth\RegisterController@resendConfirmation');
+Route::get('/register/confirm/{token}', 'Auth\RegisterController@confirmEmail');
+Route::post('/register', 'Auth\RegisterController@postRegister');
// Password reset link request routes...
-Route::get('/password/email', 'Auth\PasswordController@getEmail');
-Route::post('/password/email', 'Auth\PasswordController@postEmail');
+Route::get('/password/email', 'Auth\ForgotPasswordController@showLinkRequestForm');
+Route::post('/password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail');
+
// Password reset routes...
-Route::get('/password/reset/{token}', 'Auth\PasswordController@getReset');
-Route::post('/password/reset', 'Auth\PasswordController@postReset');
\ No newline at end of file
+Route::get('/password/reset/{token}', 'Auth\ResetPasswordController@showResetForm');
+Route::post('/password/reset', 'Auth\ResetPasswordController@reset');
\ No newline at end of file
diff --git a/tests/Auth/AuthTest.php b/tests/Auth/AuthTest.php
index 306771ed5..0affff799 100644
--- a/tests/Auth/AuthTest.php
+++ b/tests/Auth/AuthTest.php
@@ -1,6 +1,7 @@
setSettings(['registration-enabled' => 'true', 'registration-confirmation' => 'true']);
$user = factory(\BookStack\User::class)->make();
- // Mock Mailer to ensure mail is being sent
- $mockMailer = Mockery::mock('Illuminate\Contracts\Mail\Mailer');
- $mockMailer->shouldReceive('send')->with('emails/email-confirmation', Mockery::type('array'), Mockery::type('callable'))->twice();
- $this->app->instance('mailer', $mockMailer);
-
// Go through registration process
$this->visit('/register')
->see('Sign Up')
@@ -76,6 +75,10 @@ class AuthTest extends TestCase
->seePageIs('/register/confirm')
->seeInDatabase('users', ['name' => $user->name, 'email' => $user->email, 'email_confirmed' => false]);
+ // Ensure notification sent
+ $dbUser = \BookStack\User::where('email', '=', $user->email)->first();
+ Notification::assertSentTo($dbUser, ConfirmEmail::class);
+
// Test access and resend confirmation email
$this->login($user->email, $user->password)
->seePageIs('/register/confirm/awaiting')
@@ -84,19 +87,18 @@ class AuthTest extends TestCase
->seePageIs('/register/confirm/awaiting')
->press('Resend Confirmation Email');
- // Get confirmation
- $user = $user->where('email', '=', $user->email)->first();
- $emailConfirmation = EmailConfirmation::where('user_id', '=', $user->id)->first();
-
-
- // Check confirmation email button and confirmation activation.
- $this->visit('/register/confirm/' . $emailConfirmation->token . '/email')
- ->see('Email Confirmation')
- ->click('Confirm Email')
+ // Get confirmation and confirm notification matches
+ $emailConfirmation = DB::table('email_confirmations')->where('user_id', '=', $dbUser->id)->first();
+ Notification::assertSentTo($dbUser, ConfirmEmail::class, function($notification, $channels) use ($emailConfirmation) {
+ return $notification->token === $emailConfirmation->token;
+ });
+
+ // Check confirmation email confirmation activation.
+ $this->visit('/register/confirm/' . $emailConfirmation->token)
->seePageIs('/')
->see($user->name)
->notSeeInDatabase('email_confirmations', ['token' => $emailConfirmation->token])
- ->seeInDatabase('users', ['name' => $user->name, 'email' => $user->email, 'email_confirmed' => true]);
+ ->seeInDatabase('users', ['name' => $dbUser->name, 'email' => $dbUser->email, 'email_confirmed' => true]);
}
public function test_restricted_registration()
diff --git a/tests/Entity/EntityTest.php b/tests/Entity/EntityTest.php
index 296aa72ed..20721968f 100644
--- a/tests/Entity/EntityTest.php
+++ b/tests/Entity/EntityTest.php
@@ -236,8 +236,9 @@ class EntityTest extends TestCase
->type('super test page', '#name')
->press('Save Page')
// Check redirect
- ->seePageIs($newPageUrl)
- ->visit($pageUrl)
+ ->seePageIs($newPageUrl);
+
+ $this->visit($pageUrl)
->seePageIs($newPageUrl);
}
diff --git a/tests/Entity/PageDraftTest.php b/tests/Entity/PageDraftTest.php
index 108b7459f..1a46e30bc 100644
--- a/tests/Entity/PageDraftTest.php
+++ b/tests/Entity/PageDraftTest.php
@@ -86,7 +86,7 @@ class PageDraftTest extends TestCase
->visit($chapter->getUrl() . '/create-page')
->visit($book->getUrl())
->seeInElement('.page-list', 'New Page');
-
+
$this->asAdmin()
->visit($book->getUrl())
->dontSeeInElement('.page-list', 'New Page')
diff --git a/tests/ImageTest.php b/tests/ImageTest.php
index 806a36acc..d9acd4b71 100644
--- a/tests/ImageTest.php
+++ b/tests/ImageTest.php
@@ -59,8 +59,10 @@ class ImageTest extends TestCase
$this->assertTrue(file_exists(public_path($relPath)), 'Uploaded image exists');
+ $this->deleteImage($relPath);
+
$this->seeInDatabase('images', [
- 'url' => $relPath,
+ 'url' => $this->baseUrl . $relPath,
'type' => 'gallery',
'uploaded_to' => $page->id,
'path' => $relPath,
@@ -69,7 +71,7 @@ class ImageTest extends TestCase
'name' => $imageName
]);
- $this->deleteImage($relPath);
+
}
public function test_image_delete()
@@ -85,7 +87,7 @@ class ImageTest extends TestCase
$this->assertResponseOk();
$this->dontSeeInDatabase('images', [
- 'url' => $relPath,
+ 'url' => $this->baseUrl . $relPath,
'type' => 'gallery'
]);