diff options
88 files changed, 1983 insertions, 1662 deletions
diff --git a/.env.example b/.env.example index 17b3e4f..72dbf35 100644 --- a/.env.example +++ b/.env.example @@ -26,5 +26,3 @@ MEMCACHED_HOST=127.0.0.1 LASTFM_KEY= LASTFM_USER= -LASTFM_TOP_TRACKS=10 -API_ROOT=http://127.0.0.1:3000 diff --git a/app/Http/Controllers/AdminBookmarksController.php b/app/Http/Controllers/AdminBookmarksController.php new file mode 100644 index 0000000..c7d8afd --- /dev/null +++ b/app/Http/Controllers/AdminBookmarksController.php @@ -0,0 +1,15 @@ +<?php + +namespace App\Http\Controllers; + +use App\Models\BookmarkCategory; +use Illuminate\Support\Facades\DB; +use Illuminate\View\View; + +class AdminBookmarksController extends Controller +{ + public function show() : View { + $categories = BookmarkCategory::with('sites')->get(); + return view('admin.bookmarks', compact('categories')); + } +} diff --git a/app/Http/Controllers/AdminGuestbookController.php b/app/Http/Controllers/AdminGuestbookController.php new file mode 100644 index 0000000..5ebf451 --- /dev/null +++ b/app/Http/Controllers/AdminGuestbookController.php @@ -0,0 +1,34 @@ +<?php + +namespace App\Http\Controllers; + +use App\Models\GuestbookEntry; +use Illuminate\Support\Facades\DB; +use Illuminate\View\View; +use UAParser\Parser; + +class AdminGuestbookController extends Controller +{ + function getGuestbookUniqueAddr(): int { + $uniqueIpsCount = DB::table('guestbook__entries')->distinct()->count('ip'); + return $uniqueIpsCount; + } + + function getGuestbookEntriesCount(): int { + $entryCount = DB::table('guestbook__entries')->count(); + return $entryCount; + } + public function show() : View { + $guestbook_unique_addr = $this->getGuestbookUniqueAddr(); + $guestbook_entry_count = $this->getGuestbookEntriesCount(); + $entries = GuestbookEntry::selectEntries(); + $parser = Parser::create(); + + return view('admin.guestbook', [ + 'guestbook_unique_addr' => $guestbook_unique_addr, + 'guestbook_entry_count' => $guestbook_entry_count, + 'entries' => $entries, + 'parser' => $parser, + ]); + } +} diff --git a/app/Http/Controllers/AdminImportController.php b/app/Http/Controllers/AdminImportController.php new file mode 100644 index 0000000..dc32cec --- /dev/null +++ b/app/Http/Controllers/AdminImportController.php @@ -0,0 +1,69 @@ +<?php + +namespace App\Http\Controllers; + +use App\Models\BookmarkCategory; +use App\Models\BookmarkSite; +use App\Models\GuestbookEntry; +use Exception; +use Illuminate\Http\Request; +use Illuminate\View\View; + +class AdminImportController extends Controller +{ + public function show() : View { + return view('admin.import'); + } + + public function submit(Request $request) + { + $request->validate([ + 'data_file' => 'required|mimes:json', + ]); + + $file = $request->file('data_file'); + $jsonContent = file_get_contents($file->getRealPath()); + $data = json_decode($jsonContent, true); + $tables = []; + foreach($data as $item) { + if ($item['type'] !== "table") continue; + $tables[$item['name']] = [ + 'data' => $item['data'], + 'count' => count($item['data']) + ]; + + if ($item['name'] === "guestbook__entries") { + GuestbookEntry::importGuestbookEntry($item['data']); + } + $this->import($item['data'], $item['name']); + } + return view('admin.import-success', ['tables' => $tables]); + } + + /** + * Imports the given data to the specified table + * + * @param array $data The data to import + * @param string $table_name The name of the table to import to + * @return void + * @throws Exception Invalid table specified, to be replaced with custom exception + */ + public function import(array $data, string $table_name): void { + switch ($table_name) { + case 'guestbook__entries': + GuestbookEntry::importGuestbookEntry($data); + break; + case 'bookmark__categories' : + BookmarkCategory::importBookmarkCategory($data); + break; + case 'bookmark__sites': + BookmarkSite::importBookmark($data); + break; + case 'guestbook__bans': + break; + default: + // TODO: Replace with custom exception + throw new Exception("Invalid table specified ($table_name)"); + } + } +} diff --git a/app/Http/Controllers/BookmarksController.php b/app/Http/Controllers/BookmarksController.php new file mode 100644 index 0000000..56aacc7 --- /dev/null +++ b/app/Http/Controllers/BookmarksController.php @@ -0,0 +1,15 @@ +<?php + +namespace App\Http\Controllers; + +use App\Models\BookmarkSite; +use App\Models\BookmarkCategory; +use Illuminate\View\View; + +class BookmarksController extends Controller +{ + public function show() : View { + $categories = BookmarkCategory::with('sites')->get(); + return view('bookmarks', compact('categories')); + } +} diff --git a/app/Http/Controllers/CalculatorsController.php b/app/Http/Controllers/CalculatorsController.php new file mode 100644 index 0000000..38a7a41 --- /dev/null +++ b/app/Http/Controllers/CalculatorsController.php @@ -0,0 +1,13 @@ +<?php + +namespace App\Http\Controllers; + +use Illuminate\Http\Request; +use Illuminate\View\View; + +class CalculatorsController extends Controller +{ + public function show() : View { + return view('calculators'); + } +} diff --git a/app/Http/Controllers/ComputersController.php b/app/Http/Controllers/ComputersController.php new file mode 100644 index 0000000..e16e70d --- /dev/null +++ b/app/Http/Controllers/ComputersController.php @@ -0,0 +1,13 @@ +<?php + +namespace App\Http\Controllers; + +use Illuminate\Http\Request; +use Illuminate\View\View; + +class ComputersController extends Controller +{ + public function show() : View { + return view('computers'); + } +} diff --git a/app/Http/Controllers/GuestbookController.php b/app/Http/Controllers/GuestbookController.php index 70707d7..df726ef 100644 --- a/app/Http/Controllers/GuestbookController.php +++ b/app/Http/Controllers/GuestbookController.php @@ -2,37 +2,46 @@ namespace App\Http\Controllers; +use App\Models\GuestbookEntry; use Illuminate\Http\Request; -use DB; +use Illuminate\Http\RedirectResponse; +use Illuminate\Contracts\View\View; +use Illuminate\Validation\ValidationException; +use UAParser\Parser; class GuestbookController extends Controller { - public function guestbook() { - return view('pages.guestbook'); + public function show(): View { + $entries = GuestbookEntry::selectEntries(); + $parser = Parser::create(); + + return view('guestbook') + ->with('entries', $entries) + ->with('parser', $parser); } - public function guestbookPost(Request $request) { + /** + * Creates a new guestbook entry + * + * @param Request $request + * @return RedirectResponse + * @throws ValidationException + */ + public function addEntry(Request $request): RedirectResponse { $this->validate($request, [ 'name' => 'required', 'message' => 'required' ]); - $matching_bans = DB::select('SELECT reason FROM guestbook__bans WHERE ip_address = ?', array($request->ip())); - - if (!empty($matching_bans)) { - return view('errors.guestbook-ipban')->with('reason', $matching_bans[0]->reason); - } - - DB::insert( - 'INSERT INTO guestbook__entries (name, timestamp, ip_address, agent, message) values (?, ?, ?, ?, ?)', - [ - htmlspecialchars($request->get('name')), - time(), - $request->ip(), - $request->userAgent(), - htmlspecialchars($request->get('message')) - ] - ); + GuestbookEntry::insertGuestbookEntry($request); return back()->with('success', 'Entry submitted successfully!'); } + + public function banIP(string $addr) { + // TODO: Add banning system + // $matching_bans = DB::select('SELECT reason FROM guestbook__bans WHERE ip_address = ?', array($request->ip())); + // if (!empty($matching_bans)) { + // return view('errors.guestbook-ipban')->with('reason', $matching_bans[0]->reason); + // } + } } diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php new file mode 100644 index 0000000..3fad094 --- /dev/null +++ b/app/Http/Controllers/HomeController.php @@ -0,0 +1,32 @@ +<?php + +namespace App\Http\Controllers; + +use Illuminate\View\View; +use DateTime; + +class HomeController extends Controller +{ + /** + * Returns age based on birthday date and current date (GMT) + * @return int + */ + function returnAge(): int + { + date_default_timezone_set('Europe/London'); + $birthday = new DateTime("2005-06-07"); + $currentDate = DateTime::createFromFormat("Y-m-d", date("Y-m-d")); + $age = $birthday->diff($currentDate); + return $age->y; + } + + /** + * Shows home page + * @return View + */ + public function show() : View { + return view('home', [ + 'age' => $this->returnAge() + ]); + } +} diff --git a/app/Http/Controllers/MusicController.php b/app/Http/Controllers/MusicController.php new file mode 100644 index 0000000..5e31d86 --- /dev/null +++ b/app/Http/Controllers/MusicController.php @@ -0,0 +1,69 @@ +<?php + +namespace App\Http\Controllers; + +use Illuminate\Support\Facades\Cache; +use Illuminate\Support\Facades\Config; +use Illuminate\Support\Facades\Http; +use Illuminate\View\View; + +class MusicController extends Controller +{ + public function getCurrentTrack() { + // If it's already cached just return that + if (Cache::has('current_track')) { + return Cache::get('current_track'); + } + + $response = Http::withQueryParameters([ + 'method' => 'user.getrecenttracks', + 'user' => Config::get('services.lastfm.user'), + 'format' => 'json', + 'nowplaying' => 'true', + 'api_key' => Config::get('services.lastfm.key') + ])->get('https://ws.audioscrobbler.com/2.0/'); + $data = $response->json(); + error_log($response->body()); + $track_data = $data["recenttracks"]["track"][0]; + $current_track = [ + 'title' => $track_data["name"], + 'artist' => $track_data["artist"]["#text"], + 'url' => $track_data["url"], + ]; + Cache::put('current_track', $current_track, now()->addSeconds(15)); + return $current_track; + } + + public function getTopTracks() { + // If it's already cached just return that + if (Cache::has('top_tracks')) { + return Cache::get('top_tracks'); + } + + $response = Http::withQueryParameters([ + 'method' => 'user.gettoptracks', + 'user' => Config::get('services.lastfm.user'), + 'format' => 'json', + 'period' => '1month', + 'limit' => 10, + 'api_key' => Config::get('services.lastfm.key') + ])->get('https://ws.audioscrobbler.com/2.0/'); + $data = $response->json(); + $topTracks = []; + foreach ($data["toptracks"]["track"] as $track) { + $topTracks[] = [ + 'title' => $track["name"], + 'artist' => $track["artist"]["name"], + 'url' => $track["url"], + 'plays' => $track["playcount"], + ]; + } + Cache::put('top_tracks', $topTracks, now()->addSeconds(15)); + return $topTracks; + } + public function show() : View { + return view('music') + ->with('current_track', $this->getCurrentTrack()) + ->with('top_tracks', $this->getTopTracks()); + } +} diff --git a/app/Http/Middleware/RateLimiter.php b/app/Http/Middleware/RateLimiter.php index 09eb0a9..821868f 100644 --- a/app/Http/Middleware/RateLimiter.php +++ b/app/Http/Middleware/RateLimiter.php @@ -16,6 +16,9 @@ class RateLimiter */ public function handle(Request $request, Closure $next): Response { + if (auth()->check()) { + return $next($request); + } $ipAddress = $request->ip(); $cacheKey = 'rate_limit_'.$ipAddress; diff --git a/app/Models/BookmarkCategory.php b/app/Models/BookmarkCategory.php new file mode 100644 index 0000000..a8bc8d2 --- /dev/null +++ b/app/Models/BookmarkCategory.php @@ -0,0 +1,36 @@ +<?php + +namespace App\Models; + +use Illuminate\Database\Eloquent\Factories\HasFactory; +use Illuminate\Database\Eloquent\Model; + +class BookmarkCategory extends Model +{ + use HasFactory; + protected $table = "bookmark__categories"; + protected $fillable = ['name']; + + public function sites() { + return $this->hasMany(BookmarkSite::class, 'category'); + } + + public static function insertBookmarkCategory(string $name) { + $newBookmarkCategory = new BookmarkCategory; + $newBookmarkCategory->name = $name; + $newBookmarkCategory->save(); + } + public static function selectBookmarks(int $id) { + $bookmarks = BookmarkSite::where('category', '=', $id)->firstOrFail(); + return $bookmarks; + } + + public static function importBookmarkCategory(array $data) { + foreach ($data as $category) { + $newBookmarkCategory = new BookmarkCategory; + $newBookmarkCategory->name = $category['name']; + $newBookmarkCategory->priority = intval($category['priority']); + $newBookmarkCategory->save(); + } + } +} diff --git a/app/Models/BookmarkSite.php b/app/Models/BookmarkSite.php new file mode 100644 index 0000000..3c9cc5d --- /dev/null +++ b/app/Models/BookmarkSite.php @@ -0,0 +1,35 @@ +<?php + +namespace App\Models; + +use Illuminate\Database\Eloquent\Factories\HasFactory; +use Illuminate\Database\Eloquent\Model; + +class BookmarkSite extends Model { + use HasFactory; + protected $table = "bookmark__sites"; + protected $fillable = ['name', 'description', 'url', 'category']; + + public function category() { + return $this->belongsTo(BookmarkCategory::class, 'category'); + } + public static function insertBookmark(string $name, string $url, int $category) { + $category = BookmarkCategory::where('id', $category)->firstOrFail(); + $newBookmark = new BookmarkSite; + $newBookmark->name = $name; + $newBookmark->url = $url; + $newBookmark->category = $category->id; + $newBookmark->save(); + } + + public static function importBookmark(array $data) { + foreach ($data as $site) { + $newBookmark = new BookmarkSite; + $newBookmark->name = $site['name']; + $newBookmark->description = $site['description']; + $newBookmark->url = $site['url']; + $newBookmark->category = $site['category_id']; + $newBookmark->save(); + } + } +} diff --git a/app/Models/GuestbookEntry.php b/app/Models/GuestbookEntry.php new file mode 100644 index 0000000..f5e2de2 --- /dev/null +++ b/app/Models/GuestbookEntry.php @@ -0,0 +1,50 @@ +<?php + +namespace App\Models; + +use Illuminate\Http\Request; +use Illuminate\Database\Eloquent\Factories\HasFactory; +use Illuminate\Database\Eloquent\Model; + +class GuestbookEntry extends Model +{ + use HasFactory; + protected $table = "guestbook__entries"; + protected $fillable = ['name', 'message']; + + /** + * Creates a new guestbook entry. + * + * @param Request $request The HTTP POST request + * @return void + */ + public static function insertGuestbookEntry(Request $request) { + $newEntry = new GuestbookEntry; + $newEntry->name = htmlspecialchars($request->get('name')); + $newEntry->message = htmlspecialchars($request->get('message')); + $newEntry->ip = $request->ip(); + $newEntry->agent = $request->userAgent(); + $newEntry->admin = auth()->check(); + $newEntry->save(); + } + + public static function selectEntries() { + $entries = GuestbookEntry::orderBy('created_at', 'desc')->get(); + return $entries; + } + + public static function importGuestbookEntry(array $data) { + foreach ($data as $entry) { + $dt = new \DateTime('@' . $entry['timestamp']); + $newEntry = new GuestbookEntry; + $newEntry->name = $entry['name']; + $newEntry->ip = $entry['ip_address']; + $newEntry->agent = $entry['agent']; + $newEntry->admin = $entry['site_owner']; + $newEntry->message = $entry['message']; + $newEntry->created_at = $dt; + $newEntry->updated_at = $dt; + $newEntry->save(); + } + } +} diff --git a/app/Models/User.php b/app/Models/User.php deleted file mode 100644 index 4d7f70f..0000000 --- a/app/Models/User.php +++ /dev/null @@ -1,45 +0,0 @@ -<?php - -namespace App\Models; - -// use Illuminate\Contracts\Auth\MustVerifyEmail; -use Illuminate\Database\Eloquent\Factories\HasFactory; -use Illuminate\Foundation\Auth\User as Authenticatable; -use Illuminate\Notifications\Notifiable; -use Laravel\Sanctum\HasApiTokens; - -class User extends Authenticatable -{ - use HasApiTokens, HasFactory, Notifiable; - - /** - * The attributes that are mass assignable. - * - * @var array<int, string> - */ - protected $fillable = [ - 'name', - 'email', - 'password', - ]; - - /** - * The attributes that should be hidden for serialization. - * - * @var array<int, string> - */ - protected $hidden = [ - 'password', - 'remember_token', - ]; - - /** - * The attributes that should be cast. - * - * @var array<string, string> - */ - protected $casts = [ - 'email_verified_at' => 'datetime', - 'password' => 'hashed', - ]; -} diff --git a/app/View/Components/CurrentTrack.php b/app/View/Components/CurrentTrack.php new file mode 100644 index 0000000..337809a --- /dev/null +++ b/app/View/Components/CurrentTrack.php @@ -0,0 +1,27 @@ +<?php + +namespace App\View\Components; + +use Closure; +use Illuminate\Contracts\View\View; +use Illuminate\View\Component; + +class CurrentTrack extends Component +{ + public $track; + /** + * Create a new component instance. + */ + public function __construct($track) + { + $this->track = $track; + } + + /** + * Get the view / contents that represent the component. + */ + public function render(): View|Closure|string + { + return view('components.current-track'); + } +} diff --git a/app/View/Components/Layout.php b/app/View/Components/Layout.php new file mode 100644 index 0000000..576d1a0 --- /dev/null +++ b/app/View/Components/Layout.php @@ -0,0 +1,26 @@ +<?php + +namespace App\View\Components; + +use Closure; +use Illuminate\Contracts\View\View; +use Illuminate\View\Component; + +class Layout extends Component +{ + /** + * Create a new component instance. + */ + public function __construct() + { + // + } + + /** + * Get the view / contents that represent the component. + */ + public function render(): View|Closure|string + { + return view('components.layout'); + } +} diff --git a/app/View/Components/Navbar.php b/app/View/Components/Navbar.php new file mode 100644 index 0000000..a19db3b --- /dev/null +++ b/app/View/Components/Navbar.php @@ -0,0 +1,27 @@ +<?php + +namespace App\View\Components; + +use Closure; +use Illuminate\Contracts\View\View; +use Illuminate\View\Component; + +class Navbar extends Component +{ + public $title; + /** + * Create a new component instance. + */ + public function __construct($title) + { + $this->title = $title; + } + + /** + * Get the view / contents that represent the component. + */ + public function render(): View|Closure|string + { + return view('components.navbar'); + } +} diff --git a/app/View/Components/TopTracks.php b/app/View/Components/TopTracks.php new file mode 100644 index 0000000..768ce33 --- /dev/null +++ b/app/View/Components/TopTracks.php @@ -0,0 +1,27 @@ +<?php + +namespace App\View\Components; + +use Closure; +use Illuminate\Contracts\View\View; +use Illuminate\View\Component; + +class TopTracks extends Component +{ + public $tracks; + /** + * Create a new component instance. + */ + public function __construct($tracks) + { + $this->tracks = $tracks; + } + + /** + * Get the view / contents that represent the component. + */ + public function render(): View|Closure|string + { + return view('components.top-tracks'); + } +} diff --git a/app/View/Components/Track.php b/app/View/Components/Track.php new file mode 100644 index 0000000..b9f628f --- /dev/null +++ b/app/View/Components/Track.php @@ -0,0 +1,29 @@ +<?php + +namespace App\View\Components; + +use Closure; +use Illuminate\Contracts\View\View; +use Illuminate\View\Component; + +class Track extends Component +{ + public $track; + public $count; + /** + * Create a new component instance. + */ + public function __construct($track, $count) + { + $this->track = $track; + $this->count = $count; + } + + /** + * Get the view / contents that represent the component. + */ + public function render(): View|Closure|string + { + return view('components.track'); + } +} Binary files differdiff --git a/composer.json b/composer.json index b924604..315bb81 100644 --- a/composer.json +++ b/composer.json @@ -13,6 +13,7 @@ "scrivo/highlight.php": "v9.18.1.10", "sentry/sentry-laravel": "^4.1", "spatie/laravel-honeypot": "^4.3", + "spatie/laravel-html": "^3.4", "ua-parser/uap-php": "^3.9.14" }, "require-dev": { diff --git a/composer.lock b/composer.lock index 3fb9a92..50858f8 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "d9ef400d61fb79fa5da5ecf7868fced5", + "content-hash": "c228a32331b8e43e449ba12dc4439757", "packages": [ { "name": "auth0/auth0-php", @@ -574,16 +574,16 @@ }, { "name": "doctrine/inflector", - "version": "2.0.9", + "version": "2.0.10", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "2930cd5ef353871c821d5c43ed030d39ac8cfe65" + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/2930cd5ef353871c821d5c43ed030d39ac8cfe65", - "reference": "2930cd5ef353871c821d5c43ed030d39ac8cfe65", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc", + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc", "shasum": "" }, "require": { @@ -645,7 +645,7 @@ ], "support": { "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.0.9" + "source": "https://github.com/doctrine/inflector/tree/2.0.10" }, "funding": [ { @@ -661,31 +661,31 @@ "type": "tidelift" } ], - "time": "2024-01-15T18:05:13+00:00" + "time": "2024-02-18T20:23:39+00:00" }, { "name": "doctrine/lexer", - "version": "3.0.0", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "84a527db05647743d50373e0ec53a152f2cde568" + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/84a527db05647743d50373e0ec53a152f2cde568", - "reference": "84a527db05647743d50373e0ec53a152f2cde568", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", "shasum": "" }, "require": { "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^10", - "phpstan/phpstan": "^1.9", - "phpunit/phpunit": "^9.5", + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5", "psalm/plugin-phpunit": "^0.18.3", - "vimeo/psalm": "^5.0" + "vimeo/psalm": "^5.21" }, "type": "library", "autoload": { @@ -722,7 +722,7 @@ ], "support": { "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/3.0.0" + "source": "https://github.com/doctrine/lexer/tree/3.0.1" }, "funding": [ { @@ -738,7 +738,7 @@ "type": "tidelift" } ], - "time": "2022-12-15T16:57:16+00:00" + "time": "2024-02-05T11:56:58+00:00" }, { "name": "dragonmantank/cron-expression", @@ -1473,20 +1473,20 @@ }, { "name": "laravel/framework", - "version": "v10.42.0", + "version": "v10.48.3", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "fef1aff874a6749c44f8e142e5764eab8cb96890" + "reference": "5791c052b41c6b593556adc687076bfbdd13c501" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/fef1aff874a6749c44f8e142e5764eab8cb96890", - "reference": "fef1aff874a6749c44f8e142e5764eab8cb96890", + "url": "https://api.github.com/repos/laravel/framework/zipball/5791c052b41c6b593556adc687076bfbdd13c501", + "reference": "5791c052b41c6b593556adc687076bfbdd13c501", "shasum": "" }, "require": { - "brick/math": "^0.9.3|^0.10.2|^0.11", + "brick/math": "^0.9.3|^0.10.2|^0.11|^0.12", "composer-runtime-api": "^2.2", "doctrine/inflector": "^2.0.5", "dragonmantank/cron-expression": "^3.3.2", @@ -1530,6 +1530,8 @@ "conflict": { "carbonphp/carbon-doctrine-types": ">=3.0", "doctrine/dbal": ">=4.0", + "mockery/mockery": "1.6.8", + "phpunit/phpunit": ">=11.0.0", "tightenco/collect": "<5.5.33" }, "provide": { @@ -1674,20 +1676,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-01-23T15:07:56+00:00" + "time": "2024-03-15T10:17:07+00:00" }, { "name": "laravel/prompts", - "version": "v0.1.15", + "version": "v0.1.16", "source": { "type": "git", "url": "https://github.com/laravel/prompts.git", - "reference": "d814a27514d99b03c85aa42b22cfd946568636c1" + "reference": "ca6872ab6aec3ab61db3a61f83a6caf764ec7781" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/d814a27514d99b03c85aa42b22cfd946568636c1", - "reference": "d814a27514d99b03c85aa42b22cfd946568636c1", + "url": "https://api.github.com/repos/laravel/prompts/zipball/ca6872ab6aec3ab61db3a61f83a6caf764ec7781", + "reference": "ca6872ab6aec3ab61db3a61f83a6caf764ec7781", "shasum": "" }, "require": { @@ -1729,9 +1731,9 @@ ], "support": { "issues": "https://github.com/laravel/prompts/issues", - "source": "https://github.com/laravel/prompts/tree/v0.1.15" + "source": "https://github.com/laravel/prompts/tree/v0.1.16" }, - "time": "2023-12-29T22:37:42+00:00" + "time": "2024-02-21T19:25:27+00:00" }, { "name": "laravel/serializable-closure", @@ -1861,16 +1863,16 @@ }, { "name": "league/commonmark", - "version": "2.4.1", + "version": "2.4.2", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "3669d6d5f7a47a93c08ddff335e6d945481a1dd5" + "reference": "91c24291965bd6d7c46c46a12ba7492f83b1cadf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/3669d6d5f7a47a93c08ddff335e6d945481a1dd5", - "reference": "3669d6d5f7a47a93c08ddff335e6d945481a1dd5", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/91c24291965bd6d7c46c46a12ba7492f83b1cadf", + "reference": "91c24291965bd6d7c46c46a12ba7492f83b1cadf", "shasum": "" }, "require": { @@ -1883,7 +1885,7 @@ }, "require-dev": { "cebe/markdown": "^1.0", - "commonmark/cmark": "0.30.0", + "commonmark/cmark": "0.30.3", "commonmark/commonmark.js": "0.30.0", "composer/package-versions-deprecated": "^1.8", "embed/embed": "^4.4", @@ -1893,10 +1895,10 @@ "michelf/php-markdown": "^1.4 || ^2.0", "nyholm/psr7": "^1.5", "phpstan/phpstan": "^1.8.2", - "phpunit/phpunit": "^9.5.21", + "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0", "scrutinizer/ocular": "^1.8.1", - "symfony/finder": "^5.3 | ^6.0", - "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0", + "symfony/finder": "^5.3 | ^6.0 || ^7.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 || ^7.0", "unleashedtech/php-coding-standard": "^3.1.1", "vimeo/psalm": "^4.24.0 || ^5.0.0" }, @@ -1963,7 +1965,7 @@ "type": "tidelift" } ], - "time": "2023-08-30T16:55:00+00:00" + "time": "2024-02-02T11:59:32+00:00" }, { "name": "league/config", @@ -2049,16 +2051,16 @@ }, { "name": "league/flysystem", - "version": "3.23.0", + "version": "3.25.1", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "d4ad81e2b67396e33dc9d7e54ec74ccf73151dcc" + "reference": "abbd664eb4381102c559d358420989f835208f18" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/d4ad81e2b67396e33dc9d7e54ec74ccf73151dcc", - "reference": "d4ad81e2b67396e33dc9d7e54ec74ccf73151dcc", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/abbd664eb4381102c559d358420989f835208f18", + "reference": "abbd664eb4381102c559d358420989f835208f18", "shasum": "" }, "require": { @@ -2078,7 +2080,7 @@ "require-dev": { "async-aws/s3": "^1.5 || ^2.0", "async-aws/simple-s3": "^1.1 || ^2.0", - "aws/aws-sdk-php": "^3.220.0", + "aws/aws-sdk-php": "^3.295.10", "composer/semver": "^3.0", "ext-fileinfo": "*", "ext-ftp": "*", @@ -2086,10 +2088,10 @@ "friendsofphp/php-cs-fixer": "^3.5", "google/cloud-storage": "^1.23", "microsoft/azure-storage-blob": "^1.1", - "phpseclib/phpseclib": "^3.0.34", + "phpseclib/phpseclib": "^3.0.36", "phpstan/phpstan": "^1.10", "phpunit/phpunit": "^9.5.11|^10.0", - "sabre/dav": "^4.3.1" + "sabre/dav": "^4.6.0" }, "type": "library", "autoload": { @@ -2123,7 +2125,7 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.23.0" + "source": "https://github.com/thephpleague/flysystem/tree/3.25.1" }, "funding": [ { @@ -2135,20 +2137,20 @@ "type": "github" } ], - "time": "2023-12-04T10:16:17+00:00" + "time": "2024-03-16T12:53:19+00:00" }, { "name": "league/flysystem-local", - "version": "3.23.0", + "version": "3.25.1", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-local.git", - "reference": "5cf046ba5f059460e86a997c504dd781a39a109b" + "reference": "61a6a90d6e999e4ddd9ce5adb356de0939060b92" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/5cf046ba5f059460e86a997c504dd781a39a109b", - "reference": "5cf046ba5f059460e86a997c504dd781a39a109b", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/61a6a90d6e999e4ddd9ce5adb356de0939060b92", + "reference": "61a6a90d6e999e4ddd9ce5adb356de0939060b92", "shasum": "" }, "require": { @@ -2182,8 +2184,7 @@ "local" ], "support": { - "issues": "https://github.com/thephpleague/flysystem-local/issues", - "source": "https://github.com/thephpleague/flysystem-local/tree/3.23.0" + "source": "https://github.com/thephpleague/flysystem-local/tree/3.25.1" }, "funding": [ { @@ -2195,20 +2196,20 @@ "type": "github" } ], - "time": "2023-12-04T10:14:46+00:00" + "time": "2024-03-15T19:58:44+00:00" }, { "name": "league/mime-type-detection", - "version": "1.14.0", + "version": "1.15.0", "source": { "type": "git", "url": "https://github.com/thephpleague/mime-type-detection.git", - "reference": "b6a5854368533df0295c5761a0253656a2e52d9e" + "reference": "ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/b6a5854368533df0295c5761a0253656a2e52d9e", - "reference": "b6a5854368533df0295c5761a0253656a2e52d9e", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301", + "reference": "ce0f4d1e8a6f4eb0ddff33f57c69c50fd09f4301", "shasum": "" }, "require": { @@ -2239,7 +2240,7 @@ "description": "Mime-type detection for Flysystem", "support": { "issues": "https://github.com/thephpleague/mime-type-detection/issues", - "source": "https://github.com/thephpleague/mime-type-detection/tree/1.14.0" + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.15.0" }, "funding": [ { @@ -2251,7 +2252,7 @@ "type": "tidelift" } ], - "time": "2023-10-17T14:13:20+00:00" + "time": "2024-01-28T23:22:08+00:00" }, { "name": "monolog/monolog", @@ -2356,16 +2357,16 @@ }, { "name": "nesbot/carbon", - "version": "2.72.2", + "version": "2.72.3", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "3e7edc41b58d65509baeb0d4a14c8fa41d627130" + "reference": "0c6fd108360c562f6e4fd1dedb8233b423e91c83" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/3e7edc41b58d65509baeb0d4a14c8fa41d627130", - "reference": "3e7edc41b58d65509baeb0d4a14c8fa41d627130", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/0c6fd108360c562f6e4fd1dedb8233b423e91c83", + "reference": "0c6fd108360c562f6e4fd1dedb8233b423e91c83", "shasum": "" }, "require": { @@ -2459,7 +2460,7 @@ "type": "tidelift" } ], - "time": "2024-01-19T00:21:53+00:00" + "time": "2024-01-25T10:35:09+00:00" }, { "name": "nette/schema", @@ -3042,20 +3043,20 @@ }, { "name": "psr-discovery/all", - "version": "1.0.0", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/psr-discovery/all.git", - "reference": "73deceb26d3190f53a5cd3b95751c6a223804a8b" + "reference": "e353ca0cac46b2e954f4a3ee3a13f0de8be7b87b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/psr-discovery/all/zipball/73deceb26d3190f53a5cd3b95751c6a223804a8b", - "reference": "73deceb26d3190f53a5cd3b95751c6a223804a8b", + "url": "https://api.github.com/repos/psr-discovery/all/zipball/e353ca0cac46b2e954f4a3ee3a13f0de8be7b87b", + "reference": "e353ca0cac46b2e954f4a3ee3a13f0de8be7b87b", "shasum": "" }, "require": { - "php": "^8.0", + "php": "^8.1", "psr-discovery/cache-implementations": "^1.0", "psr-discovery/container-implementations": "^1.0", "psr-discovery/event-dispatcher-implementations": "^1.0", @@ -3107,32 +3108,31 @@ "psr-6" ], "support": { - "source": "https://github.com/psr-discovery/all/tree/1.0.0" + "source": "https://github.com/psr-discovery/all/tree/1.0.1" }, - "time": "2023-03-27T16:37:46+00:00" + "time": "2024-03-04T21:20:17+00:00" }, { "name": "psr-discovery/cache-implementations", - "version": "1.0.0", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/psr-discovery/cache-implementations.git", - "reference": "33b63d8e324f4aff296508b592bbd4d71b45da68" + "reference": "ebede0af34a7fd3c5564809e659ee69c0ab85ff6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/psr-discovery/cache-implementations/zipball/33b63d8e324f4aff296508b592bbd4d71b45da68", - "reference": "33b63d8e324f4aff296508b592bbd4d71b45da68", + "url": "https://api.github.com/repos/psr-discovery/cache-implementations/zipball/ebede0af34a7fd3c5564809e659ee69c0ab85ff6", + "reference": "ebede0af34a7fd3c5564809e659ee69c0ab85ff6", "shasum": "" }, "require": { - "php": "^8.0", + "php": "^8.1", "psr-discovery/discovery": "^1.0", "psr/cache": "^1.0 | ^2.0 | ^3.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "^3.14", - "infection/infection": "^0.26", "mockery/mockery": "^1.5", "pestphp/pest": "^2.0", "phpstan/phpstan": "^1.10", @@ -3183,32 +3183,31 @@ ], "support": { "issues": "https://github.com/psr-discovery/cache-implementations/issues", - "source": "https://github.com/psr-discovery/cache-implementations/tree/1.0.0" + "source": "https://github.com/psr-discovery/cache-implementations/tree/1.1.1" }, - "time": "2023-03-27T06:19:44+00:00" + "time": "2024-03-04T21:22:36+00:00" }, { "name": "psr-discovery/container-implementations", - "version": "1.0.0", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/psr-discovery/container-implementations.git", - "reference": "366612e9260f247d8b8ee279094a33dd4cbc6886" + "reference": "728a452b32b0bb60c4bac43b18db2e3105bb8d7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/psr-discovery/container-implementations/zipball/366612e9260f247d8b8ee279094a33dd4cbc6886", - "reference": "366612e9260f247d8b8ee279094a33dd4cbc6886", + "url": "https://api.github.com/repos/psr-discovery/container-implementations/zipball/728a452b32b0bb60c4bac43b18db2e3105bb8d7e", + "reference": "728a452b32b0bb60c4bac43b18db2e3105bb8d7e", "shasum": "" }, "require": { - "php": "^8.0", + "php": "^8.1", "psr-discovery/discovery": "^1.0", "psr/container": "^1.0 | ^2.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "^3.14", - "infection/infection": "^0.26", "mockery/mockery": "^1.5", "pestphp/pest": "^2.0", "phpstan/phpstan": "^1.10", @@ -3257,31 +3256,30 @@ ], "support": { "issues": "https://github.com/psr-discovery/container-implementations/issues", - "source": "https://github.com/psr-discovery/container-implementations/tree/1.0.0" + "source": "https://github.com/psr-discovery/container-implementations/tree/1.1.1" }, - "time": "2023-03-27T06:18:27+00:00" + "time": "2024-03-04T21:24:05+00:00" }, { "name": "psr-discovery/discovery", - "version": "1.0.2", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/psr-discovery/discovery.git", - "reference": "83e746a138705d56f8e3dc102e28c79f32ae9b54" + "reference": "9fb31dca2030accd9d3de21fb8806478e9df5b2b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/psr-discovery/discovery/zipball/83e746a138705d56f8e3dc102e28c79f32ae9b54", - "reference": "83e746a138705d56f8e3dc102e28c79f32ae9b54", + "url": "https://api.github.com/repos/psr-discovery/discovery/zipball/9fb31dca2030accd9d3de21fb8806478e9df5b2b", + "reference": "9fb31dca2030accd9d3de21fb8806478e9df5b2b", "shasum": "" }, "require": { "composer/semver": "^3.0", - "php": "^8.0" + "php": "^8.1" }, "require-dev": { "friendsofphp/php-cs-fixer": "^3.14", - "infection/infection": "^0.26", "mockery/mockery": "^1.5", "pestphp/pest": "^2.0", "phpstan/phpstan": "^1.10", @@ -3335,32 +3333,31 @@ ], "support": { "issues": "https://github.com/psr-discovery/discovery/issues", - "source": "https://github.com/psr-discovery/discovery/tree/1.0.2" + "source": "https://github.com/psr-discovery/discovery/tree/1.1.1" }, - "time": "2023-03-27T19:49:39+00:00" + "time": "2024-03-04T21:26:05+00:00" }, { "name": "psr-discovery/event-dispatcher-implementations", - "version": "1.0.0", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/psr-discovery/event-dispatcher-implementations.git", - "reference": "903d05afe29bd1a17c18924004d282d28bda1759" + "reference": "9033bb984613703e4c4f795ef0657184dc1c70eb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/psr-discovery/event-dispatcher-implementations/zipball/903d05afe29bd1a17c18924004d282d28bda1759", - "reference": "903d05afe29bd1a17c18924004d282d28bda1759", + "url": "https://api.github.com/repos/psr-discovery/event-dispatcher-implementations/zipball/9033bb984613703e4c4f795ef0657184dc1c70eb", + "reference": "9033bb984613703e4c4f795ef0657184dc1c70eb", "shasum": "" }, "require": { - "php": "^8.0", + "php": "^8.1", "psr-discovery/discovery": "^1.0", "psr/event-dispatcher": "^1.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "^3.14", - "infection/infection": "^0.26", "mockery/mockery": "^1.5", "pestphp/pest": "^2.0", "phpstan/phpstan": "^1.10", @@ -3409,32 +3406,31 @@ ], "support": { "issues": "https://github.com/psr-discovery/event-dispatcher-implementations/issues", - "source": "https://github.com/psr-discovery/event-dispatcher-implementations/tree/1.0.0" + "source": "https://github.com/psr-discovery/event-dispatcher-implementations/tree/1.1.1" }, - "time": "2023-03-27T06:17:31+00:00" + "time": "2024-03-04T21:27:10+00:00" }, { "name": "psr-discovery/http-client-implementations", - "version": "1.0.0", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/psr-discovery/http-client-implementations.git", - "reference": "ca0cbc370789a3fd0f6aa3e7c4f4e5c123eadef3" + "reference": "a05c54087d13504d8e48c27395fbab638fb0a114" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/psr-discovery/http-client-implementations/zipball/ca0cbc370789a3fd0f6aa3e7c4f4e5c123eadef3", - "reference": "ca0cbc370789a3fd0f6aa3e7c4f4e5c123eadef3", + "url": "https://api.github.com/repos/psr-discovery/http-client-implementations/zipball/a05c54087d13504d8e48c27395fbab638fb0a114", + "reference": "a05c54087d13504d8e48c27395fbab638fb0a114", "shasum": "" }, "require": { - "php": "^8.0", + "php": "^8.1", "psr-discovery/discovery": "^1.0", "psr/http-client": "^1.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "^3.14", - "infection/infection": "^0.26", "mockery/mockery": "^1.5", "pestphp/pest": "^2.0", "phpstan/phpstan": "^1.10", @@ -3483,32 +3479,31 @@ ], "support": { "issues": "https://github.com/psr-discovery/http-client-implementations/issues", - "source": "https://github.com/psr-discovery/http-client-implementations/tree/1.0.0" + "source": "https://github.com/psr-discovery/http-client-implementations/tree/1.2.0" }, - "time": "2023-03-27T06:16:24+00:00" + "time": "2024-03-16T05:29:47+00:00" }, { "name": "psr-discovery/http-factory-implementations", - "version": "1.0.1", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/psr-discovery/http-factory-implementations.git", - "reference": "064bb0ec6d2e49aeb6f15aa5a8793abe02daf56b" + "reference": "4ee07ae795b794e61578db32b5422a780b01b833" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/psr-discovery/http-factory-implementations/zipball/064bb0ec6d2e49aeb6f15aa5a8793abe02daf56b", - "reference": "064bb0ec6d2e49aeb6f15aa5a8793abe02daf56b", + "url": "https://api.github.com/repos/psr-discovery/http-factory-implementations/zipball/4ee07ae795b794e61578db32b5422a780b01b833", + "reference": "4ee07ae795b794e61578db32b5422a780b01b833", "shasum": "" }, "require": { - "php": "^8.0", - "psr-discovery/discovery": "^1.0", + "php": "^8.1", + "psr-discovery/discovery": "^1.1", "psr/http-factory": "^1.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "^3.14", - "infection/infection": "^0.26", "mockery/mockery": "^1.5", "pestphp/pest": "^2.0", "phpstan/phpstan": "^1.10", @@ -3557,32 +3552,31 @@ ], "support": { "issues": "https://github.com/psr-discovery/http-factory-implementations/issues", - "source": "https://github.com/psr-discovery/http-factory-implementations/tree/1.0.1" + "source": "https://github.com/psr-discovery/http-factory-implementations/tree/1.1.1" }, - "time": "2023-04-26T06:22:45+00:00" + "time": "2024-03-04T21:31:16+00:00" }, { "name": "psr-discovery/log-implementations", - "version": "1.0.0", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/psr-discovery/log-implementations.git", - "reference": "7be7af9bb1bf41a4985356b16cc654e0227eed38" + "reference": "384894384663fa5e1b2186112fb8ffe3f81a0b22" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/psr-discovery/log-implementations/zipball/7be7af9bb1bf41a4985356b16cc654e0227eed38", - "reference": "7be7af9bb1bf41a4985356b16cc654e0227eed38", + "url": "https://api.github.com/repos/psr-discovery/log-implementations/zipball/384894384663fa5e1b2186112fb8ffe3f81a0b22", + "reference": "384894384663fa5e1b2186112fb8ffe3f81a0b22", "shasum": "" }, "require": { - "php": "^8.0", + "php": "^8.1", "psr-discovery/discovery": "^1.0", "psr/log": "^1.0 | ^2.0 | ^3.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "^3.14", - "infection/infection": "^0.26", "mockery/mockery": "^1.5", "pestphp/pest": "^2.0", "phpstan/phpstan": "^1.10", @@ -3633,9 +3627,9 @@ ], "support": { "issues": "https://github.com/psr-discovery/log-implementations/issues", - "source": "https://github.com/psr-discovery/log-implementations/tree/1.0.0" + "source": "https://github.com/psr-discovery/log-implementations/tree/1.0.1" }, - "time": "2023-03-27T06:14:11+00:00" + "time": "2024-03-04T21:32:27+00:00" }, { "name": "psr/cache", @@ -4482,16 +4476,16 @@ }, { "name": "sentry/sentry", - "version": "4.4.0", + "version": "4.6.0", "source": { "type": "git", "url": "https://github.com/getsentry/sentry-php.git", - "reference": "95a428a59ebddf786a27f09d19ec395a32f62082" + "reference": "30d98a460ab10f7b7032d76c62da5b1ce6c0765d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/95a428a59ebddf786a27f09d19ec395a32f62082", - "reference": "95a428a59ebddf786a27f09d19ec395a32f62082", + "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/30d98a460ab10f7b7032d76c62da5b1ce6c0765d", + "reference": "30d98a460ab10f7b7032d76c62da5b1ce6c0765d", "shasum": "" }, "require": { @@ -4555,7 +4549,7 @@ ], "support": { "issues": "https://github.com/getsentry/sentry-php/issues", - "source": "https://github.com/getsentry/sentry-php/tree/4.4.0" + "source": "https://github.com/getsentry/sentry-php/tree/4.6.0" }, "funding": [ { @@ -4567,27 +4561,27 @@ "type": "custom" } ], - "time": "2024-01-23T09:49:55+00:00" + "time": "2024-02-13T11:32:56+00:00" }, { "name": "sentry/sentry-laravel", - "version": "4.1.2", + "version": "4.2.0", "source": { "type": "git", "url": "https://github.com/getsentry/sentry-laravel.git", - "reference": "fa38767be2f14505fd93bfa5acadb9dfec1fdeee" + "reference": "054638ac05d7668e8b2c636e66fed5b5b468f11f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/fa38767be2f14505fd93bfa5acadb9dfec1fdeee", - "reference": "fa38767be2f14505fd93bfa5acadb9dfec1fdeee", + "url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/054638ac05d7668e8b2c636e66fed5b5b468f11f", + "reference": "054638ac05d7668e8b2c636e66fed5b5b468f11f", "shasum": "" }, "require": { "illuminate/support": "^6.0 | ^7.0 | ^8.0 | ^9.0 | ^10.0", "nyholm/psr7": "^1.0", "php": "^7.2 | ^8.0", - "sentry/sentry": "^4.3", + "sentry/sentry": "^4.5", "symfony/psr-http-message-bridge": "^1.0 | ^2.0 | ^6.0 | ^7.0" }, "require-dev": { @@ -4644,7 +4638,7 @@ ], "support": { "issues": "https://github.com/getsentry/sentry-laravel/issues", - "source": "https://github.com/getsentry/sentry-laravel/tree/4.1.2" + "source": "https://github.com/getsentry/sentry-laravel/tree/4.2.0" }, "funding": [ { @@ -4656,7 +4650,7 @@ "type": "custom" } ], - "time": "2024-01-16T12:46:27+00:00" + "time": "2024-01-29T17:08:18+00:00" }, { "name": "spatie/laravel-honeypot", @@ -4735,6 +4729,84 @@ "time": "2023-12-01T10:30:39+00:00" }, { + "name": "spatie/laravel-html", + "version": "3.4.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-html.git", + "reference": "20bd3185ae085b2eced952bc5191cb8eb922250e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-html/zipball/20bd3185ae085b2eced952bc5191cb8eb922250e", + "reference": "20bd3185ae085b2eced952bc5191cb8eb922250e", + "shasum": "" + }, + "require": { + "illuminate/http": "^9.0|^8.0|^10.0", + "illuminate/support": "^9.0|^8.0|^10.0", + "php": "^8.0" + }, + "require-dev": { + "mockery/mockery": "^1.3", + "orchestra/testbench": "^7.0|^6.23|^8.0", + "pestphp/pest": "^1.22" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Spatie\\Html\\HtmlServiceProvider" + ], + "aliases": { + "Html": "Spatie\\Html\\Facades\\Html" + } + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Spatie\\Html\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sebastian De Deyne", + "email": "sebastian@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + }, + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "A fluent html builder", + "homepage": "https://github.com/spatie/laravel-html", + "keywords": [ + "html", + "spatie" + ], + "support": { + "source": "https://github.com/spatie/laravel-html/tree/3.4.0" + }, + "funding": [ + { + "url": "https://spatie.be/open-source/support-us", + "type": "custom" + } + ], + "time": "2024-01-05T16:35:10+00:00" + }, + { "name": "spatie/laravel-package-tools", "version": "1.16.2", "source": { @@ -4796,16 +4868,16 @@ }, { "name": "symfony/console", - "version": "v6.4.2", + "version": "v6.4.4", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "0254811a143e6bc6c8deea08b589a7e68a37f625" + "reference": "0d9e4eb5ad413075624378f474c4167ea202de78" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/0254811a143e6bc6c8deea08b589a7e68a37f625", - "reference": "0254811a143e6bc6c8deea08b589a7e68a37f625", + "url": "https://api.github.com/repos/symfony/console/zipball/0d9e4eb5ad413075624378f474c4167ea202de78", + "reference": "0d9e4eb5ad413075624378f474c4167ea202de78", "shasum": "" }, "require": { @@ -4870,7 +4942,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.2" + "source": "https://github.com/symfony/console/tree/v6.4.4" }, "funding": [ { @@ -4886,20 +4958,20 @@ "type": "tidelift" } ], - "time": "2023-12-10T16:15:48+00:00" + "time": "2024-02-22T20:27:10+00:00" }, { "name": "symfony/css-selector", - "version": "v7.0.0", + "version": "v7.0.3", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "bb51d46e53ef8d50d523f0c5faedba056a27943e" + "reference": "ec60a4edf94e63b0556b6a0888548bb400a3a3be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/bb51d46e53ef8d50d523f0c5faedba056a27943e", - "reference": "bb51d46e53ef8d50d523f0c5faedba056a27943e", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/ec60a4edf94e63b0556b6a0888548bb400a3a3be", + "reference": "ec60a4edf94e63b0556b6a0888548bb400a3a3be", "shasum": "" }, "require": { @@ -4935,7 +5007,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v7.0.0" + "source": "https://github.com/symfony/css-selector/tree/v7.0.3" }, "funding": [ { @@ -4951,7 +5023,7 @@ "type": "tidelift" } ], - "time": "2023-10-31T17:59:56+00:00" + "time": "2024-01-23T15:02:46+00:00" }, { "name": "symfony/deprecation-contracts", @@ -5022,16 +5094,16 @@ }, { "name": "symfony/error-handler", - "version": "v6.4.0", + "version": "v6.4.4", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "c873490a1c97b3a0a4838afc36ff36c112d02788" + "reference": "c725219bdf2afc59423c32793d5019d2a904e13a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/c873490a1c97b3a0a4838afc36ff36c112d02788", - "reference": "c873490a1c97b3a0a4838afc36ff36c112d02788", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/c725219bdf2afc59423c32793d5019d2a904e13a", + "reference": "c725219bdf2afc59423c32793d5019d2a904e13a", "shasum": "" }, "require": { @@ -5077,7 +5149,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v6.4.0" + "source": "https://github.com/symfony/error-handler/tree/v6.4.4" }, "funding": [ { @@ -5093,20 +5165,20 @@ "type": "tidelift" } ], - "time": "2023-10-18T09:43:34+00:00" + "time": "2024-02-22T20:27:10+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v7.0.2", + "version": "v7.0.3", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "098b62ae81fdd6cbf941f355059f617db28f4f9a" + "reference": "834c28d533dd0636f910909d01b9ff45cc094b5e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/098b62ae81fdd6cbf941f355059f617db28f4f9a", - "reference": "098b62ae81fdd6cbf941f355059f617db28f4f9a", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/834c28d533dd0636f910909d01b9ff45cc094b5e", + "reference": "834c28d533dd0636f910909d01b9ff45cc094b5e", "shasum": "" }, "require": { @@ -5157,7 +5229,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v7.0.2" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.0.3" }, "funding": [ { @@ -5173,7 +5245,7 @@ "type": "tidelift" } ], - "time": "2023-12-27T22:24:19+00:00" + "time": "2024-01-23T15:02:46+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -5317,16 +5389,16 @@ }, { "name": "symfony/http-foundation", - "version": "v6.4.2", + "version": "v6.4.4", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "172d807f9ef3fc3fbed8377cc57c20d389269271" + "reference": "ebc713bc6e6f4b53f46539fc158be85dfcd77304" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/172d807f9ef3fc3fbed8377cc57c20d389269271", - "reference": "172d807f9ef3fc3fbed8377cc57c20d389269271", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ebc713bc6e6f4b53f46539fc158be85dfcd77304", + "reference": "ebc713bc6e6f4b53f46539fc158be85dfcd77304", "shasum": "" }, "require": { @@ -5374,7 +5446,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.4.2" + "source": "https://github.com/symfony/http-foundation/tree/v6.4.4" }, "funding": [ { @@ -5390,20 +5462,20 @@ "type": "tidelift" } ], - "time": "2023-12-27T22:16:42+00:00" + "time": "2024-02-08T15:01:18+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.4.2", + "version": "v6.4.5", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "13e8387320b5942d0dc408440c888e2d526efef4" + "reference": "f6947cb939d8efee137797382cb4db1af653ef75" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/13e8387320b5942d0dc408440c888e2d526efef4", - "reference": "13e8387320b5942d0dc408440c888e2d526efef4", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/f6947cb939d8efee137797382cb4db1af653ef75", + "reference": "f6947cb939d8efee137797382cb4db1af653ef75", "shasum": "" }, "require": { @@ -5452,7 +5524,7 @@ "symfony/process": "^5.4|^6.0|^7.0", "symfony/property-access": "^5.4.5|^6.0.5|^7.0", "symfony/routing": "^5.4|^6.0|^7.0", - "symfony/serializer": "^6.3|^7.0", + "symfony/serializer": "^6.4.4|^7.0.4", "symfony/stopwatch": "^5.4|^6.0|^7.0", "symfony/translation": "^5.4|^6.0|^7.0", "symfony/translation-contracts": "^2.5|^3", @@ -5487,7 +5559,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v6.4.2" + "source": "https://github.com/symfony/http-kernel/tree/v6.4.5" }, "funding": [ { @@ -5503,20 +5575,20 @@ "type": "tidelift" } ], - "time": "2023-12-30T15:31:44+00:00" + "time": "2024-03-04T21:00:47+00:00" }, { "name": "symfony/mailer", - "version": "v6.4.2", + "version": "v6.4.4", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "6da89e5c9202f129717a770a03183fb140720168" + "reference": "791c5d31a8204cf3db0c66faab70282307f4376b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/6da89e5c9202f129717a770a03183fb140720168", - "reference": "6da89e5c9202f129717a770a03183fb140720168", + "url": "https://api.github.com/repos/symfony/mailer/zipball/791c5d31a8204cf3db0c66faab70282307f4376b", + "reference": "791c5d31a8204cf3db0c66faab70282307f4376b", "shasum": "" }, "require": { @@ -5567,7 +5639,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v6.4.2" + "source": "https://github.com/symfony/mailer/tree/v6.4.4" }, "funding": [ { @@ -5583,20 +5655,20 @@ "type": "tidelift" } ], - "time": "2023-12-19T09:12:31+00:00" + "time": "2024-02-03T21:33:47+00:00" }, { "name": "symfony/mime", - "version": "v6.4.0", + "version": "v6.4.3", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "ca4f58b2ef4baa8f6cecbeca2573f88cd577d205" + "reference": "5017e0a9398c77090b7694be46f20eb796262a34" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/ca4f58b2ef4baa8f6cecbeca2573f88cd577d205", - "reference": "ca4f58b2ef4baa8f6cecbeca2573f88cd577d205", + "url": "https://api.github.com/repos/symfony/mime/zipball/5017e0a9398c77090b7694be46f20eb796262a34", + "reference": "5017e0a9398c77090b7694be46f20eb796262a34", "shasum": "" }, "require": { @@ -5651,7 +5723,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.4.0" + "source": "https://github.com/symfony/mime/tree/v6.4.3" }, "funding": [ { @@ -5667,7 +5739,7 @@ "type": "tidelift" } ], - "time": "2023-10-17T11:49:05+00:00" + "time": "2024-01-30T08:32:12+00:00" }, { "name": "symfony/options-resolver", @@ -5738,16 +5810,16 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb" + "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", - "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4", + "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4", "shasum": "" }, "require": { @@ -5761,9 +5833,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -5800,7 +5869,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0" }, "funding": [ { @@ -5816,20 +5885,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "875e90aeea2777b6f135677f618529449334a612" + "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/875e90aeea2777b6f135677f618529449334a612", - "reference": "875e90aeea2777b6f135677f618529449334a612", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/32a9da87d7b3245e09ac426c83d334ae9f06f80f", + "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f", "shasum": "" }, "require": { @@ -5840,9 +5909,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -5881,7 +5947,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.29.0" }, "funding": [ { @@ -5897,20 +5963,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "ecaafce9f77234a6a449d29e49267ba10499116d" + "reference": "a287ed7475f85bf6f61890146edbc932c0fff919" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/ecaafce9f77234a6a449d29e49267ba10499116d", - "reference": "ecaafce9f77234a6a449d29e49267ba10499116d", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/a287ed7475f85bf6f61890146edbc932c0fff919", + "reference": "a287ed7475f85bf6f61890146edbc932c0fff919", "shasum": "" }, "require": { @@ -5923,9 +5989,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -5968,7 +6031,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.29.0" }, "funding": [ { @@ -5984,20 +6047,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:30:37+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92" + "reference": "bc45c394692b948b4d383a08d7753968bed9a83d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", - "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/bc45c394692b948b4d383a08d7753968bed9a83d", + "reference": "bc45c394692b948b4d383a08d7753968bed9a83d", "shasum": "" }, "require": { @@ -6008,9 +6071,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -6052,7 +6112,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.29.0" }, "funding": [ { @@ -6068,20 +6128,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "42292d99c55abe617799667f454222c54c60e229" + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229", - "reference": "42292d99c55abe617799667f454222c54c60e229", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec", "shasum": "" }, "require": { @@ -6095,9 +6155,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -6135,7 +6192,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0" }, "funding": [ { @@ -6151,20 +6208,20 @@ "type": "tidelift" } ], - "time": "2023-07-28T09:04:16+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179" + "reference": "861391a8da9a04cbad2d232ddd9e4893220d6e25" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/70f4aebd92afca2f865444d30a4d2151c13c3179", - "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/861391a8da9a04cbad2d232ddd9e4893220d6e25", + "reference": "861391a8da9a04cbad2d232ddd9e4893220d6e25", "shasum": "" }, "require": { @@ -6172,9 +6229,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -6211,7 +6265,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.29.0" }, "funding": [ { @@ -6227,20 +6281,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5" + "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5", - "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", + "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", "shasum": "" }, "require": { @@ -6248,9 +6302,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -6294,7 +6345,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.29.0" }, "funding": [ { @@ -6310,20 +6361,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-php83", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11" + "reference": "86fcae159633351e5fd145d1c47de6c528f8caff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11", - "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/86fcae159633351e5fd145d1c47de6c528f8caff", + "reference": "86fcae159633351e5fd145d1c47de6c528f8caff", "shasum": "" }, "require": { @@ -6332,9 +6383,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -6374,7 +6422,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.29.0" }, "funding": [ { @@ -6390,20 +6438,20 @@ "type": "tidelift" } ], - "time": "2023-08-16T06:22:46+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-uuid", - "version": "v1.28.0", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-uuid.git", - "reference": "9c44518a5aff8da565c8a55dbe85d2769e6f630e" + "reference": "3abdd21b0ceaa3000ee950097bc3cf9efc137853" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/9c44518a5aff8da565c8a55dbe85d2769e6f630e", - "reference": "9c44518a5aff8da565c8a55dbe85d2769e6f630e", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/3abdd21b0ceaa3000ee950097bc3cf9efc137853", + "reference": "3abdd21b0ceaa3000ee950097bc3cf9efc137853", "shasum": "" }, "require": { @@ -6417,9 +6465,6 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -6456,7 +6501,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.29.0" }, "funding": [ { @@ -6472,20 +6517,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/process", - "version": "v6.4.2", + "version": "v6.4.4", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "c4b1ef0bc80533d87a2e969806172f1c2a980241" + "reference": "710e27879e9be3395de2b98da3f52a946039f297" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/c4b1ef0bc80533d87a2e969806172f1c2a980241", - "reference": "c4b1ef0bc80533d87a2e969806172f1c2a980241", + "url": "https://api.github.com/repos/symfony/process/zipball/710e27879e9be3395de2b98da3f52a946039f297", + "reference": "710e27879e9be3395de2b98da3f52a946039f297", "shasum": "" }, "require": { @@ -6517,7 +6562,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.4.2" + "source": "https://github.com/symfony/process/tree/v6.4.4" }, "funding": [ { @@ -6533,20 +6578,20 @@ "type": "tidelift" } ], - "time": "2023-12-22T16:42:54+00:00" + "time": "2024-02-20T12:31:00+00:00" }, { "name": "symfony/psr-http-message-bridge", - "version": "v7.0.2", + "version": "v7.0.3", "source": { "type": "git", "url": "https://github.com/symfony/psr-http-message-bridge.git", - "reference": "c5e973032e9a32c6f1bfa87d7832853b84cbaf22" + "reference": "d9fadaf9541d7c01c307e48905d7ce1dbee6bf38" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/c5e973032e9a32c6f1bfa87d7832853b84cbaf22", - "reference": "c5e973032e9a32c6f1bfa87d7832853b84cbaf22", + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/d9fadaf9541d7c01c307e48905d7ce1dbee6bf38", + "reference": "d9fadaf9541d7c01c307e48905d7ce1dbee6bf38", "shasum": "" }, "require": { @@ -6600,7 +6645,7 @@ "psr-7" ], "support": { - "source": "https://github.com/symfony/psr-http-message-bridge/tree/v7.0.2" + "source": "https://github.com/symfony/psr-http-message-bridge/tree/v7.0.3" }, "funding": [ { @@ -6616,20 +6661,20 @@ "type": "tidelift" } ], - "time": "2023-12-28T19:18:20+00:00" + "time": "2024-01-23T15:02:46+00:00" }, { "name": "symfony/routing", - "version": "v6.4.2", + "version": "v6.4.5", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "98eab13a07fddc85766f1756129c69f207ffbc21" + "reference": "7fe30068e207d9c31c0138501ab40358eb2d49a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/98eab13a07fddc85766f1756129c69f207ffbc21", - "reference": "98eab13a07fddc85766f1756129c69f207ffbc21", + "url": "https://api.github.com/repos/symfony/routing/zipball/7fe30068e207d9c31c0138501ab40358eb2d49a4", + "reference": "7fe30068e207d9c31c0138501ab40358eb2d49a4", "shasum": "" }, "require": { @@ -6683,7 +6728,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.4.2" + "source": "https://github.com/symfony/routing/tree/v6.4.5" }, "funding": [ { @@ -6699,7 +6744,7 @@ "type": "tidelift" } ], - "time": "2023-12-29T15:34:34+00:00" + "time": "2024-02-27T12:33:30+00:00" }, { "name": "symfony/service-contracts", @@ -6785,16 +6830,16 @@ }, { "name": "symfony/string", - "version": "v7.0.2", + "version": "v7.0.4", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "cc78f14f91f5e53b42044d0620961c48028ff9f5" + "reference": "f5832521b998b0bec40bee688ad5de98d4cf111b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/cc78f14f91f5e53b42044d0620961c48028ff9f5", - "reference": "cc78f14f91f5e53b42044d0620961c48028ff9f5", + "url": "https://api.github.com/repos/symfony/string/zipball/f5832521b998b0bec40bee688ad5de98d4cf111b", + "reference": "f5832521b998b0bec40bee688ad5de98d4cf111b", "shasum": "" }, "require": { @@ -6851,7 +6896,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.0.2" + "source": "https://github.com/symfony/string/tree/v7.0.4" }, "funding": [ { @@ -6867,20 +6912,20 @@ "type": "tidelift" } ], - "time": "2023-12-10T16:54:46+00:00" + "time": "2024-02-01T13:17:36+00:00" }, { "name": "symfony/translation", - "version": "v6.4.2", + "version": "v6.4.4", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "a2ab2ec1a462e53016de8e8d5e8912bfd62ea681" + "reference": "bce6a5a78e94566641b2594d17e48b0da3184a8e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/a2ab2ec1a462e53016de8e8d5e8912bfd62ea681", - "reference": "a2ab2ec1a462e53016de8e8d5e8912bfd62ea681", + "url": "https://api.github.com/repos/symfony/translation/zipball/bce6a5a78e94566641b2594d17e48b0da3184a8e", + "reference": "bce6a5a78e94566641b2594d17e48b0da3184a8e", "shasum": "" }, "require": { @@ -6903,7 +6948,7 @@ "symfony/translation-implementation": "2.3|3.0" }, "require-dev": { - "nikic/php-parser": "^4.13", + "nikic/php-parser": "^4.18|^5.0", "psr/log": "^1|^2|^3", "symfony/config": "^5.4|^6.0|^7.0", "symfony/console": "^5.4|^6.0|^7.0", @@ -6946,7 +6991,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.4.2" + "source": "https://github.com/symfony/translation/tree/v6.4.4" }, "funding": [ { @@ -6962,7 +7007,7 @@ "type": "tidelift" } ], - "time": "2023-12-18T09:25:29+00:00" + "time": "2024-02-20T13:16:58+00:00" }, { "name": "symfony/translation-contracts", @@ -7044,16 +7089,16 @@ }, { "name": "symfony/uid", - "version": "v6.4.0", + "version": "v6.4.3", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "8092dd1b1a41372110d06374f99ee62f7f0b9a92" + "reference": "1d31267211cc3a2fff32bcfc7c1818dac41b6fc0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/8092dd1b1a41372110d06374f99ee62f7f0b9a92", - "reference": "8092dd1b1a41372110d06374f99ee62f7f0b9a92", + "url": "https://api.github.com/repos/symfony/uid/zipball/1d31267211cc3a2fff32bcfc7c1818dac41b6fc0", + "reference": "1d31267211cc3a2fff32bcfc7c1818dac41b6fc0", "shasum": "" }, "require": { @@ -7098,7 +7143,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v6.4.0" + "source": "https://github.com/symfony/uid/tree/v6.4.3" }, "funding": [ { @@ -7114,20 +7159,20 @@ "type": "tidelift" } ], - "time": "2023-10-31T08:18:17+00:00" + "time": "2024-01-23T14:51:35+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.4.2", + "version": "v6.4.4", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "68d6573ec98715ddcae5a0a85bee3c1c27a4c33f" + "reference": "b439823f04c98b84d4366c79507e9da6230944b1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/68d6573ec98715ddcae5a0a85bee3c1c27a4c33f", - "reference": "68d6573ec98715ddcae5a0a85bee3c1c27a4c33f", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/b439823f04c98b84d4366c79507e9da6230944b1", + "reference": "b439823f04c98b84d4366c79507e9da6230944b1", "shasum": "" }, "require": { @@ -7183,7 +7228,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.4.2" + "source": "https://github.com/symfony/var-dumper/tree/v6.4.4" }, "funding": [ { @@ -7199,7 +7244,7 @@ "type": "tidelift" } ], - "time": "2023-12-28T19:16:56+00:00" + "time": "2024-02-15T11:23:52+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -7722,16 +7767,16 @@ }, { "name": "laravel/pint", - "version": "v1.13.10", + "version": "v1.13.11", "source": { "type": "git", "url": "https://github.com/laravel/pint.git", - "reference": "e2b5060885694ca30ac008c05dc9d47f10ed1abf" + "reference": "60a163c3e7e3346a1dec96d3e6f02e6465452552" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/pint/zipball/e2b5060885694ca30ac008c05dc9d47f10ed1abf", - "reference": "e2b5060885694ca30ac008c05dc9d47f10ed1abf", + "url": "https://api.github.com/repos/laravel/pint/zipball/60a163c3e7e3346a1dec96d3e6f02e6465452552", + "reference": "60a163c3e7e3346a1dec96d3e6f02e6465452552", "shasum": "" }, "require": { @@ -7742,13 +7787,13 @@ "php": "^8.1.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^3.47.1", - "illuminate/view": "^10.41.0", + "friendsofphp/php-cs-fixer": "^3.49.0", + "illuminate/view": "^10.43.0", "larastan/larastan": "^2.8.1", "laravel-zero/framework": "^10.3.0", "mockery/mockery": "^1.6.7", "nunomaduro/termwind": "^1.15.1", - "pestphp/pest": "^2.31.0" + "pestphp/pest": "^2.33.6" }, "bin": [ "builds/pint" @@ -7784,26 +7829,26 @@ "issues": "https://github.com/laravel/pint/issues", "source": "https://github.com/laravel/pint" }, - "time": "2024-01-22T09:04:15+00:00" + "time": "2024-02-13T17:20:13+00:00" }, { "name": "laravel/sail", - "version": "v1.27.2", + "version": "v1.27.4", "source": { "type": "git", "url": "https://github.com/laravel/sail.git", - "reference": "2276a8d9d6cfdcaad98bf67a34331d100149d5b6" + "reference": "3047e1a157fad968cc5f6e620d5cbe5c0867fffd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sail/zipball/2276a8d9d6cfdcaad98bf67a34331d100149d5b6", - "reference": "2276a8d9d6cfdcaad98bf67a34331d100149d5b6", + "url": "https://api.github.com/repos/laravel/sail/zipball/3047e1a157fad968cc5f6e620d5cbe5c0867fffd", + "reference": "3047e1a157fad968cc5f6e620d5cbe5c0867fffd", "shasum": "" }, "require": { - "illuminate/console": "^9.0|^10.0|^11.0", - "illuminate/contracts": "^9.0|^10.0|^11.0", - "illuminate/support": "^9.0|^10.0|^11.0", + "illuminate/console": "^9.52.16|^10.0|^11.0", + "illuminate/contracts": "^9.52.16|^10.0|^11.0", + "illuminate/support": "^9.52.16|^10.0|^11.0", "php": "^8.0", "symfony/yaml": "^6.0|^7.0" }, @@ -7816,9 +7861,6 @@ ], "type": "library", "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - }, "laravel": { "providers": [ "Laravel\\Sail\\SailServiceProvider" @@ -7849,7 +7891,7 @@ "issues": "https://github.com/laravel/sail/issues", "source": "https://github.com/laravel/sail" }, - "time": "2024-01-21T17:13:42+00:00" + "time": "2024-02-08T15:24:21+00:00" }, { "name": "mockery/mockery", @@ -8523,16 +8565,16 @@ }, { "name": "phpunit/phpunit", - "version": "10.5.9", + "version": "10.5.10", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "0bd663704f0165c9e76fe4f06ffa6a1ca727fdbe" + "reference": "50b8e314b6d0dd06521dc31d1abffa73f25f850c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/0bd663704f0165c9e76fe4f06ffa6a1ca727fdbe", - "reference": "0bd663704f0165c9e76fe4f06ffa6a1ca727fdbe", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/50b8e314b6d0dd06521dc31d1abffa73f25f850c", + "reference": "50b8e314b6d0dd06521dc31d1abffa73f25f850c", "shasum": "" }, "require": { @@ -8604,7 +8646,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.9" + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.10" }, "funding": [ { @@ -8620,7 +8662,7 @@ "type": "tidelift" } ], - "time": "2024-01-22T14:35:40+00:00" + "time": "2024-02-04T09:07:51+00:00" }, { "name": "sebastian/cli-parser", @@ -9601,21 +9643,20 @@ }, { "name": "spatie/flare-client-php", - "version": "1.4.3", + "version": "1.4.4", "source": { "type": "git", "url": "https://github.com/spatie/flare-client-php.git", - "reference": "5db2fdd743c3ede33f2a5367d89ec1a7c9c1d1ec" + "reference": "17082e780752d346c2db12ef5d6bee8e835e399c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/5db2fdd743c3ede33f2a5367d89ec1a7c9c1d1ec", - "reference": "5db2fdd743c3ede33f2a5367d89ec1a7c9c1d1ec", + "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/17082e780752d346c2db12ef5d6bee8e835e399c", + "reference": "17082e780752d346c2db12ef5d6bee8e835e399c", "shasum": "" }, "require": { "illuminate/pipeline": "^8.0|^9.0|^10.0|^11.0", - "nesbot/carbon": "^2.62.1", "php": "^8.0", "spatie/backtrace": "^1.5.2", "symfony/http-foundation": "^5.2|^6.0|^7.0", @@ -9659,7 +9700,7 @@ ], "support": { "issues": "https://github.com/spatie/flare-client-php/issues", - "source": "https://github.com/spatie/flare-client-php/tree/1.4.3" + "source": "https://github.com/spatie/flare-client-php/tree/1.4.4" }, "funding": [ { @@ -9667,7 +9708,7 @@ "type": "github" } ], - "time": "2023-10-17T15:54:07+00:00" + "time": "2024-01-31T14:18:45+00:00" }, { "name": "spatie/ignition", @@ -9754,16 +9795,16 @@ }, { "name": "spatie/laravel-ignition", - "version": "2.4.1", + "version": "2.4.2", "source": { "type": "git", "url": "https://github.com/spatie/laravel-ignition.git", - "reference": "005e1e7b1232f3b22d7e7be3f602693efc7dba67" + "reference": "351504f4570e32908839fc5a2dc53bf77d02f85e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/005e1e7b1232f3b22d7e7be3f602693efc7dba67", - "reference": "005e1e7b1232f3b22d7e7be3f602693efc7dba67", + "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/351504f4570e32908839fc5a2dc53bf77d02f85e", + "reference": "351504f4570e32908839fc5a2dc53bf77d02f85e", "shasum": "" }, "require": { @@ -9842,20 +9883,20 @@ "type": "github" } ], - "time": "2024-01-12T13:14:58+00:00" + "time": "2024-02-09T16:08:40+00:00" }, { "name": "symfony/yaml", - "version": "v7.0.0", + "version": "v7.0.3", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "0055b230c408428b9b5cde7c55659555be5c0278" + "reference": "2d4fca631c00700597e9442a0b2451ce234513d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/0055b230c408428b9b5cde7c55659555be5c0278", - "reference": "0055b230c408428b9b5cde7c55659555be5c0278", + "url": "https://api.github.com/repos/symfony/yaml/zipball/2d4fca631c00700597e9442a0b2451ce234513d3", + "reference": "2d4fca631c00700597e9442a0b2451ce234513d3", "shasum": "" }, "require": { @@ -9897,7 +9938,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v7.0.0" + "source": "https://github.com/symfony/yaml/tree/v7.0.3" }, "funding": [ { @@ -9913,7 +9954,7 @@ "type": "tidelift" } ], - "time": "2023-11-07T10:26:03+00:00" + "time": "2024-01-23T15:02:46+00:00" }, { "name": "theseer/tokenizer", diff --git a/config/auth0.php b/config/auth0.php index 7a5664f..3795939 100644 --- a/config/auth0.php +++ b/config/auth0.php @@ -37,6 +37,8 @@ return Configuration::VERSION_2 + [ Configuration::CONFIG_CLIENT_ASSERTION_SIGNING_KEY => Configuration::get(Configuration::CONFIG_CLIENT_ASSERTION_SIGNING_KEY), Configuration::CONFIG_CLIENT_ASSERTION_SIGNING_ALGORITHM => Configuration::get(Configuration::CONFIG_CLIENT_ASSERTION_SIGNING_ALGORITHM), Configuration::CONFIG_PUSHED_AUTHORIZATION_REQUEST => Configuration::get(Configuration::CONFIG_PUSHED_AUTHORIZATION_REQUEST), + Configuration::CONFIG_BACKCHANNEL_LOGOUT_CACHE => Configuration::get(Configuration::CONFIG_BACKCHANNEL_LOGOUT_CACHE), + Configuration::CONFIG_BACKCHANNEL_LOGOUT_EXPIRES => Configuration::get(Configuration::CONFIG_BACKCHANNEL_LOGOUT_EXPIRES), ], 'api' => [ @@ -53,4 +55,13 @@ return Configuration::VERSION_2 + [ Configuration::CONFIG_TRANSIENT_STORAGE_ID => Configuration::get(Configuration::CONFIG_TRANSIENT_STORAGE_ID), ], ], + + 'routes' => [ + Configuration::CONFIG_ROUTE_INDEX => Configuration::get(Configuration::CONFIG_ROUTE_INDEX, '/'), + Configuration::CONFIG_ROUTE_CALLBACK => Configuration::get(Configuration::CONFIG_ROUTE_CALLBACK, '/callback'), + Configuration::CONFIG_ROUTE_LOGIN => Configuration::get(Configuration::CONFIG_ROUTE_LOGIN, '/login'), + Configuration::CONFIG_ROUTE_AFTER_LOGIN => Configuration::get(Configuration::CONFIG_ROUTE_AFTER_LOGIN, '/'), + Configuration::CONFIG_ROUTE_LOGOUT => Configuration::get(Configuration::CONFIG_ROUTE_LOGOUT, '/logout'), + Configuration::CONFIG_ROUTE_AFTER_LOGOUT => Configuration::get(Configuration::CONFIG_ROUTE_AFTER_LOGOUT, '/'), + ], ]; diff --git a/config/services.php b/config/services.php index 0acb16e..21e97c7 100644 --- a/config/services.php +++ b/config/services.php @@ -17,6 +17,5 @@ return [ 'lastfm' => [ 'key' => env('LASTFM_KEY'), 'user' => env('LASTFM_USER'), - 'toptracks' => env('LASTFM_TOP_TRACKS') ] ]; diff --git a/database/factories/BookmarkCategoryFactory.php b/database/factories/BookmarkCategoryFactory.php new file mode 100644 index 0000000..ca49ce5 --- /dev/null +++ b/database/factories/BookmarkCategoryFactory.php @@ -0,0 +1,23 @@ +<?php + +namespace Database\Factories; + +use Illuminate\Database\Eloquent\Factories\Factory; + +/** + * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\BookmarkCategory> + */ +class BookmarkCategoryFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array<string, mixed> + */ + public function definition(): array + { + return [ + 'name' => $this->faker->word, + ]; + } +} diff --git a/database/factories/BookmarkSiteFactory.php b/database/factories/BookmarkSiteFactory.php new file mode 100644 index 0000000..c77c011 --- /dev/null +++ b/database/factories/BookmarkSiteFactory.php @@ -0,0 +1,27 @@ +<?php + +namespace Database\Factories; + +use Illuminate\Database\Eloquent\Factories\Factory; +use App\Models\BookmarkCategory; + +/** + * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\BookmarkSite> + */ +class BookmarkSiteFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array<string, mixed> + */ + public function definition(): array + { + return [ + 'name' => $this->faker->name, + 'description' => $this->faker->sentence, + 'url' => $this->faker->url, + 'category' => BookmarkCategory::factory(), + ]; + } +} diff --git a/database/migrations/2024_01_31_204815_create_guestbook__bans_table.php b/database/migrations/2024_01_31_204815_create_guestbook__bans_table.php deleted file mode 100644 index 6f0a959..0000000 --- a/database/migrations/2024_01_31_204815_create_guestbook__bans_table.php +++ /dev/null @@ -1,29 +0,0 @@ -<?php - -use Illuminate\Database\Migrations\Migration; -use Illuminate\Database\Schema\Blueprint; -use Illuminate\Support\Facades\Schema; - -return new class extends Migration -{ - /** - * Run the migrations. - */ - public function up(): void - { - Schema::create('guestbook__bans', function (Blueprint $table) { - $table->increments('id'); - $table->string('ip_address', 40); - $table->string('reason', 50); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('guestbook__bans'); - } -}; diff --git a/database/migrations/2024_01_31_210227_populate_bookmark__categories_table.php b/database/migrations/2024_01_31_210227_populate_bookmark__categories_table.php deleted file mode 100644 index fb81e1f..0000000 --- a/database/migrations/2024_01_31_210227_populate_bookmark__categories_table.php +++ /dev/null @@ -1,34 +0,0 @@ -<?php - -use Illuminate\Database\Migrations\Migration; -use Illuminate\Database\Schema\Blueprint; -use Illuminate\Support\Facades\DB; -use Illuminate\Support\Facades\Schema; - -return new class extends Migration -{ - /** - * Run the migrations. - */ - public function up(): void - { - // Check if table exists and is empty - if (Schema::hasTable('bookmark__categories') && DB::table('bookmark__categories')->count() == 0) { - // Insert placeholder categories - DB::table('bookmark__categories')->insert([ - ['name' => 'Friends\' Websites', 'priority' => 1], - ['name' => 'Cool Projects', 'priority' => 2], - ['name' => 'Other Cool Sites', 'priority' => 3], - ['name' => 'Miscellaneous Resources', 'priority' => 4] - ]); - } - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - // - } -}; diff --git a/database/migrations/2024_01_31_204730_create_bookmark__categories_table.php b/database/migrations/2024_02_13_230402_create_bookmark__categories_table.php index 68bf949..bb1799b 100644 --- a/database/migrations/2024_01_31_204730_create_bookmark__categories_table.php +++ b/database/migrations/2024_02_13_230402_create_bookmark__categories_table.php @@ -12,9 +12,9 @@ return new class extends Migration public function up(): void { Schema::create('bookmark__categories', function (Blueprint $table) { - $table->increments('id'); + $table->id(); $table->string('name'); - $table->float('priority'); + $table->unsignedBigInteger('priority')->nullable(); $table->timestamps(); }); } diff --git a/database/migrations/2024_01_31_204742_create_bookmark__sites_table.php b/database/migrations/2024_02_13_230457_create_bookmark__sites_table.php index 775c6bb..f016f43 100644 --- a/database/migrations/2024_01_31_204742_create_bookmark__sites_table.php +++ b/database/migrations/2024_02_13_230457_create_bookmark__sites_table.php @@ -12,13 +12,15 @@ return new class extends Migration public function up(): void { Schema::create('bookmark__sites', function (Blueprint $table) { - $table->increments('id'); - $table->string('name', 50); - $table->string('description', 150); - $table->string('url', 100); - $table->float('priority'); - $table->integer('category_id')->unsigned(); - $table->foreign('category_id')->references('id')->on('bookmark__categories'); + $table->id(); + $table->string('name'); + $table->text('description')->nullable(); + $table->string('url'); + $table->unsignedBigInteger('category'); + $table->foreign('category') + ->references('id') + ->on('bookmark__categories') + ->onDelete('cascade'); $table->timestamps(); }); } @@ -28,6 +30,6 @@ return new class extends Migration */ public function down(): void { - Schema::dropIfExists('bookmark__sites'); + Schema::dropIfExists('bookmarks'); } }; diff --git a/database/migrations/2024_01_31_204820_create_guestbook__entries_table.php b/database/migrations/2024_02_25_151527_create_guestbook__entries_table.php index baaf862..f1b2a11 100644 --- a/database/migrations/2024_01_31_204820_create_guestbook__entries_table.php +++ b/database/migrations/2024_02_25_151527_create_guestbook__entries_table.php @@ -12,13 +12,12 @@ return new class extends Migration public function up(): void { Schema::create('guestbook__entries', function (Blueprint $table) { - $table->increments('id'); - $table->string('name', 255); - $table->bigInteger('timestamp'); - $table->string('ip_address', 40); - $table->string('agent', 2048)->default('Agent unavailable'); - $table->boolean('site_owner')->default(0); - $table->string('message', 512); + $table->id(); + $table->string('name'); + $table->string('ip'); + $table->string('agent'); + $table->longText('message'); + $table->boolean('admin'); $table->timestamps(); }); } diff --git a/database/seeders/BookmarkCategoriesTableSeeder.php b/database/seeders/BookmarkCategoriesTableSeeder.php new file mode 100644 index 0000000..5c8ea2f --- /dev/null +++ b/database/seeders/BookmarkCategoriesTableSeeder.php @@ -0,0 +1,30 @@ +<?php + +namespace Database\Seeders; + +use App\Models\BookmarkCategory; +use App\Models\BookmarkSite; +use Illuminate\Database\Seeder; + +class BookmarkCategoriesTableSeeder extends Seeder +{ + /** + * Run the database seeds. + */ + public function run(): void { +// BookmarkCategory::factory()->count(5)->create()->each(function ($category) { +// $category->sites()->saveMany(BookmarkSite::factory()->count(3)->make()); +// }); + $category = new BookmarkCategory([ + 'name' => 'cool people', + ]); + $category->save(); + $site = new BookmarkSite([ + 'name' => 'campos', + 'description' => 'Cool brazilian dude, does programming and stuff', + 'url' => 'https://campos02.me/', + 'category' => 1, + ]); + $site->save(); + } +} diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php deleted file mode 100644 index a9f4519..0000000 --- a/database/seeders/DatabaseSeeder.php +++ /dev/null @@ -1,22 +0,0 @@ -<?php - -namespace Database\Seeders; - -// use Illuminate\Database\Console\Seeds\WithoutModelEvents; -use Illuminate\Database\Seeder; - -class DatabaseSeeder extends Seeder -{ - /** - * Seed the application's database. - */ - public function run(): void - { - // \App\Models\User::factory(10)->create(); - - // \App\Models\User::factory()->create([ - // 'name' => 'Test User', - // 'email' => 'test@example.com', - // ]); - } -} diff --git a/public/css/master.css b/public/css/master.css index 4b4fbc3..1b8683d 100644 --- a/public/css/master.css +++ b/public/css/master.css @@ -111,6 +111,10 @@ pre { grid-row-gap: 0; } +.nav-wrapper div:nth-child(2) { + text-align: right; +} + .theme-selector label { font-weight: bold; } @@ -226,7 +230,7 @@ table.computers td ul { padding-left: 20px; } -table.computers section-title { +table.computers .section-title { text-decoration: underline; font-style: italic; font-weight: bold; @@ -272,34 +276,46 @@ a { text-decoration: underline dotted; } -table.gb-entry-form tr td { +table.form tr td { border: none; } -table.gb-entry-form tr td label { +table.form tr td label { padding-right: 5px; } -table.gb-entry-form tr td span.text-danger { +table.form tr td span.text-danger { padding-left: 5px; color: var(--warning); } -table.gb-entry-form tr td textarea, -table.gb-entry-form tr td input, -table.gb-entry-form tr td button{ - margin-bottom: 5px; - margin-left: 10px; +input.file { + border: 0 !important; +} + +table.form tr td textarea, +table.form tr td input, +table.form tr td button, +form.import input::file-selector-button, +form.import button { background-color: var(--background); border: var(--foreground) solid 1px; } -table.gb-entry-form tr td button { +table.form label { + margin: 5px 0; +} + +form.import button, +form.import input::file-selector-button, +table.form tr td button { color: var(--foreground); background-color: var(--background-secondary); } -table.gb-entry-form tr td button:hover { +form.import button:hover, +form.import input::file-selector-button:hover, +table.form tr td button:hover { color: var(--background); background-color: var(--foreground); } @@ -318,7 +334,7 @@ table.gb-entry-form-container tr td ul { margin: 0; } -table.gb-entry-form tbody tr td textarea { +table.form tbody tr td textarea { width: 210px; } @@ -490,20 +506,151 @@ label[for="scheme-selector"] { } -.music-top10 td { +.music-top10 td, +.music-top10 th { border: none; border-left: 1px dotted var(--foreground); padding: 2px 5px } -.music-top10 tr:nth-child(2) td { +.music-top10 tr:nth-child(1) th { border-bottom: 1px dotted var(--foreground); } -.music-top10 tr:nth-child(3) td { +.music-top10 tr:nth-child(2) td { padding-top: 5px; } -.music-top10 td:first-child { +.music-top10 td:first-child, +.music-top10 th:first-child { border: none; } + +.music-top10 tr th:first-child { + text-align: right; +} + +.music-top10 td { + white-space: nowrap; text-overflow:ellipsis; overflow: hidden; +} + +.music-top10 tr td:first-child { + text-align: right; +} + +.music-top10 tr td:nth-child(2), +.music-top10 tr td:nth-child(3) { + width: 50%; +} + +.current-track { + width: 100%; +} + +.current-track h2 { + margin: 0; +} + +.info-section ul { + list-style-position: inside; + list-style-type: none; + padding-left: 0; + margin: 0; +} + +.info-section ul li:before { + content: "◆ "; +} + +.info-section h2 { + margin: 0; +} + +.info-section p { + margin-top: 10px; +} + +.contact-section { + display: grid; + grid-template-rows: 1fr 1fr; +} + +.banner { + padding: 5px; + margin-top: 10px; + display: grid; + grid-template-columns: repeat(2, 1fr); + grid-template-rows: 1fr; + grid-column-gap: 0; + grid-row-gap: 0; +} + +.banner div:nth-child(1) { + text-align: left; +} + +.banner div:nth-child(2) { + text-align: right; +} + +.red-banner { + border: 3px solid var(--foreground); + background-color: var(--background-secondary); +} + +.info-admin td, +.info-admin th { + border: 1px solid var(--foreground); + padding: 5px; +} + +.info-admin th { + background-color: var(--background-secondary); +} + +.info-admin th.blank { + border: none; + background-color: var(--background); +} + +.info-admin button { + border: 1px solid var(--foreground); + background-color: var(--background); + color: var(--foreground); +} + +.info-admin button:hover { + background-color: var(--foreground); + color: var(--background); +} + +.info-admin button:active { + background-color: var(--background-secondary); + color: var(--foreground); +} + +.info-admin-section h2 { + margin-bottom: 5px; +} + +.fullwidth { + width: 100%; +} + +.fullwidth td:last-child { + width: 0; +} + +.guestbook-message { + text-wrap: wrap; + width: 100%; +} + +td.diagonal-line { + background: linear-gradient(to right bottom, var(--background) 0%,var(--background) 49.9%,var(--foreground) 50%,var(--foreground) 51%,var(--background) 51.1%,var(--background) 100%); +} + +form.import h2 { + margin: 10px 0 5px 0; +} + diff --git a/public/images/icons/home2/user-desktop.png b/public/images/icons/home2/user-desktop.png Binary files differnew file mode 100644 index 0000000..af9715f --- /dev/null +++ b/public/images/icons/home2/user-desktop.png diff --git a/public/images/icons/nav/admin.png b/public/images/icons/nav/admin.png Binary files differnew file mode 100644 index 0000000..153a405 --- /dev/null +++ b/public/images/icons/nav/admin.png diff --git a/public/images/icons/nav/home2.png b/public/images/icons/nav/home2.png Binary files differnew file mode 100644 index 0000000..76f6da7 --- /dev/null +++ b/public/images/icons/nav/home2.png diff --git a/public/js/neverSaid.js b/public/js/neverSaid.js index 5b58d60..ac0e6ae 100644 --- a/public/js/neverSaid.js +++ b/public/js/neverSaid.js @@ -1,31 +1,31 @@ // Define an array of strings const neverSaid = [ - "<td style=\"width: 105px\"><strong>ASM:</strong></td> <td>The Director liked all the props we got today.</td>", - "<td style=\"width: 105px\"><strong>PM:</strong></td> <td>Ah ha, a revolve. Terrific.</td>", - "<td style=\"width: 105px\"><strong>Chippie:</strong></td> <td>I don't know, let's look at the ground plan.</td>", - "<td style=\"width: 105px\"><strong>Set Designer:</strong></td> <td>Well, let's just have whatever is cheaper.</td>", - "<td style=\"width: 105px\"><strong>Sound:</strong></td> <td>Better turn that down a bit. We don't want to deafen them.</td>", - "<td style=\"width: 105px\"><strong>Director:</strong></td> <td>Sorry, my mistake.</td>", - "<td style=\"width: 105px\"><strong>Electrics:</strong></td> <td>This equipment is more complicated than we need.</td>", - "<td style=\"width: 105px\"><strong>Performer:</strong></td> <td>I really think my big scene should be cut.</td>", - "<td style=\"width: 105px\"><strong>SM:</strong></td> <td>Can we doo that scene change again please?", - "<td style=\"width: 105px\"><strong>LX designer:</strong></td> <td>Bit more light from those big chaps at the side. Yes that's right, the ones on stalks whatever they are called.</td>", - "<td style=\"width: 105px\"><strong>Electrics:</strong></td> <td>All the equipment works perfectly.</td>", - "<td style=\"width: 105px\"><strong>Musicians:</strong></td> <td>So what if that's the end of a call. Let's just finish this bit off.</td>", - "<td style=\"width: 105px\"><strong>Wardrobe:</strong></td> <td>Now, when exactly is the first dress rehearsal?", - "<td style=\"width: 105px\"><strong>Workshop:</strong></td> <td>I don't want anyone to know, but if you insist then yes, I admit it, I have just done an all-nighter.</td>", - "<td style=\"width: 105px\"><strong>Performer:</strong></td> <td>This costume is so comfortable.</td>", - "<td style=\"width: 105px\"><strong>Admin:</strong></td> <td>The level of overtime payments here are simply unacceptable. Our backstage staff deserve better.</td>", - "<td style=\"width: 105px\"><strong>Box Office:</strong></td> <td>Comps? No problem.</td>", - "<td style=\"width: 105px\"><strong>Set Designer:</strong></td> <td>You're right, it looks dreadful.</td>", - "<td style=\"width: 105px\"><strong>Flyman:</strong></td> <td>No, my lips are sealed. What I may or may not have seen remains a secret.</td>", - "<td style=\"width: 105px\"><strong>Electrics:</strong></td> <td>That had nothing to do with the computer, it was my fault.</td>", - "<td style=\"width: 105px\"><strong>Crew:</strong></td> <td>No, no, I'm sure that's our job.</td>", - "<td style=\"width: 105px\"><strong>SMgt:</strong></td> <td>Thanks, but I don't drink", - "<td style=\"width: 105px\"><strong>Performer:</strong></td> <td>Let me stand down here with my back to the audience.</td>", - "<td style=\"width: 105px\"><strong>Chippie:</strong></td> <td>I can't really manage those big fast power tools myself.</td>", - "<td style=\"width: 105px\"><strong>Chippie:</strong></td> <td>I prefer to use these little hand drills.</td>", - "<td style=\"width: 105px\"><strong>All:</strong></td> <td>Let's go and ask the Production Manager. He'll know.</td>" + "<strong>ASM:</strong> The Director liked all the props we got today.", + "<strong>PM:</strong> Ah ha, a revolve. Terrific.", + "<strong>Chippie:</strong> I don't know, let's look at the ground plan.", + "<strong>Set Designer:</strong> Well, let's just have whatever is cheaper.", + "<strong>Sound:</strong> Better turn that down a bit. We don't want to deafen them.", + "<strong>Director:</strong> Sorry, my mistake.", + "<strong>Electrics:</strong> This equipment is more complicated than we need.", + "<strong>Performer:</strong> I really think my big scene should be cut.", + "<strong>SM:</strong> Can we do that scene change again please?", + "<strong>LX designer:</strong> Bit more light from those big chaps at the side. Yes that's right, the ones on stalks whatever they are called.", + "<strong>Electrics:</strong> All the equipment works perfectly.", + "<strong>Musicians:</strong> So what if that's the end of a call. Let's just finish this bit off.", + "<strong>Wardrobe:</strong> Now, when exactly is the first dress rehearsal?", + "<strong>Workshop:</strong> I don't want anyone to know, but if you insist then yes, I admit it, I have just done an all-nighter.", + "<strong>Performer:</strong> This costume is so comfortable.", + "<strong>Admin:</strong> The level of overtime payments here are simply unacceptable. Our backstage staff deserve better.", + "<strong>Box Office:</strong> Comps? No problem.", + "<strong>Set Designer:</strong> You're right, it looks dreadful.", + "<strong>Flyman:</strong> No, my lips are sealed. What I may or may not have seen remains a secret.", + "<strong>Electrics:</strong> That had nothing to do with the computer, it was my fault.", + "<strong>Crew:</strong> No, no, I'm sure that's our job.", + "<strong>SMgt:</strong> Thanks, but I don't drink", + "<strong>Performer:</strong> Let me stand down here with my back to the audience.", + "<strong>Chippie:</strong> I can't really manage those big fast power tools myself.", + "<strong>Chippie:</strong> I prefer to use these little hand drills.", + "<strong>All:</strong> Let's go and ask the Production Manager. He'll know." ] // Generate a random index into the array diff --git a/public/robots.txt b/public/robots.txt index e65f07c..582552d 100644 --- a/public/robots.txt +++ b/public/robots.txt @@ -3,3 +3,19 @@ Disallow: /admin Disallow: /login Disallow: /js Disallow: /css + +User-Agent: GPTBot +Disallow: / + +User-Agent: ChatGPT-User +Disallow: / + +User-Agent: Google-Extended +Disallow: / + +User-Agent: CCBot +Disallow: / + +User-Agent: PerplexityBot +Disallow: / + diff --git a/resources/js/neverSaid.js b/resources/js/neverSaid.js new file mode 100644 index 0000000..5b58d60 --- /dev/null +++ b/resources/js/neverSaid.js @@ -0,0 +1,35 @@ +// Define an array of strings +const neverSaid = [ + "<td style=\"width: 105px\"><strong>ASM:</strong></td> <td>The Director liked all the props we got today.</td>", + "<td style=\"width: 105px\"><strong>PM:</strong></td> <td>Ah ha, a revolve. Terrific.</td>", + "<td style=\"width: 105px\"><strong>Chippie:</strong></td> <td>I don't know, let's look at the ground plan.</td>", + "<td style=\"width: 105px\"><strong>Set Designer:</strong></td> <td>Well, let's just have whatever is cheaper.</td>", + "<td style=\"width: 105px\"><strong>Sound:</strong></td> <td>Better turn that down a bit. We don't want to deafen them.</td>", + "<td style=\"width: 105px\"><strong>Director:</strong></td> <td>Sorry, my mistake.</td>", + "<td style=\"width: 105px\"><strong>Electrics:</strong></td> <td>This equipment is more complicated than we need.</td>", + "<td style=\"width: 105px\"><strong>Performer:</strong></td> <td>I really think my big scene should be cut.</td>", + "<td style=\"width: 105px\"><strong>SM:</strong></td> <td>Can we doo that scene change again please?", + "<td style=\"width: 105px\"><strong>LX designer:</strong></td> <td>Bit more light from those big chaps at the side. Yes that's right, the ones on stalks whatever they are called.</td>", + "<td style=\"width: 105px\"><strong>Electrics:</strong></td> <td>All the equipment works perfectly.</td>", + "<td style=\"width: 105px\"><strong>Musicians:</strong></td> <td>So what if that's the end of a call. Let's just finish this bit off.</td>", + "<td style=\"width: 105px\"><strong>Wardrobe:</strong></td> <td>Now, when exactly is the first dress rehearsal?", + "<td style=\"width: 105px\"><strong>Workshop:</strong></td> <td>I don't want anyone to know, but if you insist then yes, I admit it, I have just done an all-nighter.</td>", + "<td style=\"width: 105px\"><strong>Performer:</strong></td> <td>This costume is so comfortable.</td>", + "<td style=\"width: 105px\"><strong>Admin:</strong></td> <td>The level of overtime payments here are simply unacceptable. Our backstage staff deserve better.</td>", + "<td style=\"width: 105px\"><strong>Box Office:</strong></td> <td>Comps? No problem.</td>", + "<td style=\"width: 105px\"><strong>Set Designer:</strong></td> <td>You're right, it looks dreadful.</td>", + "<td style=\"width: 105px\"><strong>Flyman:</strong></td> <td>No, my lips are sealed. What I may or may not have seen remains a secret.</td>", + "<td style=\"width: 105px\"><strong>Electrics:</strong></td> <td>That had nothing to do with the computer, it was my fault.</td>", + "<td style=\"width: 105px\"><strong>Crew:</strong></td> <td>No, no, I'm sure that's our job.</td>", + "<td style=\"width: 105px\"><strong>SMgt:</strong></td> <td>Thanks, but I don't drink", + "<td style=\"width: 105px\"><strong>Performer:</strong></td> <td>Let me stand down here with my back to the audience.</td>", + "<td style=\"width: 105px\"><strong>Chippie:</strong></td> <td>I can't really manage those big fast power tools myself.</td>", + "<td style=\"width: 105px\"><strong>Chippie:</strong></td> <td>I prefer to use these little hand drills.</td>", + "<td style=\"width: 105px\"><strong>All:</strong></td> <td>Let's go and ask the Production Manager. He'll know.</td>" +] + +// Generate a random index into the array +const randomIndex = Math.floor(Math.random() * neverSaid.length); + +// Use document.write to output the random string +document.write(neverSaid[randomIndex]); diff --git a/resources/js/schemeSwap.js b/resources/js/schemeSwap.js new file mode 100644 index 0000000..3baa09b --- /dev/null +++ b/resources/js/schemeSwap.js @@ -0,0 +1,70 @@ +/** + * Retrieves a cookies value + * @param {string} cname Cookie name + * @returns {string} Cookie value + */ +function getCookie(cname) { + let name = cname + "="; + let decodedCookie = decodeURIComponent(document.cookie); + let ca = decodedCookie.split(';'); + for(let i = 0; i <ca.length; i++) { + let c = ca[i]; + while (c.charAt(0) === ' ') { + c = c.substring(1); + } + if (c.indexOf(name) === 0) { + return c.substring(name.length, c.length); + } + } + return ""; +} + +/** + * Sets/creates a cookie + * @param {string} cname Cookie name + * @param {string} cvalue Cookie value + * @param {number} exdays Cookie lifespan (days) + */ +function setCookie(cname, cvalue, exdays) { + const d = new Date(); + d.setTime(d.getTime() + (exdays*24*60*60*1000)); + let expires = "expires="+ d.toUTCString(); + document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/;SameSite=Strict;Domain=.diskfloppy.me"; +} + +/** + * Checks if a cookie exists + * @param {string} cname Cookie name + * @returns {boolean} If cookie exists or not + */ +function cookieExists(cname) { + const cvalue = getCookie(cname); + return cvalue !== ""; +} + +/** + * Swaps the colorscheme + * @param {string} scheme Color scheme ID + */ +function swapScheme(scheme) { + setCookie("colorscheme", scheme, 90); + document.getElementById("css-colorscheme").href = `/css/colorschemes/${scheme}.css`; + console.log(`Set colorscheme to ${getCookie("colorscheme")}`) +} + +function setSchemeSelector() { + if (!cookieExists("colorscheme")) { + setCookie("colorscheme", "catppuccin-macchiato", 90); + } else { + const scheme = getCookie("colorscheme"); + const scheme_selector = document.getElementById("scheme-selector"); + if (scheme && scheme_selector) { + for (let option of scheme_selector.options) { + if (option.value === scheme) { + option.selected = true; + break; + } + } + } + } +} diff --git a/resources/views/admin/bookmarks.blade.php b/resources/views/admin/bookmarks.blade.php new file mode 100644 index 0000000..f06539c --- /dev/null +++ b/resources/views/admin/bookmarks.blade.php @@ -0,0 +1,28 @@ +<x-layout> + <x-slot:title>Admin | Bookmarks</x-slot:title> + @foreach($categories as $category) + <div class="info-section info-admin-section"> + <h2>{{ $category->name }}</h2> + <table class="info-admin"> + <tr> + <th>ID</th> + <th>Name</th> + <th>Description</th> + <th>URL</th> + <th>Priority</th> + <th class="blank"></th> + </tr> + @foreach($category->sites as $site) + <tr> + <td>{{ $site->id }}</td> + <td>{{ $site->name }}</td> + <td>{{ $site->description }}</td> + <td>{{ $site->url }}</td> + <td>{{ $site->priority }}</td> + <td><a href="?action=delete&id={{ $site->id }}"><button>Delete</button></a></td> + </tr> + @endforeach + </table> + </div> + @endforeach +</x-layout> diff --git a/resources/views/admin/guestbook.blade.php b/resources/views/admin/guestbook.blade.php new file mode 100644 index 0000000..1f5dab3 --- /dev/null +++ b/resources/views/admin/guestbook.blade.php @@ -0,0 +1,32 @@ +<x-layout> + <x-slot:title>Admin | Guestbook</x-slot:title> + <div class="info-section"> + <h2>Statistics</h2> + <hr> + <strong>Unique IP addresses:</strong> {{ $guestbook_unique_addr }}<br> + <strong>Entries:</strong> {{ $guestbook_entry_count }} + </div> + <br> + <div class="info-section"> + <h2>Entries</h2> + <hr> + <table class="info-admin fullwidth"> + <tr> + <th>ID</th> + <th>Name</th> + <th>IP Address</th> + <th>Message</th> + <th class="blank"></th> + </tr> + @foreach ($entries as $entry) + <tr> + <td>{{ $entry->id }}</td> + <td>{{ $entry->name }}</td> + <td>{{ $entry->ip }}</td> + <td>{{ $entry->message }}</td> + <td><a href="?action=delete&id={{ $entry->id }}"><button>Delete</button></a></td> + </tr> + @endforeach + </table> + </div> +</x-layout> diff --git a/resources/views/admin/import-success.blade.php b/resources/views/admin/import-success.blade.php new file mode 100644 index 0000000..f6d5eb3 --- /dev/null +++ b/resources/views/admin/import-success.blade.php @@ -0,0 +1,12 @@ +<x-layout> + <x-slot:title>Admin | Import</x-slot:title> + <div class="info-section"> + <h2>Imported data</h2> + <hr> + <ul> + @foreach($tables as $name => $data) + <li><strong>{{ ucwords(str_replace('__', ' ', $name)) }}:</strong> {{ $data['count'] }} record(s)</li> + @endforeach + </ul> + </div> +</x-layout> diff --git a/resources/views/admin/import.blade.php b/resources/views/admin/import.blade.php new file mode 100644 index 0000000..e663724 --- /dev/null +++ b/resources/views/admin/import.blade.php @@ -0,0 +1,18 @@ +<x-layout> + <x-slot:title>Admin | Import</x-slot:title> + <form class="import" action="{{ route('admin.import.submit') }}" method="post" enctype="multipart/form-data"> + @csrf + <label for="data_file"><strong>File:</strong></label> + <input class="file" type="file" name="data_file" accept=".json"><br> + <h2>What to import:</h2> + <input type="checkbox" name="guestbook__entries" checked> + <label for="guestbook__entries">Guestbook Entries</label><br> + <input type="checkbox" name="guestbook__bans" checked> + <label for="guestbook__bans">Guestbook Bans</label><br> + <input type="checkbox" name="guestbook__entries" checked> + <label for="bookmark__categories">Bookmark Categories</label><br> + <input type="checkbox" name="guestbook__entries" checked> + <label for="bookmark_sites">Bookmark Sites</label><br> + <button type="submit">Import</button> + </form> +</x-layout> diff --git a/resources/views/bookmarks.blade.php b/resources/views/bookmarks.blade.php new file mode 100644 index 0000000..9cf6d77 --- /dev/null +++ b/resources/views/bookmarks.blade.php @@ -0,0 +1,18 @@ +<x-layout> + <x-slot:title>Bookmarks</x-slot:title> + @foreach($categories as $category) + <table class="info-table" role="presentation"> + <caption> + <h2>{{ $category->name }}</h2> + <hr> + </caption> + <tbody> + @foreach($category->sites as $site) + <tr> + <td><a href="{{ $site->url }}">{{ $site->name }}</a> - {{ $site->description }}</td> + </tr> + @endforeach + </tbody> + </table> + @endforeach +</x-layout> diff --git a/resources/views/pages/calculators.blade.php b/resources/views/calculators.blade.php index 5d629ed..5d629ed 100644 --- a/resources/views/pages/calculators.blade.php +++ b/resources/views/calculators.blade.php diff --git a/resources/views/components/current-track.blade.php b/resources/views/components/current-track.blade.php new file mode 100644 index 0000000..d42ad3b --- /dev/null +++ b/resources/views/components/current-track.blade.php @@ -0,0 +1,4 @@ +<div class="info-table current-track"> + <h2>Last/Current Track:</h2> + <a href="{{ $track["url"] }}">{{ $track["title"] }} • {{ $track["artist"] }}</a><br> +</div> diff --git a/resources/views/components/layout.blade.php b/resources/views/components/layout.blade.php new file mode 100644 index 0000000..2f79318 --- /dev/null +++ b/resources/views/components/layout.blade.php @@ -0,0 +1,113 @@ +@php // Get colorscheme from cookie and apply immediately + $colorscheme = request()->cookie('colorscheme', 'catppuccin-macchiato'); +@endphp +<!DOCTYPE html> +<html lang="en"> +<head> + <!-- Global --> + <meta charset="utf-8"> + <meta property="og:type" content="website"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta name="theme-color" content="#333333"> + <link rel="stylesheet" href="{{ asset("/css/colorschemes/$colorscheme.css") }}" id="css-colorscheme"/> + <link rel="stylesheet" href="{{ asset('/css/master.css') }}"/> + <link rel="icon" type="image/png" href="{{ asset('/favicon-32x32.png') }}" sizes="32x32"/> + <link rel="icon" type="image/png" href="{{ asset('/favicon-16x16.png') }}" sizes="16x16"/> + <script src="{{ asset('/js/schemeSwap.js') }}"></script> + {!! (intval(date('n')) == 12) ? '<script src="/js/christmas/snow.js"></script>' : '' !!} + + <!-- Page-specific --> + <title>{{ $title ?? 'Unknown' }} - diskfloppy.me</title> + <meta property="og:title" content="diskfloppy.me | {{ $title }}"> + <meta property="og:image" content="/favicon-128x128.png"> +</head> +<body onload="setSchemeSelector()"> +<div class="page"> + <div id="header" class="header"> + @if (auth()->check()) + <div class="banner red-banner"> + <div> + <a href="/admin/guestbook">Guestbook</a> | + <a href="/admin/bookmarks">Bookmarks</a> | + <a href="/admin/import">Import</a> + </div> + <div><strong>Logged in as:</strong> {{ auth()->user()->name }} (<a href="/logout">logout</a>)</div> + </div> + @endif + <x-navbar title="{{ $title }}"/> + <hr> + </div> <!-- header --> + <div id="content" class="content" role="main"> + {{ $slot }} + </div> <!-- content --> + <div id="footer" class="footer"> + <hr> + <div class="footer" role="contentinfo"> + <a href="https://dimden.dev/" class="button"> + <img src="https://dimden.dev/services/images/88x31.gif" width="88" height="31" + class="pixel" alt="dimden.dev"> + </a> + <a href="https://www.linux.org/" class="button"> + <img src="{{ URL::asset('images/buttons/linuxnow.gif') }}" width="88" + class="pixel" height="31" alt="Linux NOW!"> + </a> + <a href="https://www.vim.org/" class="button"> + <img src="{{ URL::asset('images/buttons/vim.gif') }}" width="88" height="31" + class="pixel" alt="vim"> + </a> + <a href="https://wave.webaim.org/" class="button"> + <img src="{{ URL::asset('images/buttons/evaluatedWAVE.png') }}" width="88" height="31" + class="pixel" alt="Evaluated to be accessible!"> + </a> + <a href="https://jigsaw.w3.org/css-validator/check/referer" class="button"> + <img src="{{ URL::asset('images/buttons/vcss-blue.gif') }}" width="88" height="31" + class="pixel" alt="Valid CSS!"> + </a> + <a href="https://wiby.me/" class="button"> + <img src="{{ URL::asset('images/buttons/wiby.gif') }}" width="88" height="31" + class="pixel" alt="Wiby - Search Engine for the Classic Web"> + </a><br> + This site is best viewed at 1024x768 with 16-bit color or better<br> + © floppydisk 2021-{{ date('Y') }}, v{{ config('app.version') }} <a + href="https://github.com/floppydisk05/diskfloppy.me">Source</a>, + Served by {{ gethostname() }}<br> + <label for="scheme-selector">Color Scheme:</label> + <select onchange="swapScheme(this.value)" id="scheme-selector"> + <optgroup label="Misc"> + <option value="c64">C64</option> + </optgroup> + <optgroup label="Light"> + <option value="catppuccin-latte">Catppuccin Latte</option> + <option value="gruvbox">Gruvbox</option> + <option value="man-page">Man Page</option> + <option value="papercolor-light">Papercolor Light</option> + <option value="rose-pine-dawn">Rosé Pine Dawn</option> + <option value="solarized-light">Solarized Light</option> + <option value="terminal-basic">Terminal Basic</option> + </optgroup> + <optgroup label="Dark"> + <option value="catppuccin-frappe">Catppuccin Frappé</option> + <option value="catppuccin-macchiato" selected="selected">Catppuccin Macchiato</option> + <option value="catppuccin-mocha">Catppuccin Mocha</option> + <option value="gruvbox-dark">Gruvbox Dark</option> + <option value="gruvbox-material">Gruvbox Material</option> + <option value="maia">Maia</option> + <option value="mono-amber">Mono Amber</option> + <option value="mono-cyan">Mono Cyan</option> + <option value="mono-green">Mono Green</option> + <option value="mono-red">Mono Red</option> + <option value="mono-white">Mono White</option> + <option value="mono-yellow">Mono Yellow</option> + <option value="papercolor-dark">Papercolor Dark</option> + <option value="rose-pine">Rosé Pine</option> + <option value="rose-pine-moon">Rose Pine Moon</option> + <option value="shel">Shel</option> + <option value="slate">Slate</option> + <option value="solarized-dark">Solarized Dark</option> + </optgroup> + </select><br> + </div> + </div> <!-- footer --> +</div> <!-- page --> +</body> +</html> diff --git a/resources/views/components/minimal-error.blade.php b/resources/views/components/minimal-error.blade.php new file mode 100644 index 0000000..3be5511 --- /dev/null +++ b/resources/views/components/minimal-error.blade.php @@ -0,0 +1,28 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html lang="en"> +<head> + <title>{{ $title ?? '' }}</title> + <link rel="stylesheet" href="{{ URL::asset ('css/minimal.css') }}"/> +</head> + +<body> + <h1>Error {{ $code }} | <strong>{{ $message }}</strong></h1> + <hr align="left"> + <p>Here, have a cat...</p> + <img src="https://http.cat/{{ $code }}" width="500"><br><br> + <p>If you believe this is a server error, contact the <a href="mailto:webmaster@diskfloppy.me">webmaster</a></p> + <br> + <h4>Diagnostic Info</h4> + <table><tr><td> + <code> + Server: {{ gethostname() }}<br> + Your IP: {{ Request::ip() }}<br> + Root: {!! url('') !!}<br> + Path: @if(Request::path() == "/")/@else/{{ Request::path() }}/@endif<br> + Epoch: {{ now()->timestamp }}<br> + Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:122.0) Gecko/20100101 Firefox/122.0 </code> + </td></tr></table> + <hr align="left"> + <p>© floppydisk 2021-2024</p> +</body> +</html> diff --git a/resources/views/components/minimal.blade.php b/resources/views/components/minimal.blade.php new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/resources/views/components/minimal.blade.php diff --git a/resources/views/components/navbar.blade.php b/resources/views/components/navbar.blade.php new file mode 100644 index 0000000..80cd2b0 --- /dev/null +++ b/resources/views/components/navbar.blade.php @@ -0,0 +1,18 @@ +<nav> + <h1>diskfloppy.me | <strong>{{ $title }}</strong></h1> + <div class="nav-wrapper"> + <div> + <a href="/" title="Home"><img class="pixel" src="/images/icons/nav/home2.png" alt="Home" width="32" height="32"></a> + <a href="//git.diskfloppy.me/" title="cgit"><img class="pixel" src="/images/icons/nav/repo.png" alt="cgit" width="32" height="32"></a> + <a href="/pub/" title="Public Files"><img class="pixel" src="/images/icons/nav/pubfiles.png" alt="Public Files" width="32" height="32"></a> + <a href="/computers/" title="Computers"><img class="pixel" src="/images/icons/nav/computers.png" alt="Computers" width="32" height="32"></a> + <a href="/bookmarks/" title="Bookmarks"><img class="pixel" src="/images/icons/nav/bookmarks.png" alt="Bookmarks" width="32" height="32"></a> + <a href="/guestbook/" title="Guestbook"><img class="pixel" src="/images/icons/nav/guestbook.png" alt="Guestbook" width="32" height="32"></a> + <a href="//weather.diskfloppy.me/" title="Weather"><img class="pixel" src="/images/icons/nav/weather.png" alt="Weather" width="32" height="32"></a> + <a href="/music/" title="Music"><img class="pixel" src="/images/icons/nav/music.png" alt="Music" width="32" height="32"></a> + </div> + <div> + <a href="/login/" title="Admin Login"><img class="pixel" src="/images/icons/nav/admin.png" alt="Admin Login" width="32" height="32"></a> + </div> + </div> +</nav> diff --git a/resources/views/components/top-tracks.blade.php b/resources/views/components/top-tracks.blade.php new file mode 100644 index 0000000..a8c94f2 --- /dev/null +++ b/resources/views/components/top-tracks.blade.php @@ -0,0 +1,16 @@ +<table class="music-top10"> + <caption> + <h2 style="margin-bottom: 5px">Top 10 Tracks (Last 30 days):</h2> + </caption> + <tr> + <th><b>#</b></th> + <th><b>Track</b></th> + <th><b>Artist</b></th> + <th><b>Plays</b></th> + </tr> + @php($count = 0) + @foreach ($tracks as $track) + @php($count++) + <x-track :track="$track" :count="$count"/> + @endforeach +</table> diff --git a/resources/views/components/track.blade.php b/resources/views/components/track.blade.php new file mode 100644 index 0000000..b176e95 --- /dev/null +++ b/resources/views/components/track.blade.php @@ -0,0 +1,6 @@ +<tr> + <td>{{ $count }}</td> + <td><a href="{{ $track["url"] }}">{{ $track["title"] }}</a></td> + <td>{{ $track["artist"] }}</td> + <td>{{ $track["plays"] }}</td> +</tr> diff --git a/resources/views/computers.blade.php b/resources/views/computers.blade.php new file mode 100644 index 0000000..062eee9 --- /dev/null +++ b/resources/views/computers.blade.php @@ -0,0 +1,187 @@ +@extends('layouts.default') +@section('title', 'Computers') +@section('description', 'Computers I own or have owned.') +@php +// TODO: AMD whitebox, 745, D531, 1525, server, vaio, qosmio, packard bell +@endphp +@section('content') + <table class="computers"> + <tr> + <th>PICTURES</th> + <th>SPECS & DESCRIPTION</th> + </tr> + <tr> + <td>Random Whitebox</td> + <td> + <span class="section-title">Quick Specs</span> + <ul> + <li>486DX2 (50MHz)</li> + <li>16MB RAM</li> + <li>280MB HDD</li> + <li>Windows NT 3.51</li> + </ul> + <p class="description"> + Had been monitoring the ventilation system in a school since the late 1990s, + only stopped because the power supply internally exploded. Replaced the PSU with + a standard ATX PSU and an ATX to AT adaptor and it sprung back to life. + Motherboard is a Gigabyte GA486IM with 4 PCI slots, 4 ISA slots and 2 VLB slots. + Has two identical ISA serial/parallel/game-port cards with one acting as the + HDD/FDD controller. Also has a Realtek NIC with both RJ45 and BNC. GPU is a + Cirrus Logic card and is astoundingly shit. + </p> + </td> + </tr> + <tr> + <td>2023 MacBook Pro 14"</td> + <td> + <span class="section-title">Quick Specs</span> + <ul> + <li>Apple M3 Pro</li> + <li>18GB RAM</li> + <li>500GB SSD</li> + <li>macOS Sonoma</li> + </ul> + </td> + </tr> + <tr> + <td>2018 MacBook Pro 13"</td> + <td> + <span class="section-title">Quick Specs</span> + <ul> + <li>Intel i5-8259U @ 2.3GHz</li> + <li>Intel Iris Plus Graphics 655</li> + <li>8GB RAM</li> + <li>250GB SSD</li> + <li>macOS Sonoma</li> + </ul> + <p class="description"> + Old main computer. Really like the touch bar, absolutely hate the butterfly + keyboard. + </p> + </td> + </tr> + <tr> + <td>2012 Lenovo ThinkPad T430</td> + <td> + <span class="section-title">Quick Specs</span> + <ul> + <li>Intel Core i7</li> + <li>16GB RAM</li> + <li>Windows 7 Professional / NixOS</li> + </ul> + <p class="description"> + One of my main computers. Has been modified to use a classic keyboard instead of + the stock Lenovo keyboard. + </p> + </td> + </tr> + <tr> + <td>2005 IBM ThinkPad X41T</td> + <td> + <span class="section-title">Quick Specs</span> + <ul> + <li>Intel Pentium M @ 1.6GHz</li> + <li>Mobile Intel Express Chipset Family (128MB)</li> + <li>1.5GB RAM</li> + <li>40GB HDD</li> + <li>Windows XP Tablet PC Edition</li> + </ul> + </td> + </tr> + <tr> + <td>1999 Dell OptiPlex GX1</td> + <td> + <span class="section-title">Quick Specs</span> + <ul> + <li>Intel Pentium II (Deschutes) @ 400MHz</li> + <li>ATI 3D Rage Pro (4MB)</li> + <li>639MB</li> + <li>40GB HDD</li> + <li>MS-DOS 6.22 & WFW 3.10</li> + </ul> + <p class="description"> + Cool computer that uses Slot 1 CPUs. After a lot of trial and error I managed to + max out the memory. Has a riser that sports 2 PCI and 2 ISA slots (one PCI and + ISA share the same slot). + </p> + </td> + </tr> + <tr> + <td>2003 IBM ThinkPad T40</td> + <td> + <span class="section-title">Quick Specs</span> + <ul> + <li>Intel Pentium M @ 1.3GHz</li> + <li>ATI Mobility Radeon 7500 (32MB)</li> + <li>1GB RAM</li> + <li>30GB HDD</li> + <li>Windows 2000 Professional</li> + </ul> + <p class="description"> + Useful laptop thanks to its parallel port. Has the ubiquitous GPU solder issues + which I """"fixed"""" by jamming a CF card + between the GPU chip and the keyboard. + </p> + </td> + </tr> + <tr> + <td>2010 HP Compaq Elite 8100</td> + <td> + <span class="section-title">Quick Specs</span> + <ul> + <li>Intel Core i7</li> + <li>16GB RAM</li> + <li>some SSD and an HDD</li> + <li>Windows Vista Ultimate (64-bit)</li> + </ul> + </td> + </tr> + <tr> + <td>2014 Mac mini</td> + <td> + <span class="section-title">Quick Specs</span> + <ul> + <li>Intel Core i5-4278U @ 2.6GHz</li> + <li>Intel Iris Graphics</li> + <li>8GB RAM</li> + <li>1TB HDD</li> + <li>VMware ESXi 6.7.0u3</li> + </ul> + <p class="description"> + Was used as my VM host for a few years. Has now been superseded by an + actual 1U rack-mount server. + </p> + </td> + </tr> + <tr> + <td>1996 Fujitsu Milan</td> + <td> + <span class="section-title">Quick Specs</span> + <ul> + <li>Intel Pentium</li> + <li>32MB RAM</li> + <li>1215MB HDD</li> + <li>Windows 98 SE</li> + </ul> + <p class="description"> + Was originally a family members' laptop. Unfortunately the HDD side of the + HDD/FDD cable ripped while I was removing the drive to clean the computer. + Still scouring eBay for a replacement cable (or more likely, an entire + parts machine). + </p> + </td> + </tr> + <tr> + <td>1999 Compaq Armada M300</td> + <td> + <span class="section-title">Quick Specs</span> + <ul> + <li>Intel Pentium III</li> + </ul> + <p class="description"> + Nice little laptop. Mysteriously dead. + </p> + </td> + </tr> + </table> +@stop diff --git a/resources/views/errors/401.blade.php b/resources/views/errors/401.blade.php index 5c586db..7c0d081 100644 --- a/resources/views/errors/401.blade.php +++ b/resources/views/errors/401.blade.php @@ -1,5 +1,4 @@ -@extends('errors::minimal') - -@section('title', __('Unauthorized')) -@section('code', '401') -@section('message', __('Unauthorized')) +<x-minimal-error> + <x-slot:code>401</x-slot:code> + <x-slot:message>Unauthorized</x-slot:message> +</x-minimal-error> diff --git a/resources/views/errors/402.blade.php b/resources/views/errors/402.blade.php index 3bc23ef..4048cba 100644 --- a/resources/views/errors/402.blade.php +++ b/resources/views/errors/402.blade.php @@ -1,5 +1,4 @@ -@extends('errors::minimal') - -@section('title', __('Payment Required')) -@section('code', '402') -@section('message', __('Payment Required')) +<x-minimal-error> + <x-slot:code>402</x-slot:code> + <x-slot:message>Payment Required</x-slot:message> +</x-minimal-error> diff --git a/resources/views/errors/403.blade.php b/resources/views/errors/403.blade.php index a5506f0..d661d00 100644 --- a/resources/views/errors/403.blade.php +++ b/resources/views/errors/403.blade.php @@ -1,5 +1,4 @@ -@extends('errors::minimal') - -@section('title', __('Forbidden')) -@section('code', '403') -@section('message', __($exception->getMessage() ?: 'Forbidden')) +<x-minimal-error> + <x-slot:code>403</x-slot:code> + <x-slot:message>{{__($exception->getMessage() ?: 'Forbidden')}}</x-slot:message> +</x-minimal-error> diff --git a/resources/views/errors/404.blade.php b/resources/views/errors/404.blade.php index ebd22b7..812ec99 100644 --- a/resources/views/errors/404.blade.php +++ b/resources/views/errors/404.blade.php @@ -1,27 +1,4 @@ -@extends('errors::minimal') -@section('content') - -<h1>Error 404 | <strong>Page not found!</strong></h1> -<hr align="left"> -<h2>The page <code class="addr">/{{ Request::path() }}/</code> doesn't exist! Did you mean...</h2> -<ul> - <li><a href="//www.diskfloppy.me/">diskfloppy.me</a></li> - <li><a href="//git.diskfloppy.me/">git.diskfloppy.me</a></li> - <li><a href="//weather.diskfloppy.me">weather.diskfloppy.me</a></li> - <li><a href="//dl.diskfloppy.me/">dl.diskfloppy.me</a></li> - <li><a href="https://status.diskfloppy.me">status.diskfloppy.me</a> (HTTPS Only)</li> - <li><a href="gopher://diskfloppy.me">gopher://diskfloppy.me</a></li> -</ul> -<p>Still haven't found what you were looking for or believe this is a server error? Contact the <a href="mailto:webmaster@diskfloppy.me">webmaster</a>!</p> -<br> -<h4>Diagnostic Info</h4> -<table><tr><td> - <code> - Server: {{ gethostname() }}<br> - Your IP: {{ Request::ip() }}<br> - Epoch: {{ now()->timestamp }}<br> - Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:122.0) Gecko/20100101 Firefox/122.0 </code> - </td></tr></table> -<hr align="left"> -<p>© floppydisk 2021-2024</p> -@endsection +<x-minimal-error> + <x-slot:code>404</x-slot:code> + <x-slot:message>Page not found!</x-slot:message> +</x-minimal-error> diff --git a/resources/views/errors/418.blade.php b/resources/views/errors/418.blade.php index 412ea92..7ced586 100644 --- a/resources/views/errors/418.blade.php +++ b/resources/views/errors/418.blade.php @@ -1,5 +1,4 @@ -@extends('errors::minimal') - -@section('title', __('I\'m a teapot')) -@section('code', '418') -@section('message', __('I\'m a teapot')) +<x-minimal-error> + <x-slot:code>418</x-slot:code> + <x-slot:message>I'm a teapot</x-slot:message> +</x-minimal-error> diff --git a/resources/views/errors/419.blade.php b/resources/views/errors/419.blade.php index c09216e..7008bd8 100644 --- a/resources/views/errors/419.blade.php +++ b/resources/views/errors/419.blade.php @@ -1,5 +1,4 @@ -@extends('errors::minimal') - -@section('title', __('Page Expired')) -@section('code', '419') -@section('message', __('Page Expired')) +<x-minimal-error> + <x-slot:code>419</x-slot:code> + <x-slot:message>Page Expired</x-slot:message> +</x-minimal-error> diff --git a/resources/views/errors/429.blade.php b/resources/views/errors/429.blade.php index f01b07b..9ff195b 100644 --- a/resources/views/errors/429.blade.php +++ b/resources/views/errors/429.blade.php @@ -1,5 +1,4 @@ -@extends('errors::minimal') - -@section('title', __('Too Many Requests')) -@section('code', '429') -@section('message', __('Too Many Requests')) +<x-minimal-error> + <x-slot:code>429</x-slot:code> + <x-slot:message>Too Many Requests</x-slot:message> +</x-minimal-error> diff --git a/resources/views/errors/500.blade.php b/resources/views/errors/500.blade.php index d9e95d9..d2c28c5 100644 --- a/resources/views/errors/500.blade.php +++ b/resources/views/errors/500.blade.php @@ -1,5 +1,4 @@ -@extends('errors::minimal') - -@section('title', __('Server Error')) -@section('code', '500') -@section('message', __('Server Error')) +<x-minimal-error> + <x-slot:code>500</x-slot:code> + <x-slot:message>Server Error</x-slot:message> +</x-minimal-error> diff --git a/resources/views/errors/503.blade.php b/resources/views/errors/503.blade.php index c5a9dde..708c4d9 100644 --- a/resources/views/errors/503.blade.php +++ b/resources/views/errors/503.blade.php @@ -1,5 +1,4 @@ -@extends('errors::minimal') - -@section('title', __('Service Unavailable')) -@section('code', '503') -@section('message', __('Service Unavailable')) +<x-minimal-error> + <x-slot:code>503</x-slot:code> + <x-slot:message>Service Unavailable</x-slot:message> +</x-minimal-error> diff --git a/resources/views/errors/generic-error.blade.php b/resources/views/errors/generic-error.blade.php index 6f08ea5..0082093 100644 --- a/resources/views/errors/generic-error.blade.php +++ b/resources/views/errors/generic-error.blade.php @@ -1,9 +1,8 @@ -@extends('layouts.minimal') -@section('title', 'Error 401: Unauthorized User!') -@section('content') +<x-minimal> + <x-slot:title>Error 401: Unauthorized User!</x-slot:title> <h1>{{ $error }}</h1> <hr> @if(isset($description)) <p>{{ $description }}</p> @endif -@stop +</x-minimal> diff --git a/resources/views/errors/guestbook-ipban.blade.php b/resources/views/errors/guestbook-ipban.blade.php index 386d22a..5072e35 100644 --- a/resources/views/errors/guestbook-ipban.blade.php +++ b/resources/views/errors/guestbook-ipban.blade.php @@ -1,6 +1,5 @@ -@extends('layouts.minimal') -@section('title', 'Error 403: IP Blocked!') -@section('content') +<x-minimal> + <x-slot:title>Error 403: IP Blocked!</x-slot:title> <h1>Error 403: IP Blocked!</h1> <hr> <p>Your IP has been banned from submitting to the guestbook.</p> @@ -9,4 +8,4 @@ @endif <br> Click <a href="/guestbook">here</a> to go back to the guestbook. -@stop +</x-minimal> diff --git a/resources/views/errors/guestbook-ratelimit.blade.php b/resources/views/errors/guestbook-ratelimit.blade.php index 7fecd97..cb24d9e 100644 --- a/resources/views/errors/guestbook-ratelimit.blade.php +++ b/resources/views/errors/guestbook-ratelimit.blade.php @@ -1,10 +1,9 @@ -@extends('layouts.minimal') -@section('title', 'Error 429: Overclocking Detected!') -@section('content') +<x-minimal> + <x-slot:title>Error 429: Overclocking Detected!</x-slot:title> <h1>Error 429: Overclocking Detected!</h1> <hr> <p>Whoa there! Your submissions are going at warp speed.</p> <p>Remember you can only submit an entry <u>once every hour</u>!</p> <br> Click <a href="/guestbook">here</a> to go back to the guestbook. -@stop +</x-minimal> diff --git a/resources/views/errors/layout.blade.php b/resources/views/errors/layout.blade.php deleted file mode 100644 index 019c2cd..0000000 --- a/resources/views/errors/layout.blade.php +++ /dev/null @@ -1,53 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <meta name="viewport" content="width=device-width, initial-scale=1"> - - <title>@yield('title')</title> - - <!-- Styles --> - <style> - html, body { - background-color: #fff; - color: #636b6f; - font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - font-weight: 100; - height: 100vh; - margin: 0; - } - - .full-height { - height: 100vh; - } - - .flex-center { - align-items: center; - display: flex; - justify-content: center; - } - - .position-ref { - position: relative; - } - - .content { - text-align: center; - } - - .title { - font-size: 36px; - padding: 20px; - } - </style> - </head> - <body> - <div class="flex-center position-ref full-height"> - <div class="content"> - <div class="title"> - @yield('message') - </div> - </div> - </div> - </body> -</html> diff --git a/resources/views/errors/minimal.blade.php b/resources/views/errors/minimal.blade.php index e15c833..4ae6830 100644 --- a/resources/views/errors/minimal.blade.php +++ b/resources/views/errors/minimal.blade.php @@ -1,21 +1,3 @@ -@extends('layouts.minimal') -@section('content') - <h1>Error @yield('code') | <strong>@yield('message')</strong></h1> - <hr align="left"> - <p>Here, have a cat...</p> - <img src="https://http.cat/@yield('code')" width="500"><br><br> - <p>If you believe this is a server error, contact the <a href="mailto:webmaster@diskfloppy.me">webmaster</a></p> - <br> - <h4>Diagnostic Info</h4> - <table><tr><td> - <code> - Server: {{ gethostname() }}<br> - Your IP: {{ Request::ip() }}<br> - Root: {!! url('') !!}<br> - Path: /{{ Request::path() }}/<br> - Epoch: {{ now()->timestamp }}<br> - Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:122.0) Gecko/20100101 Firefox/122.0 </code> - </td></tr></table> - <hr align="left"> - <p>© floppydisk 2021-2024</p> -@endsection +<x-minimal> + +</x-minimal> diff --git a/resources/views/pages/guestbook.blade.php b/resources/views/guestbook.blade.php index a2c39fb..bed4211 100644 --- a/resources/views/pages/guestbook.blade.php +++ b/resources/views/guestbook.blade.php @@ -1,27 +1,12 @@ -@extends('layouts.default') -@section('title', 'Guestbook') -@section('content') - @php - use UAParser\Parser; - $parser = Parser::create(); - $db_alive = true; - try { - DB::connection()->getPdo(); - } catch (Exception $e) { - $db_alive = false; - } - @endphp - @if (!$db_alive) - @include('components.errors.db-error') - @else - <br> +<x-layout> + <x-slot:title>Guestbook</x-slot:title> <table class="gb-entry-form-container" role="presentation"> <tr> <td> <form method="POST" action="/guestbook"> @csrf <x-honeypot/> - <table class="gb-entry-form" role="presentation"> + <table class="form" role="presentation"> <tr> <td> <label for="name"><strong>Name:</strong></label> @@ -66,13 +51,6 @@ <hr> - @php - $entries = DB::select(' - SELECT name, timestamp, message, agent - FROM guestbook__entries - ORDER BY id DESC - '); - @endphp <h2>Entries <small>({{ count($entries) }} total)</small></h2> @foreach ($entries as $entry) @php @@ -82,10 +60,10 @@ <tr> <td> Submitted by <strong>{{ $entry->name }}</strong> - on <strong>{{ gmdate('Y-m-d', $entry->timestamp) }}</strong> - at <strong>{{ gmdate('h:i:s A (e)', $entry->timestamp) }}</strong> + on <strong>{{ $entry->created_at->format('Y-m-d') }}</strong> + at <strong>{{ $entry->created_at->format('h:i:s A (e)') }}</strong> <hr> - {{ $entry->message }} + <span class="guestbook-message">{{ $entry->message }}</span> <hr> @if($entry->agent === "Agent Unavailable") <address>Agent unavailable</address> @@ -98,5 +76,4 @@ </table> <br> @endforeach - @endif -@stop +</x-layout> diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php new file mode 100644 index 0000000..bd5b8d3 --- /dev/null +++ b/resources/views/home.blade.php @@ -0,0 +1,45 @@ +<x-layout> + <x-slot:title>Home</x-slot:title> + <p>Hi! This is my personal homepage on the <strong>W</strong>orld <strong>W</strong>ide <strong>W</strong>eb.</p> + + <div class="info-section"> + <h2>QuickFacts™</h2> + <hr> + <ul> + <li>18 y/o, he/him, British</li> + <li>Theatre Technician, "Web Developer" and NixOS User</li> + <li>Loves ETC desks, prefers Generics to LEDs for some reason</li> + <li>Has a crippling Soundcraft addiction</li> + <li>Spends way too much time on his computer</li> + <li>Favorite games: <a href="https://steamcommunity.com/id/floppydisk05/recommended/420530/">OneShot</a>, Minecraft, Stardew Valley, N++ and Starbound</li> + <li><a href="http://wxqa.com/">CWOP</a> member</li> + </ul> + </div> + <div class="info-section"> + <h2>Interests</h2> + <hr> + <ul> + <li><strong>Tech Theatre</strong> - Lighting, Stage Management, etc. (<a href="https://www.controlbooth.com/members/floppydisk.28673/">ControlBooth</a>)</li> + <li><strong>Programming</strong> - HTML, CSS, JavaScript, C#, Java, PHP, Ruby, Python (<a href="https://github.com/floppydisk05">GitHub</a>)</li> + <li><strong>Photography</strong> - <a href="https://www.flickr.com/photos/floppydisk/">Flickr</a></li> + <li><strong>Gaming</strong> - <a href="https://steamcommunity.com/id/floppydisk05/">Steam Profile</a></li> + </ul> + </div> + <div class="info-section"> + <h2>Things they never said</h2> + <hr> + <p> + <script type="text/javascript" src="{{ asset("/js/neverSaid.js") }}"></script> + <noscript>Oops! You need JavaScript enabled to view this content.</noscript> + </p> + </div> + <div class="info-section"> + <h2>Contact & social</h2> + <hr> + <p> + <strong>E-mail:</strong> <a href="mailto:contact@diskfloppy.me">contact@diskfloppy.me</a><br> + <strong>Mastodon:</strong> <a rel="me" href="https://c.im/@floppydisk">@floppydisk@c.im</a><br> + <strong>Matrix:</strong> <a href="https://matrix.to/#/@floppydisk:arcticfoxes.net">@floppydisk:arcticfoxes.net</a> + </p> + </div> +</x-layout> diff --git a/resources/views/includes/admin/header.blade.php b/resources/views/includes/admin/header.blade.php deleted file mode 100644 index edb2fd7..0000000 --- a/resources/views/includes/admin/header.blade.php +++ /dev/null @@ -1,12 +0,0 @@ - <nav> - <div> - <a href="/">public home</a> | - <a href="/admin">admin home</a> | - <a href="/admin/guestbook">guestbook</a> - @if (auth()->check()) - | ({{ auth()->user()->name }}) <a href="/logout">logout</a> - @else - | <a href="/login">login</a> - @endif - </div> - </nav> diff --git a/resources/views/includes/footer.blade.php b/resources/views/includes/footer.blade.php index b606564..3494f6e 100644 --- a/resources/views/includes/footer.blade.php +++ b/resources/views/includes/footer.blade.php @@ -25,7 +25,7 @@ class="pixel" alt="Wiby - Search Engine for the Classic Web"> </a><br> This site is best viewed at 1024x768 with 16-bit color or better<br> - © floppydisk 2021-{{ date('Y') }}, v{{ config('app.version') }}, <a + © floppydisk 2021-{{ date('Y') }}, v{{ config('app.version') }}@if(env('DEVEL'))-dev, @else, @endif<a href="https://github.com/floppydisk05/diskfloppy.me">Source</a>, Served by {{ gethostname() }}<br> <label for="scheme-selector">Color Scheme:</label> diff --git a/resources/views/music.blade.php b/resources/views/music.blade.php new file mode 100644 index 0000000..0fd5d84 --- /dev/null +++ b/resources/views/music.blade.php @@ -0,0 +1,6 @@ +<x-layout> + <x-slot:title>Music</x-slot:title> + <x-current-track :track="$current_track"/> + <hr> + <x-top-tracks :tracks="$top_tracks"/> +</x-layout> diff --git a/resources/views/pages/admin/guestbook-del-confirm.blade.php b/resources/views/pages/admin/guestbook-del-confirm.blade.php deleted file mode 100644 index de920e0..0000000 --- a/resources/views/pages/admin/guestbook-del-confirm.blade.php +++ /dev/null @@ -1,33 +0,0 @@ -@extends('layouts.minimal') -@section('title', 'Delete confirm') -@section('content') - <h1>Delete Confirmation</h1> - <hr> - <p>Are you sure you want to delete this entry?</p> - - <h3>Entry Details:</h3> - <table class="gb-entry-details"> - <tr> - <td><b>ID:</b></td> - <td>{{ $entry->id }}</td> - </tr> - <tr> - <td><b>Name:</b></td> - <td>{{ $entry->name }}</td> - </tr> - <tr> - <td><b>Date:</b></td> - <td>{{ gmdate("H:i:s - Y-m-d", $entry->timestamp) }}</td> - </tr> - <tr> - <td><b>Message:</b></td> - <td>{{ $entry->message }}</td> - </tr> - </table> - - <form action="/admin/guestbook/delete" method="POST"> - @csrf - <input type="hidden" name="id" value="{{ $entry->id }}"> - <button type="submit">Confirm Delete</button> - </form> -@stop diff --git a/resources/views/pages/admin/guestbook.blade.php b/resources/views/pages/admin/guestbook.blade.php deleted file mode 100644 index 85460cc..0000000 --- a/resources/views/pages/admin/guestbook.blade.php +++ /dev/null @@ -1,32 +0,0 @@ -@extends('layouts.default-admin') -@section('title', 'Guestbook') -@section('content') - @php - $entries = DB::select(' - SELECT id, name, timestamp, message, ip_address - FROM guestbook__entries - ORDER BY id DESC - '); - @endphp - <h1>Entries <small>({{ count($entries) }} total)</small></h1> - @foreach ($entries as $entry) - <table class="gb-admin"> - <tr> - <td> - Name: {{ $entry->name }}<br> - IP: {{ $entry->ip_address }}<br> - Date: {{ gmdate("H:i:s - Y-m-d", $entry->timestamp) }} - </td> - <td class="gb-del"> - <a href="/admin/guestbook/delete?id={{ $entry->id }}">del</a> - </td> - </tr> - <tr> - <td class="gb-message"> - <br> - {{ htmlspecialchars($entry->message) }} - </td> - </tr></table> - @endforeach -@stop - diff --git a/resources/views/pages/admin/index.blade.php b/resources/views/pages/admin/index.blade.php deleted file mode 100644 index fd34313..0000000 --- a/resources/views/pages/admin/index.blade.php +++ /dev/null @@ -1,9 +0,0 @@ -@extends('layouts.default-admin') -@section('title', 'Page Title') -@section('description', 'Page description goes here') -@php - $user = auth()->user(); -@endphp -@section('content') - <p>You are logged in as {{ $user->name }} ({{ $user->email }})</p> -@stop diff --git a/resources/views/pages/bookmarks.blade.php b/resources/views/pages/bookmarks.blade.php deleted file mode 100644 index 55cc801..0000000 --- a/resources/views/pages/bookmarks.blade.php +++ /dev/null @@ -1,52 +0,0 @@ -@extends('layouts.default') -@section('title', 'Bookmarks') -@section('description', 'This is the personal homepage of floppydisk.') -@section('content') - @php - $db_alive = true; - try { - DB::connection()->getPdo(); - } catch (Exception $e) { - $db_alive = false; - } - @endphp - @if (!$db_alive) - @include('components.errors.db-error') - @else - @php - $categories = DB::select(' - SELECT id, name - FROM bookmark__categories - ORDER BY priority ASC - '); - @endphp - - @foreach ($categories as $category) - <table class="info-table" role="presentation"> - - <caption> - <h2>{{ $category->name }}</h2> - <hr> - </caption> - - @php - $sites = DB::select( - ' - SELECT name, url, description - FROM bookmark__sites - WHERE category_id = ? ORDER BY priority ASC - ', - [$category->id], - ); - @endphp - @foreach ($sites as $site) - <tr> - <td><a href="{{ $site->url }}">{{ $site->name }}</a> - - {{ $site->description }}</td> - </tr> - @endforeach - </table> - <br> - @endforeach - @endif -@stop diff --git a/resources/views/pages/bot.blade.php b/resources/views/pages/bot.blade.php deleted file mode 100644 index b9475fc..0000000 --- a/resources/views/pages/bot.blade.php +++ /dev/null @@ -1,7 +0,0 @@ -@extends('layouts.default') -@section('title', 'Discord Bot') -@section('description', '') -@section('content') - <p>The diskfloppy.me Discord bot blah blah blah blah blah</p> - <p>Maybe I'll finish this page later idk</p> -@stop diff --git a/resources/views/pages/computers.blade.php b/resources/views/pages/computers.blade.php deleted file mode 100644 index a7cec24..0000000 --- a/resources/views/pages/computers.blade.php +++ /dev/null @@ -1,442 +0,0 @@ -@extends('layouts.default') -@section('title', 'Computers') -@section('description', 'Computers I own or have owned.') -@section('content') - <table class="computers"> - <tr> - <th>PICTURES</th> - <th>SPECS & DESCRIPTION</th> - </tr> - <tr> - <td>2023 MacBook Pro 14"</td> - <td> - <section-title>Quick Specs</section-title> - <ul> - <li>Apple M3 Pro</li> - <li>18GB RAM</li> - <li>500GB SSD</li> - <li>macOS Sonoma</li> - </ul> - <p class="description">WHAT</p> - </td> - </tr> - <tr> - <td>2018 MacBook Pro 13"</td> - <td> - <section-title>Quick Specs</section-title> - <ul> - <li>Intel i5-8259U @ 2.3GHz</li> - <li>Intel Iris Plus Graphics 655</li> - <li>8GB RAM</li> - <li>250GB SSD</li> - <li>macOS Sonoma</li> - </ul> - </td> - </tr> - <tr> - <td>2012 Lenovo ThinkPad T430</td> - <td> - <section-title>Quick Specs</section-title> - <ul> - <li>Intel Core i7</li> - <li>16GB RAM</li> - <li>Windows 7 Professional</li> - </ul> - </td> - </tr> - <tr> - <td>2005 IBM ThinkPad X41T</td> - <td> - <section-title>Quick Specs</section-title> - <ul> - <li>Intel Pentium M @ 1.6GHz</li> - <li>Mobile Intel Express Chipset Family (128MB)</li> - <li>1.5GB RAM</li> - <li>40GB HDD</li> - <li>Windows XP Tablet PC Edition</li> - </ul> - </td> - </tr> - <tr> - <td>1999 Dell OptiPlex GX1</td> - <td> - <section-title>Quick Specs</section-title> - <ul> - <li>Intel Pentium II (Deschutes) @ 400MHz</li> - <li>ATI 3D Rage Pro (4MB)</li> - <li>639MB</li> - <li>40GB HDD</li> - <li>MS-DOS 6.22 & WFW 3.10</li> - </ul> - </td> - </tr> - <tr> - <td>2003 IBM ThinkPad T40</td> - <td> - <section-title>Quick Specs</section-title> - <ul> - <li>Intel Pentium M @ 1.3GHz</li> - <li>ATI Mobility Radeon 7500 (32MB)</li> - <li>1GB RAM</li> - <li>30GB HDD</li> - <li>Windows 2000 Professional</li> - </ul> - </td> - </tr> - <tr> - <td>2010 HP Compaq Elite 8100</td> - <td> - <section-title>Quick Specs</section-title> - <ul> - <li>Intel Core i7</li> - <li>16GB RAM</li> - <li>some SSD and an HDD</li> - <li>Windows Vista Ultimate (64-bit)</li> - </ul> - </td> - </tr> - <tr> - <td>2014 Mac mini</td> - <td> - <section-title>Quick Specs</section-title> - <ul> - <li>Intel Core i5-4278U @ 2.6GHz</li> - <li>Intel Iris Graphics</li> - <li>8GB RAM</li> - <li>1TB HDD</li> - <li>VMware ESXi 6.7.0u3</li> - </ul> - </td> - </tr> - <tr> - <td>1996 Fujitsu Milan</td> - <td> - <section-title>Quick Specs</section-title> - <ul> - <li>Intel Pentium</li> - <li>32MB RAM</li> - <li>1215MB HDD</li> - <li>Windows 98 SE</li> - </ul> - </td> - </tr> - <tr> - <td>1999 Compaq Armada M300</td> - <td> - <section-title>Quick Specs</section-title> - <ul> - <li>Intel Pentium III</li> - </ul> - </td> - </tr> - </table> - <!--<table class="computer" role="presentation"> - <tr> - <td colspan="2"><h2>Custom Build</h2><hr></td> - </tr> - <tr> - <td> - <table class="computer-specs"> - <tr> - <td class="spec-title">OS:</td> - <td class="spec">NixOS 22.11 / Windows 10 Pro</td> - </tr> - <tr> - <td class="spec-title">CPU:</td> - <td class="spec">Intel i7-6700K (8-core) @ 4.0GHz</td> - </tr> - <tr> - <td class="spec-title">GPU:</td> - <td class="spec">NVidia GTX 1060 (3GB)</td> - </tr> - <tr> - <td class="spec-title">Memory:</td> - <td class="spec">64GB</td> - </tr> - <tr> - <td class="spec-title">DISK0:</td> - <td class="spec">SanDisk SSD Plus (120GB, Win10)</td> - </tr> - <tr> - <td class="spec-title">DISK1:</td> - <td class="spec">Crucial CT500MX500SSD1 (500GB, NixOS)</td> - </tr> - <tr> - <td class="spec-title">DISK2:</td> - <td class="spec">WDC WD20EZEAZ-00GGJB0 (2TB, Data)</td> - </tr> - </table> - </td> - </tr> - </table> - <table class="computer" role="presentation"> - <tr> - <td colspan="2"><h2>MacBook Pro (2018)</h2><hr></td> - </tr> - <tr> - <td> - <table class="computer-specs"> - <tr> - <td class="spec-title">OS:</td> - <td class="spec">macOS 12.5.1</td> - </tr> - <tr> - <td class="spec-title">Display:</td> - <td class="spec">2560x1600 (Retina)</td> - </tr> - <tr> - <td class="spec-title">CPU:</td> - <td class="spec">Intel i5-8259U (8-core) @ 2.3GHz</td> - </tr> - <tr> - <td class="spec-title">GPU:</td> - <td class="spec">Intel Iris Plus Graphics 655</td> - </tr> - <tr> - <td class="spec-title">Memory:</td> - <td class="spec">8GB</td> - </tr> - <tr> - <td class="spec-title">DISK:</td> - <td class="spec">Apple SSD AP0256M (250GB)</td> - </tr> - </table> - </td> - </tr> - </table> - <table class="computer" role="presentation"> - <tr> - <td colspan="2"><h2>Lenovo ThinkPad T430 (2012)</h2><hr></td> - </tr> - <tr> - <td> - <table class="computer-specs"> - <tr> - <td class="spec-title">OS:</td> - <td class="spec">NixOS 22.11 / Windows 7 Ultimate</td> - </tr> - <tr> - <td class="spec-title">CPU:</td> - <td class="spec">Intel i7-3520M (4-core) @ 3.6GHz</td> - </tr> - <tr> - <td class="spec-title">GPU:</td> - <td class="spec">Intel 3rd Gen Core processor Graphics Controllertd> - </tr> - <tr> - <td class="spec-title">Memory:</td> - <td class="spec">16GB</td> - </tr> - <tr> - <td class="spec-title">DISK0:</td> - <td class="spec">Crucial CT500MX500SSD1 (500GB, NixOS)</td> - </tr> - <tr> - <td class="spec-title">DISK1:</td> - <td class="spec">Crucial CT250MX500SSD1 (250GB, Win7)</td> - </tr> - </table> - </td> - </tr> - </table> - <table class="computer" role="presentation"> - <tr> - <td colspan="2"><h2>IBM ThinkPad X41 (2005)</h2><hr></td> - </tr> - <tr> - <td> - <table class="computer-specs"> - <tr> - <td class="spec-title">OS:</td> - <td class="spec">Windows XP Tablet PC Edition (2005, SP3)</td> - </tr> - <tr> - <td class="spec-title">CPU:</td> - <td class="spec">Intel Pentium M (single-core) @ 1.6GHz</td> - </tr> - <tr> - <td class="spec-title">GPU:</td> - <td class="spec">Mobile Intel 915GM/GMS 910GML Express Chipset Family (128MB)</td> - </tr> - <tr> - <td class="spec-title">Memory:</td> - <td class="spec">1.5GB</td> - </tr> - <tr> - <td class="spec-title">DISK:</td> - <td class="spec">Hitachi HTC426040G9AT00 (40GB)</td> - </tr> - </table> - </td> - </tr> - </table> - <table class="computer" role="presentation"> - <tr> - <td colspan="2"><h2>Dell OptiPlex GX1 (400L+, 1999)</h2><hr></td> - </tr> - <tr> - <td> - <table class="computer-specs"> - <tr> - <td class="spec-title">OS:</td> - <td class="spec">Windows 3.10 for Workgroups (DOS 6.22)</td> - </tr> - <tr> - <td class="spec-title">CPU:</td> - <td class="spec">Intel Pentium II (Deschutes) @ 400MHz</td> - </tr> - <tr> - <td class="spec-title">GPU:</td> - <td class="spec">ATI 3D Rage Pro (4MB)</td> - </tr> - <tr> - <td class="spec-title">Memory:</td> - <td class="spec">639MB</td> - </tr> - <tr> - <td class="spec-title">DISK:</td> - <td class="spec">Unknown</td> - </tr> - </table> - </td> - </tr> - </table> - <table class="computer" role="presentation"> - <tr> - <td colspan="2"><h2>IBM ThinkPad T40 (2003)</h2><hr></td> - </tr> - <tr> - <td> - <table class="computer-specs"> - <tr> - <td class="spec-title">OS:</td> - <td class="spec">Windows XP Pro</td> - </tr> - <tr> - <td class="spec-title">CPU:</td> - <td class="spec">Intel Pentium M (single-core) @ 1.3GHz</td> - </tr> - <tr> - <td class="spec-title">GPU:</td> - <td class="spec">ATI Mobility Radeon 7500 (32MB)</td> - </tr> - <tr> - <td class="spec-title">Memory:</td> - <td class="spec">1GB</td> - </tr> - <tr> - <td class="spec-title">DISK:</td> - <td class="spec">Fujitsu MHS2030AT (30GB)</td> - </tr> - </table> - </td> - </tr> - </table> - <table class="computer" role="presentation"> - <tr> - <td colspan="2"><h2>HP Compaq Elite 8100 CMT</h2><hr></td> - </tr> - <tr> - <td> - <table class="computer-specs"> - <tr> - <td class="spec-title">OS:</td> - <td class="spec">Windows Vista 64-bit</td> - </tr> - <tr> - <td class="spec-title">CPU:</td> - <td class="spec">Intel Core i7</td> - </tr> - <tr> - <td class="spec-title">GPU:</td> - <td class="spec"></td> - </tr> - <tr> - <td class="spec-title">Memory:</td> - <td class="spec">16GB</td> - </tr> - <tr> - <td class="spec-title">DISK0:</td> - <td class="spec">SanDisk SSD Plus (120GB, Win10)</td> - </tr> - <tr> - <td class="spec-title">DISK1:</td> - <td class="spec">Crucial CT500MX500SSD1 (500GB, NixOS)</td> - </tr> - </table> - </td> - </tr> - </table> - <table class="computer" role="presentation"> - <tr> - <td colspan="2"><h2>Mac mini (2014)</h2><hr></td> - </tr> - <tr> - <td> - <table class="computer-specs"> - <tr> - <td class="spec-title">OS:</td> - <td class="spec">VMware ESXi 6.7.0u3</td> - </tr> - <tr> - <td class="spec-title">CPU:</td> - <td class="spec">Intel i5-4278U (4-core) @ 2.6GHz</td> - </tr> - <tr> - <td class="spec-title">GPU:</td> - <td class="spec">Intel Iris Graphics</td> - </tr> - <tr> - <td class="spec-title">Memory:</td> - <td class="spec">8GB</td> - </tr> - <tr> - <td class="spec-title">DISK:</td> - <td class="spec">Apple HDD HTS541 (1TB)</td> - </tr> - </table> - </td> - </tr> - </table> - <table class="computer" role="presentation"> - <tr> - <td colspan="2"><h2>Fujitsu Milan (1996)</h2><hr></td> - </tr> - <tr> - <td> - <table class="computer-specs"> - <tr> - <td class="spec-title">OS:</td> - <td class="spec">Windows 98 SE</td> - </tr> - <tr> - <td class="spec-title">CPU:</td> - <td class="spec">Intel Pentium</td> - </tr> - <tr> - <td class="spec-title">Memory:</td> - <td class="spec">32MB</td> - </tr> - <tr> - <td class="spec-title">DISK:</td> - <td class="spec">IBM DPRA-21215 (1215MB)</td> - </tr> - </table> - </td> - </tr> - </table>--> - <!--<table class="computer" role="presentation"> - <tr> - <td colspan="2"><h2>Compaq Armada M300</h2><hr></td> - </tr> - <tr> - <td> - <table class="computer-specs"> - <tr> - <td class="spec">TBD</td> - </tr> - </table> - </td> - </tr> - </table>--> -@stop diff --git a/resources/views/pages/home.blade.php b/resources/views/pages/home.blade.php deleted file mode 100644 index 01831d6..0000000 --- a/resources/views/pages/home.blade.php +++ /dev/null @@ -1,88 +0,0 @@ -@extends('layouts.default') -@section('title', 'Home') -@section('description', 'This is the personal homepage of floppydisk.') -@section('content') - - <p>Hi! This is my personal homepage on the <strong>W</strong>orld <strong>W</strong>ide <strong>W</strong>eb.</p> - - <table class="info-table" role="presentation"> - <caption> - <h2>QuickFacts™</h2> - <hr> - </caption> - <tr> - <td>◆ 18 y/o, he/him, British</td> - </tr> - <tr> - <td>◆ Theatre Technician, "Web Developer" and NixOS User</td> - </tr> - <tr> - <td>◆ Loves ETC desks, prefers Generics to LEDs for some reason</td> - </tr> - <tr> - <td>◆ Spends way too much time on his computer</td> - </tr> - <tr> - <td>◆ Favorite games: <a href="https://steamcommunity.com/id/floppydisk05/recommended/420530/">OneShot</a>, Minecraft, Stardew Valley, N++ and Starbound</td> - </tr> - <tr> - <td>◆ <a href="http://wxqa.com/">CWOP</a> member</td> - </tr> - </table> - <br> - - <table class="info-table" role="presentation"> - <caption> - <h2>Interests</h2> - <hr> - </caption> - <tr> - <td>◆ <b>Tech Theatre</b></td> - <td>- Lighting, Stage Management, etc. (<a href="https://www.controlbooth.com/members/floppydisk.28673/">ControlBooth</a>)</td> - </tr> - <tr> - <td>◆ <b>Programming</b></td> - <td>- HTML, CSS, JavaScript, C#, Java, PHP, Ruby, Python (<a href="https://github.com/floppydisk05">GitHub</a>)</td> - </tr> - <tr> - <td>◆ <b>Photography</b></td> - <td>- <a href="https://www.flickr.com/photos/floppydisk/">Flickr</a></td> - </tr> - <tr> - <td>◆ <b>Gaming</b></td> - <td>- <a href="https://steamcommunity.com/id/floppydisk05/">Steam Profile</a></td> - </tr> - </table> - <br> - - <table class="info-table never-said" role="presentation"> - <caption> - <h2>Things they never said</h2> - <hr> - </caption> - <tr> - <script type="text/javascript" src="/js/neverSaid.js"></script> - <noscript><td>Oops! You need JavaScript enabled to view this content.</td></noscript> - </tr> - </table> - <br> - - <table class="info-table" role="presentation"> - <caption> - <h2>Contact & social</h2> - <hr> - </caption> - <tr> - <td><strong>E-mail:</strong></td> - <td><a href="mailto:contact@diskfloppy.me">contact@diskfloppy.me</a></td> - </tr> - <tr> - <td><strong>Mastodon:</strong></td> - <td><a rel="me" href="https://c.im/@floppydisk">@floppydisk@c.im</a></td> - </tr> - <tr> - <td><strong>Matrix:</strong></td> - <td><a href="https://matrix.to/#/@floppydisk:arcticfoxes.net">@floppydisk:arcticfoxes.net</a></td> - </tr> - </table> -@stop diff --git a/resources/views/pages/music.blade.php b/resources/views/pages/music.blade.php deleted file mode 100644 index dba0750..0000000 --- a/resources/views/pages/music.blade.php +++ /dev/null @@ -1,66 +0,0 @@ -@extends('layouts.default') -@section('title', 'Music') -@section('description', '') -@section('content') - @php - - $cfg = app('config')->get('services')['lastfm']; - $api_root = app('config')->get('app')['api_root']; - - $api_alive = true; - - try { - $data = file_get_contents($api_root.'/lastfm/current'); - } catch (Exception $e) { - $api_alive = false; - } - @endphp - @if (!$api_alive) - @include('components.errors.api-error') - @else - - @php - $current_track = json_decode(file_get_contents($api_root . '/lastfm/current')); - $top_tracks = json_decode(file_get_contents($api_root . '/lastfm/top')); - $count = 0; - @endphp - <table class="info-table" role="presentation" width="100%"> - <tr> - <td colspan="4"> - <h2>Last/Current Track:</h2> - </td> - </tr> - <tr> - <td colspan="4"> - <a href="{{ $current_track->url }}">{{ $current_track->title }} • {{ $current_track->artist }}</a><br> - </td> - </tr> - </table> - <hr> - <table class="music-top10"> - <tr> - <td colspan="4"> - <h2 style="margin-bottom: 5px">Top {{ $cfg['toptracks'] }} Tracks (Last 7 days)</h2> - </td> - </tr> - <tr> - <td style="text-align: right"><b>#</b></td> - <td><b>Track</b></td> - <td><b>Artist</b></td> - <td><b>Plays</b></td> - </tr> - @foreach ($top_tracks as $track) - @php $count++ @endphp - @if ($count >= $cfg['toptracks']+1) - @break - @endif - <tr> - <td style="text-align: right">{{ $count }}</td> - <td style="white-space: nowrap; text-overflow:ellipsis; overflow: hidden; max-width:1px;" width="50%"><a href="{{ $track->url }}">{{ $track->title }}</a></td> - <td style="white-space: nowrap; text-overflow:ellipsis; overflow: hidden; max-width:1px;" width="50%">{{ $track->artist }}</td> - <td>{{ $track->playcount }}</td> - </tr> - @endforeach - </table> - @endif -@stop diff --git a/resources/views/pages/projects.blade.php b/resources/views/pages/projects.blade.php deleted file mode 100644 index aad454b..0000000 --- a/resources/views/pages/projects.blade.php +++ /dev/null @@ -1,16 +0,0 @@ -<?php $categories = app('config')->get('projects'); ?> -@extends('layouts.default') -@section('title', 'Projects') -@section('description', 'My projects') -@section('content') - @foreach ($categories as $category) - <h2>{{ $category['name']}}</h2> - @foreach ($category['projects'] as $project) - <div> - <a href="{{ $project['url'] }}">{{ $project['name'] }}</a> - {{ $project['description'] }}<br> - <b>Languages:</b> {{ implode(", ", $project['languages']) }} - </div> - <br> - @endforeach -@endforeach -@stop diff --git a/resources/views/pages/template.blade.php b/resources/views/pages/template.blade.php deleted file mode 100644 index 18fe585..0000000 --- a/resources/views/pages/template.blade.php +++ /dev/null @@ -1,6 +0,0 @@ -@extends('layouts.default') -@section('title', 'Page Title') -@section('description', 'Page description goes here') -@section('content') -<p>page content</p> -@stop diff --git a/resources/views/pages/weather.blade.php b/resources/views/pages/weather.blade.php deleted file mode 100644 index a759534..0000000 --- a/resources/views/pages/weather.blade.php +++ /dev/null @@ -1,61 +0,0 @@ -@extends('layouts.default') -@section('title', 'Weather') -@section('description', 'Data from my weather station') -@section('content') -@php -$api_root = app('config')->get('app')['api_root']; - -function degreesToCompassDirection($degrees) { - $cardinalDirections = [ - 'N', 'NNE', 'NE', 'ENE', 'E', 'ESE', 'SE', 'SSE', - 'S', 'SSW', 'SW', 'WSW', 'W', 'WNW', 'NW', 'NNW', 'N' - ]; - return $cardinalDirections[round($degrees*16/360)]; -} - -$api_alive = true; - -try { - $data = file_get_contents($api_root.'/weather'); -} catch (Exception $e) { - $api_alive = false; -} -@endphp -@if (!$api_alive) - @include('components.errors.api-error') -@else - @php - $data = json_decode(file_get_contents($api_root.'/weather')); - $updated = gmdate('H:i Y-m-d', $data->updated); - $data = $data->current; - @endphp -<table class="info-table" role="presentation"> - <caption> - <h2>Local Weather</h2> - <hr> - </caption> - <tr> - <td><b>Wind Speed:</b></td> - <td>{{ $data->wind->speed }} mph</td> - </tr> - <tr> - <td><b>Wind Direction:</b></td> - <td>{{ $data->wind->direction->degrees }}°, {{ $data->wind->direction->cardinal }}</td> - </tr> - <tr> - <td><b>Temperature:</b></td> - <td>{{ $data->temperature }}°C</td> - </tr> - <tr> - <td><b>Rain Rate:</b></td> - <td>{{ $data->rain_rate }} mm/hr</td> - </tr> - <tr> - <td><b>Humidity:</b></td> - <td>{{ $data->humidity }}%</td> - </tr> -</table> -<br> -<small><i>(Last Update: {{ $updated }})</i></small> -@endif -@stop diff --git a/routes/web.php b/routes/web.php index d9b39c6..b87d32d 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,8 +1,15 @@ <?php -use Illuminate\Support\Facades\DB; +use App\Http\Controllers\AdminBookmarksController; +use App\Http\Controllers\AdminGuestbookController; +use App\Http\Controllers\AdminImportController; +use App\Http\Controllers\BookmarksController; +use App\Http\Controllers\CalculatorsController; +use App\Http\Controllers\ComputersController; +use App\Http\Controllers\GuestbookController; +use App\Http\Controllers\HomeController; +use App\Http\Controllers\MusicController; use Illuminate\Support\Facades\Route; -use Illuminate\Support\Facades\View; /* |-------------------------------------------------------------------------- @@ -15,87 +22,23 @@ use Illuminate\Support\Facades\View; | */ -Route::get('/', function () { - return View::make('pages.home'); -}); - -Route::get('/bookmarks', function () { - return View::make('pages.bookmarks'); -}); - -Route::get('/projects', function () { - return View::make('pages.projects'); -}); - -Route::get('/calculators', function () { - return View::make('pages.calculators'); -}); - -Route::get('/computers', function () { - return View::make('pages.computers'); -}); - -Route::get('/guestbook', 'App\Http\Controllers\GuestbookController@guestbook') - ->name('guestbook'); - -Route::post('/guestbook', 'App\Http\Controllers\GuestbookController@guestbookpost') - ->name('guestbookPost') +Route::get('/', [HomeController::class, 'show']); +Route::get('/bookmarks', [BookmarksController::class, 'show']); +Route::get('/guestbook', [GuestbookController::class, 'show']); +Route::post('/guestbook', [GuestbookController::class, 'addEntry']) ->middleware('rate_limit'); - -Route::get('/weather', function () { - return View::make('pages.weather'); -}); - -Route::get('/music', function () { - return View::make('pages.music'); -}); - -Route::get('/bot', function () { - return View::make('pages.bot'); -}); - -/* ------------------------------ Admin Routes ------------------------------ */ - -//Route::get('/admin', function () { -// if (!auth()->check()) { -// return View::make('errors.no-auth'); -// } -// return View::make('pages.admin.index'); -//}); -// -//Route::get('/admin/guestbook', function () { -// if (!auth()->check()) { -// return View::make('errors.no-auth'); -// } -// return View::make('pages.admin.guestbook'); -//}); -// -//Route::get('/admin/guestbook/delete', function () { -// if (!auth()->check()) { -// return View::make('errors.no-auth'); -// } -// -// $id = request()->input('id'); -// $entry = DB::table('guestbook__entries')->find($id); -// -// if ($entry) { -// // Render a confirmation view -// return View::make('pages.admin.guestbook-del-confirm', compact('entry')); -// } else { -// return View::make('errors.generic-error') -// ->with('error', "Entry not found") -// ->with('description', "The specified entry does not exist!"); -// } -//}); -// -//Route::post('/admin/guestbook/delete', function () { -// if (!auth()->check()) { -// return View::make('errors.no-auth'); -// } -// -// $id = request()->input('id'); -// DB::table('guestbook__entries')->where('id', $id)->delete(); -// -// return back()->with('success', 'Entry deleted successfully!'); -//}); +Route::get('/calculators', [CalculatorsController::class, 'show']); +Route::get('/computers', [ComputersController::class, 'show']); +Route::get('/music', [MusicController::class, 'show']); + +// Admin pages +Route::get('/admin/guestbook', [AdminGuestbookController::class, 'show']) + ->middleware('auth'); +Route::get('/admin/bookmarks', [AdminBookmarksController::class, 'show']) + ->middleware('auth'); +Route::get('/admin/import', [AdminImportController::class, 'show']) + ->middleware('auth'); +Route::post('/admin/import', [AdminImportController::class, 'submit']) + ->name('admin.import.submit') + ->middleware('auth'); diff --git a/scripts/updatecache.sh b/scripts/updatecache.sh index 53dad65..b4acd8c 100755 --- a/scripts/updatecache.sh +++ b/scripts/updatecache.sh @@ -2,3 +2,4 @@ php artisan config:cache php artisan route:cache php artisan view:cache php artisan event:cache +php artisan cache:clear |