From 2cd1589d6ae7095770e8c5dda10b138861d70501 Mon Sep 17 00:00:00 2001 From: horus Date: Sun, 23 Feb 2020 23:11:03 +0100 Subject: Initial commit. Calendar is working. --- app/Anime.php | 30 +++++ app/Console/Kernel.php | 42 +++++++ app/Exceptions/Handler.php | 55 ++++++++ app/Http/Controllers/.IndexController.php.swp | Bin 0 -> 12288 bytes .../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/IndexController.php | 40 ++++++ app/Http/Kernel.php | 82 ++++++++++++ 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 | 24 ++++ app/Libraries/AnimeSchedule.php | 138 +++++++++++++++++++++ app/Libraries/AnimeSeason.php | 32 +++++ 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 ++++++ 28 files changed, 1058 insertions(+) create mode 100644 app/Anime.php create mode 100644 app/Console/Kernel.php create mode 100644 app/Exceptions/Handler.php create mode 100644 app/Http/Controllers/.IndexController.php.swp 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/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/AnimeSchedule.php create mode 100644 app/Libraries/AnimeSeason.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/Anime.php b/app/Anime.php new file mode 100644 index 0000000..b13f785 --- /dev/null +++ b/app/Anime.php @@ -0,0 +1,30 @@ +id = $id; + } +} diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php new file mode 100644 index 0000000..a8c5158 --- /dev/null +++ b/app/Console/Kernel.php @@ -0,0 +1,42 @@ +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/Exceptions/Handler.php b/app/Exceptions/Handler.php new file mode 100644 index 0000000..364621e --- /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 @@ +getCalendar(); + Cache::put('schedule_' . $username, $schedule, 360); + } else { + $schedule = Cache::get('schedule_' . $username); + } + + header('Content-Type: text/calendar; charset=utf-8'); + #var_dump($schedule); + echo $schedule; + } + + public function test($param = null) { + $season = new AnimeSeason(); + } +} diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php new file mode 100644 index 0000000..deb65e8 --- /dev/null +++ b/app/Http/Kernel.php @@ -0,0 +1,82 @@ + [ + \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, + ]; + + /** + * The priority-sorted list of middleware. + * + * This forces non-global middleware to always be in the given order. + * + * @var array + */ + protected $middlewarePriority = [ + \Illuminate\Session\Middleware\StartSession::class, + \Illuminate\View\Middleware\ShareErrorsFromSession::class, + \App\Http\Middleware\Authenticate::class, + \Illuminate\Routing\Middleware\ThrottleRequests::class, + \Illuminate\Session\Middleware\AuthenticateSession::class, + \Illuminate\Routing\Middleware\SubstituteBindings::class, + \Illuminate\Auth\Middleware\Authorize::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 @@ +jikan = new MalClient; + + $this->userProfile = $this->jikan->getUserProfile( + new \Jikan\Request\User\UserProfileRequest( $username ) + ); + $this->animeList = $this->jikan->getUserAnimelist( + new \Jikan\Request\User\UserAnimeListRequest( $this->userProfile->getUsername(), 1 ) + ); + + foreach ( $this->animeList as $entry ) { + // currently watching + if ( $this::STATUS_WATCHING != $entry->getAiringStatus() ){ + continue; + } + + $data = $this->getDataFromAnilist( $entry->getMalID() ); + + // check if anilist has no info about airing next episode (this happens!) + if ( is_null( $data->nextAiringEpisode ) ) { + continue; + } + + $animeInfo = $this->jikan->getAnime( + (new \Jikan\Request\Anime\AnimeRequest( $entry->getMalID() )) + ); + + $anime = new Anime( $entry->getMalID() ); + + $anime->title_eng = $data->title->english; + $anime->title_rom = $data->title->romaji; + $anime->title_nat = $data->title->native; + $anime->title_pref = $data->title->userPreferred; + + $anime->airing_at = Carbon::createFromTimestamp($data->nextAiringEpisode->airingAt); + $anime->time_until_airing = Carbon::createFromTimestamp($data->nextAiringEpisode->timeUntilAiring); + $anime->episode = $data->nextAiringEpisode->episode; + $anime->duration = $data->duration; + + $anime->episodes_complete = $data->episodes; + $anime->episodes_watched = $entry->getWatchedEpisodes(); + $anime->score_user = $entry->getScore(); + $anime->score = $animeInfo->getScore(); + + $anime->rank = $animeInfo->getRank(); + $anime->popularity = $animeInfo->getPopularity(); + + $this->animeSchedule[] = $anime; + } + } + + public function getSchedule() { + return $this->animeSchedule; + } + + public function getCalendar() { + $vCalendar = new Calendar('animes.iamfabulous.de'); + $vCalendar->setName('Anime Schedule'); + + foreach ( $this->animeSchedule as $anime ) { + $vEvent = new Event(); + + $vEvent + ->setDtStart(new \DateTime($anime->airing_at)) + ->setDtEnd( new \DateTime($anime->airing_at->add($anime->duration, 'minutes')) ) + ->setNoTime(false) + ->setSummary( $anime->title_pref . " (" . $anime->episode . "/" . $anime->episodes_complete . ")" ) + ->setUrl( env("APP_URL") ) + ->setDescription( "(Episode " . $anime->episode . "/" . $anime->episodes_complete . ") You have watched " . $anime->episodes_watched . " episodes of " . $anime->title_pref . " and scored it with " . $anime->score_user . ". (Public score: ". $anime->score .")" ); + + $vCalendar->addComponent($vEvent); + } + + return $vCalendar->render(); + } + + private function getDataFromAnilist( $malID ) { + $query = ' + query($id: Int!) { + Media(idMal: $id, type: ANIME) { + title { + romaji + english + native + userPreferred + } + nextAiringEpisode { + airingAt + timeUntilAiring + episode + } + episodes + duration + } + } + '; + + // Define our query variables and values that will be used in the query request + $variables = [ + "id" => $malID, + ]; + + // Make the HTTP Api request + $http = new \GuzzleHttp\Client; + $response = $http->post('https://graphql.anilist.co', [ + 'json' => [ + 'query' => $query, + 'variables' => $variables, + ] + ]); + + $data = json_decode( $response->getBody() )->data->Media; + return $data; + } +} diff --git a/app/Libraries/AnimeSeason.php b/app/Libraries/AnimeSeason.php new file mode 100644 index 0000000..cc01ff7 --- /dev/null +++ b/app/Libraries/AnimeSeason.php @@ -0,0 +1,32 @@ +getSeasonal( + (new \Jikan\Request\Seasonal\SeasonalRequest( + )) + ); + + $this->year = $season->seasonYear; + $this->name= $season->seasonName; + } + +} 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