generator-folklore 3.0.8 → 3.0.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (21) hide show
  1. package/Readme.md +11 -5
  2. package/lib/generators/app/index.js +3 -0
  3. package/lib/generators/intl/index.js +1 -1
  4. package/lib/generators/laravel-auth/templates/routes/auth.php +2 -0
  5. package/lib/generators/laravel-panneau/templates/app/Http/Middleware/Authenticate.php +27 -0
  6. package/lib/generators/laravel-panneau/templates/app/Http/Resources/PageResource.php +1 -3
  7. package/lib/generators/laravel-panneau/templates/app/Panneau/Http/Resources/PageResource.php +5 -5
  8. package/lib/generators/laravel-panneau/templates/app/Panneau/Http/Resources/ParentPageResource.php +43 -0
  9. package/lib/generators/laravel-panneau/templates/app/Panneau/PanneauServiceProvider.php +16 -0
  10. package/lib/generators/laravel-panneau/templates/app/Panneau/Resources/Users.php +2 -1
  11. package/lib/generators/laravel-panneau/templates/app/Resources/Block.php +2 -2
  12. package/lib/generators/laravel-panneau/templates/app/Resources/Blocks/ImageBlock.php +2 -2
  13. package/lib/generators/laravel-panneau/templates/app/Resources/Page.php +2 -2
  14. package/lib/generators/laravel-panneau/templates/routes.php +3 -1
  15. package/lib/generators/laravel-project/index.js +2 -2
  16. package/lib/generators/laravel-project/templates/laravel/app/Providers/TelescopeServiceProvider.php +67 -0
  17. package/lib/generators/laravel-project/templates/laravel/resources/views/assets/.gitignore +2 -0
  18. package/lib/generators/laravel-project/templates/laravel/routes/web.php +4 -1
  19. package/lib/generators/react-app/templates/src/components/Container.jsx +10 -8
  20. package/lib/generators/stylelint/index.js +1 -1
  21. package/package.json +2 -2
package/Readme.md CHANGED
@@ -1,12 +1,15 @@
1
1
  # Folklore Generator
2
+
2
3
  Yeoman generator to start projects at Folklore
3
4
 
4
5
  ## Install
6
+
5
7
  ```
6
8
  npm install -g generator-folklore
7
9
  ```
8
10
 
9
11
  ## Usage
12
+
10
13
  ```
11
14
  yo folklore
12
15
  ```
@@ -14,20 +17,23 @@ yo folklore
14
17
  ## Sub-Generators
15
18
 
16
19
  ```
17
- yo folklore:laravel
20
+ yo folklore:laravel-project
18
21
  ```
19
- Laravel 5 project, JS, Sass, and miscellaneous Laravel boilerplate.
22
+
23
+ Laravel boilerplate.
20
24
 
21
25
  --
22
26
 
23
27
  ```
24
- yo folklore:html
28
+ yo folklore:html-project
25
29
  ```
30
+
26
31
  HTML static application
27
32
 
28
33
  --
29
34
 
30
35
  ```
31
- yo folklore:npm-package
36
+ yo folklore:node-project
32
37
  ```
33
- NPM package
38
+
39
+ Node package
@@ -53,6 +53,9 @@ module.exports = class AppGenerator extends _generator.default {
53
53
  choices: [{
54
54
  name: 'HTML',
55
55
  value: 'html-project'
56
+ }, {
57
+ name: 'Laravel',
58
+ value: 'laravel-project'
56
59
  }, {
57
60
  name: 'Node',
58
61
  value: 'node-project'
@@ -62,7 +62,7 @@ module.exports = class IntlGenerator extends _generator.default {
62
62
  'without-id-only': withoutIdOnly = false,
63
63
  locales
64
64
  } = this.options;
65
- const intlCommand = `flklr intl --po${withoutIdOnly ? ' --without-id-only' : ''} --output-path$ '${outputPath}' '${translationsPath}'`;
65
+ const intlCommand = `flklr intl --po${withoutIdOnly ? ' --without-id-only' : ''} --output-path '${outputPath}' '${translationsPath}'`;
66
66
  this.packageJson.merge({
67
67
  scripts: jsonPath !== null ? {
68
68
  intl: 'npm run intl:build && npm run intl:copy',
@@ -1,5 +1,7 @@
1
1
  <?php
2
2
 
3
+ use Illuminate\Support\Facades\Route;
4
+
3
5
  Route::groupWithLocales(function ($locale) {
4
6
  // Authentication Routes...
5
7
  Route::getLocalized('login', 'LoginController@showLoginForm')->nameWithLocale('auth.login');
@@ -0,0 +1,27 @@
1
+ <?php
2
+
3
+ namespace App\Http\Middleware;
4
+
5
+ use Illuminate\Auth\Middleware\Authenticate as Middleware;
6
+
7
+ class Authenticate extends Middleware
8
+ {
9
+ /**
10
+ * Get the path the user should be redirected to when they are not authenticated.
11
+ *
12
+ * @param \Illuminate\Http\Request $request
13
+ * @return string|null
14
+ */
15
+ protected function redirectTo($request)
16
+ {
17
+ if (!$request->expectsJson()) {
18
+ $routeWithLocale =
19
+ route('panneau.auth.login') .
20
+ '?' .
21
+ http_build_query([
22
+ 'next' => $request->fullUrl(),
23
+ ]);
24
+ return $request->isPanneau() ? route('panneau.auth.login') : $routeWithLocale;
25
+ }
26
+ }
27
+ }
@@ -30,9 +30,7 @@ class PageResource extends JsonResource
30
30
  'slug' => $this->slug($locale),
31
31
  'image' => !is_null($image) ? new MediaResource($image) : null,
32
32
  'parent' =>
33
- !is_null($parent) && $parent instanceof Page
34
- ? new PageResource($parent)
35
- : null,
33
+ !is_null($parent) && $parent instanceof Page ? new PageResource($parent) : null,
36
34
 
37
35
  $this->mergeWhen($this->resource instanceof HasBlocks, function () {
38
36
  $blocks = $this->blocks();
@@ -3,9 +3,9 @@
3
3
  namespace App\Panneau\Http\Resources;
4
4
 
5
5
  use Illuminate\Http\Resources\Json\JsonResource;
6
- use App\Http\Resources\Medias\ImageResource;
6
+ use Folklore\Http\Resources\MediaResource;
7
7
  use App\Contracts\Resources\Page;
8
- use App\Contracts\Resources\HasBlocks;
8
+ use Folklore\Contracts\Resources\HasBlocks;
9
9
  use Folklore\Http\Resources\LocalizedResource;
10
10
  use App\Contracts\Resources\Pages\Home as HomePage;
11
11
 
@@ -19,8 +19,8 @@ class PageResource extends JsonResource
19
19
  */
20
20
  public function toArray($request)
21
21
  {
22
- $locale = $request->locale();
23
- $isPanneauIndex = $request->isPanneauIndex();
22
+ $image = $this->image();
23
+ $parent = $this->parent();
24
24
 
25
25
  return [
26
26
  'id' => $this->id(),
@@ -35,7 +35,7 @@ class PageResource extends JsonResource
35
35
  'slug' => new LocalizedResource(function ($locale) {
36
36
  return $this->slug($locale);
37
37
  }),
38
- 'image' => !is_null($image) ? new ImageResource($image) : null,
38
+ 'image' => !is_null($image) ? new MediaResource($image) : null,
39
39
  'parent' =>
40
40
  !is_null($parent) && $parent instanceof Page
41
41
  ? new ParentPageResource($parent)
@@ -0,0 +1,43 @@
1
+ <?php
2
+
3
+ namespace App\Panneau\Http\Resources;
4
+
5
+ use Illuminate\Http\Resources\Json\JsonResource;
6
+ use Folklore\Http\Resources\MediaResource;
7
+ use App\Contracts\Resources\Page;
8
+ use Folklore\Http\Resources\LocalizedResource;
9
+
10
+ class ParentPageResource extends JsonResource
11
+ {
12
+ /**
13
+ * Transform the resource into an array.
14
+ *
15
+ * @param \Illuminate\Http\Request $request
16
+ * @return array
17
+ */
18
+ public function toArray($request)
19
+ {
20
+ $image = $this->image();
21
+ $parent = $this->parent();
22
+
23
+ return [
24
+ 'id' => $this->id(),
25
+ 'type' => $this->type(),
26
+ 'published' => $this->published(),
27
+ 'title' => new LocalizedResource(function ($locale) {
28
+ return $this->title($locale);
29
+ }),
30
+ 'description' => new LocalizedResource(function ($locale) {
31
+ return $this->description($locale);
32
+ }),
33
+ 'slug' => new LocalizedResource(function ($locale) {
34
+ return $this->slug($locale);
35
+ }),
36
+ 'image' => !is_null($image) ? new MediaResource($image) : null,
37
+ 'parent' =>
38
+ !is_null($parent) && $parent instanceof Page
39
+ ? new ParentPageResource($parent)
40
+ : null,
41
+ ];
42
+ }
43
+ }
@@ -10,6 +10,11 @@ use Panneau\Support\LocalizedField;
10
10
  use Folklore\Panneau\Fields\PageSlug as PageSlugField;
11
11
  use Panneau\Support\Facade as Panneau;
12
12
 
13
+ use Illuminate\Http\Request;
14
+ use Laravel\Fortify\Fortify;
15
+ use Illuminate\Support\Facades\Hash;
16
+ use App\Models\User;
17
+
13
18
  class PanneauServiceProvider extends BaseServiceProvider
14
19
  {
15
20
  /**
@@ -31,6 +36,7 @@ class PanneauServiceProvider extends BaseServiceProvider
31
36
  {
32
37
  $this->bootFields();
33
38
  $this->bootViews();
39
+ $this->bootAuth();
34
40
  }
35
41
 
36
42
  protected function bootFields()
@@ -71,4 +77,14 @@ class PanneauServiceProvider extends BaseServiceProvider
71
77
  $view->composer('errors::*', \App\Panneau\Composers\AppComposer::class);
72
78
  });
73
79
  }
80
+
81
+ protected function bootAuth()
82
+ {
83
+ Fortify::authenticateUsing(function (Request $request) {
84
+ $user = User::where('email', $request->email)->first();
85
+ if (!is_null($user) && Hash::check($request->password, $user->password)) {
86
+ return $user;
87
+ }
88
+ });
89
+ }
74
90
  }
@@ -51,7 +51,8 @@ class Users extends Resource
51
51
  ],
52
52
  ])
53
53
  ->withoutReset()
54
- ->withDefaultValue('guest'),
54
+ ->withDefaultValue('admin')
55
+ ->isRequired(),
55
56
  ];
56
57
  }
57
58
  }
@@ -3,8 +3,8 @@
3
3
  namespace App\Resources;
4
4
 
5
5
  use Folklore\Resources\Block as BaseBlock;
6
+ use App\Contracts\Resources\Block as BlockContract;
6
7
 
7
- class Block extends BaseBlock
8
+ class Block extends BaseBlock implements BlockContract
8
9
  {
9
-
10
10
  }
@@ -3,11 +3,11 @@
3
3
  namespace App\Resources\Blocks;
4
4
 
5
5
  use App\Resources\Block;
6
- use App\Contracts\Resources\Blocks\Text as TextBlockContract;
6
+ use App\Contracts\Resources\Blocks\Image as ImageBlockContract;
7
7
  use Folklore\Contracts\Resources\Image as ImageContract;
8
8
  use Folklore\Resources\Image;
9
9
 
10
- class ImageBlock extends Block implements TextBlockContract
10
+ class ImageBlock extends Block implements ImageBlockContract
11
11
  {
12
12
  public function image(): ?ImageContract
13
13
  {
@@ -3,8 +3,8 @@
3
3
  namespace App\Resources;
4
4
 
5
5
  use Folklore\Resources\Page as BasePage;
6
+ use App\Contracts\Resources\Page as PageContract;
6
7
 
7
- class Page extends BasePage
8
+ class Page extends BasePage implements PageContract
8
9
  {
9
-
10
10
  }
@@ -10,7 +10,9 @@ Panneau::router()->group(function () {
10
10
  return app('tus-server')->serve();
11
11
  })->where('any', '.*');
12
12
 
13
- Panneau::router()->auth();
13
+ Route::middleware(['web'])->group(function () {
14
+ Panneau::router()->auth();
15
+ });
14
16
 
15
17
  Route::namespace('\App\Panneau\Http\Controllers')
16
18
  ->middleware(['web', 'auth', 'can:view,' . \Panneau\Panneau::class])
@@ -297,7 +297,7 @@ module.exports = class LaravelProjectGenerator extends _generator.default {
297
297
  if (this.options.panneau) {
298
298
  this.composeWith('folklore:laravel-panneau', {
299
299
  'project-name': this.options['project-name'],
300
- 'skip-install': skipInstall,
300
+ 'skip-install': true,
301
301
  quiet: true
302
302
  });
303
303
  } // if (this.options.auth) {
@@ -305,7 +305,7 @@ module.exports = class LaravelProjectGenerator extends _generator.default {
305
305
  // 'project-name': this.options['project-name'],
306
306
  // 'js-path': jsSrcPath,
307
307
  // 'styles-path': stylesSrcPath,
308
- // 'skip-install': skipInstall,
308
+ // 'skip-install': true,
309
309
  // 'install-npm': true,
310
310
  // quiet: true,
311
311
  // });
@@ -0,0 +1,67 @@
1
+ <?php
2
+
3
+ namespace App\Providers;
4
+
5
+ use Illuminate\Support\Facades\Gate;
6
+ use Laravel\Telescope\IncomingEntry;
7
+ use Laravel\Telescope\Telescope;
8
+ use Laravel\Telescope\TelescopeApplicationServiceProvider;
9
+
10
+ class TelescopeServiceProvider extends TelescopeApplicationServiceProvider
11
+ {
12
+ /**
13
+ * Register any application services.
14
+ *
15
+ * @return void
16
+ */
17
+ public function register()
18
+ {
19
+ // Telescope::night();
20
+
21
+ $this->hideSensitiveRequestDetails();
22
+
23
+ Telescope::filter(function (IncomingEntry $entry) {
24
+ if ($this->app->environment('local')) {
25
+ return true;
26
+ }
27
+
28
+ return $entry->isReportableException() ||
29
+ $entry->isFailedRequest() ||
30
+ $entry->isFailedJob() ||
31
+ $entry->isScheduledTask() ||
32
+ $entry->hasMonitoredTag();
33
+ });
34
+ }
35
+
36
+ /**
37
+ * Prevent sensitive request details from being logged by Telescope.
38
+ *
39
+ * @return void
40
+ */
41
+ protected function hideSensitiveRequestDetails()
42
+ {
43
+ if ($this->app->environment('local')) {
44
+ return;
45
+ }
46
+
47
+ Telescope::hideRequestParameters(['_token']);
48
+
49
+ Telescope::hideRequestHeaders(['cookie', 'x-csrf-token', 'x-xsrf-token']);
50
+ }
51
+
52
+ /**
53
+ * Register the Telescope gate.
54
+ *
55
+ * This gate determines who can access Telescope in non-local environments.
56
+ *
57
+ * @return void
58
+ */
59
+ protected function gate()
60
+ {
61
+ Gate::define('viewTelescope', function ($user) {
62
+ return in_array($user->email, [
63
+ //
64
+ ]);
65
+ });
66
+ }
67
+ }
@@ -1,5 +1,6 @@
1
1
  <?php
2
2
 
3
+ use Illuminate\Support\Facades\Route;
3
4
  use App\Http\Controllers\HomeController;
4
5
 
5
6
  //Redirect to current langage home
@@ -8,5 +9,7 @@ Route::get('/', [HomeController::class, 'redirect'])->name('home');
8
9
  Route::groupWithLocales(function () {
9
10
  Route::getTrans('/', [HomeController::class, 'index'])->nameWithLocale('home');
10
11
  Route::getTrans('/test', [HomeController::class, 'index'])->nameWithLocale('test');
11
- Route::getTrans('/test/{with_param}', [HomeController::class, 'index'])->nameWithLocale('test_with_param');
12
+ Route::getTrans('/test/{with_param}', [HomeController::class, 'index'])->nameWithLocale(
13
+ 'test_with_param'
14
+ );
12
15
  });
@@ -8,21 +8,23 @@ import { BrowserRouter } from 'react-router-dom';
8
8
  import App from './App';
9
9
 
10
10
  const propTypes = {
11
- locale: PropTypes.string,
12
- messages: PropTypes.oneOfType([
13
- PropTypes.objectOf(PropTypes.objectOf(PropTypes.string)),
14
- PropTypes.objectOf(PropTypes.string),
15
- ]),
11
+ intl: PropTypes.shape({
12
+ locale: PropTypes.string,
13
+ messages: PropTypes.oneOfType([
14
+ PropTypes.objectOf(PropTypes.objectOf(PropTypes.string)),
15
+ PropTypes.objectOf(PropTypes.string),
16
+ ]),
17
+ }),
16
18
  routes: PropTypes.objectOf(PropTypes.string),
17
19
  };
18
20
 
19
21
  const defaultProps = {
20
- locale: 'fr',
21
- messages: {},
22
+ intl: null,
22
23
  routes: {},
23
24
  };
24
25
 
25
- function Container({ locale, messages, routes }) {
26
+ function Container({ intl, routes }) {
27
+ const { locale = null, messages = null } = intl || {};
26
28
  return (
27
29
  <IntlProvider locale={locale} messages={messages[locale] || messages}>
28
30
  <BrowserRouter>
@@ -12,7 +12,7 @@ module.exports = class StylelintGenerator extends _generator.default {
12
12
  this.option('camel-case', {
13
13
  type: Boolean,
14
14
  required: false,
15
- defaults: false
15
+ defaults: true
16
16
  });
17
17
  }
18
18
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "generator-folklore",
3
- "version": "3.0.8",
3
+ "version": "3.0.10",
4
4
  "description": "Yeoman generator for projects at Folklore",
5
5
  "keywords": [
6
6
  "yeoman-generator"
@@ -40,5 +40,5 @@
40
40
  "yeoman-generator": "^5.7.0",
41
41
  "yeoman-remote": "^1.0.1"
42
42
  },
43
- "gitHead": "a8406b4ff188934ed49c13826cf577968669ed4e"
43
+ "gitHead": "1d7f2e259b004828e208b643fb2d123aad8cc5ec"
44
44
  }