0
0
Fork 0
mirror of https://github.com/BookStackApp/BookStack.git synced 2025-05-01 23:19:51 +00:00

Updated app requirements & Added some friendlier errors

This commit is contained in:
Dan Brown 2016-02-03 20:52:25 +00:00
parent e87db96fc0
commit 8e8d582bc6
11 changed files with 61 additions and 43 deletions

View file

@ -1,7 +1,4 @@
<?php namespace BookStack\Exceptions; <?php namespace BookStack\Exceptions;
class ConfirmationEmailException extends NotifyException class ConfirmationEmailException extends NotifyException {}
{
}

View file

@ -5,6 +5,7 @@ namespace BookStack\Exceptions;
use Exception; use Exception;
use Illuminate\Contracts\Validation\ValidationException; use Illuminate\Contracts\Validation\ValidationException;
use Illuminate\Database\Eloquent\ModelNotFoundException; use Illuminate\Database\Eloquent\ModelNotFoundException;
use PhpSpec\Exception\Example\ErrorException;
use Symfony\Component\HttpKernel\Exception\HttpException; use Symfony\Component\HttpKernel\Exception\HttpException;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Illuminate\Auth\Access\AuthorizationException; use Illuminate\Auth\Access\AuthorizationException;
@ -38,17 +39,26 @@ class Handler extends ExceptionHandler
/** /**
* Render an exception into an HTTP response. * Render an exception into an HTTP response.
* *
* @param \Illuminate\Http\Request $request * @param \Illuminate\Http\Request $request
* @param \Exception $e * @param \Exception $e
* @return \Illuminate\Http\Response * @return \Illuminate\Http\Response
*/ */
public function render($request, Exception $e) public function render($request, Exception $e)
{ {
if($e instanceof NotifyException) { // Handle notify exceptions which will redirect to the
// specified location then show a notification message.
if ($e instanceof NotifyException) {
\Session::flash('error', $e->message); \Session::flash('error', $e->message);
return response()->redirectTo($e->redirectLocation); return response()->redirectTo($e->redirectLocation);
} }
// Handle pretty exceptions which will show a friendly application-fitting page
// Which will include the basic message to point the user roughly to the cause.
if (($e instanceof PrettyException || $e->getPrevious() instanceof PrettyException) && !config('app.debug')) {
$message = ($e instanceof PrettyException) ? $e->getMessage() : $e->getPrevious()->getMessage();
return response()->view('errors/500', ['message' => $message], 500);
}
return parent::render($request, $e); return parent::render($request, $e);
} }
} }

View file

@ -1,6 +1,3 @@
<?php namespace BookStack\Exceptions; <?php namespace BookStack\Exceptions;
class ImageUploadException extends PrettyException {}
use Exception;
class ImageUploadException extends Exception {}

View file

@ -1,9 +1,3 @@
<?php namespace BookStack\Exceptions; <?php namespace BookStack\Exceptions;
class LdapException extends PrettyException {}
use Exception;
class LdapException extends Exception
{
}

View file

@ -0,0 +1,5 @@
<?php namespace BookStack\Exceptions;
use Exception;
class PrettyException extends Exception {}

View file

@ -1,6 +1,4 @@
<?php namespace BookStack\Exceptions; <?php namespace BookStack\Exceptions;
class SocialDriverNotConfigured extends \Exception class SocialDriverNotConfigured extends PrettyException {}
{
}

View file

@ -1,7 +1,4 @@
<?php namespace BookStack\Exceptions; <?php namespace BookStack\Exceptions;
class SocialSignInException extends NotifyException class SocialSignInException extends NotifyException {}
{
}

View file

@ -1,7 +1,4 @@
<?php namespace BookStack\Exceptions; <?php namespace BookStack\Exceptions;
class UserRegistrationException extends NotifyException class UserRegistrationException extends NotifyException {}
{
}

View file

@ -4,6 +4,7 @@ use BookStack\Exceptions\ImageUploadException;
use BookStack\Image; use BookStack\Image;
use BookStack\User; use BookStack\User;
use Exception; use Exception;
use Intervention\Image\Exception\NotSupportedException;
use Intervention\Image\ImageManager; use Intervention\Image\ImageManager;
use Illuminate\Contracts\Filesystem\Factory as FileSystem; use Illuminate\Contracts\Filesystem\Factory as FileSystem;
use Illuminate\Contracts\Filesystem\Filesystem as FileSystemInstance; use Illuminate\Contracts\Filesystem\Filesystem as FileSystemInstance;
@ -119,10 +120,12 @@ class ImageService
* Checks the cache then storage to avoid creating / accessing the filesystem on every check. * Checks the cache then storage to avoid creating / accessing the filesystem on every check.
* *
* @param Image $image * @param Image $image
* @param int $width * @param int $width
* @param int $height * @param int $height
* @param bool $keepRatio * @param bool $keepRatio
* @return string * @return string
* @throws Exception
* @throws ImageUploadException
*/ */
public function getThumbnail(Image $image, $width = 220, $height = 220, $keepRatio = false) public function getThumbnail(Image $image, $width = 220, $height = 220, $keepRatio = false)
{ {
@ -139,8 +142,16 @@ class ImageService
return $this->getPublicUrl($thumbFilePath); return $this->getPublicUrl($thumbFilePath);
} }
// Otherwise create the thumbnail try {
$thumb = $this->imageTool->make($storage->get($image->path)); $thumb = $this->imageTool->make($storage->get($image->path));
} catch (Exception $e) {
if ($e instanceof \ErrorException || $e instanceof NotSupportedException) {
throw new ImageUploadException('The server cannot create thumbnails. Please check you have the GD PHP extension installed.');
} else {
throw $e;
}
}
if ($keepRatio) { if ($keepRatio) {
$thumb->resize($width, null, function ($constraint) { $thumb->resize($width, null, function ($constraint) {
$constraint->aspectRatio(); $constraint->aspectRatio();

View file

@ -17,19 +17,13 @@ A platform to create documentation/wiki content. General information about BookS
## Requirements ## Requirements
BookStack has similar requirements to Laravel. On top of those are some front-end build tools which are only required when developing. BookStack has similar requirements to Laravel:
* PHP >= 5.5.9, Will need to be usable from the command line. * PHP >= 5.5.9, Will need to be usable from the command line.
* OpenSSL PHP Extension * PHP Extensions: `OpenSSL`, `PDO`, `MBstring`, `Tokenizer`, `GD`
* PDO PHP Extension
* MBstring PHP Extension
* Tokenizer PHP Extension
* MySQL >= 5.6 * MySQL >= 5.6
* Git (Not strictly required but helps manage updates) * Git (Not strictly required but helps manage updates)
* [Composer](https://getcomposer.org/) * [Composer](https://getcomposer.org/)
* [Node.js](https://nodejs.org/en/) **Development Only**
* [Gulp](http://gulpjs.com/) **Development Only**
## Installation ## Installation
@ -144,7 +138,14 @@ A user in BookStack will be linked to a LDAP user via a 'uid'. If a LDAP user ui
You may find that you cannot log in with your initial Admin account after changing the `AUTH_METHOD` to `ldap`. To get around this set the `AUTH_METHOD` to `standard`, login with your admin account then change it back to `ldap`. You get then edit your profile and add your LDAP uid under the 'External Authentication ID' field. You will then be able to login in with that ID. You may find that you cannot log in with your initial Admin account after changing the `AUTH_METHOD` to `ldap`. To get around this set the `AUTH_METHOD` to `standard`, login with your admin account then change it back to `ldap`. You get then edit your profile and add your LDAP uid under the 'External Authentication ID' field. You will then be able to login in with that ID.
## Testing ## Development & Testing
All development on BookStack is currently done on the master branch. When it's time for a release the master branch is merged into release with built & minified CSS & JS then tagged at it's version. Here are the current development requirements:
* [Node.js](https://nodejs.org/en/) **Development Only**
* [Gulp](http://gulpjs.com/) **Development Only**
SASS is used to help the CSS development and the JavaScript is run through browserify/babel to allow for writing ES6 code. Both of these are done using gulp.
BookStack has many integration tests that use Laravel's built-in testing capabilities which makes use of PHPUnit. To use you will need PHPUnit installed and accessible via command line. There is a `mysql_testing` database defined within the app config which is what is used by PHPUnit. This database is set with the following database name, user name and password defined as `bookstack-test`. You will have to create that database and credentials before testing. BookStack has many integration tests that use Laravel's built-in testing capabilities which makes use of PHPUnit. To use you will need PHPUnit installed and accessible via command line. There is a `mysql_testing` database defined within the app config which is what is used by PHPUnit. This database is set with the following database name, user name and password defined as `bookstack-test`. You will have to create that database and credentials before testing.

View file

@ -0,0 +1,11 @@
@extends('base')
@section('content')
<div class="container">
<h1 class="text-muted">An Error Occurred</h1>
<p>{{ $message }}</p>
</div>
@stop