├── .editorconfig ├── .env.example ├── .gitattributes ├── .gitignore ├── .styleci.yml ├── README.md ├── app ├── Console │ └── Kernel.php ├── Exceptions │ └── Handler.php ├── Helper.php ├── Http │ ├── Controllers │ │ ├── Controller.php │ │ ├── HomeController.php │ │ ├── LoginController.php │ │ └── RouterController.php │ ├── Kernel.php │ └── Middleware │ │ ├── Authenticate.php │ │ ├── CheckForMaintenanceMode.php │ │ ├── EncryptCookies.php │ │ ├── RedirectIfAuthenticated.php │ │ ├── TrimStrings.php │ │ ├── TrustHosts.php │ │ ├── TrustProxies.php │ │ └── VerifyCsrfToken.php ├── Pear2 │ ├── Autoload.php │ ├── Cache │ │ ├── SHM.php │ │ └── SHM │ │ │ ├── Adapter │ │ │ ├── APC.php │ │ │ ├── APCu.php │ │ │ ├── Placebo.php │ │ │ └── Wincache.php │ │ │ ├── Exception.php │ │ │ └── InvalidArgumentException.php │ └── Net │ │ ├── RouterOS │ │ ├── Client.php │ │ ├── Communicator.php │ │ ├── DataFlowException.php │ │ ├── Exception.php │ │ ├── InvalidArgumentException.php │ │ ├── LengthException.php │ │ ├── Message.php │ │ ├── NotSupportedException.php │ │ ├── ParserException.php │ │ ├── Query.php │ │ ├── Registry.php │ │ ├── Request.php │ │ ├── Response.php │ │ ├── ResponseCollection.php │ │ ├── RouterErrorException.php │ │ ├── Script.php │ │ ├── SocketException.php │ │ ├── UnexpectedValueException.php │ │ └── Util.php │ │ └── Transmitter │ │ ├── Exception.php │ │ ├── FilterCollection.php │ │ ├── LockException.php │ │ ├── NetworkStream.php │ │ ├── SocketException.php │ │ ├── Stream.php │ │ ├── StreamException.php │ │ ├── TcpClient.php │ │ └── TcpServerConnection.php ├── Providers │ ├── AppServiceProvider.php │ ├── AuthServiceProvider.php │ ├── BroadcastServiceProvider.php │ ├── EventServiceProvider.php │ └── RouteServiceProvider.php ├── Router.php ├── Session.php └── User.php ├── artisan ├── bootstrap ├── app.php └── cache │ └── .gitignore ├── composer.json ├── composer.lock ├── config ├── app.php ├── auth.php ├── broadcasting.php ├── cache.php ├── cors.php ├── database.php ├── datatables.php ├── filesystems.php ├── hashing.php ├── logging.php ├── mail.php ├── queue.php ├── services.php ├── session.php └── view.php ├── database ├── .gitignore ├── factories │ └── UserFactory.php ├── migrations │ ├── 2014_10_12_000000_create_users_table.php │ ├── 2021_03_18_172614_create_sessions_table.php │ └── 2021_03_18_184258_create_routers_table.php └── seeds │ └── DatabaseSeeder.php ├── package.json ├── phpunit.xml ├── public ├── .htaccess ├── assets │ ├── css │ │ ├── bootstrap.min.css │ │ ├── icons.css │ │ ├── icons.css.map │ │ ├── metismenu.min.css │ │ ├── style.css │ │ └── style.css.map │ ├── fonts │ │ ├── dripicons-v2.eot │ │ ├── dripicons-v2.svg │ │ ├── dripicons-v2.ttf │ │ ├── dripicons-v2.woff │ │ ├── fa-brands-400.eot │ │ ├── fa-brands-400.svg │ │ ├── fa-brands-400.ttf │ │ ├── fa-brands-400.woff │ │ ├── fa-brands-400.woff2 │ │ ├── fa-regular-400.eot │ │ ├── fa-regular-400.svg │ │ ├── fa-regular-400.ttf │ │ ├── fa-regular-400.woff │ │ ├── fa-regular-400.woff2 │ │ ├── fa-solid-900.eot │ │ ├── fa-solid-900.svg │ │ ├── fa-solid-900.ttf │ │ ├── fa-solid-900.woff │ │ ├── fa-solid-900.woff2 │ │ ├── ionicons.eot │ │ ├── ionicons.svg │ │ ├── ionicons.ttf │ │ ├── ionicons.woff │ │ ├── ionicons.woff2 │ │ ├── materialdesignicons-webfont.eot │ │ ├── materialdesignicons-webfont.svg │ │ ├── materialdesignicons-webfont.ttf │ │ ├── materialdesignicons-webfont.woff │ │ ├── materialdesignicons-webfont.woff2 │ │ ├── outlined-iconset.eot │ │ ├── outlined-iconset.svg │ │ ├── outlined-iconset.ttf │ │ ├── outlined-iconset.woff │ │ ├── themify.eot │ │ ├── themify.svg │ │ ├── themify.ttf │ │ ├── themify.woff │ │ ├── typicons.eot │ │ ├── typicons.scss │ │ ├── typicons.svg │ │ ├── typicons.ttf │ │ └── typicons.woff │ ├── icons │ │ ├── _dripicons-2.scss │ │ ├── _fontawesome.scss │ │ ├── _ionicons.scss │ │ ├── _materialdesignicons.scss │ │ ├── _outline.scss │ │ ├── _themify-icons.scss │ │ └── _typicons.scss │ ├── images │ │ ├── bg-1.png │ │ ├── bg-2.png │ │ ├── logo-dark.png │ │ ├── logo-light.png │ │ ├── logo-sm.png │ │ ├── logo.png │ │ ├── user.jpg │ │ └── user.png │ ├── js │ │ ├── app.js │ │ ├── bootstrap.bundle.min.js │ │ ├── client.js │ │ ├── home.js │ │ ├── jquery.min.js │ │ ├── jquery.slimscroll.js │ │ ├── metismenu.min.js │ │ ├── packet.js │ │ ├── session.js │ │ ├── users.js │ │ └── waves.min.js │ └── vendor │ │ ├── alertify │ │ ├── css │ │ │ └── alertify.css │ │ └── js │ │ │ ├── alertify.js │ │ │ └── ngAlertify.js │ │ ├── bootstrap-datepicker │ │ ├── css │ │ │ └── bootstrap-datepicker.min.css │ │ └── js │ │ │ └── bootstrap-datepicker.min.js │ │ ├── bootstrap-inputmask │ │ └── bootstrap-inputmask.min.js │ │ ├── bootstrap-maxlength │ │ ├── bootstrap-maxlength.js │ │ ├── bootstrap-maxlength.min.js │ │ └── src │ │ │ └── bootstrap-maxlength.js │ │ ├── datatables │ │ ├── buttons.bootstrap4.min.css │ │ ├── buttons.bootstrap4.min.js │ │ ├── buttons.colVis.min.js │ │ ├── buttons.html5.min.js │ │ ├── buttons.print.min.js │ │ ├── dataTables.bootstrap4.min.css │ │ ├── dataTables.bootstrap4.min.js │ │ ├── dataTables.buttons.min.js │ │ ├── dataTables.responsive.min.js │ │ ├── jquery.dataTables.min.js │ │ ├── json │ │ │ └── scroller-demo.json │ │ ├── jszip.min.js │ │ ├── pdfmake.min.js │ │ ├── responsive.bootstrap4.min.css │ │ ├── responsive.bootstrap4.min.js │ │ └── vfs_fonts.js │ │ ├── dropzone │ │ └── dist │ │ │ ├── basic.css │ │ │ ├── dropzone-amd-module.js │ │ │ ├── dropzone.css │ │ │ ├── dropzone.js │ │ │ ├── min │ │ │ ├── basic.min.css │ │ │ ├── dropzone-amd-module.min.js │ │ │ ├── dropzone.min.css │ │ │ └── dropzone.min.js │ │ │ └── readme.md │ │ ├── jquery-blockui │ │ └── jquery.blockUI.js │ │ ├── jquery-ui │ │ ├── jquery-ui.min.css │ │ └── jquery-ui.min.js │ │ ├── morris │ │ ├── morris.css │ │ ├── morris.js │ │ └── morris.min.js │ │ └── sweet-alert2 │ │ ├── sweetalert2.all.js │ │ ├── sweetalert2.all.min.js │ │ ├── sweetalert2.css │ │ ├── sweetalert2.js │ │ ├── sweetalert2.min.css │ │ └── sweetalert2.min.js ├── examples │ ├── Client │ │ ├── callback-and-loop.php │ │ ├── loop-and-extract.php │ │ ├── send-and-complete.php │ │ ├── send-and-forget.php │ │ ├── sync-request-arguments.php │ │ └── sync-request-simple.php │ ├── Script │ │ ├── parseValue.php │ │ └── prepare.php │ └── Util │ │ ├── add.php │ │ ├── count.php │ │ ├── edit.php │ │ ├── enable_disable_remove.php │ │ ├── exec-basic.php │ │ ├── exec-params.php │ │ ├── exec-policy.php │ │ ├── file-get.php │ │ ├── file-put.php │ │ ├── find-callback.php │ │ ├── find-numbers.php │ │ ├── get-null.php │ │ ├── get-number.php │ │ ├── getAll.php │ │ ├── move.php │ │ ├── set-multiple.php │ │ └── set-single.php ├── favicon.ico ├── index.php ├── robots.txt └── web.config ├── resources ├── js │ ├── app.js │ └── bootstrap.js ├── lang │ └── en │ │ ├── auth.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ └── validation.php ├── sass │ └── app.scss └── views │ ├── client │ └── index.blade.php │ ├── components │ ├── footer.blade.php │ ├── layouts │ │ └── base.blade.php │ ├── modal │ │ ├── generate.blade.php │ │ ├── packet.blade.php │ │ └── users.blade.php │ └── sidebar.blade.php │ ├── home │ └── index.blade.php │ ├── login │ └── index.blade.php │ ├── packet │ └── index.blade.php │ ├── qr-code │ └── index.blade.php │ ├── session │ └── index.blade.php │ └── user │ └── index.blade.php ├── routes ├── api.php ├── channels.php ├── console.php └── web.php ├── server.php ├── sqlite.db.std ├── storage ├── app │ ├── .gitignore │ ├── media │ │ ├── Screenshot_001.png │ │ ├── Screenshot_002.png │ │ ├── Screenshot_003.png │ │ └── Screenshot_004.png │ └── public │ │ └── .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 /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | end_of_line = lf 6 | insert_final_newline = true 7 | indent_style = space 8 | indent_size = 4 9 | trim_trailing_whitespace = true 10 | 11 | [*.md] 12 | trim_trailing_whitespace = false 13 | 14 | [*.{yml,yaml}] 15 | indent_size = 2 16 | -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- 1 | APP_NAME="MyTIK Hotspot" 2 | APP_ENV=local 3 | APP_KEY= 4 | APP_DEBUG=true 5 | APP_URL=http://localhost 6 | 7 | LOG_CHANNEL=stack 8 | 9 | ROUTER_HOTSPOT_SERVER=all 10 | ROUTER_HOTSPOT_DNS=http://login.hotspot.net 11 | 12 | DB_CONNECTION=sqlite 13 | DB_DATABASE= 14 | #DB_HOST=127.0.0.1 15 | #DB_PORT=3306 16 | #DB_DATABASE=laravel 17 | #DB_USERNAME=root 18 | #DB_PASSWORD= 19 | 20 | BROADCAST_DRIVER=log 21 | CACHE_DRIVER=file 22 | QUEUE_CONNECTION=sync 23 | SESSION_DRIVER=file 24 | SESSION_LIFETIME=120 25 | 26 | REDIS_HOST=127.0.0.1 27 | REDIS_PASSWORD=null 28 | REDIS_PORT=6379 29 | 30 | MAIL_MAILER=smtp 31 | MAIL_HOST=smtp.mailtrap.io 32 | MAIL_PORT=2525 33 | MAIL_USERNAME=null 34 | MAIL_PASSWORD=null 35 | MAIL_ENCRYPTION=null 36 | MAIL_FROM_ADDRESS=null 37 | MAIL_FROM_NAME="${APP_NAME}" 38 | 39 | AWS_ACCESS_KEY_ID= 40 | AWS_SECRET_ACCESS_KEY= 41 | AWS_DEFAULT_REGION=us-east-1 42 | AWS_BUCKET= 43 | 44 | PUSHER_APP_ID= 45 | PUSHER_APP_KEY= 46 | PUSHER_APP_SECRET= 47 | PUSHER_APP_CLUSTER=mt1 48 | 49 | MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" 50 | MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" 51 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | *.css linguist-vendored 3 | *.scss linguist-vendored 4 | *.js linguist-vendored 5 | CHANGELOG.md export-ignore 6 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /public/hot 3 | /public/storage 4 | /storage/*.key 5 | /vendor 6 | /.idea 7 | .env 8 | .env.backup 9 | .phpunit.result.cache 10 | Homestead.json 11 | Homestead.yaml 12 | sqlite.db 13 | npm-debug.log 14 | yarn-error.log 15 | -------------------------------------------------------------------------------- /.styleci.yml: -------------------------------------------------------------------------------- 1 | php: 2 | preset: laravel 3 | disabled: 4 | - unused_use 5 | finder: 6 | not-name: 7 | - index.php 8 | - server.php 9 | js: 10 | finder: 11 | not-name: 12 | - webpack.mix.js 13 | css: true 14 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # MyTIK User Manager Hotspot 2 | 3 | ## About MyTIK 4 | 5 | - Simple web application for User Management Hotspot. 6 | - Using framework Laravel 7 7 | 8 | ## Update `.env` files 9 | 10 | - Copy file `.env.example` to `.env` 11 | - Update the following params 12 | 13 | ```env 14 | ROUTER_HOTSPOT_SERVER=all 15 | ROUTER_HOTSPOT_DNS=http:// 16 | 17 | DB_CONNECTION=sqlite 18 | DB_DATABASE=/sqlite.db 19 | ``` 20 | 21 | ## Usage 22 | 23 | - Copy file `sqlite.db.std` to `sqlite.db` 24 | - Run command `php artisan key:generate` to create new `APP_KEY` 25 | - Run command `php artisan migrate` to generate table 26 | - Run command `npm run serve-dev` to run local development server 27 | 28 | ## Preview 29 | 30 | - ![Dasboard](storage/app/media/Screenshot_001.png) 31 | - ![Voucher](storage/app/media/Screenshot_002.png) 32 | - ![Pakcet](storage/app/media/Screenshot_003.png) 33 | - ![Hotspot Client](storage/app/media/Screenshot_004.png) 34 | 35 | ## Security Vulnerabilities 36 | 37 | If you discover a security vulnerability within MyTIK, please send an e-mail to [Arief BP](mailto:archytech99@gmail.com). All security vulnerabilities will be promptly addressed. 38 | 39 | ## Contributing 40 | 41 | Thank you for considering contributing to the MyTIK project! 42 | 43 | ## License 44 | 45 | The MyTIK project is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT). 46 | -------------------------------------------------------------------------------- /app/Console/Kernel.php: -------------------------------------------------------------------------------- 1 | command('inspire')->hourly(); 28 | } 29 | 30 | /** 31 | * Register the commands for the application. 32 | * 33 | * @return void 34 | */ 35 | protected function commands() 36 | { 37 | $this->load(__DIR__.'/Commands'); 38 | 39 | require base_path('routes/console.php'); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /app/Exceptions/Handler.php: -------------------------------------------------------------------------------- 1 | make(true); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/Http/Kernel.php: -------------------------------------------------------------------------------- 1 | [ 33 | \App\Http\Middleware\EncryptCookies::class, 34 | \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, 35 | \Illuminate\Session\Middleware\StartSession::class, 36 | \Illuminate\Session\Middleware\AuthenticateSession::class, 37 | \Illuminate\View\Middleware\ShareErrorsFromSession::class, 38 | \App\Http\Middleware\VerifyCsrfToken::class, 39 | \Illuminate\Routing\Middleware\SubstituteBindings::class, 40 | ], 41 | 42 | 'api' => [ 43 | 'throttle:60,1', 44 | \Illuminate\Routing\Middleware\SubstituteBindings::class, 45 | ], 46 | ]; 47 | 48 | /** 49 | * The application's route middleware. 50 | * 51 | * These middleware may be assigned to groups or used individually. 52 | * 53 | * @var array 54 | */ 55 | protected $routeMiddleware = [ 56 | 'auth' => \App\Http\Middleware\Authenticate::class, 57 | 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 58 | 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, 59 | 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, 60 | 'can' => \Illuminate\Auth\Middleware\Authorize::class, 61 | 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 62 | 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class, 63 | 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class, 64 | 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 65 | 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, 66 | ]; 67 | } 68 | -------------------------------------------------------------------------------- /app/Http/Middleware/Authenticate.php: -------------------------------------------------------------------------------- 1 | expectsJson()) { 18 | return route('login'); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/Http/Middleware/CheckForMaintenanceMode.php: -------------------------------------------------------------------------------- 1 | check()) { 22 | return redirect(RouteServiceProvider::HOME); 23 | } 24 | 25 | return $next($request); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/Http/Middleware/TrimStrings.php: -------------------------------------------------------------------------------- 1 | allSubdomainsOfApplicationUrl(), 18 | ]; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/Http/Middleware/TrustProxies.php: -------------------------------------------------------------------------------- 1 | 14 | * @copyright 2011 Vasil Rangelov 15 | * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 16 | * @version 0.2.0 17 | * @link http://pear2.php.net/PEAR2_Cache_SHM 18 | */ 19 | /** 20 | * The namespace declaration. 21 | */ 22 | namespace App\Pear2\Cache\SHM; 23 | 24 | /** 25 | * Generic exception class of this package. 26 | * 27 | * @category Caching 28 | * @package PEAR2_Cache_SHM 29 | * @author Vasil Rangelov 30 | * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 31 | * @link http://pear2.php.net/PEAR2_Cache_SHM 32 | */ 33 | interface Exception 34 | { 35 | } 36 | -------------------------------------------------------------------------------- /app/Pear2/Cache/SHM/InvalidArgumentException.php: -------------------------------------------------------------------------------- 1 | 14 | * @copyright 2011 Vasil Rangelov 15 | * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 16 | * @version 0.2.0 17 | * @link http://pear2.php.net/PEAR2_Cache_SHM 18 | */ 19 | /** 20 | * The namespace declaration. 21 | */ 22 | namespace App\Pear2\Cache\SHM; 23 | 24 | /** 25 | * Exception thrown when there's something wrong with an argument. 26 | * 27 | * @category Caching 28 | * @package PEAR2_Cache_SHM 29 | * @author Vasil Rangelov 30 | * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 31 | * @link http://pear2.php.net/PEAR2_Cache_SHM 32 | */ 33 | class InvalidArgumentException extends \InvalidArgumentException 34 | implements Exception 35 | { 36 | } 37 | -------------------------------------------------------------------------------- /app/Pear2/Net/RouterOS/DataFlowException.php: -------------------------------------------------------------------------------- 1 | 14 | * @copyright 2011 Vasil Rangelov 15 | * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 16 | * @version 1.0.0b6 17 | * @link http://pear2.php.net/PEAR2_Net_RouterOS 18 | */ 19 | /** 20 | * The namespace declaration. 21 | */ 22 | namespace App\Pear2\Net\RouterOS; 23 | 24 | /** 25 | * Base of this class. 26 | */ 27 | use RuntimeException; 28 | 29 | /** 30 | * Exception thrown when the request/response cycle goes an unexpected way. 31 | * 32 | * @category Net 33 | * @package PEAR2_Net_RouterOS 34 | * @author Vasil Rangelov 35 | * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 36 | * @link http://pear2.php.net/PEAR2_Net_RouterOS 37 | */ 38 | class DataFlowException extends RuntimeException implements Exception 39 | { 40 | const CODE_INVALID_CREDENTIALS = 10000; 41 | const CODE_TAG_REQUIRED = 10500; 42 | const CODE_TAG_UNIQUE = 10501; 43 | const CODE_UNKNOWN_REQUEST = 10900; 44 | const CODE_CANCEL_FAIL = 11200; 45 | } 46 | -------------------------------------------------------------------------------- /app/Pear2/Net/RouterOS/Exception.php: -------------------------------------------------------------------------------- 1 | 14 | * @copyright 2011 Vasil Rangelov 15 | * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 16 | * @version 1.0.0b6 17 | * @link http://pear2.php.net/PEAR2_Net_RouterOS 18 | */ 19 | /** 20 | * The namespace declaration. 21 | */ 22 | namespace App\Pear2\Net\RouterOS; 23 | 24 | /** 25 | * Generic exception class of this package. 26 | * 27 | * @category Net 28 | * @package PEAR2_Net_RouterOS 29 | * @author Vasil Rangelov 30 | * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 31 | * @link http://pear2.php.net/PEAR2_Net_RouterOS 32 | */ 33 | interface Exception 34 | { 35 | } 36 | -------------------------------------------------------------------------------- /app/Pear2/Net/RouterOS/InvalidArgumentException.php: -------------------------------------------------------------------------------- 1 | 14 | * @copyright 2011 Vasil Rangelov 15 | * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 16 | * @version 1.0.0b6 17 | * @link http://pear2.php.net/PEAR2_Net_RouterOS 18 | */ 19 | /** 20 | * The namespace declaration. 21 | */ 22 | namespace App\Pear2\Net\RouterOS; 23 | 24 | use InvalidArgumentException as I; 25 | 26 | /** 27 | * Exception thrown when there's something wrong with message arguments. 28 | * 29 | * @category Net 30 | * @package PEAR2_Net_RouterOS 31 | * @author Vasil Rangelov 32 | * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 33 | * @link http://pear2.php.net/PEAR2_Net_RouterOS 34 | */ 35 | class InvalidArgumentException extends I implements Exception 36 | { 37 | const CODE_SEEKABLE_REQUIRED = 1100; 38 | const CODE_NAME_INVALID = 20100; 39 | const CODE_ABSOLUTE_REQUIRED = 40200; 40 | const CODE_CMD_UNRESOLVABLE = 40201; 41 | const CODE_CMD_INVALID = 40202; 42 | const CODE_NAME_UNPARSABLE = 41000; 43 | const CODE_VALUE_UNPARSABLE = 41001; 44 | } 45 | -------------------------------------------------------------------------------- /app/Pear2/Net/RouterOS/LengthException.php: -------------------------------------------------------------------------------- 1 | 14 | * @copyright 2011 Vasil Rangelov 15 | * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 16 | * @version 1.0.0b6 17 | * @link http://pear2.php.net/PEAR2_Net_RouterOS 18 | */ 19 | /** 20 | * The namespace declaration. 21 | */ 22 | namespace App\Pear2\Net\RouterOS; 23 | 24 | /** 25 | * Base of this class. 26 | */ 27 | use LengthException as L; 28 | 29 | /** 30 | * Used in $previous 31 | */ 32 | use Exception as E; 33 | 34 | /** 35 | * Exception thrown when there is a problem with a word's length. 36 | * 37 | * @category Net 38 | * @package PEAR2_Net_RouterOS 39 | * @author Vasil Rangelov 40 | * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 41 | * @link http://pear2.php.net/PEAR2_Net_RouterOS 42 | */ 43 | class LengthException extends L implements Exception 44 | { 45 | 46 | const CODE_UNSUPPORTED = 1200; 47 | const CODE_INVALID = 1300; 48 | const CODE_BEYOND_SHEME = 1301; 49 | 50 | /** 51 | * The problematic length. 52 | * 53 | * @var int|double|null 54 | */ 55 | private $_length; 56 | 57 | /** 58 | * Creates a new LengthException. 59 | * 60 | * @param string $message The Exception message to throw. 61 | * @param int $code The Exception code. 62 | * @param E|null $previous The previous exception used for the 63 | * exception chaining. 64 | * @param int|double|null $length The length. 65 | */ 66 | public function __construct( 67 | $message, 68 | $code = 0, 69 | E $previous = null, 70 | $length = null 71 | ) { 72 | parent::__construct($message, $code, $previous); 73 | $this->_length = $length; 74 | } 75 | 76 | /** 77 | * Gets the length. 78 | * 79 | * @return int|double|null The length. 80 | */ 81 | public function getLength() 82 | { 83 | return $this->_length; 84 | } 85 | 86 | // @codeCoverageIgnoreStart 87 | // String representation is not reliable in testing 88 | 89 | /** 90 | * Returns a string representation of the exception. 91 | * 92 | * @return string The exception as a string. 93 | */ 94 | public function __toString() 95 | { 96 | return parent::__toString() . "\nLength:{$this->_length}"; 97 | } 98 | 99 | // @codeCoverageIgnoreEnd 100 | } 101 | -------------------------------------------------------------------------------- /app/Pear2/Net/RouterOS/NotSupportedException.php: -------------------------------------------------------------------------------- 1 | 14 | * @copyright 2011 Vasil Rangelov 15 | * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 16 | * @version 1.0.0b6 17 | * @link http://pear2.php.net/PEAR2_Net_RouterOS 18 | */ 19 | /** 20 | * The namespace declaration. 21 | */ 22 | namespace App\Pear2\Net\RouterOS; 23 | 24 | /** 25 | * Base of this class. 26 | */ 27 | use Exception as E; 28 | 29 | /** 30 | * Exception thrown when encountering something not supported by RouterOS or 31 | * this package. 32 | * 33 | * @category Net 34 | * @package PEAR2_Net_RouterOS 35 | * @author Vasil Rangelov 36 | * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 37 | * @link http://pear2.php.net/PEAR2_Net_RouterOS 38 | */ 39 | class NotSupportedException extends E implements Exception 40 | { 41 | 42 | const CODE_CONTROL_BYTE = 1601; 43 | 44 | const CODE_MENU_MISMATCH = 60000; 45 | 46 | const CODE_ARG_PROHIBITED = 60001; 47 | 48 | /** 49 | * The unsupported value. 50 | * 51 | * @var mixed 52 | */ 53 | private $_value; 54 | 55 | /** 56 | * Creates a new NotSupportedException. 57 | * 58 | * @param string $message The Exception message to throw. 59 | * @param int $code The Exception code. 60 | * @param E|null $previous The previous exception used for the exception 61 | * chaining. 62 | * @param mixed $value The unsupported value. 63 | */ 64 | public function __construct( 65 | $message, 66 | $code = 0, 67 | E $previous = null, 68 | $value = null 69 | ) { 70 | parent::__construct($message, $code, $previous); 71 | $this->_value = $value; 72 | } 73 | 74 | /** 75 | * Gets the unsupported value. 76 | * 77 | * @return mixed The unsupported value. 78 | */ 79 | public function getValue() 80 | { 81 | return $this->_value; 82 | } 83 | 84 | // @codeCoverageIgnoreStart 85 | // String representation is not reliable in testing 86 | 87 | /** 88 | * Returns a string representation of the exception. 89 | * 90 | * @return string The exception as a string. 91 | */ 92 | public function __toString() 93 | { 94 | return parent::__toString() . "\nValue:{$this->_value}"; 95 | } 96 | 97 | // @codeCoverageIgnoreEnd 98 | } 99 | -------------------------------------------------------------------------------- /app/Pear2/Net/RouterOS/ParserException.php: -------------------------------------------------------------------------------- 1 | 14 | * @copyright 2011 Vasil Rangelov 15 | * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 16 | * @version 1.0.0b6 17 | * @link http://pear2.php.net/PEAR2_Net_RouterOS 18 | */ 19 | /** 20 | * The namespace declaration. 21 | */ 22 | namespace App\Pear2\Net\RouterOS; 23 | 24 | /** 25 | * Base of this class. 26 | */ 27 | use DomainException; 28 | 29 | /** 30 | * Exception thrown when a value can't be parsed properly. 31 | * 32 | * @category Net 33 | * @package PEAR2_Net_RouterOS 34 | * @author Vasil Rangelov 35 | * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 36 | * @link http://pear2.php.net/PEAR2_Net_RouterOS 37 | */ 38 | class ParserException extends DomainException implements Exception 39 | { 40 | const CODE_DATETIME = 1; 41 | const CODE_DATEINTERVAL = 2; 42 | const CODE_ARRAY = 3; 43 | } 44 | -------------------------------------------------------------------------------- /app/Pear2/Net/RouterOS/RouterErrorException.php: -------------------------------------------------------------------------------- 1 | 14 | * @copyright 2011 Vasil Rangelov 15 | * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 16 | * @version 1.0.0b6 17 | * @link http://pear2.php.net/PEAR2_Net_RouterOS 18 | */ 19 | /** 20 | * The namespace declaration. 21 | */ 22 | namespace App\Pear2\Net\RouterOS; 23 | 24 | /** 25 | * Base of this class. 26 | */ 27 | use RuntimeException; 28 | 29 | /** 30 | * Refered to in the constructor. 31 | */ 32 | use Exception as E; 33 | 34 | /** 35 | * Exception thrown by higher level classes (Util, etc.) when the router 36 | * returns an error. 37 | * 38 | * @category Net 39 | * @package PEAR2_Net_RouterOS 40 | * @author Vasil Rangelov 41 | * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 42 | * @link http://pear2.php.net/PEAR2_Net_RouterOS 43 | */ 44 | class RouterErrorException extends RuntimeException implements Exception 45 | { 46 | const CODE_ITEM_ERROR = 0x100000; 47 | const CODE_SCRIPT_ERROR = 0x200000; 48 | const CODE_READ_ERROR = 0x010000; 49 | const CODE_WRITE_ERROR = 0x020000; 50 | const CODE_EXEC_ERROR = 0x040000; 51 | 52 | const CODE_CACHE_ERROR = 0x100001; 53 | const CODE_GET_ERROR = 0x110001; 54 | const CODE_GETALL_ERROR = 0x110002; 55 | const CODE_ADD_ERROR = 0x120001; 56 | const CODE_SET_ERROR = 0x120002; 57 | const CODE_REMOVE_ERROR = 0x120004; 58 | const CODE_ENABLE_ERROR = 0x120012; 59 | const CODE_DISABLE_ERROR = 0x120022; 60 | const CODE_COMMENT_ERROR = 0x120042; 61 | const CODE_UNSET_ERROR = 0x120082; 62 | const CODE_MOVE_ERROR = 0x120107; 63 | const CODE_SCRIPT_ADD_ERROR = 0x220001; 64 | const CODE_SCRIPT_REMOVE_ERROR = 0x220004; 65 | const CODE_SCRIPT_RUN_ERROR = 0x240001; 66 | const CODE_SCRIPT_FILE_ERROR = 0x240003; 67 | 68 | /** 69 | * The complete response returned by the router. 70 | * 71 | * NULL when the router was not contacted at all. 72 | * 73 | * @var ResponseCollection|null 74 | */ 75 | private $_responses = null; 76 | 77 | /** 78 | * Creates a new RouterErrorException. 79 | * 80 | * @param string $message The Exception message to throw. 81 | * @param int $code The Exception code. 82 | * @param E|null $previous The previous exception used for 83 | * the exception chaining. 84 | * @param ResponseCollection|null $responses The complete set responses 85 | * returned by the router. 86 | */ 87 | public function __construct( 88 | $message, 89 | $code = 0, 90 | E $previous = null, 91 | ResponseCollection $responses = null 92 | ) { 93 | parent::__construct($message, $code, $previous); 94 | $this->_responses = $responses; 95 | } 96 | 97 | /** 98 | * Gets the complete set responses returned by the router. 99 | * 100 | * @return ResponseCollection|null The complete set responses 101 | * returned by the router. 102 | */ 103 | public function getResponses() 104 | { 105 | return $this->_responses; 106 | } 107 | 108 | // @codeCoverageIgnoreStart 109 | // String representation is not reliable in testing 110 | 111 | /** 112 | * Returns a string representation of the exception. 113 | * 114 | * @return string The exception as a string. 115 | */ 116 | public function __toString() 117 | { 118 | $result = parent::__toString(); 119 | if ($this->_responses instanceof ResponseCollection) { 120 | $result .= "\nResponse collection:\n" . 121 | print_r($this->_responses->toArray(), true); 122 | } 123 | return $result; 124 | } 125 | 126 | // @codeCoverageIgnoreEnd 127 | } 128 | -------------------------------------------------------------------------------- /app/Pear2/Net/RouterOS/SocketException.php: -------------------------------------------------------------------------------- 1 | 14 | * @copyright 2011 Vasil Rangelov 15 | * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 16 | * @version 1.0.0b6 17 | * @link http://pear2.php.net/PEAR2_Net_RouterOS 18 | */ 19 | /** 20 | * The namespace declaration. 21 | */ 22 | namespace App\Pear2\Net\RouterOS; 23 | 24 | /** 25 | * Base of this class. 26 | */ 27 | use RuntimeException; 28 | 29 | /** 30 | * Exception thrown when something goes wrong with the connection. 31 | * 32 | * @category Net 33 | * @package PEAR2_Net_RouterOS 34 | * @author Vasil Rangelov 35 | * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 36 | * @link http://pear2.php.net/PEAR2_Net_RouterOS 37 | */ 38 | class SocketException extends RuntimeException implements Exception 39 | { 40 | const CODE_SERVICE_INCOMPATIBLE = 10200; 41 | const CODE_CONNECTION_FAIL = 100; 42 | const CODE_QUERY_SEND_FAIL = 30600; 43 | const CODE_REQUEST_SEND_FAIL = 40900; 44 | const CODE_NO_DATA = 50000; 45 | } 46 | -------------------------------------------------------------------------------- /app/Pear2/Net/RouterOS/UnexpectedValueException.php: -------------------------------------------------------------------------------- 1 | 14 | * @copyright 2011 Vasil Rangelov 15 | * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 16 | * @version 1.0.0b6 17 | * @link http://pear2.php.net/PEAR2_Net_RouterOS 18 | */ 19 | /** 20 | * The namespace declaration. 21 | */ 22 | namespace App\Pear2\Net\RouterOS; 23 | 24 | /** 25 | * The base for this exception. 26 | */ 27 | use UnexpectedValueException as U; 28 | 29 | /** 30 | * Used in $previous. 31 | */ 32 | use Exception as E; 33 | 34 | /** 35 | * Exception thrown when encountering an invalid value in a function argument. 36 | * 37 | * @category Net 38 | * @package PEAR2_Net_RouterOS 39 | * @author Vasil Rangelov 40 | * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 41 | * @link http://pear2.php.net/PEAR2_Net_RouterOS 42 | */ 43 | class UnexpectedValueException extends U implements Exception 44 | { 45 | const CODE_CALLBACK_INVALID = 10502; 46 | const CODE_ACTION_UNKNOWN = 30100; 47 | const CODE_RESPONSE_TYPE_UNKNOWN = 50100; 48 | 49 | /** 50 | * The unexpected value. 51 | * 52 | * @var mixed 53 | */ 54 | private $_value; 55 | 56 | /** 57 | * Creates a new UnexpectedValueException. 58 | * 59 | * @param string $message The Exception message to throw. 60 | * @param int $code The Exception code. 61 | * @param E|null $previous The previous exception used for the exception 62 | * chaining. 63 | * @param mixed $value The unexpected value. 64 | */ 65 | public function __construct( 66 | $message, 67 | $code = 0, 68 | E $previous = null, 69 | $value = null 70 | ) { 71 | parent::__construct($message, $code, $previous); 72 | $this->_value = $value; 73 | } 74 | 75 | /** 76 | * Gets the unexpected value. 77 | * 78 | * @return mixed The unexpected value. 79 | */ 80 | public function getValue() 81 | { 82 | return $this->_value; 83 | } 84 | 85 | // @codeCoverageIgnoreStart 86 | // String representation is not reliable in testing 87 | 88 | /** 89 | * Returns a string representation of the exception. 90 | * 91 | * @return string The exception as a string. 92 | */ 93 | public function __toString() 94 | { 95 | return parent::__toString() . "\nValue:{$this->_value}"; 96 | } 97 | 98 | // @codeCoverageIgnoreEnd 99 | } 100 | -------------------------------------------------------------------------------- /app/Pear2/Net/Transmitter/Exception.php: -------------------------------------------------------------------------------- 1 | 16 | * @copyright 2011 Vasil Rangelov 17 | * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 18 | * @version 1.0.0b2 19 | * @link http://pear2.php.net/PEAR2_Net_Transmitter 20 | */ 21 | /** 22 | * The namespace declaration. 23 | */ 24 | namespace App\Pear2\Net\Transmitter; 25 | 26 | /** 27 | * Generic exception class of this package. 28 | * 29 | * @category Net 30 | * @package PEAR2_Net_Transmitter 31 | * @author Vasil Rangelov 32 | * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 33 | * @link http://pear2.php.net/PEAR2_Net_Transmitter 34 | */ 35 | interface Exception 36 | { 37 | } 38 | -------------------------------------------------------------------------------- /app/Pear2/Net/Transmitter/LockException.php: -------------------------------------------------------------------------------- 1 | 16 | * @copyright 2011 Vasil Rangelov 17 | * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 18 | * @version 1.0.0b2 19 | * @link http://pear2.php.net/PEAR2_Net_Transmitter 20 | */ 21 | /** 22 | * The namespace declaration. 23 | */ 24 | namespace App\Pear2\Net\Transmitter; 25 | 26 | /** 27 | * Exception thrown when something goes wrong when dealing with locks. 28 | * 29 | * @category Net 30 | * @package PEAR2_Net_Transmitter 31 | * @author Vasil Rangelov 32 | * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 33 | * @link http://pear2.php.net/PEAR2_Net_Transmitter 34 | */ 35 | class LockException extends \RuntimeException implements Exception 36 | { 37 | } 38 | -------------------------------------------------------------------------------- /app/Pear2/Net/Transmitter/SocketException.php: -------------------------------------------------------------------------------- 1 | 16 | * @copyright 2011 Vasil Rangelov 17 | * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 18 | * @version 1.0.0b2 19 | * @link http://pear2.php.net/PEAR2_Net_Transmitter 20 | */ 21 | /** 22 | * The namespace declaration. 23 | */ 24 | namespace App\Pear2\Net\Transmitter; 25 | 26 | /** 27 | * Used to enable any exception in chaining. 28 | */ 29 | use Exception as E; 30 | 31 | /** 32 | * Exception thrown when something goes wrong with the connection. 33 | * 34 | * @category Net 35 | * @package PEAR2_Net_Transmitter 36 | * @author Vasil Rangelov 37 | * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 38 | * @link http://pear2.php.net/PEAR2_Net_Transmitter 39 | */ 40 | class SocketException extends StreamException 41 | { 42 | 43 | /** 44 | * The system level error code. 45 | * 46 | * @var int 47 | */ 48 | protected $errorNo; 49 | 50 | /** 51 | * The system level error message. 52 | * 53 | * @var string 54 | */ 55 | protected $errorStr; 56 | 57 | /** 58 | * Creates a new socket exception. 59 | * 60 | * @param string $message The Exception message to throw. 61 | * @param int $code The Exception code. 62 | * @param E|null $previous Previous exception thrown, 63 | * or NULL if there is none. 64 | * @param int|string|resource|null $fragment The fragment up until the 65 | * point of failure. 66 | * On failure with sending, this is the number of bytes sent 67 | * successfully before the failure. 68 | * On failure when receiving, this is a string/stream holding 69 | * the contents received successfully before the failure. 70 | * NULL if the failure occurred before the operation started. 71 | * @param int $errorNo The system level error number. 72 | * @param string $errorStr The system level 73 | * error message. 74 | */ 75 | public function __construct( 76 | $message = '', 77 | $code = 0, 78 | E $previous = null, 79 | $fragment = null, 80 | $errorNo = null, 81 | $errorStr = null 82 | ) { 83 | parent::__construct($message, $code, $previous, $fragment); 84 | $this->errorNo = $errorNo; 85 | $this->errorStr = $errorStr; 86 | } 87 | 88 | /** 89 | * Gets the system level error code on the socket. 90 | * 91 | * @return int The system level error number. 92 | */ 93 | public function getSocketErrorNumber() 94 | { 95 | return $this->errorNo; 96 | } 97 | 98 | // @codeCoverageIgnoreStart 99 | // Unreliable in testing. 100 | 101 | /** 102 | * Gets the system level error message on the socket. 103 | * 104 | * @return string The system level error message. 105 | */ 106 | public function getSocketErrorMessage() 107 | { 108 | return $this->errorStr; 109 | } 110 | 111 | /** 112 | * Returns a string representation of the exception. 113 | * 114 | * @return string The exception as a string. 115 | */ 116 | public function __toString() 117 | { 118 | $result = parent::__toString(); 119 | if (null !== $this->getSocketErrorNumber()) { 120 | $result .= "\nSocket error number:" . $this->getSocketErrorNumber(); 121 | } 122 | if (null !== $this->getSocketErrorMessage()) { 123 | $result .= "\nSocket error message:" 124 | . $this->getSocketErrorMessage(); 125 | } 126 | return $result; 127 | } 128 | // @codeCoverageIgnoreEnd 129 | } 130 | -------------------------------------------------------------------------------- /app/Pear2/Net/Transmitter/StreamException.php: -------------------------------------------------------------------------------- 1 | 16 | * @copyright 2011 Vasil Rangelov 17 | * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 18 | * @version 1.0.0b2 19 | * @link http://pear2.php.net/PEAR2_Net_Transmitter 20 | */ 21 | /** 22 | * The namespace declaration. 23 | */ 24 | namespace App\Pear2\Net\Transmitter; 25 | 26 | /** 27 | * Base for this exception. 28 | */ 29 | use RuntimeException; 30 | 31 | /** 32 | * Used to enable any exception in chaining. 33 | */ 34 | use Exception as E; 35 | 36 | /** 37 | * Exception thrown when something goes wrong with the connection. 38 | * 39 | * @category Net 40 | * @package PEAR2_Net_Transmitter 41 | * @author Vasil Rangelov 42 | * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1 43 | * @link http://pear2.php.net/PEAR2_Net_Transmitter 44 | */ 45 | class StreamException extends RuntimeException implements Exception 46 | { 47 | /** 48 | * The fragment up until the point of failure. 49 | * 50 | * On failure with sending, this is the number of bytes sent successfully 51 | * before the failure. 52 | * On failure when receiving, this is a string/stream holding the contents 53 | * received successfully before the failure. 54 | * NULL if the failure occurred before the operation started. 55 | * 56 | * @var int|string|resource|null 57 | */ 58 | protected $fragment = null; 59 | 60 | /** 61 | * Creates a new stream exception. 62 | * 63 | * @param string $message The Exception message to throw. 64 | * @param int $code The Exception code. 65 | * @param E|null $previous Previous exception thrown, 66 | * or NULL if there is none. 67 | * @param int|string|resource|null $fragment The fragment up until the 68 | * point of failure. 69 | * On failure with sending, this is the number of bytes sent 70 | * successfully before the failure. 71 | * On failure when receiving, this is a string/stream holding 72 | * the contents received successfully before the failure. 73 | * NULL if the failure occurred before the operation started. 74 | */ 75 | public function __construct( 76 | $message, 77 | $code, 78 | E $previous = null, 79 | $fragment = null 80 | ) { 81 | parent::__construct($message, $code, $previous); 82 | $this->fragment = $fragment; 83 | } 84 | 85 | /** 86 | * Gets the stream fragment. 87 | * 88 | * @return int|string|resource|null The fragment up until the 89 | * point of failure. 90 | * On failure with sending, this is the number of bytes sent 91 | * successfully before the failure. 92 | * On failure when receiving, this is a string/stream holding 93 | * the contents received successfully before the failure. 94 | * NULL if the failure occurred before the operation started. 95 | */ 96 | public function getFragment() 97 | { 98 | return $this->fragment; 99 | } 100 | 101 | // @codeCoverageIgnoreStart 102 | // Unreliable in testing. 103 | 104 | /** 105 | * Returns a string representation of the exception. 106 | * 107 | * @return string The exception as a string. 108 | */ 109 | public function __toString() 110 | { 111 | $result = parent::__toString(); 112 | if (null !== $this->fragment) { 113 | $result .= "\nFragment: "; 114 | if (is_scalar($this->fragment)) { 115 | $result .= (string)$this->fragment; 116 | } else { 117 | $result .= stream_get_contents($this->fragment); 118 | } 119 | } 120 | return $result; 121 | } 122 | // @codeCoverageIgnoreEnd 123 | } 124 | -------------------------------------------------------------------------------- /app/Providers/AppServiceProvider.php: -------------------------------------------------------------------------------- 1 | 'App\Policies\ModelPolicy', 17 | ]; 18 | 19 | /** 20 | * Register any authentication / authorization services. 21 | * 22 | * @return void 23 | */ 24 | public function boot() 25 | { 26 | $this->registerPolicies(); 27 | 28 | // 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/Providers/BroadcastServiceProvider.php: -------------------------------------------------------------------------------- 1 | [ 19 | SendEmailVerificationNotification::class, 20 | ], 21 | ]; 22 | 23 | /** 24 | * Register any events for your application. 25 | * 26 | * @return void 27 | */ 28 | public function boot() 29 | { 30 | parent::boot(); 31 | 32 | // 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/Providers/RouteServiceProvider.php: -------------------------------------------------------------------------------- 1 | mapApiRoutes(); 46 | 47 | $this->mapWebRoutes(); 48 | 49 | // 50 | } 51 | 52 | /** 53 | * Define the "web" routes for the application. 54 | * 55 | * These routes all receive session state, CSRF protection, etc. 56 | * 57 | * @return void 58 | */ 59 | protected function mapWebRoutes() 60 | { 61 | Route::middleware('web') 62 | ->namespace($this->namespace) 63 | ->group(base_path('routes/web.php')); 64 | } 65 | 66 | /** 67 | * Define the "api" routes for the application. 68 | * 69 | * These routes are typically stateless. 70 | * 71 | * @return void 72 | */ 73 | protected function mapApiRoutes() 74 | { 75 | Route::prefix('api') 76 | ->middleware('api') 77 | ->namespace($this->namespace) 78 | ->group(base_path('routes/api.php')); 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /app/Router.php: -------------------------------------------------------------------------------- 1 | make(Illuminate\Contracts\Console\Kernel::class); 34 | 35 | $status = $kernel->handle( 36 | $input = new Symfony\Component\Console\Input\ArgvInput, 37 | new Symfony\Component\Console\Output\ConsoleOutput 38 | ); 39 | 40 | /* 41 | |-------------------------------------------------------------------------- 42 | | Shutdown The Application 43 | |-------------------------------------------------------------------------- 44 | | 45 | | Once Artisan has finished running, we will fire off the shutdown events 46 | | so that any final work may be done by the application before we shut 47 | | down the process. This is the last thing to happen to the request. 48 | | 49 | */ 50 | 51 | $kernel->terminate($input, $status); 52 | 53 | exit($status); 54 | -------------------------------------------------------------------------------- /bootstrap/app.php: -------------------------------------------------------------------------------- 1 | singleton( 30 | Illuminate\Contracts\Http\Kernel::class, 31 | App\Http\Kernel::class 32 | ); 33 | 34 | $app->singleton( 35 | Illuminate\Contracts\Console\Kernel::class, 36 | App\Console\Kernel::class 37 | ); 38 | 39 | $app->singleton( 40 | Illuminate\Contracts\Debug\ExceptionHandler::class, 41 | App\Exceptions\Handler::class 42 | ); 43 | 44 | /* 45 | |-------------------------------------------------------------------------- 46 | | Return The Application 47 | |-------------------------------------------------------------------------- 48 | | 49 | | This script returns the application instance. The instance is given to 50 | | the calling script so we can separate the building of the instances 51 | | from the actual running of the application and sending responses. 52 | | 53 | */ 54 | 55 | return $app; 56 | -------------------------------------------------------------------------------- /bootstrap/cache/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "archytech99/mytik-userman", 3 | "type": "project", 4 | "description": "MyTIK User Manager Hospot.", 5 | "keywords": [ 6 | "userman", 7 | "hotspot", 8 | "mikrotik", 9 | "userman-hotspot", 10 | "routeros-api", 11 | "laravel" 12 | ], 13 | "license": "MIT", 14 | "require": { 15 | "ext-gd": "*", 16 | "ext-pdo": "*", 17 | "ext-json": "*", 18 | "php": "^7.2|^8.0", 19 | "fideloper/proxy": "^4.4", 20 | "fruitcake/laravel-cors": "^2.0", 21 | "guzzlehttp/guzzle": "^6.3.1|^7.0.1", 22 | "intervention/image": "^2.5", 23 | "laravel/framework": "^7.29", 24 | "laravel/tinker": "^2.5", 25 | "simplesoftwareio/simple-qrcode": "~4", 26 | "yajra/laravel-datatables-oracle": "^9.15" 27 | }, 28 | "require-dev": { 29 | "facade/ignition": "^2.0", 30 | "fakerphp/faker": "^1.9.1", 31 | "mockery/mockery": "^1.3.1", 32 | "nunomaduro/collision": "^4.3", 33 | "phpunit/phpunit": "^8.5.8|^9.3.3" 34 | }, 35 | "config": { 36 | "optimize-autoloader": true, 37 | "preferred-install": "dist", 38 | "sort-packages": true 39 | }, 40 | "extra": { 41 | "laravel": { 42 | "dont-discover": [] 43 | } 44 | }, 45 | "autoload": { 46 | "psr-4": { 47 | "App\\": "app/" 48 | }, 49 | "files": [ 50 | "app/Helper.php", 51 | "app/Pear2/Autoload.php" 52 | ], 53 | "classmap": [ 54 | "database/seeds", 55 | "database/factories" 56 | ] 57 | }, 58 | "autoload-dev": { 59 | "psr-4": { 60 | "Tests\\": "tests/" 61 | } 62 | }, 63 | "minimum-stability": "dev", 64 | "prefer-stable": true, 65 | "scripts": { 66 | "post-autoload-dump": [ 67 | "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", 68 | "@php artisan package:discover --ansi" 69 | ], 70 | "post-root-package-install": [ 71 | "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" 72 | ], 73 | "post-create-project-cmd": [ 74 | "@php artisan key:generate --ansi" 75 | ] 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /config/auth.php: -------------------------------------------------------------------------------- 1 | [ 17 | 'guard' => 'web', 18 | 'passwords' => 'users', 19 | ], 20 | 21 | /* 22 | |-------------------------------------------------------------------------- 23 | | Authentication Guards 24 | |-------------------------------------------------------------------------- 25 | | 26 | | Next, you may define every authentication guard for your application. 27 | | Of course, a great default configuration has been defined for you 28 | | here which uses session storage and the Eloquent user provider. 29 | | 30 | | All authentication drivers have a user provider. This defines how the 31 | | users are actually retrieved out of your database or other storage 32 | | mechanisms used by this application to persist your user's data. 33 | | 34 | | Supported: "session", "token" 35 | | 36 | */ 37 | 38 | 'guards' => [ 39 | 'web' => [ 40 | 'driver' => 'session', 41 | 'provider' => 'users', 42 | ], 43 | 44 | 'api' => [ 45 | 'driver' => 'token', 46 | 'provider' => 'users', 47 | 'hash' => false, 48 | ], 49 | ], 50 | 51 | /* 52 | |-------------------------------------------------------------------------- 53 | | User Providers 54 | |-------------------------------------------------------------------------- 55 | | 56 | | All authentication drivers have a user provider. This defines how the 57 | | users are actually retrieved out of your database or other storage 58 | | mechanisms used by this application to persist your user's data. 59 | | 60 | | If you have multiple user tables or models you may configure multiple 61 | | sources which represent each model / table. These sources may then 62 | | be assigned to any extra authentication guards you have defined. 63 | | 64 | | Supported: "database", "eloquent" 65 | | 66 | */ 67 | 68 | 'providers' => [ 69 | 'users' => [ 70 | 'driver' => 'eloquent', 71 | 'model' => App\User::class, 72 | ], 73 | 74 | // 'users' => [ 75 | // 'driver' => 'database', 76 | // 'table' => 'users', 77 | // ], 78 | ], 79 | 80 | /* 81 | |-------------------------------------------------------------------------- 82 | | Resetting Passwords 83 | |-------------------------------------------------------------------------- 84 | | 85 | | You may specify multiple password reset configurations if you have more 86 | | than one user table or model in the application and you want to have 87 | | separate password reset settings based on the specific user types. 88 | | 89 | | The expire time is the number of minutes that the reset token should be 90 | | considered valid. This security feature keeps tokens short-lived so 91 | | they have less time to be guessed. You may change this as needed. 92 | | 93 | */ 94 | 95 | 'passwords' => [ 96 | 'users' => [ 97 | 'provider' => 'users', 98 | 'table' => 'password_resets', 99 | 'expire' => 60, 100 | 'throttle' => 60, 101 | ], 102 | ], 103 | 104 | /* 105 | |-------------------------------------------------------------------------- 106 | | Password Confirmation Timeout 107 | |-------------------------------------------------------------------------- 108 | | 109 | | Here you may define the amount of seconds before a password confirmation 110 | | times out and the user is prompted to re-enter their password via the 111 | | confirmation screen. By default, the timeout lasts for three hours. 112 | | 113 | */ 114 | 115 | 'password_timeout' => 10800, 116 | 117 | ]; 118 | -------------------------------------------------------------------------------- /config/broadcasting.php: -------------------------------------------------------------------------------- 1 | env('BROADCAST_DRIVER', 'null'), 19 | 20 | /* 21 | |-------------------------------------------------------------------------- 22 | | Broadcast Connections 23 | |-------------------------------------------------------------------------- 24 | | 25 | | Here you may define all of the broadcast connections that will be used 26 | | to broadcast events to other systems or over websockets. Samples of 27 | | each available type of connection are provided inside this array. 28 | | 29 | */ 30 | 31 | 'connections' => [ 32 | 33 | 'pusher' => [ 34 | 'driver' => 'pusher', 35 | 'key' => env('PUSHER_APP_KEY'), 36 | 'secret' => env('PUSHER_APP_SECRET'), 37 | 'app_id' => env('PUSHER_APP_ID'), 38 | 'options' => [ 39 | 'cluster' => env('PUSHER_APP_CLUSTER'), 40 | 'useTLS' => true, 41 | ], 42 | ], 43 | 44 | 'redis' => [ 45 | 'driver' => 'redis', 46 | 'connection' => 'default', 47 | ], 48 | 49 | 'log' => [ 50 | 'driver' => 'log', 51 | ], 52 | 53 | 'null' => [ 54 | 'driver' => 'null', 55 | ], 56 | 57 | ], 58 | 59 | ]; 60 | -------------------------------------------------------------------------------- /config/cache.php: -------------------------------------------------------------------------------- 1 | env('CACHE_DRIVER', 'file'), 22 | 23 | /* 24 | |-------------------------------------------------------------------------- 25 | | Cache Stores 26 | |-------------------------------------------------------------------------- 27 | | 28 | | Here you may define all of the cache "stores" for your application as 29 | | well as their drivers. You may even define multiple stores for the 30 | | same cache driver to group types of items stored in your caches. 31 | | 32 | */ 33 | 34 | 'stores' => [ 35 | 36 | 'apc' => [ 37 | 'driver' => 'apc', 38 | ], 39 | 40 | 'array' => [ 41 | 'driver' => 'array', 42 | 'serialize' => false, 43 | ], 44 | 45 | 'database' => [ 46 | 'driver' => 'database', 47 | 'table' => 'cache', 48 | 'connection' => null, 49 | ], 50 | 51 | 'file' => [ 52 | 'driver' => 'file', 53 | 'path' => storage_path('framework/cache/data'), 54 | ], 55 | 56 | 'memcached' => [ 57 | 'driver' => 'memcached', 58 | 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), 59 | 'sasl' => [ 60 | env('MEMCACHED_USERNAME'), 61 | env('MEMCACHED_PASSWORD'), 62 | ], 63 | 'options' => [ 64 | // Memcached::OPT_CONNECT_TIMEOUT => 2000, 65 | ], 66 | 'servers' => [ 67 | [ 68 | 'host' => env('MEMCACHED_HOST', '127.0.0.1'), 69 | 'port' => env('MEMCACHED_PORT', 11211), 70 | 'weight' => 100, 71 | ], 72 | ], 73 | ], 74 | 75 | 'redis' => [ 76 | 'driver' => 'redis', 77 | 'connection' => 'cache', 78 | ], 79 | 80 | 'dynamodb' => [ 81 | 'driver' => 'dynamodb', 82 | 'key' => env('AWS_ACCESS_KEY_ID'), 83 | 'secret' => env('AWS_SECRET_ACCESS_KEY'), 84 | 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), 85 | 'table' => env('DYNAMODB_CACHE_TABLE', 'cache'), 86 | 'endpoint' => env('DYNAMODB_ENDPOINT'), 87 | ], 88 | 89 | ], 90 | 91 | /* 92 | |-------------------------------------------------------------------------- 93 | | Cache Key Prefix 94 | |-------------------------------------------------------------------------- 95 | | 96 | | When utilizing a RAM based store such as APC or Memcached, there might 97 | | be other applications utilizing the same cache. So, we'll specify a 98 | | value to get prefixed to all our keys so we can avoid collisions. 99 | | 100 | */ 101 | 102 | 'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache'), 103 | 104 | ]; 105 | -------------------------------------------------------------------------------- /config/cors.php: -------------------------------------------------------------------------------- 1 | ['api/*'], 19 | 20 | 'allowed_methods' => ['*'], 21 | 22 | 'allowed_origins' => ['*'], 23 | 24 | 'allowed_origins_patterns' => [], 25 | 26 | 'allowed_headers' => ['*'], 27 | 28 | 'exposed_headers' => [], 29 | 30 | 'max_age' => 0, 31 | 32 | 'supports_credentials' => false, 33 | 34 | ]; 35 | -------------------------------------------------------------------------------- /config/datatables.php: -------------------------------------------------------------------------------- 1 | [ 8 | /* 9 | * Smart search will enclose search keyword with wildcard string "%keyword%". 10 | * SQL: column LIKE "%keyword%" 11 | */ 12 | 'smart' => true, 13 | 14 | /* 15 | * Multi-term search will explode search keyword using spaces resulting into multiple term search. 16 | */ 17 | 'multi_term' => true, 18 | 19 | /* 20 | * Case insensitive will search the keyword in lower case format. 21 | * SQL: LOWER(column) LIKE LOWER(keyword) 22 | */ 23 | 'case_insensitive' => true, 24 | 25 | /* 26 | * Wild card will add "%" in between every characters of the keyword. 27 | * SQL: column LIKE "%k%e%y%w%o%r%d%" 28 | */ 29 | 'use_wildcards' => false, 30 | 31 | /* 32 | * Perform a search which starts with the given keyword. 33 | * SQL: column LIKE "keyword%" 34 | */ 35 | 'starts_with' => false, 36 | ], 37 | 38 | /* 39 | * DataTables internal index id response column name. 40 | */ 41 | 'index_column' => 'DT_RowIndex', 42 | 43 | /* 44 | * List of available builders for DataTables. 45 | * This is where you can register your custom dataTables builder. 46 | */ 47 | 'engines' => [ 48 | 'eloquent' => Yajra\DataTables\EloquentDataTable::class, 49 | 'query' => Yajra\DataTables\QueryDataTable::class, 50 | 'collection' => Yajra\DataTables\CollectionDataTable::class, 51 | 'resource' => Yajra\DataTables\ApiResourceDataTable::class, 52 | ], 53 | 54 | /* 55 | * DataTables accepted builder to engine mapping. 56 | * This is where you can override which engine a builder should use 57 | * Note, only change this if you know what you are doing! 58 | */ 59 | 'builders' => [ 60 | //Illuminate\Database\Eloquent\Relations\Relation::class => 'eloquent', 61 | //Illuminate\Database\Eloquent\Builder::class => 'eloquent', 62 | //Illuminate\Database\Query\Builder::class => 'query', 63 | //Illuminate\Support\Collection::class => 'collection', 64 | ], 65 | 66 | /* 67 | * Nulls last sql pattern for PostgreSQL & Oracle. 68 | * For MySQL, use 'CASE WHEN :column IS NULL THEN 1 ELSE 0 END, :column :direction' 69 | */ 70 | 'nulls_last_sql' => ':column :direction NULLS LAST', 71 | 72 | /* 73 | * User friendly message to be displayed on user if error occurs. 74 | * Possible values: 75 | * null - The exception message will be used on error response. 76 | * 'throw' - Throws a \Yajra\DataTables\Exceptions\Exception. Use your custom error handler if needed. 77 | * 'custom message' - Any friendly message to be displayed to the user. You can also use translation key. 78 | */ 79 | 'error' => env('DATATABLES_ERROR', null), 80 | 81 | /* 82 | * Default columns definition of dataTable utility functions. 83 | */ 84 | 'columns' => [ 85 | /* 86 | * List of columns hidden/removed on json response. 87 | */ 88 | 'excess' => ['rn', 'row_num'], 89 | 90 | /* 91 | * List of columns to be escaped. If set to *, all columns are escape. 92 | * Note: You can set the value to empty array to disable XSS protection. 93 | */ 94 | 'escape' => '*', 95 | 96 | /* 97 | * List of columns that are allowed to display html content. 98 | * Note: Adding columns to list will make us available to XSS attacks. 99 | */ 100 | 'raw' => ['action'], 101 | 102 | /* 103 | * List of columns are are forbidden from being searched/sorted. 104 | */ 105 | 'blacklist' => ['password', 'remember_token'], 106 | 107 | /* 108 | * List of columns that are only allowed fo search/sort. 109 | * If set to *, all columns are allowed. 110 | */ 111 | 'whitelist' => '*', 112 | ], 113 | 114 | /* 115 | * JsonResponse header and options config. 116 | */ 117 | 'json' => [ 118 | 'header' => [], 119 | 'options' => 0, 120 | ], 121 | 122 | ]; 123 | -------------------------------------------------------------------------------- /config/filesystems.php: -------------------------------------------------------------------------------- 1 | env('FILESYSTEM_DRIVER', 'local'), 17 | 18 | /* 19 | |-------------------------------------------------------------------------- 20 | | Default Cloud Filesystem Disk 21 | |-------------------------------------------------------------------------- 22 | | 23 | | Many applications store files both locally and in the cloud. For this 24 | | reason, you may specify a default "cloud" driver here. This driver 25 | | will be bound as the Cloud disk implementation in the container. 26 | | 27 | */ 28 | 29 | 'cloud' => env('FILESYSTEM_CLOUD', 's3'), 30 | 31 | /* 32 | |-------------------------------------------------------------------------- 33 | | Filesystem Disks 34 | |-------------------------------------------------------------------------- 35 | | 36 | | Here you may configure as many filesystem "disks" as you wish, and you 37 | | may even configure multiple disks of the same driver. Defaults have 38 | | been setup for each driver as an example of the required options. 39 | | 40 | | Supported Drivers: "local", "ftp", "sftp", "s3" 41 | | 42 | */ 43 | 44 | 'disks' => [ 45 | 46 | 'local' => [ 47 | 'driver' => 'local', 48 | 'root' => storage_path('app'), 49 | ], 50 | 51 | 'public' => [ 52 | 'driver' => 'local', 53 | 'root' => storage_path('app/public'), 54 | 'url' => env('APP_URL').'/storage', 55 | 'visibility' => 'public', 56 | ], 57 | 58 | 's3' => [ 59 | 'driver' => 's3', 60 | 'key' => env('AWS_ACCESS_KEY_ID'), 61 | 'secret' => env('AWS_SECRET_ACCESS_KEY'), 62 | 'region' => env('AWS_DEFAULT_REGION'), 63 | 'bucket' => env('AWS_BUCKET'), 64 | 'url' => env('AWS_URL'), 65 | 'endpoint' => env('AWS_ENDPOINT'), 66 | ], 67 | 68 | ], 69 | 70 | /* 71 | |-------------------------------------------------------------------------- 72 | | Symbolic Links 73 | |-------------------------------------------------------------------------- 74 | | 75 | | Here you may configure the symbolic links that will be created when the 76 | | `storage:link` Artisan command is executed. The array keys should be 77 | | the locations of the links and the values should be their targets. 78 | | 79 | */ 80 | 81 | 'links' => [ 82 | public_path('storage') => storage_path('app/public'), 83 | ], 84 | 85 | ]; 86 | -------------------------------------------------------------------------------- /config/hashing.php: -------------------------------------------------------------------------------- 1 | 'bcrypt', 19 | 20 | /* 21 | |-------------------------------------------------------------------------- 22 | | Bcrypt Options 23 | |-------------------------------------------------------------------------- 24 | | 25 | | Here you may specify the configuration options that should be used when 26 | | passwords are hashed using the Bcrypt algorithm. This will allow you 27 | | to control the amount of time it takes to hash the given password. 28 | | 29 | */ 30 | 31 | 'bcrypt' => [ 32 | 'rounds' => env('BCRYPT_ROUNDS', 10), 33 | ], 34 | 35 | /* 36 | |-------------------------------------------------------------------------- 37 | | Argon Options 38 | |-------------------------------------------------------------------------- 39 | | 40 | | Here you may specify the configuration options that should be used when 41 | | passwords are hashed using the Argon algorithm. These will allow you 42 | | to control the amount of time it takes to hash the given password. 43 | | 44 | */ 45 | 46 | 'argon' => [ 47 | 'memory' => 1024, 48 | 'threads' => 2, 49 | 'time' => 2, 50 | ], 51 | 52 | ]; 53 | -------------------------------------------------------------------------------- /config/logging.php: -------------------------------------------------------------------------------- 1 | env('LOG_CHANNEL', 'stack'), 21 | 22 | /* 23 | |-------------------------------------------------------------------------- 24 | | Log Channels 25 | |-------------------------------------------------------------------------- 26 | | 27 | | Here you may configure the log channels for your application. Out of 28 | | the box, Laravel uses the Monolog PHP logging library. This gives 29 | | you a variety of powerful log handlers / formatters to utilize. 30 | | 31 | | Available Drivers: "single", "daily", "slack", "syslog", 32 | | "errorlog", "monolog", 33 | | "custom", "stack" 34 | | 35 | */ 36 | 37 | 'channels' => [ 38 | 'stack' => [ 39 | 'driver' => 'stack', 40 | 'channels' => ['single'], 41 | 'ignore_exceptions' => false, 42 | ], 43 | 44 | 'single' => [ 45 | 'driver' => 'single', 46 | 'path' => storage_path('logs/laravel.log'), 47 | 'level' => 'debug', 48 | ], 49 | 50 | 'daily' => [ 51 | 'driver' => 'daily', 52 | 'path' => storage_path('logs/laravel.log'), 53 | 'level' => 'debug', 54 | 'days' => 14, 55 | ], 56 | 57 | 'slack' => [ 58 | 'driver' => 'slack', 59 | 'url' => env('LOG_SLACK_WEBHOOK_URL'), 60 | 'username' => 'Laravel Log', 61 | 'emoji' => ':boom:', 62 | 'level' => 'critical', 63 | ], 64 | 65 | 'papertrail' => [ 66 | 'driver' => 'monolog', 67 | 'level' => 'debug', 68 | 'handler' => SyslogUdpHandler::class, 69 | 'handler_with' => [ 70 | 'host' => env('PAPERTRAIL_URL'), 71 | 'port' => env('PAPERTRAIL_PORT'), 72 | ], 73 | ], 74 | 75 | 'stderr' => [ 76 | 'driver' => 'monolog', 77 | 'handler' => StreamHandler::class, 78 | 'formatter' => env('LOG_STDERR_FORMATTER'), 79 | 'with' => [ 80 | 'stream' => 'php://stderr', 81 | ], 82 | ], 83 | 84 | 'syslog' => [ 85 | 'driver' => 'syslog', 86 | 'level' => 'debug', 87 | ], 88 | 89 | 'errorlog' => [ 90 | 'driver' => 'errorlog', 91 | 'level' => 'debug', 92 | ], 93 | 94 | 'null' => [ 95 | 'driver' => 'monolog', 96 | 'handler' => NullHandler::class, 97 | ], 98 | 99 | 'emergency' => [ 100 | 'path' => storage_path('logs/laravel.log'), 101 | ], 102 | ], 103 | 104 | ]; 105 | -------------------------------------------------------------------------------- /config/mail.php: -------------------------------------------------------------------------------- 1 | env('MAIL_MAILER', 'smtp'), 17 | 18 | /* 19 | |-------------------------------------------------------------------------- 20 | | Mailer Configurations 21 | |-------------------------------------------------------------------------- 22 | | 23 | | Here you may configure all of the mailers used by your application plus 24 | | their respective settings. Several examples have been configured for 25 | | you and you are free to add your own as your application requires. 26 | | 27 | | Laravel supports a variety of mail "transport" drivers to be used while 28 | | sending an e-mail. You will specify which one you are using for your 29 | | mailers below. You are free to add additional mailers as required. 30 | | 31 | | Supported: "smtp", "sendmail", "mailgun", "ses", 32 | | "postmark", "log", "array" 33 | | 34 | */ 35 | 36 | 'mailers' => [ 37 | 'smtp' => [ 38 | 'transport' => 'smtp', 39 | 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), 40 | 'port' => env('MAIL_PORT', 587), 41 | 'encryption' => env('MAIL_ENCRYPTION', 'tls'), 42 | 'username' => env('MAIL_USERNAME'), 43 | 'password' => env('MAIL_PASSWORD'), 44 | 'timeout' => null, 45 | 'auth_mode' => null, 46 | ], 47 | 48 | 'ses' => [ 49 | 'transport' => 'ses', 50 | ], 51 | 52 | 'mailgun' => [ 53 | 'transport' => 'mailgun', 54 | ], 55 | 56 | 'postmark' => [ 57 | 'transport' => 'postmark', 58 | ], 59 | 60 | 'sendmail' => [ 61 | 'transport' => 'sendmail', 62 | 'path' => '/usr/sbin/sendmail -bs', 63 | ], 64 | 65 | 'log' => [ 66 | 'transport' => 'log', 67 | 'channel' => env('MAIL_LOG_CHANNEL'), 68 | ], 69 | 70 | 'array' => [ 71 | 'transport' => 'array', 72 | ], 73 | ], 74 | 75 | /* 76 | |-------------------------------------------------------------------------- 77 | | Global "From" Address 78 | |-------------------------------------------------------------------------- 79 | | 80 | | You may wish for all e-mails sent by your application to be sent from 81 | | the same address. Here, you may specify a name and address that is 82 | | used globally for all e-mails that are sent by your application. 83 | | 84 | */ 85 | 86 | 'from' => [ 87 | 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), 88 | 'name' => env('MAIL_FROM_NAME', 'Example'), 89 | ], 90 | 91 | /* 92 | |-------------------------------------------------------------------------- 93 | | Markdown Mail Settings 94 | |-------------------------------------------------------------------------- 95 | | 96 | | If you are using Markdown based email rendering, you may configure your 97 | | theme and component paths here, allowing you to customize the design 98 | | of the emails. Or, you may simply stick with the Laravel defaults! 99 | | 100 | */ 101 | 102 | 'markdown' => [ 103 | 'theme' => 'default', 104 | 105 | 'paths' => [ 106 | resource_path('views/vendor/mail'), 107 | ], 108 | ], 109 | 110 | ]; 111 | -------------------------------------------------------------------------------- /config/queue.php: -------------------------------------------------------------------------------- 1 | env('QUEUE_CONNECTION', 'sync'), 17 | 18 | /* 19 | |-------------------------------------------------------------------------- 20 | | Queue Connections 21 | |-------------------------------------------------------------------------- 22 | | 23 | | Here you may configure the connection information for each server that 24 | | is used by your application. A default configuration has been added 25 | | for each back-end shipped with Laravel. You are free to add more. 26 | | 27 | | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null" 28 | | 29 | */ 30 | 31 | 'connections' => [ 32 | 33 | 'sync' => [ 34 | 'driver' => 'sync', 35 | ], 36 | 37 | 'database' => [ 38 | 'driver' => 'database', 39 | 'table' => 'jobs', 40 | 'queue' => 'default', 41 | 'retry_after' => 90, 42 | ], 43 | 44 | 'beanstalkd' => [ 45 | 'driver' => 'beanstalkd', 46 | 'host' => 'localhost', 47 | 'queue' => 'default', 48 | 'retry_after' => 90, 49 | 'block_for' => 0, 50 | ], 51 | 52 | 'sqs' => [ 53 | 'driver' => 'sqs', 54 | 'key' => env('AWS_ACCESS_KEY_ID'), 55 | 'secret' => env('AWS_SECRET_ACCESS_KEY'), 56 | 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'), 57 | 'queue' => env('SQS_QUEUE', 'your-queue-name'), 58 | 'suffix' => env('SQS_SUFFIX'), 59 | 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), 60 | ], 61 | 62 | 'redis' => [ 63 | 'driver' => 'redis', 64 | 'connection' => 'default', 65 | 'queue' => env('REDIS_QUEUE', 'default'), 66 | 'retry_after' => 90, 67 | 'block_for' => null, 68 | ], 69 | 70 | ], 71 | 72 | /* 73 | |-------------------------------------------------------------------------- 74 | | Failed Queue Jobs 75 | |-------------------------------------------------------------------------- 76 | | 77 | | These options configure the behavior of failed queue job logging so you 78 | | can control which database and table are used to store the jobs that 79 | | have failed. You may change them to any database / table you wish. 80 | | 81 | */ 82 | 83 | 'failed' => [ 84 | 'driver' => env('QUEUE_FAILED_DRIVER', 'database'), 85 | 'database' => env('DB_CONNECTION', 'mysql'), 86 | 'table' => 'failed_jobs', 87 | ], 88 | 89 | ]; 90 | -------------------------------------------------------------------------------- /config/services.php: -------------------------------------------------------------------------------- 1 | [ 18 | 'domain' => env('MAILGUN_DOMAIN'), 19 | 'secret' => env('MAILGUN_SECRET'), 20 | 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), 21 | ], 22 | 23 | 'postmark' => [ 24 | 'token' => env('POSTMARK_TOKEN'), 25 | ], 26 | 27 | 'ses' => [ 28 | 'key' => env('AWS_ACCESS_KEY_ID'), 29 | 'secret' => env('AWS_SECRET_ACCESS_KEY'), 30 | 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), 31 | ], 32 | 33 | ]; 34 | -------------------------------------------------------------------------------- /config/view.php: -------------------------------------------------------------------------------- 1 | [ 17 | resource_path('views'), 18 | ], 19 | 20 | /* 21 | |-------------------------------------------------------------------------- 22 | | Compiled View Path 23 | |-------------------------------------------------------------------------- 24 | | 25 | | This option determines where all the compiled Blade templates will be 26 | | stored for your application. Typically, this is within the storage 27 | | directory. However, as usual, you are free to change this value. 28 | | 29 | */ 30 | 31 | 'compiled' => env( 32 | 'VIEW_COMPILED_PATH', 33 | realpath(storage_path('framework/views')) 34 | ), 35 | 36 | ]; 37 | -------------------------------------------------------------------------------- /database/.gitignore: -------------------------------------------------------------------------------- 1 | *.sqlite 2 | *.sqlite-journal 3 | -------------------------------------------------------------------------------- /database/factories/UserFactory.php: -------------------------------------------------------------------------------- 1 | define(Model::class, function (Faker $faker) { 9 | return [ 10 | // 11 | ]; 12 | }); 13 | -------------------------------------------------------------------------------- /database/migrations/2014_10_12_000000_create_users_table.php: -------------------------------------------------------------------------------- 1 | char('id', LENGTH_ID)->primary(); 18 | $table->text('username')->unique(); 19 | $table->text('password')->nullable(); 20 | $table->text('last_login')->nullable(); 21 | $table->rememberToken(); 22 | }); 23 | } 24 | 25 | /** 26 | * Reverse the migrations. 27 | * 28 | * @return void 29 | */ 30 | public function down() 31 | { 32 | Schema::dropIfExists('users'); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /database/migrations/2021_03_18_172614_create_sessions_table.php: -------------------------------------------------------------------------------- 1 | char('id', LENGTH_ID)->primary(); 18 | $table->text('hosts')->nullable(); 19 | $table->text('username')->unique(); 20 | $table->text('password')->nullable(); 21 | $table->integer('port')->nullable(); 22 | }); 23 | } 24 | 25 | /** 26 | * Reverse the migrations. 27 | * 28 | * @return void 29 | */ 30 | public function down() 31 | { 32 | Schema::dropIfExists('sessions'); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /database/migrations/2021_03_18_184258_create_routers_table.php: -------------------------------------------------------------------------------- 1 | char('id', LENGTH_ID)->primary(); 18 | $table->text('hosts')->nullable(); 19 | $table->text('username')->nullable(); 20 | $table->text('password')->nullable(); 21 | $table->integer('port')->nullable(); 22 | }); 23 | } 24 | 25 | /** 26 | * Reverse the migrations. 27 | * 28 | * @return void 29 | */ 30 | public function down() 31 | { 32 | Schema::dropIfExists('routers'); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /database/seeds/DatabaseSeeder.php: -------------------------------------------------------------------------------- 1 | call(UserSeeder::class); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "scripts": { 4 | "dev": "npm run development", 5 | "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --config=node_modules/laravel-mix/setup/webpack.config.js", 6 | "watch": "npm run development -- --watch", 7 | "watch-poll": "npm run watch -- --watch-poll", 8 | "clear-dev": "php artisan clear && php artisan optimize:clear && php artisan config:clear && php artisan cache:clear && php artisan view:clear && php artisan event:clear && php artisan route:clear", 9 | "heroku-clear-dev": "heroku run php artisan clear && php artisan optimize:clear && php artisan config:clear && php artisan cache:clear && php artisan view:clear && php artisan event:clear && php artisan route:clear", 10 | "serve-dev": "npm run clear-dev && php artisan serve --host=0.0.0.0 --port=8080", 11 | "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --disable-host-check --config=node_modules/laravel-mix/setup/webpack.config.js", 12 | "prod": "npm run production", 13 | "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --config=node_modules/laravel-mix/setup/webpack.config.js" 14 | }, 15 | "devDependencies": { 16 | "axios": "^0.19", 17 | "cross-env": "^7.0", 18 | "laravel-mix": "^5.0.1", 19 | "lodash": "^4.17.19", 20 | "resolve-url-loader": "^3.1.0", 21 | "sass": "^1.15.2", 22 | "sass-loader": "^8.0.0" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | ./tests/Unit 10 | 11 | 12 | ./tests/Feature 13 | 14 | 15 | 16 | 17 | ./app 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /public/.htaccess: -------------------------------------------------------------------------------- 1 | 2 | 3 | Options -MultiViews -Indexes 4 | 5 | 6 | RewriteEngine On 7 | 8 | # Handle Authorization Header 9 | RewriteCond %{HTTP:Authorization} . 10 | RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 11 | 12 | # Redirect Trailing Slashes If Not A Folder... 13 | RewriteCond %{REQUEST_FILENAME} !-d 14 | RewriteCond %{REQUEST_URI} (.+)/$ 15 | RewriteRule ^ %1 [L,R=301] 16 | 17 | # Send Requests To Front Controller... 18 | RewriteCond %{REQUEST_FILENAME} !-d 19 | RewriteCond %{REQUEST_FILENAME} !-f 20 | RewriteRule ^ index.php [L] 21 | 22 | -------------------------------------------------------------------------------- /public/assets/css/metismenu.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * metismenu https://github.com/onokumus/metismenu#readme 3 | * A jQuery menu plugin 4 | * @version 3.0.4 5 | * @author Osman Nuri Okumus (https://github.com/onokumus) 6 | * @license: MIT 7 | */.metismenu .arrow{float:right;line-height:1.42857}[dir=rtl] .metismenu .arrow{float:left}.metismenu .glyphicon.arrow:before{content:"\e079"}.metismenu .mm-active>a>.glyphicon.arrow:before{content:"\e114"}.metismenu .fa.arrow:before{content:"\f104"}.metismenu .mm-active>a>.fa.arrow:before{content:"\f107"}.metismenu .ion.arrow:before{content:"\f3d2"}.metismenu .mm-active>a>.ion.arrow:before{content:"\f3d0"}.metismenu .plus-times{float:right}[dir=rtl] .metismenu .plus-times{float:left}.metismenu .fa.plus-times:before{content:"\f067"}.metismenu .mm-active>a>.fa.plus-times{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.metismenu .plus-minus{float:right}[dir=rtl] .metismenu .plus-minus{float:left}.metismenu .fa.plus-minus:before{content:"\f067"}.metismenu .mm-active>a>.fa.plus-minus:before{content:"\f068"}.metismenu .mm-collapse:not(.mm-show){display:none}.metismenu .mm-collapsing{position:relative;height:0;overflow:hidden;transition-timing-function:ease;transition-duration:.35s;transition-property:height,visibility}.metismenu .has-arrow{position:relative}.metismenu .has-arrow:after{position:absolute;content:"";width:.5em;height:.5em;border-style:solid;border-width:1px 0 0 1px;border-color:initial;right:1em;-webkit-transform:rotate(-45deg) translateY(-50%);transform:rotate(-45deg) translateY(-50%);-webkit-transform-origin:top;transform-origin:top;top:50%;transition:all .3s ease-out}[dir=rtl] .metismenu .has-arrow:after{right:auto;left:1em;-webkit-transform:rotate(135deg) translateY(-50%);transform:rotate(135deg) translateY(-50%)}.metismenu .has-arrow[aria-expanded=true]:after,.metismenu .mm-active>.has-arrow:after{-webkit-transform:rotate(-135deg) translateY(-50%);transform:rotate(-135deg) translateY(-50%)}[dir=rtl] .metismenu .has-arrow[aria-expanded=true]:after,[dir=rtl] .metismenu .mm-active>.has-arrow:after{-webkit-transform:rotate(225deg) translateY(-50%);transform:rotate(225deg) translateY(-50%)} 8 | /*# sourceMappingURL=metisMenu.min.css.map */ -------------------------------------------------------------------------------- /public/assets/fonts/dripicons-v2.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/public/assets/fonts/dripicons-v2.eot -------------------------------------------------------------------------------- /public/assets/fonts/dripicons-v2.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/public/assets/fonts/dripicons-v2.ttf -------------------------------------------------------------------------------- /public/assets/fonts/dripicons-v2.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/public/assets/fonts/dripicons-v2.woff -------------------------------------------------------------------------------- /public/assets/fonts/fa-brands-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/public/assets/fonts/fa-brands-400.eot -------------------------------------------------------------------------------- /public/assets/fonts/fa-brands-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/public/assets/fonts/fa-brands-400.ttf -------------------------------------------------------------------------------- /public/assets/fonts/fa-brands-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/public/assets/fonts/fa-brands-400.woff -------------------------------------------------------------------------------- /public/assets/fonts/fa-brands-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/public/assets/fonts/fa-brands-400.woff2 -------------------------------------------------------------------------------- /public/assets/fonts/fa-regular-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/public/assets/fonts/fa-regular-400.eot -------------------------------------------------------------------------------- /public/assets/fonts/fa-regular-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/public/assets/fonts/fa-regular-400.ttf -------------------------------------------------------------------------------- /public/assets/fonts/fa-regular-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/public/assets/fonts/fa-regular-400.woff -------------------------------------------------------------------------------- /public/assets/fonts/fa-regular-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/public/assets/fonts/fa-regular-400.woff2 -------------------------------------------------------------------------------- /public/assets/fonts/fa-solid-900.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/public/assets/fonts/fa-solid-900.eot -------------------------------------------------------------------------------- /public/assets/fonts/fa-solid-900.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/public/assets/fonts/fa-solid-900.ttf -------------------------------------------------------------------------------- /public/assets/fonts/fa-solid-900.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/public/assets/fonts/fa-solid-900.woff -------------------------------------------------------------------------------- /public/assets/fonts/fa-solid-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/public/assets/fonts/fa-solid-900.woff2 -------------------------------------------------------------------------------- /public/assets/fonts/ionicons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/public/assets/fonts/ionicons.eot -------------------------------------------------------------------------------- /public/assets/fonts/ionicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/public/assets/fonts/ionicons.ttf -------------------------------------------------------------------------------- /public/assets/fonts/ionicons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/public/assets/fonts/ionicons.woff -------------------------------------------------------------------------------- /public/assets/fonts/ionicons.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/public/assets/fonts/ionicons.woff2 -------------------------------------------------------------------------------- /public/assets/fonts/materialdesignicons-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/public/assets/fonts/materialdesignicons-webfont.eot -------------------------------------------------------------------------------- /public/assets/fonts/materialdesignicons-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/public/assets/fonts/materialdesignicons-webfont.ttf -------------------------------------------------------------------------------- /public/assets/fonts/materialdesignicons-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/public/assets/fonts/materialdesignicons-webfont.woff -------------------------------------------------------------------------------- /public/assets/fonts/materialdesignicons-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/public/assets/fonts/materialdesignicons-webfont.woff2 -------------------------------------------------------------------------------- /public/assets/fonts/outlined-iconset.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/public/assets/fonts/outlined-iconset.eot -------------------------------------------------------------------------------- /public/assets/fonts/outlined-iconset.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/public/assets/fonts/outlined-iconset.ttf -------------------------------------------------------------------------------- /public/assets/fonts/outlined-iconset.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/public/assets/fonts/outlined-iconset.woff -------------------------------------------------------------------------------- /public/assets/fonts/themify.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/public/assets/fonts/themify.eot -------------------------------------------------------------------------------- /public/assets/fonts/themify.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/public/assets/fonts/themify.ttf -------------------------------------------------------------------------------- /public/assets/fonts/themify.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/public/assets/fonts/themify.woff -------------------------------------------------------------------------------- /public/assets/fonts/typicons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/public/assets/fonts/typicons.eot -------------------------------------------------------------------------------- /public/assets/fonts/typicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/public/assets/fonts/typicons.ttf -------------------------------------------------------------------------------- /public/assets/fonts/typicons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/public/assets/fonts/typicons.woff -------------------------------------------------------------------------------- /public/assets/images/bg-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/public/assets/images/bg-1.png -------------------------------------------------------------------------------- /public/assets/images/bg-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/public/assets/images/bg-2.png -------------------------------------------------------------------------------- /public/assets/images/logo-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/public/assets/images/logo-dark.png -------------------------------------------------------------------------------- /public/assets/images/logo-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/public/assets/images/logo-light.png -------------------------------------------------------------------------------- /public/assets/images/logo-sm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/public/assets/images/logo-sm.png -------------------------------------------------------------------------------- /public/assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/public/assets/images/logo.png -------------------------------------------------------------------------------- /public/assets/images/user.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/public/assets/images/user.jpg -------------------------------------------------------------------------------- /public/assets/images/user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/public/assets/images/user.png -------------------------------------------------------------------------------- /public/assets/js/metismenu.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * metismenu https://github.com/onokumus/metismenu#readme 3 | * A jQuery menu plugin 4 | * @version 3.0.4 5 | * @author Osman Nuri Okumus (https://github.com/onokumus) 6 | * @license: MIT 7 | */ 8 | !function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],n):(e=e||self).metisMenu=n(e.jQuery)}(this,function(o){"use strict";function s(){return(s=Object.assign||function(e){for(var n=1;nPencarian: _INPUT_', 29 | 'searchPlaceholder': 'Pencarian', 30 | 'lengthMenu' : 'Tampilkan : _MENU_', 31 | 'paginate' : { 32 | 'first' : 'Awal', 33 | 'last' : 'Akhir', 34 | 'next' : athtml.attr('dir') === 'rtl' ? '←' : '→', 35 | 'previous': athtml.attr('dir') === 'rtl' ? '→' : '←' 36 | } 37 | }, 38 | 'ajax' : getSession, 39 | 'columns' : [ 40 | { 'data': 'id', 41 | render: function ( data, type, full, meta ) { 42 | return '\n' + 43 | '\n'; 45 | } 46 | }, 47 | { 'data': 'hosts' }, 48 | { 'data': 'username' }, 49 | { 'data': 'port' }, 50 | { 'data': 'last_log' } 51 | ] 52 | }); 53 | } 54 | 55 | function reload_session() { 56 | table.ajax.reload(null, false); 57 | } 58 | 59 | function hapus_session(a) { 60 | let id = $(a).data('id'); 61 | 62 | swal({ 63 | title: 'Apa anda yakin??', 64 | text: "Session akan dihapus?!", 65 | type: 'warning', 66 | showCancelButton: true, 67 | confirmButtonText: 'Yakin!', 68 | cancelButtonText: 'Batal!', 69 | confirmButtonClass: 'btn btn-success', 70 | cancelButtonClass: 'btn btn-danger ml-2', 71 | buttonsStyling: false 72 | }).then(function (cDel) { 73 | if (cDel.value) { 74 | $.ajax({ 75 | cache : false, 76 | url : delSession, 77 | type : "DELETE", 78 | dataType : "json", 79 | data : { '_token': csrfToken, 'del_id': id }, 80 | beforeSend:function(request) { 81 | goBlockUI( true ) 82 | }, 83 | success: function( response ) { 84 | $.unblockUI(); 85 | if (response.status) { 86 | reload_session(); 87 | swal( 88 | response.title, 89 | response.text, 90 | response.icon 91 | ); 92 | } else { 93 | swal( 94 | response.title, 95 | response.text, 96 | response.icon 97 | ) 98 | } 99 | }, 100 | error: function (jqXHR, textStatus, errorThrown) { 101 | $.unblockUI(); 102 | swal( 103 | textStatus, 104 | 'Internal Server Error!', 105 | 'error' 106 | ); 107 | } 108 | }) 109 | } 110 | }) 111 | } 112 | -------------------------------------------------------------------------------- /public/assets/vendor/alertify/css/alertify.css: -------------------------------------------------------------------------------- 1 | .alertify-logs>*{padding:12px 24px;color:#fff;box-shadow:0 2px 5px 0 rgba(0,0,0,.2);border-radius:1px}.alertify-logs>*,.alertify-logs>.default{background:rgba(0,0,0,.8)}.alertify-logs>.error{background:rgba(244,67,54,.8)}.alertify-logs>.success{background:rgba(76,175,80,.9)}.alertify{position:fixed;background-color:rgba(0,0,0,.3);left:0;right:0;top:0;bottom:0;width:100%;height:100%;z-index:1}.alertify.hide{opacity:0;pointer-events:none}.alertify,.alertify.show{box-sizing:border-box;transition:all .33s cubic-bezier(.25,.8,.25,1)}.alertify,.alertify *{box-sizing:border-box}.alertify .dialog{padding:12px}.alertify .alert,.alertify .dialog{width:100%;margin:0 auto;position:relative;top:50%;transform:translateY(-50%)}.alertify .alert>*,.alertify .dialog>*{width:400px;max-width:95%;margin:0 auto;text-align:center;padding:12px;background:#fff;box-shadow:0 2px 4px -1px rgba(0,0,0,.14),0 4px 5px 0 rgba(0,0,0,.098),0 1px 10px 0 rgba(0,0,0,.084)}.alertify .alert .msg,.alertify .dialog .msg{padding:12px;margin-bottom:12px;margin:0;text-align:left}.alertify .alert input:not(.form-control),.alertify .dialog input:not(.form-control){margin-bottom:15px;width:100%;font-size:100%;padding:12px}.alertify .alert input:not(.form-control):focus,.alertify .dialog input:not(.form-control):focus{outline-offset:-2px}.alertify .alert nav,.alertify .dialog nav{text-align:right}.alertify .alert nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button),.alertify .dialog nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button){background:transparent;box-sizing:border-box;color:rgba(0,0,0,.87);position:relative;outline:0;border:0;display:inline-block;-ms-flex-align:center;-ms-grid-row-align:center;align-items:center;padding:0 6px;margin:6px 8px;line-height:36px;min-height:36px;white-space:nowrap;min-width:88px;text-align:center;text-transform:uppercase;font-size:14px;text-decoration:none;cursor:pointer;border:1px solid transparent;border-radius:2px}.alertify .alert nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button):active,.alertify .alert nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button):hover,.alertify .dialog nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button):active,.alertify .dialog nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button):hover{background-color:rgba(0,0,0,.05)}.alertify .alert nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button):focus,.alertify .dialog nav button:not(.btn):not(.pure-button):not(.md-button):not(.mdl-button):focus{border:1px solid rgba(0,0,0,.1)}.alertify .alert nav button.btn,.alertify .dialog nav button.btn{margin:6px 4px}.alertify-logs{position:fixed;z-index:1}.alertify-logs.bottom,.alertify-logs:not(.top){bottom:16px}.alertify-logs.left,.alertify-logs:not(.right){left:16px}.alertify-logs.left>*,.alertify-logs:not(.right)>*{float:left;transform:translateZ(0);height:auto}.alertify-logs.left>.show,.alertify-logs:not(.right)>.show{left:0}.alertify-logs.left>*,.alertify-logs.left>.hide,.alertify-logs:not(.right)>*,.alertify-logs:not(.right)>.hide{left:-110%}.alertify-logs.right{right:16px}.alertify-logs.right>*{float:right;transform:translateZ(0)}.alertify-logs.right>.show{right:0;opacity:1}.alertify-logs.right>*,.alertify-logs.right>.hide{right:-110%;opacity:0}.alertify-logs.top{top:0}.alertify-logs>*{box-sizing:border-box;transition:all .4s cubic-bezier(.25,.8,.25,1);position:relative;clear:both;backface-visibility:hidden;perspective:1000;max-height:0;margin:0;padding:0;overflow:hidden;opacity:0;pointer-events:none}.alertify-logs>.show{margin-top:12px;opacity:1;max-height:1000px;padding:12px;pointer-events:auto} -------------------------------------------------------------------------------- /public/assets/vendor/bootstrap-inputmask/bootstrap-inputmask.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Bootstrap.js by @mdo and @fat, extended by @ArnoldDaniels. 3 | * plugins: bootstrap-inputmask.js 4 | * Copyright 2012 Twitter, Inc. 5 | * http://www.apache.org/licenses/LICENSE-2.0.txt 6 | */ 7 | !function(e){var t=window.orientation!==undefined,n=navigator.userAgent.toLowerCase().indexOf("android")>-1,r=function(t,r){if(n)return;this.$element=e(t),this.options=e.extend({},e.fn.inputmask.defaults,r),this.mask=String(r.mask),this.init(),this.listen(),this.checkVal()};r.prototype={init:function(){var t=this.options.definitions,n=this.mask.length;this.tests=[],this.partialPosition=this.mask.length,this.firstNonMaskPos=null,e.each(this.mask.split(""),e.proxy(function(e,r){r=="?"?(n--,this.partialPosition=e):t[r]?(this.tests.push(new RegExp(t[r])),this.firstNonMaskPos===null&&(this.firstNonMaskPos=this.tests.length-1)):this.tests.push(null)},this)),this.buffer=e.map(this.mask.split(""),e.proxy(function(e,n){if(e!="?")return t[e]?this.options.placeholder:e},this)),this.focusText=this.$element.val(),this.$element.data("rawMaskFn",e.proxy(function(){return e.map(this.buffer,function(e,t){return this.tests[t]&&e!=this.options.placeholder?e:null}).join("")},this))},listen:function(){if(this.$element.attr("readonly"))return;var t=(navigator.userAgent.match(/msie/i)?"paste":"input")+".mask";this.$element.on("unmask",e.proxy(this.unmask,this)).on("focus.mask",e.proxy(this.focusEvent,this)).on("blur.mask",e.proxy(this.blurEvent,this)).on("keydown.mask",e.proxy(this.keydownEvent,this)).on("keypress.mask",e.proxy(this.keypressEvent,this)).on(t,e.proxy(this.pasteEvent,this))},caret:function(e,t){if(this.$element.length===0)return;if(typeof e=="number")return t=typeof t=="number"?t:e,this.$element.each(function(){if(this.setSelectionRange)this.setSelectionRange(e,t);else if(this.createTextRange){var n=this.createTextRange();n.collapse(!0),n.moveEnd("character",t),n.moveStart("character",e),n.select()}});if(this.$element[0].setSelectionRange)e=this.$element[0].selectionStart,t=this.$element[0].selectionEnd;else if(document.selection&&document.selection.createRange){var n=document.selection.createRange();e=0-n.duplicate().moveStart("character",-1e5),t=e+n.text.length}return{begin:e,end:t}},seekNext:function(e){var t=this.mask.length;while(++e<=t&&!this.tests[e]);return e},seekPrev:function(e){while(--e>=0&&!this.tests[e]);return e},shiftL:function(e,t){var n=this.mask.length;if(e<0)return;for(var r=e,i=this.seekNext(t);rn.length)break}else this.buffer[i]==n.charAt(s)&&i!=this.partialPosition&&(s++,r=i);if(!e&&r+1=this.partialPosition)this.writeBuffer(),e||this.$element.val(this.$element.val().substring(0,r+1));return this.partialPosition?i:this.firstNonMaskPos}},e.fn.inputmask=function(t){return this.each(function(){var n=e(this),i=n.data("inputmask");i||n.data("inputmask",i=new r(this,t))})},e.fn.inputmask.defaults={mask:"",placeholder:"_",definitions:{9:"[0-9]",a:"[A-Za-z]","?":"[A-Za-z0-9]","*":"."}},e.fn.inputmask.Constructor=r,e(document).on("focus.inputmask.data-api","[data-mask]",function(t){var n=e(this);if(n.data("inputmask"))return;t.preventDefault(),n.inputmask(n.data())})}(window.jQuery) -------------------------------------------------------------------------------- /public/assets/vendor/bootstrap-maxlength/bootstrap-maxlength.min.js: -------------------------------------------------------------------------------- 1 | /* ========================================================== 2 | * 3 | * bootstrap-maxlength.js v 1.6.0 4 | * Copyright 2015 Maurizio Napoleoni @mimonap 5 | * Licensed under MIT License 6 | * URL: https://github.com/mimo84/bootstrap-maxlength/blob/master/LICENSE 7 | * 8 | * ========================================================== */ 9 | 10 | !function(a){"use strict";a.event.special.destroyed||(a.event.special.destroyed={remove:function(a){a.handler&&a.handler()}}),a.fn.extend({maxlength:function(b,c){function d(a){var c=a.val();c=b.twoCharLinebreak?c.replace(/\r(?!\n)|\n(?!\r)/g,"\r\n"):c.replace(new RegExp("\r?\n","g"),"\n");var d=0;return d=b.utf8?f(c):c.length}function e(a,c){var d=a.val(),e=0;b.twoCharLinebreak&&(d=d.replace(/\r(?!\n)|\n(?!\r)/g,"\r\n"),"\n"===d.substr(d.length-1)&&d.length%2===1&&(e=1)),a.val(d.substr(0,c-e))}function f(a){for(var b=0,c=0;cd?b++:b+=d>127&&2048>d?2:3}return b}function g(a,c,e){var f=!0;return!b.alwaysShow&&e-d(a)>c&&(f=!1),f}function h(a,b){var c=b-d(a);return c}function i(a,b){b.css({display:"block"}),a.trigger("maxlength.shown")}function j(a,b){b.css({display:"none"}),a.trigger("maxlength.hidden")}function k(a,c,d){var e="";return b.message?e="function"==typeof b.message?b.message(a,c):b.message.replace("%charsTyped%",d).replace("%charsRemaining%",c-d).replace("%charsTotal%",c):(b.preText&&(e+=b.preText),e+=b.showCharsTyped?d:c-d,b.showMaxLength&&(e+=b.separator+c),b.postText&&(e+=b.postText)),e}function l(a,c,d,e){e&&(e.html(k(c.val(),d,d-a)),a>0?g(c,b.threshold,d)?i(c,e.removeClass(b.limitReachedClass).addClass(b.warningClass)):j(c,e):i(c,e.removeClass(b.warningClass).addClass(b.limitReachedClass))),b.allowOverMax&&(0>a?c.addClass("overmax"):c.removeClass("overmax"))}function m(b){var c=b[0];return a.extend({},"function"==typeof c.getBoundingClientRect?c.getBoundingClientRect():{width:c.offsetWidth,height:c.offsetHeight},b.offset())}function n(c,d){var e=m(c);if("function"===a.type(b.placement))return void b.placement(c,d,e);if(a.isPlainObject(b.placement))return void o(b.placement,d);var f=c.outerWidth(),g=d.outerWidth(),h=d.width(),i=d.height();switch(b.appendToParent&&(e.top-=c.parent().offset().top,e.left-=c.parent().offset().left),b.placement){case"bottom":d.css({top:e.top+e.height,left:e.left+e.width/2-h/2});break;case"top":d.css({top:e.top-i,left:e.left+e.width/2-h/2});break;case"left":d.css({top:e.top+e.height/2-i/2,left:e.left-h});break;case"right":d.css({top:e.top+e.height/2-i/2,left:e.left+e.width});break;case"bottom-right":d.css({top:e.top+e.height,left:e.left+e.width});break;case"top-right":d.css({top:e.top-i,left:e.left+f});break;case"top-left":d.css({top:e.top-i,left:e.left-g});break;case"bottom-left":d.css({top:e.top+c.outerHeight(),left:e.left-g});break;case"centered-right":d.css({top:e.top+i/2,left:e.left+f-g-3});break;case"bottom-right-inside":d.css({top:e.top+e.height,left:e.left+e.width-g});break;case"top-right-inside":d.css({top:e.top-i,left:e.left+f-g});break;case"top-left-inside":d.css({top:e.top-i,left:e.left});break;case"bottom-left-inside":d.css({top:e.top+c.outerHeight(),left:e.left})}}function o(c,d){if(c&&d){var e=["top","bottom","left","right","position"],f={};a.each(e,function(a,c){var d=b.placement[c];"undefined"!=typeof d&&(f[c]=d)}),d.css(f)}}function p(a){var c="maxlength";return b.allowOverMax&&(c="data-bs-mxl"),a.attr(c)||a.attr("size")}var q=a("body"),r={showOnReady:!1,alwaysShow:!1,threshold:10,warningClass:"label label-success",limitReachedClass:"label label-important label-danger",separator:" / ",preText:"",postText:"",showMaxLength:!0,placement:"bottom",message:null,showCharsTyped:!0,validate:!1,utf8:!1,appendToParent:!1,twoCharLinebreak:!0,allowOverMax:!1};return a.isFunction(b)&&!c&&(c=b,b={}),b=a.extend(r,b),this.each(function(){function c(){var c=k(g.val(),d,"0");d=p(g),f||(f=a('').css({display:"none",position:"absolute",whiteSpace:"nowrap",zIndex:1099}).html(c)),g.is("textarea")&&(g.data("maxlenghtsizex",g.outerWidth()),g.data("maxlenghtsizey",g.outerHeight()),g.mouseup(function(){(g.outerWidth()!==g.data("maxlenghtsizex")||g.outerHeight()!==g.data("maxlenghtsizey"))&&n(g,f),g.data("maxlenghtsizex",g.outerWidth()),g.data("maxlenghtsizey",g.outerHeight())})),b.appendToParent?(g.parent().append(f),g.parent().css("position","relative")):q.append(f);var e=h(g,p(g));l(e,g,d,f),n(g,f)}var d,f,g=a(this);a(window).resize(function(){f&&n(g,f)}),b.allowOverMax&&(a(this).attr("data-bs-mxl",a(this).attr("maxlength")),a(this).removeAttr("maxlength")),b.showOnReady?g.ready(function(){c()}):g.focus(function(){c()}),g.on("maxlength.reposition",function(){n(g,f)}),g.on("destroyed",function(){f&&f.remove()}),g.on("blur",function(){f&&!b.showOnReady&&f.remove()}),g.on("input",function(){var a=p(g),c=h(g,a),i=!0;return b.validate&&0>c?(e(g,a),i=!1):l(c,g,d,f),("bottom-right-inside"===b.placement||"top-right-inside"===b.placement)&&n(g,f),i})})}})}(jQuery); -------------------------------------------------------------------------------- /public/assets/vendor/datatables/buttons.bootstrap4.min.css: -------------------------------------------------------------------------------- 1 | div.dt-button-info{position:fixed;top:50%;left:50%;width:400px;margin-top:-100px;margin-left:-200px;background-color:white;border:2px solid #111;box-shadow:3px 3px 8px rgba(0,0,0,0.3);border-radius:3px;text-align:center;z-index:21}div.dt-button-info h2{padding:0.5em;margin:0;font-weight:normal;border-bottom:1px solid #ddd;background-color:#f3f3f3}div.dt-button-info>div{padding:1em}ul.dt-button-collection.dropdown-menu{display:block;z-index:2002;-webkit-column-gap:8px;-moz-column-gap:8px;-ms-column-gap:8px;-o-column-gap:8px;column-gap:8px}ul.dt-button-collection.dropdown-menu.fixed{position:fixed;top:50%;left:50%;margin-left:-75px;border-radius:0}ul.dt-button-collection.dropdown-menu.fixed.two-column{margin-left:-150px}ul.dt-button-collection.dropdown-menu.fixed.three-column{margin-left:-225px}ul.dt-button-collection.dropdown-menu.fixed.four-column{margin-left:-300px}ul.dt-button-collection.dropdown-menu>*{-webkit-column-break-inside:avoid;break-inside:avoid}ul.dt-button-collection.dropdown-menu.two-column{width:300px;padding-bottom:1px;-webkit-column-count:2;-moz-column-count:2;-ms-column-count:2;-o-column-count:2;column-count:2}ul.dt-button-collection.dropdown-menu.three-column{width:450px;padding-bottom:1px;-webkit-column-count:3;-moz-column-count:3;-ms-column-count:3;-o-column-count:3;column-count:3}ul.dt-button-collection.dropdown-menu.four-column{width:600px;padding-bottom:1px;-webkit-column-count:4;-moz-column-count:4;-ms-column-count:4;-o-column-count:4;column-count:4}ul.dt-button-collection{-webkit-column-gap:8px;-moz-column-gap:8px;-ms-column-gap:8px;-o-column-gap:8px;column-gap:8px}ul.dt-button-collection.fixed{position:fixed;top:50%;left:50%;margin-left:-75px;border-radius:0}ul.dt-button-collection.fixed.two-column{margin-left:-150px}ul.dt-button-collection.fixed.three-column{margin-left:-225px}ul.dt-button-collection.fixed.four-column{margin-left:-300px}ul.dt-button-collection>*{-webkit-column-break-inside:avoid;break-inside:avoid}ul.dt-button-collection.two-column{width:300px;padding-bottom:1px;-webkit-column-count:2;-moz-column-count:2;-ms-column-count:2;-o-column-count:2;column-count:2}ul.dt-button-collection.three-column{width:450px;padding-bottom:1px;-webkit-column-count:3;-moz-column-count:3;-ms-column-count:3;-o-column-count:3;column-count:3}ul.dt-button-collection.four-column{width:600px;padding-bottom:1px;-webkit-column-count:4;-moz-column-count:4;-ms-column-count:4;-o-column-count:4;column-count:4}ul.dt-button-collection.fixed{max-width:none}ul.dt-button-collection.fixed:before,ul.dt-button-collection.fixed:after{display:none}div.dt-button-background{position:fixed;top:0;left:0;width:100%;height:100%;z-index:999}@media screen and (max-width: 767px){div.dt-buttons{float:none;width:100%;text-align:center;margin-bottom:0.5em}div.dt-buttons a.btn{float:none}} 2 | -------------------------------------------------------------------------------- /public/assets/vendor/datatables/buttons.bootstrap4.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | Bootstrap integration for DataTables' Buttons 3 | ©2016 SpryMedia Ltd - datatables.net/license 4 | */ 5 | (function(c){"function"===typeof define&&define.amd?define(["jquery","datatables.net-bs4","datatables.net-buttons"],function(a){return c(a,window,document)}):"object"===typeof exports?module.exports=function(a,b){a||(a=window);if(!b||!b.fn.dataTable)b=require("datatables.net-bs4")(a,b).$;b.fn.dataTable.Buttons||require("datatables.net-buttons")(a,b);return c(b,a,a.document)}:c(jQuery,window,document)})(function(c){var a=c.fn.dataTable;c.extend(!0,a.Buttons.defaults,{dom:{container:{className:"dt-buttons btn-group"}, 6 | button:{className:"btn btn-secondary"},collection:{tag:"div",className:"dt-button-collection dropdown-menu",button:{tag:"a",className:"dt-button dropdown-item"}}}});a.ext.buttons.collection.className+=" dropdown-toggle";return a.Buttons}); 7 | -------------------------------------------------------------------------------- /public/assets/vendor/datatables/buttons.colVis.min.js: -------------------------------------------------------------------------------- 1 | (function(g){"function"===typeof define&&define.amd?define(["jquery","datatables.net","datatables.net-buttons"],function(d){return g(d,window,document)}):"object"===typeof exports?module.exports=function(d,e){d||(d=window);if(!e||!e.fn.dataTable)e=require("datatables.net")(d,e).$;e.fn.dataTable.Buttons||require("datatables.net-buttons")(d,e);return g(e,d,d.document)}:g(jQuery,window,document)})(function(g,d,e,h){d=g.fn.dataTable;g.extend(d.ext.buttons,{colvis:function(a,b){return{extend:"collection", 2 | text:function(a){return a.i18n("buttons.colvis","Column visibility")},className:"buttons-colvis",buttons:[{extend:"columnsToggle",columns:b.columns}]}},columnsToggle:function(a,b){return a.columns(b.columns).indexes().map(function(a){return{extend:"columnToggle",columns:a}}).toArray()},columnToggle:function(a,b){return{extend:"columnVisibility",columns:b.columns}},columnsVisibility:function(a,b){return a.columns(b.columns).indexes().map(function(a){return{extend:"columnVisibility",columns:a,visibility:b.visibility}}).toArray()}, 3 | columnVisibility:{columns:h,text:function(a,b,c){return c._columnText(a,c.columns)},className:"buttons-columnVisibility",action:function(a,b,c,f){a=b.columns(f.columns);b=a.visible();a.visible(f.visibility!==h?f.visibility:!(b.length&&b[0]))},init:function(a,b,c){var f=this,d=a.column(c.columns);a.on("column-visibility.dt"+c.namespace,function(a,b){b.bDestroying||f.active(d.visible())}).on("column-reorder.dt"+c.namespace,function(b,d,e){1===a.columns(c.columns).count()&&("number"===typeof c.columns&& 4 | (c.columns=e.mapping[c.columns]),b=a.column(c.columns),f.text(c._columnText(a,c.columns)),f.active(b.visible()))});this.active(d.visible())},destroy:function(a,b,c){a.off("column-visibility.dt"+c.namespace).off("column-reorder.dt"+c.namespace)},_columnText:function(a,b){var c=a.column(b).index();return a.settings()[0].aoColumns[c].sTitle.replace(/\n/g," ").replace(/<.*?>/g,"").replace(/^\s+|\s+$/g,"")}},colvisRestore:{className:"buttons-colvisRestore",text:function(a){return a.i18n("buttons.colvisRestore", 5 | "Restore visibility")},init:function(a,b,c){c._visOriginal=a.columns().indexes().map(function(b){return a.column(b).visible()}).toArray()},action:function(a,b,c,d){b.columns().every(function(a){a=b.colReorder&&b.colReorder.transpose?b.colReorder.transpose(a,"toOriginal"):a;this.visible(d._visOriginal[a])})}},colvisGroup:{className:"buttons-colvisGroup",action:function(a,b,c,d){b.columns(d.show).visible(!0,!1);b.columns(d.hide).visible(!1,!1);b.columns.adjust()},show:[],hide:[]}});return d.Buttons}); 6 | -------------------------------------------------------------------------------- /public/assets/vendor/datatables/buttons.print.min.js: -------------------------------------------------------------------------------- 1 | (function(e){"function"===typeof define&&define.amd?define(["jquery","datatables.net","datatables.net-buttons"],function(d){return e(d,window,document)}):"object"===typeof exports?module.exports=function(d,a){d||(d=window);if(!a||!a.fn.dataTable)a=require("datatables.net")(d,a).$;a.fn.dataTable.Buttons||require("datatables.net-buttons")(d,a);return e(a,d,d.document)}:e(jQuery,window,document)})(function(e,d,a){var i=e.fn.dataTable,g=a.createElement("a");i.ext.buttons.print={className:"buttons-print", 2 | text:function(c){return c.i18n("buttons.print","Print")},action:function(c,b,a,f){c=b.buttons.exportData(f.exportOptions);a=function(c,a){for(var b="",d=0,e=c.length;d"+c[d]+"";return b+""};b='';f.header&&(b+=""+a(c.header,"th")+"");for(var b=b+"",j=0,i=c.body.length;j";f.footer&&c.footer&&(b+=""+a(c.footer,"th")+"");var h=d.open("",""),c=f.title; 3 | "function"===typeof c&&(c=c());-1!==c.indexOf("*")&&(c=c.replace("*",e("title").text()));h.document.close();var k=""+c+"";e("style, link").each(function(){var c=k,b=e(this).clone()[0],a;"link"===b.nodeName.toLowerCase()&&(g.href=b.href,a=g.host,-1===a.indexOf("/")&&0!==g.pathname.indexOf("/")&&(a+="/"),b.href=g.protocol+"//"+a+g.pathname+g.search);k=c+b.outerHTML});h.document.head.innerHTML=k;h.document.body.innerHTML="

"+c+"

"+f.message+"
"+b;f.customize&&f.customize(h); 4 | setTimeout(function(){f.autoPrint&&(h.print(),h.close())},250)},title:"*",message:"",exportOptions:{},header:!0,footer:!1,autoPrint:!0,customize:null};return i.Buttons}); 5 | -------------------------------------------------------------------------------- /public/assets/vendor/datatables/dataTables.bootstrap4.min.css: -------------------------------------------------------------------------------- 1 | table.dataTable{clear:both;margin-top:6px !important;margin-bottom:6px !important;max-width:none !important;border-collapse:separate !important}table.dataTable td,table.dataTable th{-webkit-box-sizing:content-box;box-sizing:content-box}table.dataTable td.dataTables_empty,table.dataTable th.dataTables_empty{text-align:center}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}div.dataTables_wrapper div.dataTables_length label{font-weight:normal;text-align:left;white-space:nowrap}div.dataTables_wrapper div.dataTables_length select{width:75px;display:inline-block}div.dataTables_wrapper div.dataTables_filter{text-align:right}div.dataTables_wrapper div.dataTables_filter label{font-weight:normal;white-space:nowrap;text-align:left}div.dataTables_wrapper div.dataTables_filter input{margin-left:0.5em;display:inline-block;width:auto}div.dataTables_wrapper div.dataTables_info{padding-top:0.85em;white-space:nowrap}div.dataTables_wrapper div.dataTables_paginate{margin:0;white-space:nowrap;text-align:right}div.dataTables_wrapper div.dataTables_paginate ul.pagination{margin:2px 0;white-space:nowrap;justify-content:flex-end}div.dataTables_wrapper div.dataTables_processing{position:absolute;top:50%;left:50%;width:200px;margin-left:-100px;margin-top:-26px;text-align:center;padding:1em 0}table.dataTable thead>tr>th.sorting_asc,table.dataTable thead>tr>th.sorting_desc,table.dataTable thead>tr>th.sorting,table.dataTable thead>tr>td.sorting_asc,table.dataTable thead>tr>td.sorting_desc,table.dataTable thead>tr>td.sorting{padding-right:30px}table.dataTable thead>tr>th:active,table.dataTable thead>tr>td:active{outline:none}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{cursor:pointer;position:relative}table.dataTable thead .sorting:before,table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:before,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:before,table.dataTable thead .sorting_desc_disabled:after{position:absolute;bottom:0.9em;display:block;opacity:0.3}table.dataTable thead .sorting:before,table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_desc:before,table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_desc_disabled:before{right:1em;content:"\2191"}table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:after{right:0.5em;content:"\2193"}table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_desc:after{opacity:1}table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_desc_disabled:after{opacity:0}div.dataTables_scrollHead table.dataTable{margin-bottom:0 !important}div.dataTables_scrollBody table{border-top:none;margin-top:0 !important;margin-bottom:0 !important}div.dataTables_scrollBody table thead .sorting:after,div.dataTables_scrollBody table thead .sorting_asc:after,div.dataTables_scrollBody table thead .sorting_desc:after{display:none}div.dataTables_scrollBody table tbody tr:first-child th,div.dataTables_scrollBody table tbody tr:first-child td{border-top:none}div.dataTables_scrollFoot table{margin-top:0 !important;border-top:none}@media screen and (max-width: 767px){div.dataTables_wrapper div.dataTables_length,div.dataTables_wrapper div.dataTables_filter,div.dataTables_wrapper div.dataTables_info,div.dataTables_wrapper div.dataTables_paginate{text-align:center}}table.dataTable.table-condensed>thead>tr>th{padding-right:20px}table.dataTable.table-condensed .sorting:after,table.dataTable.table-condensed .sorting_asc:after,table.dataTable.table-condensed .sorting_desc:after{top:6px;right:6px}table.table-bordered.dataTable th,table.table-bordered.dataTable td{border-left-width:0}table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable td:last-child,table.table-bordered.dataTable td:last-child{border-right-width:0}table.table-bordered.dataTable tbody th,table.table-bordered.dataTable tbody td{border-bottom-width:0}div.dataTables_scrollHead table.table-bordered{border-bottom-width:0}div.table-responsive>div.dataTables_wrapper>div.row{margin:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:first-child{padding-left:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:last-child{padding-right:0} 2 | -------------------------------------------------------------------------------- /public/assets/vendor/datatables/dataTables.bootstrap4.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | DataTables Bootstrap 3 integration 3 | ©2011-2015 SpryMedia Ltd - datatables.net/license 4 | */ 5 | (function(b){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(a){return b(a,window,document)}):"object"===typeof exports?module.exports=function(a,d){a||(a=window);if(!d||!d.fn.dataTable)d=require("datatables.net")(a,d).$;return b(d,a,a.document)}:b(jQuery,window,document)})(function(b,a,d,m){var f=b.fn.dataTable;b.extend(!0,f.defaults,{dom:"<'row'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>><'row'<'col-sm-12'tr>><'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>", 6 | renderer:"bootstrap"});b.extend(f.ext.classes,{sWrapper:"dataTables_wrapper container-fluid dt-bootstrap4",sFilterInput:"form-control form-control-sm",sLengthSelect:"form-control form-control-sm",sProcessing:"dataTables_processing card",sPageButton:"paginate_button page-item"});f.ext.renderer.pageButton.bootstrap=function(a,h,r,s,j,n){var o=new f.Api(a),t=a.oClasses,k=a.oLanguage.oPaginate,u=a.oLanguage.oAria.paginate||{},e,g,p=0,q=function(d,f){var l,h,i,c,m=function(a){a.preventDefault();!b(a.currentTarget).hasClass("disabled")&& 7 | o.page()!=a.data.action&&o.page(a.data.action).draw("page")};l=0;for(h=f.length;l",{"class":t.sPageButton+" "+g,id:0===r&& 8 | "string"===typeof c?a.sTableId+"_"+c:null}).append(b("",{href:"#","aria-controls":a.sTableId,"aria-label":u[c],"data-dt-idx":p,tabindex:a.iTabIndex,"class":"page-link"}).html(e)).appendTo(d),a.oApi._fnBindAction(i,{action:c},m),p++)}},i;try{i=b(h).find(d.activeElement).data("dt-idx")}catch(v){}q(b(h).empty().html('
    ').children("ul"),s);i!==m&&b(h).find("[data-dt-idx="+i+"]").focus()};return f}); 9 | -------------------------------------------------------------------------------- /public/assets/vendor/datatables/responsive.bootstrap4.min.css: -------------------------------------------------------------------------------- 1 | table.dataTable.dtr-inline.collapsed>tbody>tr>td.child,table.dataTable.dtr-inline.collapsed>tbody>tr>th.child,table.dataTable.dtr-inline.collapsed>tbody>tr>td.dataTables_empty{cursor:default !important}table.dataTable.dtr-inline.collapsed>tbody>tr>td.child:before,table.dataTable.dtr-inline.collapsed>tbody>tr>th.child:before,table.dataTable.dtr-inline.collapsed>tbody>tr>td.dataTables_empty:before{display:none !important}table.dataTable.dtr-inline.collapsed>tbody>tr>td:first-child,table.dataTable.dtr-inline.collapsed>tbody>tr>th:first-child{position:relative;padding-left:30px;cursor:pointer}table.dataTable.dtr-inline.collapsed>tbody>tr>td:first-child:before,table.dataTable.dtr-inline.collapsed>tbody>tr>th:first-child:before{top:12px;left:4px;height:14px;width:14px;display:block;position:absolute;color:white;border:2px solid white;border-radius:14px;box-shadow:0 0 3px #444;box-sizing:content-box;text-align:center;font-family:'Courier New', Courier, monospace;line-height:14px;content:'+';background-color:#0275d8}table.dataTable.dtr-inline.collapsed>tbody>tr.parent>td:first-child:before,table.dataTable.dtr-inline.collapsed>tbody>tr.parent>th:first-child:before{content:'-';background-color:#d33333}table.dataTable.dtr-inline.collapsed>tbody>tr.child td:before{display:none}table.dataTable.dtr-inline.collapsed.compact>tbody>tr>td:first-child,table.dataTable.dtr-inline.collapsed.compact>tbody>tr>th:first-child{padding-left:27px}table.dataTable.dtr-inline.collapsed.compact>tbody>tr>td:first-child:before,table.dataTable.dtr-inline.collapsed.compact>tbody>tr>th:first-child:before{top:5px;left:4px;height:14px;width:14px;border-radius:14px;line-height:14px;text-indent:3px}table.dataTable.dtr-column>tbody>tr>td.control,table.dataTable.dtr-column>tbody>tr>th.control{position:relative;cursor:pointer}table.dataTable.dtr-column>tbody>tr>td.control:before,table.dataTable.dtr-column>tbody>tr>th.control:before{top:50%;left:50%;height:16px;width:16px;margin-top:-10px;margin-left:-10px;display:block;position:absolute;color:white;border:2px solid white;border-radius:14px;box-shadow:0 0 3px #444;box-sizing:content-box;text-align:center;font-family:'Courier New', Courier, monospace;line-height:14px;content:'+';background-color:#0275d8}table.dataTable.dtr-column>tbody>tr.parent td.control:before,table.dataTable.dtr-column>tbody>tr.parent th.control:before{content:'-';background-color:#d33333}table.dataTable>tbody>tr.child{padding:0.5em 1em}table.dataTable>tbody>tr.child:hover{background:transparent !important}table.dataTable>tbody>tr.child ul{display:inline-block;list-style-type:none;margin:0;padding:0}table.dataTable>tbody>tr.child ul li{border-bottom:1px solid #efefef;padding:0.5em 0}table.dataTable>tbody>tr.child ul li:first-child{padding-top:0}table.dataTable>tbody>tr.child ul li:last-child{border-bottom:none}table.dataTable>tbody>tr.child span.dtr-title{display:inline-block;min-width:75px;font-weight:bold}div.dtr-modal{position:fixed;box-sizing:border-box;top:0;left:0;height:100%;width:100%;z-index:100;padding:10em 1em}div.dtr-modal div.dtr-modal-display{position:absolute;top:0;left:0;bottom:0;right:0;width:50%;height:50%;overflow:auto;margin:auto;z-index:102;overflow:auto;background-color:#f5f5f7;border:1px solid black;border-radius:0.5em;box-shadow:0 12px 30px rgba(0,0,0,0.6)}div.dtr-modal div.dtr-modal-content{position:relative;padding:1em}div.dtr-modal div.dtr-modal-close{position:absolute;top:6px;right:6px;width:22px;height:22px;border:1px solid #eaeaea;background-color:#f9f9f9;text-align:center;border-radius:3px;cursor:pointer;z-index:12}div.dtr-modal div.dtr-modal-close:hover{background-color:#eaeaea}div.dtr-modal div.dtr-modal-background{position:fixed;top:0;left:0;right:0;bottom:0;z-index:101;background:rgba(0,0,0,0.6)}@media screen and (max-width: 767px){div.dtr-modal div.dtr-modal-display{width:95%}}div.dtr-bs-modal table.table tr:first-child td{border-top:none} 2 | -------------------------------------------------------------------------------- /public/assets/vendor/datatables/responsive.bootstrap4.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | Bootstrap 4 integration for DataTables' Responsive 3 | ©2016 SpryMedia Ltd - datatables.net/license 4 | */ 5 | (function(c){"function"===typeof define&&define.amd?define(["jquery","datatables.net-bs4","datatables.net-responsive"],function(a){return c(a,window,document)}):"object"===typeof exports?module.exports=function(a,b){a||(a=window);if(!b||!b.fn.dataTable)b=require("datatables.net-bs4")(a,b).$;b.fn.dataTable.Responsive||require("datatables.net-responsive")(a,b);return c(b,a,a.document)}:c(jQuery,window,document)})(function(c){var a=c.fn.dataTable,b=a.Responsive.display,g=b.modal,d=c('
32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 |
#HostUptimeIP AddressMAC AddressStatusDesc.
44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /resources/views/components/footer.blade.php: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /resources/views/components/sidebar.blade.php: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 | 64 |
65 |
66 |
67 | -------------------------------------------------------------------------------- /resources/views/qr-code/index.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 |
7 | 8 |
9 | 10 |
11 | 12 |
13 |
14 |
15 |
16 | 17 |
18 | 19 |
20 | {{ QrCode::size(250)->generate(url_hotspot($username, $password)) }} 21 |
22 | 23 | {{--

AW Hotspot!

--}} 24 | 25 |

Scan QrCode diatas!

26 | 27 |
28 | 29 | 30 |
31 | 32 |
33 | 34 | 35 |
36 | 37 |
38 | 39 | 40 |
41 | 42 |
43 | 44 | 45 |
46 | 47 | Kembali 48 |
49 | 50 |
51 | 52 |
53 |
54 | 55 |
56 |
57 | 58 |
59 | 60 | 61 | 63 | 64 | 65 |
66 | -------------------------------------------------------------------------------- /resources/views/session/index.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 |
11 |
12 |
13 |
14 |
15 |

Daftar Session Tersimpan

16 | 19 |
20 |
21 |
22 |
23 | 24 |
25 |
26 | 27 |
28 |
29 |

Session Saved

30 |
31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 |
#HostUserPortLast Login
42 |
43 | 44 |
45 |
46 |
47 | 48 |
49 | {{--
50 |
51 | 52 |
53 |
--}} 54 |
55 |
56 |
57 |
58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 70 | 71 |
72 | -------------------------------------------------------------------------------- /resources/views/user/index.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 |
11 |
12 |
13 |
14 |
15 |

Daftar Voucher User

16 | 19 |
20 |
21 |
22 |
23 | 24 |
25 |
26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | @if(session('success')) 35 | 41 | 42 | @endif 43 | @if(session('error')) 44 | 50 | 51 | @endif 52 |
53 |
54 |

Voucher

55 |
56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 |
#NameUptimeDesc.
66 |
67 | 68 |
69 |
70 |
71 |
72 |
73 |
74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 87 | 88 |
89 | -------------------------------------------------------------------------------- /routes/api.php: -------------------------------------------------------------------------------- 1 | get('/user', function (Request $request) { 18 | return $request->user(); 19 | });*/ 20 | -------------------------------------------------------------------------------- /routes/channels.php: -------------------------------------------------------------------------------- 1 | id === (int) $id; 18 | }); 19 | -------------------------------------------------------------------------------- /routes/console.php: -------------------------------------------------------------------------------- 1 | comment(Inspiring::quote()); 19 | })->describe('Display an inspiring quote'); 20 | -------------------------------------------------------------------------------- /routes/web.php: -------------------------------------------------------------------------------- 1 | group(function () { 22 | Route::get('/', 'HomeController@index')->name('index'); 23 | Route::delete('/', 'HomeController@index'); 24 | Route::post('/show', 'HomeController@showIndex')->name('index.show'); 25 | 26 | Route::get('/users', 'HomeController@users')->name('users'); 27 | Route::post('/users/show', 'HomeController@showUsers')->name('users.show'); 28 | Route::post('/users', 'HomeController@users'); 29 | Route::delete('/users', 'HomeController@users'); 30 | 31 | Route::get('/packet', 'HomeController@packet')->name('packet'); 32 | Route::post('/packet/show', 'HomeController@showPacket')->name('packet.show'); 33 | Route::post('/packet', 'HomeController@packet'); 34 | Route::delete('/packet', 'HomeController@packet'); 35 | 36 | Route::get('/client', 'HomeController@client')->name('client'); 37 | Route::post('/client/show', 'HomeController@showClient')->name('client.show'); 38 | Route::delete('/client', 'HomeController@client'); 39 | 40 | Route::get('/session', 'HomeController@session')->name('session'); 41 | Route::post('/session/show', 'HomeController@showSession')->name('session.show'); 42 | Route::delete('/session', 'HomeController@session'); 43 | 44 | Route::get('/router', 'HomeController@router')->name('router'); 45 | 46 | Route::post('/qr-code', 'HomeController@qrcode')->name('qrcode'); 47 | Route::post('/logout', 'LoginController@logout')->name('logout'); 48 | }); 49 | /* Auth Route */ 50 | 51 | /* Guest Route */ 52 | Route::middleware('guest')->group(function () { 53 | Route::view('/login', 'login.index')->name('login'); 54 | 55 | Route::post('/login', 'LoginController@login'); 56 | Route::post('/session', 'LoginController@session'); 57 | }); 58 | /* Guest Route */ 59 | -------------------------------------------------------------------------------- /server.php: -------------------------------------------------------------------------------- 1 | 8 | */ 9 | 10 | $uri = urldecode( 11 | parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) 12 | ); 13 | 14 | // This file allows us to emulate Apache's "mod_rewrite" functionality from the 15 | // built-in PHP web server. This provides a convenient way to test a Laravel 16 | // application without having installed a "real" web server software here. 17 | if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) { 18 | return false; 19 | } 20 | 21 | require_once __DIR__.'/public/index.php'; 22 | -------------------------------------------------------------------------------- /sqlite.db.std: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/sqlite.db.std -------------------------------------------------------------------------------- /storage/app/.gitignore: -------------------------------------------------------------------------------- 1 | !public/ 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/app/media/Screenshot_001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/storage/app/media/Screenshot_001.png -------------------------------------------------------------------------------- /storage/app/media/Screenshot_002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/storage/app/media/Screenshot_002.png -------------------------------------------------------------------------------- /storage/app/media/Screenshot_003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/storage/app/media/Screenshot_003.png -------------------------------------------------------------------------------- /storage/app/media/Screenshot_004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/archytech99/mytik-userman/ab0f6a03492db5c0c2ee9f524c5231ed5e90eefe/storage/app/media/Screenshot_004.png -------------------------------------------------------------------------------- /storage/app/public/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/framework/.gitignore: -------------------------------------------------------------------------------- 1 | config.php 2 | routes.php 3 | schedule-* 4 | compiled.php 5 | services.json 6 | events.scanned.php 7 | routes.scanned.php 8 | down 9 | -------------------------------------------------------------------------------- /storage/framework/cache/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !data/ 3 | !.gitignore 4 | -------------------------------------------------------------------------------- /storage/framework/cache/data/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/framework/sessions/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/framework/testing/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/framework/views/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/logs/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /tests/CreatesApplication.php: -------------------------------------------------------------------------------- 1 | make(Kernel::class)->bootstrap(); 19 | 20 | return $app; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /tests/Feature/ExampleTest.php: -------------------------------------------------------------------------------- 1 | get('/'); 18 | 19 | $response->assertStatus(200); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /tests/TestCase.php: -------------------------------------------------------------------------------- 1 | assertTrue(true); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /webpack.mix.js: -------------------------------------------------------------------------------- 1 | const mix = require('laravel-mix'); 2 | 3 | /* 4 | |-------------------------------------------------------------------------- 5 | | Mix Asset Management 6 | |-------------------------------------------------------------------------- 7 | | 8 | | Mix provides a clean, fluent API for defining some Webpack build steps 9 | | for your Laravel application. By default, we are compiling the Sass 10 | | file for the application as well as bundling up all the JS files. 11 | | 12 | */ 13 | 14 | mix.js('resources/js/app.js', 'public/js') 15 | .sass('resources/sass/app.scss', 'public/css'); 16 | --------------------------------------------------------------------------------