├── .dockerignore ├── .editorconfig ├── .env.example ├── .gitattributes ├── .gitignore ├── .node-version ├── .prettierrc ├── .styleci.yml ├── Dockerfile ├── README.md ├── apache.conf ├── app ├── Console │ ├── CartridgeCommand.php │ ├── Commands │ │ ├── Initialize.php │ │ └── Scan.php │ └── Kernel.php ├── Exceptions │ └── Handler.php ├── Http │ ├── Controllers │ │ ├── Admin │ │ │ ├── PlatformsController.php │ │ │ └── UsersController.php │ │ ├── Auth │ │ │ └── LoginController.php │ │ ├── Controller.php │ │ ├── FileController.php │ │ ├── GameController.php │ │ ├── HomeController.php │ │ └── PlatformController.php │ ├── Kernel.php │ └── Middleware │ │ ├── Authenticate.php │ │ ├── EncryptCookies.php │ │ ├── PreventRequestsDuringMaintenance.php │ │ ├── RedirectIfAuthenticated.php │ │ ├── TrimStrings.php │ │ ├── TrustHosts.php │ │ ├── TrustProxies.php │ │ └── VerifyCsrfToken.php ├── LogLevel.php ├── Models │ ├── File.php │ ├── Game.php │ ├── Platform.php │ └── User.php └── Providers │ ├── AppServiceProvider.php │ ├── AuthServiceProvider.php │ ├── BroadcastServiceProvider.php │ ├── EventServiceProvider.php │ └── RouteServiceProvider.php ├── artisan ├── bootstrap ├── app.php ├── cache │ └── .gitignore └── helpers.php ├── composer.json ├── composer.lock ├── config ├── app.php ├── auth.php ├── broadcasting.php ├── cache.php ├── cartridge.php ├── cors.php ├── database.php ├── filesystems.php ├── hashing.php ├── igdb.php ├── logging.php ├── mail.php ├── queue.php ├── sanctum.php ├── scout.php ├── services.php ├── session.php └── view.php ├── database ├── .gitignore ├── factories │ └── UserFactory.php ├── migrations │ ├── 2014_10_12_000000_create_users_table.php │ ├── 2014_10_12_100000_create_password_resets_table.php │ ├── 2019_08_19_000000_create_failed_jobs_table.php │ ├── 2019_12_14_000001_create_personal_access_tokens_table.php │ ├── 2022_05_18_060919_add_is_admin_to_users.php │ ├── 2022_05_18_062000_create_games_table.php │ ├── 2022_05_18_062034_create_platforms_table.php │ ├── 2022_05_18_062057_create_files_table.php │ ├── 2022_06_08_223408_remove_email_from_users.php │ ├── 2022_07_13_233312_add_name_to_platforms.php │ ├── 2022_07_13_233642_add_name_to_games.php │ └── 2022_07_13_234643_add_directory_name_to_platforms.php └── seeders │ └── DatabaseSeeder.php ├── docker-compose.test.yml ├── docker-compose.yml ├── docker-entrypoint.sh ├── lang └── en │ ├── auth.php │ ├── pagination.php │ ├── passwords.php │ └── validation.php ├── package-lock.json ├── package.json ├── phpunit.xml ├── public └── .gitignore ├── resources ├── js │ ├── app.js │ ├── components │ │ ├── AppLogo.vue │ │ ├── CsrfToken.vue │ │ ├── GameList.vue │ │ ├── Icon.vue │ │ ├── LoadingAnimation.vue │ │ ├── NavBar.vue │ │ └── NotFound.vue │ ├── routes.js │ └── views │ │ ├── GameView.vue │ │ ├── LibraryView.vue │ │ └── SearchView.vue ├── sass │ ├── _variables.scss │ └── app.scss └── views │ ├── admin │ ├── dashboard.blade.php │ ├── platforms │ │ ├── index.blade.php │ │ └── modify.blade.php │ └── users │ │ ├── index.blade.php │ │ └── modify.blade.php │ ├── auth │ └── login.blade.php │ ├── components │ ├── flash.blade.php │ └── forms │ │ ├── radio-input.blade.php │ │ ├── text-input.blade.php │ │ └── toggle-input.blade.php │ ├── home.blade.php │ └── layouts │ ├── admin.blade.php │ └── app.blade.php ├── routes ├── api.php ├── channels.php ├── console.php └── web.php ├── static ├── .htaccess ├── favicon.ico ├── favicon.svg ├── icons │ ├── slash.svg │ └── x.svg ├── images │ └── logo-full.png ├── index.php └── robots.txt ├── storage ├── app │ └── .gitignore ├── framework │ ├── .gitignore │ ├── cache │ │ ├── .gitignore │ │ └── data │ │ │ └── .gitignore │ ├── sessions │ │ └── .gitignore │ ├── testing │ │ └── .gitignore │ └── views │ │ └── .gitignore └── logs │ └── .gitignore ├── tests ├── CreatesApplication.php ├── Feature │ └── ExampleTest.php ├── TestCase.php └── Unit │ └── ExampleTest.php └── webpack.mix.js /.dockerignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | vendor 3 | 4 | .git 5 | **/.gitignore 6 | .gitattributes 7 | 8 | public/**/** 9 | .env.example 10 | 11 | .editorconfig 12 | .prettierrc 13 | .styleci.yml 14 | 15 | phpunit.xml 16 | 17 | docker-compose.yml 18 | Dockerfile 19 | .dockerignore 20 | docker-build.log 21 | 22 | # Maintain storage directory structure 23 | storage/app/* 24 | storage/app/public/* 25 | storage/framework/cache/data/* 26 | storage/framework/sessions/* 27 | storage/framework/testing/* 28 | storage/framework/views/* 29 | storage/logs/* -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | end_of_line = lf 6 | insert_final_newline = false 7 | indent_style = tab 8 | indent_size = 4 9 | trim_trailing_whitespace = true 10 | 11 | [*.md] 12 | trim_trailing_whitespace = false 13 | 14 | [*.{yml,yaml}] 15 | indent_style = space 16 | indent_size = 2 17 | -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- 1 | # Volumes 2 | GAMES_PATH= 3 | 4 | # IGDB credentials 5 | TWITCH_CLIENT_ID= 6 | TWITCH_CLIENT_SECRET= -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | 3 | *.blade.php diff=html 4 | *.css diff=css 5 | *.html diff=html 6 | *.md diff=markdown 7 | *.php diff=php 8 | 9 | /.github export-ignore 10 | CHANGELOG.md export-ignore 11 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /storage/*.key 3 | /vendor 4 | .env 5 | .env.backup 6 | .phpunit.result.cache 7 | Homestead.json 8 | Homestead.yaml 9 | npm-debug.log 10 | /.vscode 11 | yarn-error.log 12 | /.idea 13 | /.vscode 14 | docker-build.log -------------------------------------------------------------------------------- /.node-version: -------------------------------------------------------------------------------- 1 | v18.3.0 2 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": false, 3 | "singleQuote": true 4 | } 5 | -------------------------------------------------------------------------------- /.styleci.yml: -------------------------------------------------------------------------------- 1 | php: 2 | preset: laravel 3 | disabled: 4 | - no_unused_imports 5 | finder: 6 | not-name: 7 | - index.php 8 | js: 9 | finder: 10 | not-name: 11 | - webpack.mix.js 12 | css: true 13 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | ARG VARIANT=8-apache 2 | FROM php:${VARIANT} 3 | 4 | # Prepare user 5 | ARG PUID=1000 6 | ARG PGID=1000 7 | RUN \ 8 | groupadd -g ${PGID} cartridge && \ 9 | useradd -u ${PUID} -g ${PGID} cartridge 10 | 11 | # Install packages 12 | RUN \ 13 | echo "🌐 Installing dependencies" && \ 14 | apt-get update && \ 15 | apt-get install -y --no-install-recommends \ 16 | git \ 17 | cron \ 18 | unzip \ 19 | nodejs \ 20 | npm \ 21 | zip && \ 22 | echo "🧹 Cleaning up" && \ 23 | rm -rf \ 24 | /tmp/* \ 25 | /var/lib/apt/lists/* \ 26 | /var/tmp/* 27 | 28 | # Enable Apache modules 29 | RUN \ 30 | a2enmod rewrite 31 | 32 | # Add Apache conf 33 | COPY apache.conf /etc/apache2/sites-available/000-default.conf 34 | 35 | # Install PHP extensions 36 | RUN \ 37 | docker-php-ext-install \ 38 | mysqli \ 39 | pdo \ 40 | pdo_mysql 41 | 42 | # Prepare workdir 43 | RUN mkdir -p /var/www/cartridge && chown cartridge:cartridge /var/www/cartridge 44 | WORKDIR /var/www/cartridge 45 | COPY --chown=cartridge:cartridge . . 46 | 47 | # Get latest Composer 48 | ARG COMPOSER_VERSION=latest 49 | COPY --from=composer:2 /usr/bin/composer /usr/bin/composer 50 | RUN \ 51 | echo "🎵 Installing Composer packages" && \ 52 | composer install && \ 53 | echo "🧹 Cleaning up" && \ 54 | composer clearcache 55 | 56 | # Node 57 | RUN \ 58 | echo "💿 Installing Node packages" && \ 59 | npm install && \ 60 | npm run build && \ 61 | echo "🧹 Cleaning up" && \ 62 | rm -rf node_modules 63 | 64 | # Install scheduler to cron 65 | RUN \ 66 | echo "⏳ Installing scheduler" && \ 67 | CRONFILE=/etc/cron.d/scheduler && \ 68 | mkdir -p /etc/cron.d && \ 69 | touch $CRONFILE && \ 70 | echo "* * * * * cd ${PWD} && php artisan schedule:run" >> $CRONFILE && \ 71 | chmod 0644 $CRONFILE && \ 72 | crontab $CRONFILE 73 | 74 | # Expose stuff 75 | USER cartridge 76 | VOLUME /games 77 | VOLUME /var/www/cartridge/storage 78 | EXPOSE 80 79 | 80 | CMD ["apache2-foreground"] -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ### ⚠️ Deprecated 2 | New repository at [jamjnsn/cartridge](https://github.com/jamjnsn/cartridge). 3 | 4 | --- 5 | 6 |
9 | A self-hosted game browser. 10 |
11 |No results found.
3 | 4 | 5 | 10 | -------------------------------------------------------------------------------- /resources/js/routes.js: -------------------------------------------------------------------------------- 1 | // Route views 2 | import LibraryView from './views/LibraryView' 3 | import SearchView from './views/SearchView' 4 | import GameView from './views/GameView' 5 | 6 | // Routes 7 | export default [ 8 | { 9 | path: '/', 10 | component: LibraryView, 11 | name: 'library', 12 | }, 13 | { 14 | path: '/search/:query', 15 | component: SearchView, 16 | name: 'search', 17 | }, 18 | { 19 | path: '/games/:slug', 20 | component: GameView, 21 | name: 'game', 22 | }, 23 | ] 24 | -------------------------------------------------------------------------------- /resources/js/views/GameView.vue: -------------------------------------------------------------------------------- 1 | 2 |{{ $status['message'] }}
48 |