From 5a8c47e29afdbb61c32c1e03162abb1bb871ee9e Mon Sep 17 00:00:00 2001 From: horus Date: Thu, 2 Apr 2020 21:52:04 +0200 Subject: Initial commit. --- app/Article.php | 23 +++++ app/Category.php | 18 ++++ app/Console/Kernel.php | 41 +++++++++ app/Discussion.php | 24 +++++ app/Exceptions/Handler.php | 55 +++++++++++ .../Controllers/Auth/ConfirmPasswordController.php | 40 ++++++++ .../Controllers/Auth/ForgotPasswordController.php | 22 +++++ app/Http/Controllers/Auth/LoginController.php | 40 ++++++++ app/Http/Controllers/Auth/RegisterController.php | 73 +++++++++++++++ .../Controllers/Auth/ResetPasswordController.php | 30 ++++++ .../Controllers/Auth/VerificationController.php | 42 +++++++++ app/Http/Controllers/Controller.php | 13 +++ app/Http/Controllers/HomeController.php | 28 ++++++ app/Http/Controllers/IndexController.php | 102 +++++++++++++++++++++ app/Http/Kernel.php | 66 +++++++++++++ app/Http/Middleware/Authenticate.php | 21 +++++ app/Http/Middleware/CheckForMaintenanceMode.php | 17 ++++ app/Http/Middleware/EncryptCookies.php | 17 ++++ app/Http/Middleware/RedirectIfAuthenticated.php | 27 ++++++ app/Http/Middleware/TrimStrings.php | 18 ++++ app/Http/Middleware/TrustProxies.php | 23 +++++ app/Http/Middleware/VerifyCsrfToken.php | 17 ++++ app/Libraries/Helper.php | 16 ++++ app/Providers/AppServiceProvider.php | 28 ++++++ app/Providers/AuthServiceProvider.php | 30 ++++++ app/Providers/BroadcastServiceProvider.php | 21 +++++ app/Providers/EventServiceProvider.php | 34 +++++++ app/Providers/RouteServiceProvider.php | 80 ++++++++++++++++ app/User.php | 39 ++++++++ 29 files changed, 1005 insertions(+) create mode 100644 app/Article.php create mode 100644 app/Category.php create mode 100644 app/Console/Kernel.php create mode 100644 app/Discussion.php create mode 100644 app/Exceptions/Handler.php create mode 100644 app/Http/Controllers/Auth/ConfirmPasswordController.php create mode 100644 app/Http/Controllers/Auth/ForgotPasswordController.php create mode 100644 app/Http/Controllers/Auth/LoginController.php create mode 100644 app/Http/Controllers/Auth/RegisterController.php create mode 100644 app/Http/Controllers/Auth/ResetPasswordController.php create mode 100644 app/Http/Controllers/Auth/VerificationController.php create mode 100644 app/Http/Controllers/Controller.php create mode 100644 app/Http/Controllers/HomeController.php create mode 100644 app/Http/Controllers/IndexController.php create mode 100644 app/Http/Kernel.php create mode 100644 app/Http/Middleware/Authenticate.php create mode 100644 app/Http/Middleware/CheckForMaintenanceMode.php create mode 100644 app/Http/Middleware/EncryptCookies.php create mode 100644 app/Http/Middleware/RedirectIfAuthenticated.php create mode 100644 app/Http/Middleware/TrimStrings.php create mode 100644 app/Http/Middleware/TrustProxies.php create mode 100644 app/Http/Middleware/VerifyCsrfToken.php create mode 100644 app/Libraries/Helper.php create mode 100644 app/Providers/AppServiceProvider.php create mode 100644 app/Providers/AuthServiceProvider.php create mode 100644 app/Providers/BroadcastServiceProvider.php create mode 100644 app/Providers/EventServiceProvider.php create mode 100644 app/Providers/RouteServiceProvider.php create mode 100644 app/User.php (limited to 'app') diff --git a/app/Article.php b/app/Article.php new file mode 100644 index 0000000..9f11ea3 --- /dev/null +++ b/app/Article.php @@ -0,0 +1,23 @@ +hasMany('App\Discussion', 'article_id', 'id'); + return $this->hasMany('App\Discussion'); + } + + public function getCategories() { + return $this->belongsToMany('App\Category', 'article_category'); + } +} + diff --git a/app/Category.php b/app/Category.php new file mode 100644 index 0000000..7f0cdb2 --- /dev/null +++ b/app/Category.php @@ -0,0 +1,18 @@ +belongsToMany('App\Article', 'article_category'); + } +} diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php new file mode 100644 index 0000000..69914e9 --- /dev/null +++ b/app/Console/Kernel.php @@ -0,0 +1,41 @@ +command('inspire')->hourly(); + } + + /** + * Register the commands for the application. + * + * @return void + */ + protected function commands() + { + $this->load(__DIR__.'/Commands'); + + require base_path('routes/console.php'); + } +} diff --git a/app/Discussion.php b/app/Discussion.php new file mode 100644 index 0000000..facb847 --- /dev/null +++ b/app/Discussion.php @@ -0,0 +1,24 @@ +belongsTo('App\Article'); + } +} diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php new file mode 100644 index 0000000..59c585d --- /dev/null +++ b/app/Exceptions/Handler.php @@ -0,0 +1,55 @@ +middleware('auth'); + } +} diff --git a/app/Http/Controllers/Auth/ForgotPasswordController.php b/app/Http/Controllers/Auth/ForgotPasswordController.php new file mode 100644 index 0000000..465c39c --- /dev/null +++ b/app/Http/Controllers/Auth/ForgotPasswordController.php @@ -0,0 +1,22 @@ +middleware('guest')->except('logout'); + } +} diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php new file mode 100644 index 0000000..c6a6de6 --- /dev/null +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -0,0 +1,73 @@ +middleware('guest'); + } + + /** + * Get a validator for an incoming registration request. + * + * @param array $data + * @return \Illuminate\Contracts\Validation\Validator + */ + protected function validator(array $data) + { + return Validator::make($data, [ + 'name' => ['required', 'string', 'max:255'], + 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], + 'password' => ['required', 'string', 'min:8', 'confirmed'], + ]); + } + + /** + * Create a new user instance after a valid registration. + * + * @param array $data + * @return \App\User + */ + protected function create(array $data) + { + return User::create([ + 'name' => $data['name'], + 'email' => $data['email'], + 'password' => Hash::make($data['password']), + ]); + } +} diff --git a/app/Http/Controllers/Auth/ResetPasswordController.php b/app/Http/Controllers/Auth/ResetPasswordController.php new file mode 100644 index 0000000..b1726a3 --- /dev/null +++ b/app/Http/Controllers/Auth/ResetPasswordController.php @@ -0,0 +1,30 @@ +middleware('auth'); + $this->middleware('signed')->only('verify'); + $this->middleware('throttle:6,1')->only('verify', 'resend'); + } +} diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php new file mode 100644 index 0000000..a0a2a8a --- /dev/null +++ b/app/Http/Controllers/Controller.php @@ -0,0 +1,13 @@ +middleware('auth'); + } + + /** + * Show the application dashboard. + * + * @return \Illuminate\Contracts\Support\Renderable + */ + public function index() + { + return view('home'); + } +} diff --git a/app/Http/Controllers/IndexController.php b/app/Http/Controllers/IndexController.php new file mode 100644 index 0000000..7ae362a --- /dev/null +++ b/app/Http/Controllers/IndexController.php @@ -0,0 +1,102 @@ +orWhere('name', $topic); + $articles = $articles->get()->first(); + if ( is_null($articles) ) { + abort(404); + } + $articles = $articles->getArticles(); + $count = $articles->count(); + $articles = $articles->simplePaginate(10); + + return view('list', ["articles" => $articles, "count" => $count]); + } + + public function new() + { + $articles = Article::orderBy('created_at', 'desc'); + $count = $articles->count(); + $articles = $articles->simplePaginate(10); + + return view('list', ["articles" => $articles, "count" => $count]); + } + + public function search(Request $request) { + $search_unsafe = $request->input("q"); + + if ( "" == $search_unsafe ) { + $search_unsafe = ""; + } + + $search_unsafe = explode(",", $request->input("q")); + + $articles = new Article; + + if ( "on" == $request->input("onlypopular") ) { + $articles = $articles->setTable('view_popular'); + } + + foreach($search_unsafe as $q) { + $q = Helper::escapeLike($q); + $q = "%".$q."%"; + $articles = $articles->where(function ($query) use ($q) { + $query->whereHas('getCategories', function ($query) use ($q){ + $query->where('name', 'like', $q); + }) + ->orWhere('title', 'like', $q) + ->orWhere('url', 'like', $q) + ->orWhere('excerpt_html', 'like', $q); + }); + } + $count = $articles->count(); + $articles = $articles->orderBy('created_at', 'desc'); + $articles = $articles->simplePaginate(10); + + return view('list', ["articles" => $articles, "count" => $count]); + } + + public function popular() + { + $articles = new Article; + $articles = $articles->setTable('view_popular'); + $count = $articles->count(); + $articles = $articles->simplePaginate(10); + + return view('list', ["articles" => $articles, "count" => $count]); + } + + function topicindex() { + $categories = Category::orderBy('name'); + + return view('topicindex', ['topics' => $categories]); + } + + public function random() { + $articles = new Article; + $articles = $articles->inRandomOrder(); + $count = $articles->count(); + $articles = $articles->simplePaginate(10); + + return view('list', ["articles" => $articles, "count" => $count]); + } +} diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php new file mode 100644 index 0000000..c3640f3 --- /dev/null +++ b/app/Http/Kernel.php @@ -0,0 +1,66 @@ + [ + \App\Http\Middleware\EncryptCookies::class, + \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, + \Illuminate\Session\Middleware\StartSession::class, + // \Illuminate\Session\Middleware\AuthenticateSession::class, + \Illuminate\View\Middleware\ShareErrorsFromSession::class, + \App\Http\Middleware\VerifyCsrfToken::class, + \Illuminate\Routing\Middleware\SubstituteBindings::class, + ], + + 'api' => [ + 'throttle:60,1', + \Illuminate\Routing\Middleware\SubstituteBindings::class, + ], + ]; + + /** + * The application's route middleware. + * + * These middleware may be assigned to groups or used individually. + * + * @var array + */ + protected $routeMiddleware = [ + 'auth' => \App\Http\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, + 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class, + 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class, + 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, + 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, + ]; +} diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php new file mode 100644 index 0000000..704089a --- /dev/null +++ b/app/Http/Middleware/Authenticate.php @@ -0,0 +1,21 @@ +expectsJson()) { + return route('login'); + } + } +} diff --git a/app/Http/Middleware/CheckForMaintenanceMode.php b/app/Http/Middleware/CheckForMaintenanceMode.php new file mode 100644 index 0000000..35b9824 --- /dev/null +++ b/app/Http/Middleware/CheckForMaintenanceMode.php @@ -0,0 +1,17 @@ +check()) { + return redirect(RouteServiceProvider::HOME); + } + + return $next($request); + } +} diff --git a/app/Http/Middleware/TrimStrings.php b/app/Http/Middleware/TrimStrings.php new file mode 100644 index 0000000..5a50e7b --- /dev/null +++ b/app/Http/Middleware/TrimStrings.php @@ -0,0 +1,18 @@ +format("Y-m-d"); + } +} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php new file mode 100644 index 0000000..ee8ca5b --- /dev/null +++ b/app/Providers/AppServiceProvider.php @@ -0,0 +1,28 @@ + 'App\Policies\ModelPolicy', + ]; + + /** + * Register any authentication / authorization services. + * + * @return void + */ + public function boot() + { + $this->registerPolicies(); + + // + } +} diff --git a/app/Providers/BroadcastServiceProvider.php b/app/Providers/BroadcastServiceProvider.php new file mode 100644 index 0000000..395c518 --- /dev/null +++ b/app/Providers/BroadcastServiceProvider.php @@ -0,0 +1,21 @@ + [ + SendEmailVerificationNotification::class, + ], + ]; + + /** + * Register any events for your application. + * + * @return void + */ + public function boot() + { + parent::boot(); + + // + } +} diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php new file mode 100644 index 0000000..527eee3 --- /dev/null +++ b/app/Providers/RouteServiceProvider.php @@ -0,0 +1,80 @@ +mapApiRoutes(); + + $this->mapWebRoutes(); + + // + } + + /** + * Define the "web" routes for the application. + * + * These routes all receive session state, CSRF protection, etc. + * + * @return void + */ + protected function mapWebRoutes() + { + Route::middleware('web') + ->namespace($this->namespace) + ->group(base_path('routes/web.php')); + } + + /** + * Define the "api" routes for the application. + * + * These routes are typically stateless. + * + * @return void + */ + protected function mapApiRoutes() + { + Route::prefix('api') + ->middleware('api') + ->namespace($this->namespace) + ->group(base_path('routes/api.php')); + } +} diff --git a/app/User.php b/app/User.php new file mode 100644 index 0000000..e79dab7 --- /dev/null +++ b/app/User.php @@ -0,0 +1,39 @@ + 'datetime', + ]; +} -- cgit v1.2.3