diff --git a/.env.example b/.env.example
index eb5ea42..a162327 100644
--- a/.env.example
+++ b/.env.example
@@ -6,6 +6,7 @@ APP_LOG_LEVEL=debug
APP_URL=http://localhost
FRONTEND=http://localhost:8080
+LOG_CHANNEL=stack
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
@@ -45,4 +46,7 @@ PUSHER_APP_CLUSTER=mt1
JWT_SECRET=
JWT_TTL=131500
JWT_REFRESH_TTL=525600
-JWT_BLACKLIST_GRACE_PERIOD=30
\ No newline at end of file
+JWT_BLACKLIST_GRACE_PERIOD=30
+
+MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
+MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php
index c5e1723..dca62b2 100644
--- a/app/Http/Kernel.php
+++ b/app/Http/Kernel.php
@@ -55,6 +55,7 @@ class Kernel extends HttpKernel
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
+ 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'jwt.auth' => \Tymon\JWTAuth\Middleware\GetUserFromToken::class,
diff --git a/app/Http/Middleware/TrustProxies.php b/app/Http/Middleware/TrustProxies.php
index d5233b9..d14591b 100644
--- a/app/Http/Middleware/TrustProxies.php
+++ b/app/Http/Middleware/TrustProxies.php
@@ -15,15 +15,16 @@ class TrustProxies extends Middleware
protected $proxies;
/**
- * The current proxy header mappings.
+ * The headers that should be used to detect proxies.
*
- * @var array
+ * @var string
*/
- protected $headers = [
- // Request::HEADER_FORWARDED => 'FORWARDED',
- // Request::HEADER_X_FORWARDED_FOR => 'X_FORWARDED_FOR',
- // Request::HEADER_X_FORWARDED_HOST => 'X_FORWARDED_HOST',
- // Request::HEADER_X_FORWARDED_PORT => 'X_FORWARDED_PORT',
- // Request::HEADER_X_FORWARDED_PROTO => 'X_FORWARDED_PROTO',
- ];
+ protected $headers = Request::HEADER_X_FORWARDED_ALL;
+ // protected $headers = [
+ // Request::HEADER_FORWARDED => 'FORWARDED',
+ // Request::HEADER_X_FORWARDED_FOR => 'X_FORWARDED_FOR',
+ // Request::HEADER_X_FORWARDED_HOST => 'X_FORWARDED_HOST',
+ // Request::HEADER_X_FORWARDED_PORT => 'X_FORWARDED_PORT',
+ // Request::HEADER_X_FORWARDED_PROTO => 'X_FORWARDED_PROTO',
+ // ];
}
diff --git a/composer.json b/composer.json
index 8a74366..57f583c 100644
--- a/composer.json
+++ b/composer.json
@@ -5,19 +5,20 @@
"license": "MIT",
"type": "project",
"require": {
- "php": ">=7.0.0",
+ "php": ">=7.1.3",
"barryvdh/laravel-cors": "^0.11.0",
- "fideloper/proxy": "~3.3",
- "laravel/framework": "5.5.*",
+ "fideloper/proxy": "~4.0",
+ "laravel/framework": "5.6.*",
"laravel/tinker": "~1.0",
- "tymon/jwt-auth": "1.0.0-rc.1",
- "dingo/api": "2.0.0-alpha1"
+ "tymon/jwt-auth": "1.0.0-rc.2",
+ "dingo/api": "2.0.0-alpha2"
},
"require-dev": {
"filp/whoops": "~2.0",
"fzaninotto/faker": "~1.4",
"mockery/mockery": "~1.0",
- "phpunit/phpunit": "~6.0",
+ "nunomaduro/collision": "~2.0",
+ "phpunit/phpunit": "~7.0",
"reliese/laravel": "^0.0.13",
"symfony/thanks": "^1.0"
},
@@ -57,5 +58,7 @@
"preferred-install": "dist",
"sort-packages": true,
"optimize-autoloader": true
- }
+ },
+ "minimum-stability": "dev",
+ "prefer-stable": true
}
diff --git a/config/filesystems.php b/config/filesystems.php
index bb02150..d11099e 100644
--- a/config/filesystems.php
+++ b/config/filesystems.php
@@ -37,7 +37,7 @@ return [
| may even configure multiple disks of the same driver. Defaults have
| been setup for each driver as an example of the required options.
|
- | Supported Drivers: "local", "ftp", "s3", "rackspace"
+ | Supported Drivers: "local", "ftp", "sftp", "s3", "rackspace"
|
*/
@@ -71,6 +71,7 @@ return [
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET'),
+ 'url' => env('AWS_URL'),
],
],
diff --git a/config/hashing.php b/config/hashing.php
new file mode 100644
index 0000000..f929cf0
--- /dev/null
+++ b/config/hashing.php
@@ -0,0 +1,20 @@
+ 'bcrypt',
+
+];
diff --git a/config/jwt.php b/config/jwt.php
index efaaf22..37ddf91 100644
--- a/config/jwt.php
+++ b/config/jwt.php
@@ -16,20 +16,87 @@ return [
| JWT Authentication Secret
|--------------------------------------------------------------------------
|
- | Don't forget to set this, as it will be used to sign your tokens.
- | A helper command is provided for this: `php artisan jwt:generate`
+ | Don't forget to set this in your .env file, as it will be used to sign
+ | your tokens. A helper command is provided for this:
+ | `php artisan jwt:secret`
+ |
+ | Note: This will be used for Symmetric algorithms only (HMAC),
+ | since RSA and ECDSA use a private/public key combo (See below).
|
*/
'secret' => env('JWT_SECRET'),
+ /*
+ |--------------------------------------------------------------------------
+ | JWT Authentication Keys
+ |--------------------------------------------------------------------------
+ |
+ | The algorithm you are using, will determine whether your tokens are
+ | signed with a random string (defined in `JWT_SECRET`) or using the
+ | following public & private keys.
+ |
+ | Symmetric Algorithms:
+ | HS256, HS384 & HS512 will use `JWT_SECRET`.
+ |
+ | Asymmetric Algorithms:
+ | RS256, RS384 & RS512 / ES256, ES384 & ES512 will use the keys below.
+ |
+ */
+
+ 'keys' => [
+
+ /*
+ |--------------------------------------------------------------------------
+ | Public Key
+ |--------------------------------------------------------------------------
+ |
+ | A path or resource to your public key.
+ |
+ | E.g. 'file://path/to/public/key'
+ |
+ */
+
+ 'public' => env('JWT_PUBLIC_KEY'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Private Key
+ |--------------------------------------------------------------------------
+ |
+ | A path or resource to your private key.
+ |
+ | E.g. 'file://path/to/private/key'
+ |
+ */
+
+ 'private' => env('JWT_PRIVATE_KEY'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Passphrase
+ |--------------------------------------------------------------------------
+ |
+ | The passphrase for your private key. Can be null if none set.
+ |
+ */
+
+ 'passphrase' => env('JWT_PASSPHRASE'),
+
+ ],
+
/*
|--------------------------------------------------------------------------
| JWT time to live
|--------------------------------------------------------------------------
|
| Specify the length of time (in minutes) that the token will be valid for.
- | Defaults to 1 hour
+ | Defaults to 1 hour.
+ |
+ | You can also set this to null, to yield a never expiring token.
+ | Some people may want this behaviour for e.g. a mobile app.
+ | This is not particularly recommended, so make sure you have appropriate
+ | systems in place to revoke the token if necessary.
|
*/
@@ -43,7 +110,12 @@ return [
| Specify the length of time (in minutes) that the token can be refreshed
| within. I.E. The user can refresh their token within a 2 week window of
| the original token being created until they must re-authenticate.
- | Defaults to 2 weeks
+ | Defaults to 2 weeks.
+ |
+ | You can also set this to null, to yield an infinite refresh time.
+ | Some may want this instead of never expiring tokens for e.g. a mobile app.
+ | This is not particularly recommended, so make sure you have appropriate
+ | systems in place to revoke the token if necessary.
|
*/
@@ -56,37 +128,13 @@ return [
|
| Specify the hashing algorithm that will be used to sign the token.
|
- | See here: https://github.com/namshi/jose/tree/2.2.0/src/Namshi/JOSE/Signer
- | for possible values
+ | See here: https://github.com/namshi/jose/tree/master/src/Namshi/JOSE/Signer/OpenSSL
+ | for possible values.
|
*/
'algo' => 'HS256',
- /*
- |--------------------------------------------------------------------------
- | User Model namespace
- |--------------------------------------------------------------------------
- |
- | Specify the full namespace to your User model.
- | e.g. 'Acme\Entities\User'
- |
- */
-
- 'user' => 'App\User',
-
- /*
- |--------------------------------------------------------------------------
- | User identifier
- |--------------------------------------------------------------------------
- |
- | Specify a unique property of the user that will be added as the 'sub'
- | claim of the token payload.
- |
- */
-
- 'identifier' => 'id',
-
/*
|--------------------------------------------------------------------------
| Required Claims
@@ -98,7 +146,68 @@ return [
|
*/
- 'required_claims' => ['iss', 'iat', 'exp', 'nbf', 'sub', 'jti'],
+ 'required_claims' => [
+ 'iss',
+ 'iat',
+ 'exp',
+ 'nbf',
+ 'sub',
+ 'jti',
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Persistent Claims
+ |--------------------------------------------------------------------------
+ |
+ | Specify the claim keys to be persisted when refreshing a token.
+ | `sub` and `iat` will automatically be persisted, in
+ | addition to the these claims.
+ |
+ | Note: If a claim does not exist then it will be ignored.
+ |
+ */
+
+ 'persistent_claims' => [
+ // 'foo',
+ // 'bar',
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Lock Subject
+ |--------------------------------------------------------------------------
+ |
+ | This will determine whether a `prv` claim is automatically added to
+ | the token. The purpose of this is to ensure that if you have multiple
+ | authentication models e.g. `App\User` & `App\OtherPerson`, then we
+ | should prevent one authentication request from impersonating another,
+ | if 2 tokens happen to have the same id across the 2 different models.
+ |
+ | Under specific circumstances, you may want to disable this behaviour
+ | e.g. if you only have one authentication model, then you would save
+ | a little on token size.
+ |
+ */
+
+ 'lock_subject' => true,
+
+ /*
+ |--------------------------------------------------------------------------
+ | Leeway
+ |--------------------------------------------------------------------------
+ |
+ | This property gives the jwt timestamp claims some "leeway".
+ | Meaning that if you have any unavoidable slight clock skew on
+ | any of your servers then this will afford you some level of cushioning.
+ |
+ | This applies to the claims `iat`, `nbf` and `exp`.
+ |
+ | Specify in seconds - only if you know you need it.
+ |
+ */
+
+ 'leeway' => env('JWT_LEEWAY', 0),
/*
|--------------------------------------------------------------------------
@@ -112,6 +221,39 @@ return [
'blacklist_enabled' => env('JWT_BLACKLIST_ENABLED', true),
+ /*
+ | -------------------------------------------------------------------------
+ | Blacklist Grace Period
+ | -------------------------------------------------------------------------
+ |
+ | When multiple concurrent requests are made with the same JWT,
+ | it is possible that some of them fail, due to token regeneration
+ | on every request.
+ |
+ | Set grace period in seconds to prevent parallel request failure.
+ |
+ */
+
+ 'blacklist_grace_period' => env('JWT_BLACKLIST_GRACE_PERIOD', 0),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Cookies encryption
+ |--------------------------------------------------------------------------
+ |
+ | By default Laravel encrypt cookies for security reason.
+ | If you decide to not decrypt cookies, you will have to configure Laravel
+ | to not encrypt your cookie token by adding its name into the $except
+ | array available in the middleware "EncryptCookies" provided by Laravel.
+ | see https://laravel.com/docs/master/responses#cookies-and-encryption
+ | for details.
+ |
+ | Set it to true if you want to decrypt cookies.
+ |
+ */
+
+ 'decrypt_cookies' => false,
+
/*
|--------------------------------------------------------------------------
| Providers
@@ -123,18 +265,6 @@ return [
'providers' => [
- /*
- |--------------------------------------------------------------------------
- | User Provider
- |--------------------------------------------------------------------------
- |
- | Specify the provider that is used to find the user based
- | on the subject claim
- |
- */
-
- 'user' => Tymon\JWTAuth\Providers\User\EloquentUserAdapter::class,
-
/*
|--------------------------------------------------------------------------
| JWT Provider
@@ -144,7 +274,7 @@ return [
|
*/
- 'jwt' => Tymon\JWTAuth\Providers\JWT\Namshi::class,
+ 'jwt' => Tymon\JWTAuth\Providers\JWT\Lcobucci::class,
/*
|--------------------------------------------------------------------------
@@ -162,7 +292,7 @@ return [
| Storage Provider
|--------------------------------------------------------------------------
|
- | Specify the provider that is used to store tokens in the blacklist
+ | Specify the provider that is used to store tokens in the blacklist.
|
*/
diff --git a/config/logging.php b/config/logging.php
new file mode 100644
index 0000000..902efaf
--- /dev/null
+++ b/config/logging.php
@@ -0,0 +1,70 @@
+ env('LOG_CHANNEL', 'stack'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Log Channels
+ |--------------------------------------------------------------------------
+ |
+ | Here you may configure the log channels for your application. Out of
+ | the box, Laravel uses the Monolog PHP logging library. This gives
+ | you a variety of powerful log handlers / formatters to utilize.
+ |
+ | Available Drivers: "single", "daily", "slack", "syslog",
+ | "errorlog", "custom", "stack"
+ |
+ */
+
+ 'channels' => [
+ 'stack' => [
+ 'driver' => 'stack',
+ 'channels' => ['single'],
+ ],
+
+ 'single' => [
+ 'driver' => 'single',
+ 'path' => storage_path('logs/laravel.log'),
+ 'level' => 'debug',
+ ],
+
+ 'daily' => [
+ 'driver' => 'daily',
+ 'path' => storage_path('logs/laravel.log'),
+ 'level' => 'debug',
+ 'days' => 7,
+ ],
+
+ 'slack' => [
+ 'driver' => 'slack',
+ 'url' => env('LOG_SLACK_WEBHOOK_URL'),
+ 'username' => 'Laravel Log',
+ 'emoji' => ':boom:',
+ 'level' => 'critical',
+ ],
+
+ 'syslog' => [
+ 'driver' => 'syslog',
+ 'level' => 'debug',
+ ],
+
+ 'errorlog' => [
+ 'driver' => 'errorlog',
+ 'level' => 'debug',
+ ],
+ ],
+
+];
diff --git a/config/models.php b/config/models.php
deleted file mode 100644
index d3ef801..0000000
--- a/config/models.php
+++ /dev/null
@@ -1,296 +0,0 @@
- [
-
- /*
- |--------------------------------------------------------------------------
- | Model Files Location
- |--------------------------------------------------------------------------
- |
- | We need a location to store your new generated files. All files will be
- | placed within this directory. When you turn on base files, they will
- | be placed within a Base directory inside this location.
- |
- */
-
- 'path' => app_path('Models'),
-
- /*
- |--------------------------------------------------------------------------
- | Model Namespace
- |--------------------------------------------------------------------------
- |
- | Every generated model will belong to this namespace. It is suggested
- | that this namespace should follow PSR-4 convention and be very
- | similar to the path of your models defined above.
- |
- */
-
- 'namespace' => 'App\Models',
-
- /*
- |--------------------------------------------------------------------------
- | Parent Class
- |--------------------------------------------------------------------------
- |
- | All Eloquent models should inherit from Eloquent Model class. However,
- | you can define a custom Eloquent model that suits your needs.
- | As an example one custom model has been added for you which
- | will allow you to create custom database castings.
- |
- */
-
- 'parent' => Reliese\Database\Eloquent\Model::class,
-
- /*
- |--------------------------------------------------------------------------
- | Traits
- |--------------------------------------------------------------------------
- |
- | Sometimes you may want to append certain traits to all your models.
- | If that is what you need, you may list them bellow.
- | As an example we have a BitBooleans trait which will treat MySQL bit
- | data type as booleans. You might probably not need it, but it is
- | an example of how you can customize your models.
- |
- */
-
- 'use' => [
- // Reliese\Database\Eloquent\BitBooleans::class,
- // Reliese\Database\Eloquent\BlamableBehavior::class,
- ],
-
- /*
- |--------------------------------------------------------------------------
- | Model Connection
- |--------------------------------------------------------------------------
- |
- | If you wish your models had appended the connection from which they
- | were generated, you should set this value to true and your
- | models will have the connection property filled.
- |
- */
-
- 'connection' => false,
-
- /*
- |--------------------------------------------------------------------------
- | Timestamps
- |--------------------------------------------------------------------------
- |
- | If your tables have CREATED_AT and UPDATED_AT timestamps you may
- | enable them and your models will fill their values as needed.
- | You can also specify which fields should be treated as timestamps
- | in case you don't follow the naming convention Eloquent uses.
- | If your table doesn't have these fields, timestamps will be
- | disabled for your model.
- |
- */
-
- 'timestamps' => true,
-
- // 'timestamps' => [
- // 'enabled' => true,
- // 'fields' => [
- // 'CREATED_AT' => 'created_at',
- // 'UPDATED_AT' => 'updated_at',
- // ]
- // ],
-
- /*
- |--------------------------------------------------------------------------
- | Soft Deletes
- |--------------------------------------------------------------------------
- |
- | If your tables support soft deletes with a DELETED_AT attribute,
- | you can enable them here. You can also specify which field
- | should be treated as a soft delete attribute in case you
- | don't follow the naming convention Eloquent uses.
- | If your table doesn't have this field, soft deletes will be
- | disabled for your model.
- |
- */
-
- 'soft_deletes' => true,
-
- // 'soft_deletes' => [
- // 'enabled' => true,
- // 'field' => 'deleted_at',
- // ],
-
- /*
- |--------------------------------------------------------------------------
- | Date Format
- |--------------------------------------------------------------------------
- |
- | Here you may define your models' date format. The following format
- | is the default format Eloquent uses. You won't see it in your
- | models unless you change it to a more convenient value.
- |
- */
-
- 'date_format' => 'Y-m-d H:i:s',
-
- /*
- |--------------------------------------------------------------------------
- | Pagination
- |--------------------------------------------------------------------------
- |
- | Here you may define how many models Eloquent should display when
- | paginating them. The default number is 15, so you might not
- | see this number in your models unless you change it.
- |
- */
-
- 'per_page' => 15,
-
- /*
- |--------------------------------------------------------------------------
- | Base Files
- |--------------------------------------------------------------------------
- |
- | By default, your models will be generated in your models path, but
- | when you generate them again they will be replaced by new ones.
- | You may want to customize your models and, at the same time, be
- | able to generate them as your tables change. For that, you
- | can enable base files. These files will be replaced whenever
- | you generate them, but your customized files will not be touched.
- |
- */
-
- 'base_files' => false,
-
- /*
- |--------------------------------------------------------------------------
- | Snake Attributes
- |--------------------------------------------------------------------------
- |
- | Eloquent treats your model attributes as snake cased attributes, but
- | if you have camel-cased fields in your database you can disable
- | that behaviour and use camel case attributes in your models.
- |
- */
-
- 'snake_attributes' => true,
-
- /*
- |--------------------------------------------------------------------------
- | Qualified Table Names
- |--------------------------------------------------------------------------
- |
- | If some of your tables have cross-database relationships (probably in
- | MySQL), you can make sure your models take into account their
- | respective database schema.
- |
- */
-
- 'qualified_tables' => false,
-
- /*
- |--------------------------------------------------------------------------
- | Hidden Attributes
- |--------------------------------------------------------------------------
- |
- | When casting your models into arrays or json, the need to hide some
- | attributes sometimes arise. If your tables have some fields you
- | want to hide, you can define them bellow.
- | Some fields were defined for you.
- |
- */
-
- 'hidden' => [
- '*secret*', '*password', '*token',
- ],
-
- /*
- |--------------------------------------------------------------------------
- | Mass Assignment Guarded Attributes
- |--------------------------------------------------------------------------
- |
- | You may want to protect some fields from mass assignment. You can
- | define them bellow. Some fields were defined for you.
- | Your fillable attributes will be those which are not in the list
- | excluding your models' primary keys.
- |
- */
-
- 'guarded' => [
- // 'created_by', 'updated_by'
- ],
-
- /*
- |--------------------------------------------------------------------------
- | Casts
- |--------------------------------------------------------------------------
- |
- | You may want to specify which of your table fields should be casted as
- | something different than a string. For instance, you may want a
- | text field be casted as an array or and object.
- |
- | You may define column patterns which will be casted using the value
- | assigned. We have defined some fields for you. Feel free to
- | modify them to fit your needs.
- |
- */
-
- 'casts' => [
- '*_json' => 'json',
- ],
-
- /*
- |--------------------------------------------------------------------------
- | Excluded Tables
- |--------------------------------------------------------------------------
- |
- | When performing the generation of models you may want to skip some of
- | them, because you don't want a model for them or any other reason.
- | You can define those tables bellow. The migrations table was
- | filled for you, since you may not want a model for it.
- |
- */
-
- 'except' => [
- 'migrations',
- ],
- ],
-
- /*
- |--------------------------------------------------------------------------
- | Database Specifics
- |--------------------------------------------------------------------------
- |
- | In this section you may define the default configuration for each model
- | that will be generated from a specific database. You can also nest
- | table specific configurations.
- | These values will override those defined in the section above.
- |
- */
-
- // 'shop' => [
- // 'path' => app_path(),
- // 'namespace' => 'App',
- // 'snake_attributes' => false,
- // 'qualified_tables' => true,
- // 'use' => [
- // Reliese\Database\Eloquent\BitBooleans::class,
- // ],
- // 'except' => ['migrations'],
- // // Table Specifics Bellow:
- // 'user' => [
- // // Don't use any default trait
- // 'use' => [],
- // ]
- // ],
-];
diff --git a/config/queue.php b/config/queue.php
index 8c06fcc..87b1b1b 100644
--- a/config/queue.php
+++ b/config/queue.php
@@ -62,6 +62,7 @@ return [
'connection' => 'default',
'queue' => 'default',
'retry_after' => 90,
+ 'block_for' => null,
],
],
diff --git a/package.json b/package.json
index 4671fa8..159afe3 100644
--- a/package.json
+++ b/package.json
@@ -1,23 +1,23 @@
{
- "private": true,
- "scripts": {
- "dev": "npm run development",
- "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
- "watch": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
- "watch-poll": "npm run watch -- --watch-poll",
- "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
- "prod": "npm run production",
- "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
- "clear": "php artisan cache:clear && php artisan view:clear && php artisan route:clear"
- },
- "devDependencies": {
- "axios": "^0.17",
- "bootstrap-sass": "^3.3.7",
- "cross-env": "^5.1",
- "jquery": "^3.2",
- "laravel-echo": "^1.3.2",
- "laravel-mix": "^1.0",
- "lodash": "^4.17.4",
- "vue": "^2.5.7"
- }
+ "private": true,
+ "scripts": {
+ "dev": "npm run development",
+ "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
+ "watch": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
+ "watch-poll": "npm run watch -- --watch-poll",
+ "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
+ "prod": "npm run production",
+ "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
+ "clear": "php artisan cache:clear && php artisan view:clear && php artisan route:clear"
+ },
+ "devDependencies": {
+ "axios": "^0.18",
+ "bootstrap": "^4.0.0",
+ "popper.js": "^1.12",
+ "cross-env": "^5.1",
+ "jquery": "^3.2",
+ "laravel-mix": "^2.0",
+ "lodash": "^4.17.4",
+ "vue": "^2.5.7"
+ }
}
diff --git a/public/fonts/icons.eot b/public/fonts/icons.eot
deleted file mode 100644
index e9f60ca..0000000
Binary files a/public/fonts/icons.eot and /dev/null differ
diff --git a/public/fonts/icons.svg b/public/fonts/icons.svg
deleted file mode 100644
index 855c845..0000000
--- a/public/fonts/icons.svg
+++ /dev/null
@@ -1,2671 +0,0 @@
-
-
-
diff --git a/public/fonts/icons.ttf b/public/fonts/icons.ttf
deleted file mode 100644
index 35acda2..0000000
Binary files a/public/fonts/icons.ttf and /dev/null differ
diff --git a/public/fonts/icons.woff b/public/fonts/icons.woff
deleted file mode 100644
index 400014a..0000000
Binary files a/public/fonts/icons.woff and /dev/null differ
diff --git a/public/fonts/icons.woff2 b/public/fonts/icons.woff2
deleted file mode 100644
index 4d13fc6..0000000
Binary files a/public/fonts/icons.woff2 and /dev/null differ
diff --git a/public/fonts/vendor/bootstrap-sass/bootstrap/glyphicons-halflings-regular.eot b/public/fonts/vendor/bootstrap-sass/bootstrap/glyphicons-halflings-regular.eot
deleted file mode 100644
index b93a495..0000000
Binary files a/public/fonts/vendor/bootstrap-sass/bootstrap/glyphicons-halflings-regular.eot and /dev/null differ
diff --git a/public/fonts/vendor/bootstrap-sass/bootstrap/glyphicons-halflings-regular.svg b/public/fonts/vendor/bootstrap-sass/bootstrap/glyphicons-halflings-regular.svg
deleted file mode 100644
index 94fb549..0000000
--- a/public/fonts/vendor/bootstrap-sass/bootstrap/glyphicons-halflings-regular.svg
+++ /dev/null
@@ -1,288 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/public/fonts/vendor/bootstrap-sass/bootstrap/glyphicons-halflings-regular.ttf b/public/fonts/vendor/bootstrap-sass/bootstrap/glyphicons-halflings-regular.ttf
deleted file mode 100644
index 1413fc6..0000000
Binary files a/public/fonts/vendor/bootstrap-sass/bootstrap/glyphicons-halflings-regular.ttf and /dev/null differ
diff --git a/public/fonts/vendor/bootstrap-sass/bootstrap/glyphicons-halflings-regular.woff b/public/fonts/vendor/bootstrap-sass/bootstrap/glyphicons-halflings-regular.woff
deleted file mode 100644
index 9e61285..0000000
Binary files a/public/fonts/vendor/bootstrap-sass/bootstrap/glyphicons-halflings-regular.woff and /dev/null differ
diff --git a/public/fonts/vendor/bootstrap-sass/bootstrap/glyphicons-halflings-regular.woff2 b/public/fonts/vendor/bootstrap-sass/bootstrap/glyphicons-halflings-regular.woff2
deleted file mode 100644
index 64539b5..0000000
Binary files a/public/fonts/vendor/bootstrap-sass/bootstrap/glyphicons-halflings-regular.woff2 and /dev/null differ
diff --git a/readme.md b/readme.md
index fdf46d8..5e90f48 100644
--- a/readme.md
+++ b/readme.md
@@ -33,6 +33,7 @@ We would like to extend our thanks to the following sponsors for helping fund on
- **[Vehikl](https://vehikl.com/)**
- **[Tighten Co.](https://tighten.co)**
+- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)**
- **[British Software Development](https://www.britishsoftware.co)**
- [Fragrantica](https://www.fragrantica.com)
- [SOFTonSOFA](https://softonsofa.com/)
diff --git a/resources/assets/js/bootstrap.js b/resources/assets/js/bootstrap.js
index ee5b76a..5afee91 100644
--- a/resources/assets/js/bootstrap.js
+++ b/resources/assets/js/bootstrap.js
@@ -1,5 +1,6 @@
window._ = require('lodash');
+window.Popper = require('popper.js').default;
/**
* We'll load jQuery and the Bootstrap jQuery plugin which provides support
@@ -10,7 +11,7 @@ window._ = require('lodash');
try {
window.$ = window.jQuery = require('jquery');
- require('bootstrap-sass');
+ require('bootstrap');
} catch (e) {}
/**
@@ -43,9 +44,13 @@ window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
* allows your team to easily build robust real-time web applications.
*/
-/*import Echo from 'laravel-echo'
+// import Echo from 'laravel-echo'
-window.Echo = new Echo({
- broadcaster: 'socket.io',
- host: window.location.hostname + ':6001'
-});*/
+// window.Pusher = require('pusher-js');
+
+// window.Echo = new Echo({
+// broadcaster: 'pusher',
+// key: process.env.MIX_PUSHER_APP_KEY,
+// cluster: process.env.MIX_PUSHER_APP_CLUSTER,
+// encrypted: true
+// });
diff --git a/resources/assets/sass/_variables.scss b/resources/assets/sass/_variables.scss
index a83777b..d6b975c 100644
--- a/resources/assets/sass/_variables.scss
+++ b/resources/assets/sass/_variables.scss
@@ -3,51 +3,23 @@
//$body-bg: #f5f8fa;
$body-bg: #000;
-// Borders
-$laravel-border-color: darken($body-bg, 10%);
-$list-group-border: $laravel-border-color;
-$navbar-default-border: $laravel-border-color;
-$panel-default-border: $laravel-border-color;
-$panel-inner-border: $laravel-border-color;
-
-// Brands
-$brand-primary: #3097D1;
-$brand-info: #8eb4cb;
-$brand-success: #2ab27b;
-$brand-warning: #cbb956;
-$brand-danger: #bf5329;
-
// Typography
-$icon-font-path: "~bootstrap-sass/assets/fonts/bootstrap/";
$font-family-sans-serif: "Raleway", sans-serif;
-$font-size-base: 14px;
+$font-size-base: 1rem;
$line-height-base: 1.6;
-$text-color: #636b6f;
-// Navbar
-$navbar-default-bg: #121212;
-
-// Buttons
-$btn-default-color: $text-color;
-
-// Inputs
-$input-border: lighten($text-color, 40%);
-$input-border-focus: lighten($brand-primary, 25%);
-$input-color-placeholder: lighten($text-color, 30%);
-
-// Panels
-$panel-default-heading-bg: #ababab;
body{
- background-color: #000000;
- color: #ffffff;
-}
-#app {
- font-family: monospace;
- font-size: large;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- text-align: left;
- margin-top: 20px;
- margin-left: 20px;
-}
+ background-color: #000000;
+ color: #ffffff;
+ }
+ #app {
+ font-family: monospace;
+ font-size: large;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ text-align: left;
+ margin-top: 20px;
+ margin-left: 20px;
+ }
+
\ No newline at end of file
diff --git a/resources/assets/sass/app.scss b/resources/assets/sass/app.scss
index f06f703..0077cb1 100644
--- a/resources/assets/sass/app.scss
+++ b/resources/assets/sass/app.scss
@@ -1,3 +1,4 @@
+
// Fonts
@import url("https://fonts.googleapis.com/css?family=Raleway:300,400,600");
@@ -5,5 +6,9 @@
@import "variables";
// Bootstrap
-@import "~bootstrap-sass/assets/stylesheets/bootstrap";
+@import '~bootstrap/scss/bootstrap';
+.navbar-laravel {
+ background-color: #fff;
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.04);
+}
diff --git a/storage/app/.gitignore b/storage/app/.gitignore
old mode 100755
new mode 100644
diff --git a/storage/app/public/.gitignore b/storage/app/public/.gitignore
old mode 100755
new mode 100644
diff --git a/storage/framework/.gitignore b/storage/framework/.gitignore
old mode 100755
new mode 100644
diff --git a/storage/framework/cache/.gitignore b/storage/framework/cache/.gitignore
old mode 100755
new mode 100644
diff --git a/storage/framework/sessions/.gitignore b/storage/framework/sessions/.gitignore
old mode 100755
new mode 100644
diff --git a/storage/framework/testing/.gitignore b/storage/framework/testing/.gitignore
old mode 100755
new mode 100644
diff --git a/storage/framework/views/.gitignore b/storage/framework/views/.gitignore
old mode 100755
new mode 100644
diff --git a/storage/logs/.gitignore b/storage/logs/.gitignore
old mode 100755
new mode 100644
diff --git a/tests/CreatesApplication.php b/tests/CreatesApplication.php
index df7814b..ff133fb 100644
--- a/tests/CreatesApplication.php
+++ b/tests/CreatesApplication.php
@@ -18,7 +18,7 @@ trait CreatesApplication
$app->make(Kernel::class)->bootstrap();
- Hash::setRounds(4);
+ Hash::driver('bcrypt')->setRounds(4);
return $app;
}