Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 2 additions & 2 deletions .github/workflows/phpunit.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,12 @@ jobs:
runs-on: ubuntu-20.04
strategy:
matrix:
php: ['7.3', '7.4', '8.0']
php: ['7.3', '7.4', '8.0', '8.1']
steps:
- uses: actions/checkout@v1

- name: Setup PHP
uses: shivammathur/setup-php@b7d1d9c9a92d8d8463ce36d7f60da34d461724f8
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php }}
extensions: gd, mbstring, json, curl, xml, mysql, ldap
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/test-migrations.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,12 @@ jobs:
runs-on: ubuntu-20.04
strategy:
matrix:
php: ['7.3', '7.4', '8.0']
php: ['7.3', '7.4', '8.0', '8.1']
steps:
- uses: actions/checkout@v1

- name: Setup PHP
uses: shivammathur/setup-php@b7d1d9c9a92d8d8463ce36d7f60da34d461724f8
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php }}
extensions: gd, mbstring, json, curl, xml, mysql, ldap
Expand Down
2 changes: 1 addition & 1 deletion app/Actions/Activity.php
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ public function isForEntity(): bool
/**
* Checks if another Activity matches the general information of another.
*/
public function isSimilarTo(Activity $activityB): bool
public function isSimilarTo(self $activityB): bool
{
return [$this->type, $this->entity_type, $this->entity_id] === [$activityB->type, $activityB->entity_type, $activityB->entity_id];
}
Expand Down
2 changes: 2 additions & 0 deletions app/Actions/Comment.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

use BookStack\Model;
use BookStack\Traits\HasCreatorAndUpdater;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\MorphTo;

/**
Expand All @@ -15,6 +16,7 @@
*/
class Comment extends Model
{
use HasFactory;
use HasCreatorAndUpdater;

protected $fillable = ['text', 'parent_id'];
Expand Down
3 changes: 3 additions & 0 deletions app/Actions/Tag.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,13 @@
namespace BookStack\Actions;

use BookStack\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\MorphTo;

class Tag extends Model
{
use HasFactory;

protected $fillable = ['name', 'value', 'order'];
protected $hidden = ['id', 'entity_id', 'entity_type', 'created_at', 'updated_at'];

Expand Down
2 changes: 1 addition & 1 deletion app/Api/ApiToken.php
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public static function defaultExpiry(): string
}

/**
* @inheritdoc
* {@inheritdoc}
*/
public function logDescriptor(): string
{
Expand Down
4 changes: 2 additions & 2 deletions app/Api/ApiTokenGuard.php
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public function __construct(Request $request, LoginService $loginService)
}

/**
* @inheritDoc
* {@inheritdoc}
*/
public function user()
{
Expand Down Expand Up @@ -152,7 +152,7 @@ protected function validateToken(?ApiToken $token, string $secret): void
}

/**
* @inheritDoc
* {@inheritdoc}
*/
public function validate(array $credentials = [])
{
Expand Down
9 changes: 6 additions & 3 deletions app/Auth/Role.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
use BookStack\Interfaces\Loggable;
use BookStack\Model;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;

Expand All @@ -23,6 +24,8 @@
*/
class Role extends Model implements Loggable
{
use HasFactory;

protected $fillable = ['display_name', 'description', 'external_auth_id'];

/**
Expand Down Expand Up @@ -83,15 +86,15 @@ public function detachPermission(RolePermission $permission)
/**
* Get the role of the specified display name.
*/
public static function getRole(string $displayName): ?Role
public static function getRole(string $displayName): ?self
{
return static::query()->where('display_name', '=', $displayName)->first();
}

/**
* Get the role object for the specified system role.
*/
public static function getSystemRole(string $systemName): ?Role
public static function getSystemRole(string $systemName): ?self
{
return static::query()->where('system_name', '=', $systemName)->first();
}
Expand All @@ -116,7 +119,7 @@ public static function restrictable(): Collection
}

/**
* @inheritdoc
* {@inheritdoc}
*/
public function logDescriptor(): string
{
Expand Down
2 changes: 1 addition & 1 deletion app/Auth/SocialAccount.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public function user()
}

/**
* @inheritDoc
* {@inheritdoc}
*/
public function logDescriptor(): string
{
Expand Down
8 changes: 5 additions & 3 deletions app/Auth/User.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;
Expand All @@ -43,6 +44,7 @@
*/
class User extends Model implements AuthenticatableContract, CanResetPasswordContract, Loggable, Sluggable
{
use HasFactory;
use Authenticatable;
use CanResetPassword;
use Notifiable;
Expand Down Expand Up @@ -90,7 +92,7 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon
/**
* Returns the default public user.
*/
public static function getDefault(): User
public static function getDefault(): self
{
if (!is_null(static::$defaultUser)) {
return static::$defaultUser;
Expand Down Expand Up @@ -336,15 +338,15 @@ public function sendPasswordResetNotification($token)
}

/**
* @inheritdoc
* {@inheritdoc}
*/
public function logDescriptor(): string
{
return "({$this->id}) {$this->name}";
}

/**
* @inheritDoc
* {@inheritdoc}
*/
public function refreshSlug(): string
{
Expand Down
11 changes: 7 additions & 4 deletions app/Config/app.php
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,6 @@

// Class aliases, Registered on application start
'aliases' => [

// Laravel
'App' => Illuminate\Support\Facades\App::class,
'Arr' => Illuminate\Support\Arr::class,
Expand All @@ -155,21 +154,23 @@
'Config' => Illuminate\Support\Facades\Config::class,
'Cookie' => Illuminate\Support\Facades\Cookie::class,
'Crypt' => Illuminate\Support\Facades\Crypt::class,
'Date' => Illuminate\Support\Facades\Date::class,
'DB' => Illuminate\Support\Facades\DB::class,
'Eloquent' => Illuminate\Database\Eloquent\Model::class,
'Event' => Illuminate\Support\Facades\Event::class,
'File' => Illuminate\Support\Facades\File::class,
'Gate' => Illuminate\Support\Facades\Gate::class,
'Hash' => Illuminate\Support\Facades\Hash::class,
'Input' => Illuminate\Support\Facades\Input::class,
'Inspiring' => Illuminate\Foundation\Inspiring::class,
'Http' => Illuminate\Support\Facades\Http::class,
'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,
'RateLimiter' => Illuminate\Support\Facades\RateLimiter::class,
'Redirect' => Illuminate\Support\Facades\Redirect::class,
'Redis' => Illuminate\Support\Facades\Redis::class,
// 'Redis' => Illuminate\Support\Facades\Redis::class,
'Request' => Illuminate\Support\Facades\Request::class,
'Response' => Illuminate\Support\Facades\Response::class,
'Route' => Illuminate\Support\Facades\Route::class,
Expand All @@ -180,6 +181,8 @@
'URL' => Illuminate\Support\Facades\URL::class,
'Validator' => Illuminate\Support\Facades\Validator::class,
'View' => Illuminate\Support\Facades\View::class,

// Laravel Packages
'Socialite' => Laravel\Socialite\Facades\Socialite::class,

// Third Party
Expand Down
15 changes: 13 additions & 2 deletions app/Config/auth.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@

return [

// Method of authentication to use
// Options: standard, ldap, saml2, oidc
'method' => env('AUTH_METHOD', 'standard'),

Expand Down Expand Up @@ -45,7 +44,7 @@
'provider' => 'external',
],
'api' => [
'driver' => 'api-token',
'driver' => 'api-token',
],
],

Expand All @@ -58,10 +57,16 @@
'driver' => 'eloquent',
'model' => \BookStack\Auth\User::class,
],

'external' => [
'driver' => 'external-users',
'model' => \BookStack\Auth\User::class,
],

// 'users' => [
// 'driver' => 'database',
// 'table' => 'users',
// ],
],

// Resetting Passwords
Expand All @@ -78,4 +83,10 @@
],
],

// Password Confirmation Timeout
// Here you may define the amount of seconds before a password confirmation
// times out and the user is prompted to re-enter their password via the
// confirmation screen. By default, the timeout lasts for three hours.
'password_timeout' => 10800,

];
86 changes: 57 additions & 29 deletions app/Config/broadcasting.php
Original file line number Diff line number Diff line change
@@ -1,51 +1,79 @@
<?php

/**
* Broadcasting configuration options.
* Caching configuration options.
*
* Changes to these config files are not supported by BookStack and may break upon updates.
* Configuration should be altered via the `.env` file or environment variables.
* Do not edit this file unless you're happy to maintain any changes yourself.
*/

// MEMCACHED - Split out configuration into an array
if (env('CACHE_DRIVER') === 'memcached') {
$memcachedServerKeys = ['host', 'port', 'weight'];
$memcachedServers = explode(',', trim(env('MEMCACHED_SERVERS', '127.0.0.1:11211:100'), ','));
foreach ($memcachedServers as $index => $memcachedServer) {
$memcachedServerDetails = explode(':', $memcachedServer);
if (count($memcachedServerDetails) < 2) {
$memcachedServerDetails[] = '11211';
}
if (count($memcachedServerDetails) < 3) {
$memcachedServerDetails[] = '100';
}
$memcachedServers[$index] = array_combine($memcachedServerKeys, $memcachedServerDetails);
}
}

return [

// Default Broadcaster
// This option controls the default broadcaster that will be used by the
// framework when an event needs to be broadcast. This can be set to
// any of the connections defined in the "connections" array below.
'default' => env('BROADCAST_DRIVER', 'pusher'),

// Broadcast Connections
// Here you may define all of the broadcast connections that will be used
// to broadcast events to other systems or over websockets. Samples of
// each available type of connection are provided inside this array.
'connections' => [

'pusher' => [
'driver' => 'pusher',
'key' => env('PUSHER_APP_KEY'),
'secret' => env('PUSHER_APP_SECRET'),
'app_id' => env('PUSHER_APP_ID'),
'options' => [
'cluster' => env('PUSHER_APP_CLUSTER'),
'useTLS' => true,
],
// Default cache store to use
// Can be overridden at cache call-time
'default' => env('CACHE_DRIVER', 'file'),

// Available caches stores
'stores' => [

'apc' => [
'driver' => 'apc',
],

'redis' => [
'driver' => 'redis',
'connection' => 'default',
'array' => [
'driver' => 'array',
'serialize' => false,
],

'database' => [
'driver' => 'database',
'table' => 'cache',
'connection' => null,
'lock_connection' => null,
],

'log' => [
'driver' => 'log',
'file' => [
'driver' => 'file',
'path' => storage_path('framework/cache'),
],

'null' => [
'driver' => 'null',
'memcached' => [
'driver' => 'memcached',
'servers' => env('CACHE_DRIVER') === 'memcached' ? $memcachedServers : [],
'options' => [],
],

'redis' => [
'driver' => 'redis',
'connection' => 'default',
'lock_connection' => 'default',
],

'octane' => [
'driver' => 'octane',
],

],

// Cache key prefix
// Used to prevent collisions in shared cache systems.
'prefix' => env('CACHE_PREFIX', 'bookstack_cache'),

];
Loading