├── .editorconfig
├── .env.example
├── .gitattributes
├── .gitignore
├── Guardfile
├── LICENSE.md
├── app
├── Console
│ └── Kernel.php
├── Exceptions
│ └── Handler.php
├── Http
│ ├── Controllers
│ │ ├── Auth
│ │ │ ├── ForgotPasswordController.php
│ │ │ ├── LoginController.php
│ │ │ ├── RegisterController.php
│ │ │ └── ResetPasswordController.php
│ │ ├── CategoryController.php
│ │ ├── Controller.php
│ │ ├── DashboardController.php
│ │ ├── HomeController.php
│ │ ├── ServerController.php
│ │ └── UserController.php
│ ├── Kernel.php
│ ├── Middleware
│ │ ├── EncryptCookies.php
│ │ ├── RedirectIfAuthenticated.php
│ │ ├── Role.php
│ │ ├── TrimStrings.php
│ │ ├── TrustProxies.php
│ │ └── VerifyCsrfToken.php
│ └── helpers.php
├── Libraries
│ └── API
│ │ ├── DigitalOcean.php
│ │ ├── Hetzner.php
│ │ ├── Provider.php
│ │ ├── ScalewayAMS.php
│ │ ├── ScalewayPAR.php
│ │ └── Vultr.php
├── Providers
│ ├── AppServiceProvider.php
│ ├── AuthServiceProvider.php
│ ├── BroadcastServiceProvider.php
│ ├── EventServiceProvider.php
│ └── RouteServiceProvider.php
├── Server.php
└── User.php
├── artisan
├── bootstrap
├── app.php
└── cache
│ └── .gitignore
├── composer.json
├── composer.lock
├── config
├── app.php
├── auth.php
├── broadcasting.php
├── cache.php
├── database.php
├── filesystems.php
├── hashing.php
├── logging.php
├── mail.php
├── queue.php
├── services.php
├── session.php
├── variables.php
└── view.php
├── database
├── .gitignore
├── factories
│ └── UserFactory.php
├── migrations
│ ├── 2014_10_12_000000_create_users_table.php
│ ├── 2014_10_12_100000_create_password_resets_table.php
│ ├── 2018_06_24_075613_create_servers_table.php
│ └── 2018_07_07_112054_fix_servers_table_substr.php
└── seeds
│ ├── DatabaseSeeder.php
│ └── users.php
├── package-lock.json
├── package.json
├── phpunit.xml
├── public
├── .htaccess
├── config
│ ├── providers
│ │ ├── DigitalOcean.json
│ │ ├── Hetzner.json
│ │ ├── ScalewayAMS.json
│ │ ├── ScalewayPAR.json
│ │ └── Vultr.json
│ └── variables.json
├── css
│ ├── app.css
│ └── app.css.map
├── favicon.ico
├── fonts
│ ├── fontawesome-webfont.eot
│ ├── fontawesome-webfont.svg
│ ├── fontawesome-webfont.ttf
│ ├── fontawesome-webfont.woff
│ ├── fontawesome-webfont.woff2
│ ├── themify.eot
│ ├── themify.svg
│ ├── themify.ttf
│ └── themify.woff
├── git.php
├── images
│ ├── 1.jpg
│ ├── 10.jpg
│ ├── 11.jpg
│ ├── 12.jpg
│ ├── 2.jpg
│ ├── 3.jpg
│ ├── 404.png
│ ├── 500.png
│ ├── bg.jpg
│ ├── datatables
│ │ ├── sort_asc.png
│ │ ├── sort_asc_disabled.png
│ │ ├── sort_both.png
│ │ ├── sort_desc.png
│ │ └── sort_desc_disabled.png
│ ├── flags
│ │ ├── AD.png
│ │ ├── AE.png
│ │ ├── AF.png
│ │ ├── AG.png
│ │ ├── AI.png
│ │ ├── AL.png
│ │ ├── AM.png
│ │ ├── AN.png
│ │ ├── AO.png
│ │ ├── AQ.png
│ │ ├── AR.png
│ │ ├── AS.png
│ │ ├── AT.png
│ │ ├── AU.png
│ │ ├── AW.png
│ │ ├── AZ.png
│ │ ├── BA.png
│ │ ├── BB.png
│ │ ├── BD.png
│ │ ├── BE.png
│ │ ├── BF.png
│ │ ├── BG.png
│ │ ├── BH.png
│ │ ├── BI.png
│ │ ├── BJ.png
│ │ ├── BM.png
│ │ ├── BN.png
│ │ ├── BO.png
│ │ ├── BR.png
│ │ ├── BS.png
│ │ ├── BT.png
│ │ ├── BV.png
│ │ ├── BW.png
│ │ ├── BY.png
│ │ ├── BZ.png
│ │ ├── CA.png
│ │ ├── CC.png
│ │ ├── CD.png
│ │ ├── CF.png
│ │ ├── CG.png
│ │ ├── CH.png
│ │ ├── CI.png
│ │ ├── CK.png
│ │ ├── CL.png
│ │ ├── CM.png
│ │ ├── CN.png
│ │ ├── CO.png
│ │ ├── CR.png
│ │ ├── CS.png
│ │ ├── CU.png
│ │ ├── CV.png
│ │ ├── CX.png
│ │ ├── CY.png
│ │ ├── CZ.png
│ │ ├── DE.png
│ │ ├── DJ.png
│ │ ├── DK.png
│ │ ├── DM.png
│ │ ├── DO.png
│ │ ├── DZ.png
│ │ ├── EC.png
│ │ ├── EE.png
│ │ ├── EG.png
│ │ ├── EH.png
│ │ ├── ER.png
│ │ ├── ES.png
│ │ ├── ET.png
│ │ ├── FI.png
│ │ ├── FJ.png
│ │ ├── FK.png
│ │ ├── FM.png
│ │ ├── FO.png
│ │ ├── FR.png
│ │ ├── GA.png
│ │ ├── GB.png
│ │ ├── GD.png
│ │ ├── GE.png
│ │ ├── GF.png
│ │ ├── GH.png
│ │ ├── GI.png
│ │ ├── GL.png
│ │ ├── GM.png
│ │ ├── GN.png
│ │ ├── GP.png
│ │ ├── GQ.png
│ │ ├── GR.png
│ │ ├── GS.png
│ │ ├── GT.png
│ │ ├── GU.png
│ │ ├── GW.png
│ │ ├── GY.png
│ │ ├── HK.png
│ │ ├── HM.png
│ │ ├── HN.png
│ │ ├── HR.png
│ │ ├── HT.png
│ │ ├── HU.png
│ │ ├── ID.png
│ │ ├── IE.png
│ │ ├── IL.png
│ │ ├── IN.png
│ │ ├── IO.png
│ │ ├── IQ.png
│ │ ├── IR.png
│ │ ├── IS.png
│ │ ├── IT.png
│ │ ├── JM.png
│ │ ├── JO.png
│ │ ├── JP.png
│ │ ├── KE.png
│ │ ├── KG.png
│ │ ├── KH.png
│ │ ├── KI.png
│ │ ├── KM.png
│ │ ├── KN.png
│ │ ├── KP.png
│ │ ├── KR.png
│ │ ├── KW.png
│ │ ├── KY.png
│ │ ├── KZ.png
│ │ ├── LA.png
│ │ ├── LB.png
│ │ ├── LC.png
│ │ ├── LI.png
│ │ ├── LK.png
│ │ ├── LR.png
│ │ ├── LS.png
│ │ ├── LT.png
│ │ ├── LU.png
│ │ ├── LV.png
│ │ ├── LY.png
│ │ ├── MA.png
│ │ ├── MC.png
│ │ ├── MD.png
│ │ ├── ME.png
│ │ ├── MG.png
│ │ ├── MH.png
│ │ ├── MK.png
│ │ ├── ML.png
│ │ ├── MM.png
│ │ ├── MN.png
│ │ ├── MO.png
│ │ ├── MP.png
│ │ ├── MQ.png
│ │ ├── MR.png
│ │ ├── MS.png
│ │ ├── MT.png
│ │ ├── MU.png
│ │ ├── MV.png
│ │ ├── MW.png
│ │ ├── MX.png
│ │ ├── MY.png
│ │ ├── MZ.png
│ │ ├── NA.png
│ │ ├── NC.png
│ │ ├── NE.png
│ │ ├── NF.png
│ │ ├── NG.png
│ │ ├── NI.png
│ │ ├── NL.png
│ │ ├── NO.png
│ │ ├── NP.png
│ │ ├── NR.png
│ │ ├── NU.png
│ │ ├── NZ.png
│ │ ├── OM.png
│ │ ├── PA.png
│ │ ├── PE.png
│ │ ├── PF.png
│ │ ├── PG.png
│ │ ├── PH.png
│ │ ├── PK.png
│ │ ├── PL.png
│ │ ├── PM.png
│ │ ├── PN.png
│ │ ├── PR.png
│ │ ├── PS.png
│ │ ├── PT.png
│ │ ├── PW.png
│ │ ├── PY.png
│ │ ├── QA.png
│ │ ├── RE.png
│ │ ├── RO.png
│ │ ├── RU.png
│ │ ├── RW.png
│ │ ├── SA.png
│ │ ├── SB.png
│ │ ├── SC.png
│ │ ├── SD.png
│ │ ├── SE.png
│ │ ├── SG.png
│ │ ├── SH.png
│ │ ├── SI.png
│ │ ├── SJ.png
│ │ ├── SK.png
│ │ ├── SL.png
│ │ ├── SM.png
│ │ ├── SN.png
│ │ ├── SO.png
│ │ ├── SR.png
│ │ ├── ST.png
│ │ ├── SV.png
│ │ ├── SY.png
│ │ ├── SZ.png
│ │ ├── TC.png
│ │ ├── TD.png
│ │ ├── TF.png
│ │ ├── TG.png
│ │ ├── TH.png
│ │ ├── TJ.png
│ │ ├── TK.png
│ │ ├── TL.png
│ │ ├── TM.png
│ │ ├── TN.png
│ │ ├── TO.png
│ │ ├── TR.png
│ │ ├── TT.png
│ │ ├── TV.png
│ │ ├── TW.png
│ │ ├── TZ.png
│ │ ├── UA.png
│ │ ├── UG.png
│ │ ├── UM.png
│ │ ├── US.png
│ │ ├── UY.png
│ │ ├── UZ.png
│ │ ├── VA.png
│ │ ├── VC.png
│ │ ├── VE.png
│ │ ├── VG.png
│ │ ├── VI.png
│ │ ├── VN.png
│ │ ├── VU.png
│ │ ├── WF.png
│ │ ├── WS.png
│ │ ├── YE.png
│ │ ├── YT.png
│ │ ├── ZA.png
│ │ ├── ZM.png
│ │ └── ZW.png
│ ├── spinner.gif
│ └── vmdash_logo.png
├── index.php
├── js
│ ├── app.js
│ └── app.js.map
├── mix-manifest.json
├── robots.txt
└── web.config
├── readme.md
├── resources
├── assets
│ ├── js
│ │ ├── app.js
│ │ ├── bootstrap.js
│ │ ├── charts
│ │ │ ├── chartJS
│ │ │ │ └── index.js
│ │ │ ├── easyPieChart
│ │ │ │ └── index.js
│ │ │ ├── index.js
│ │ │ └── sparkline
│ │ │ │ └── index.js
│ │ ├── chat
│ │ │ └── index.js
│ │ ├── components
│ │ │ └── ExampleComponent.vue
│ │ ├── constants
│ │ │ └── colors.js
│ │ ├── datatable
│ │ │ └── index.js
│ │ ├── datepicker
│ │ │ └── index.js
│ │ ├── email
│ │ │ └── index.js
│ │ ├── fullcalendar
│ │ │ └── index.js
│ │ ├── googleMaps
│ │ │ └── index.js
│ │ ├── index.js
│ │ ├── masonry
│ │ │ └── index.js
│ │ ├── popover
│ │ │ └── index.js
│ │ ├── scrollbar
│ │ │ └── index.js
│ │ ├── search
│ │ │ └── index.js
│ │ ├── sidebar
│ │ │ └── index.js
│ │ ├── skycons
│ │ │ └── index.js
│ │ ├── sweetalert2
│ │ │ └── index.js
│ │ ├── utils
│ │ │ └── index.js
│ │ └── vectorMaps
│ │ │ ├── index.js
│ │ │ └── jquery-jvectormap-world-mill.js
│ ├── sass
│ │ ├── _variables.scss
│ │ ├── app.scss
│ │ ├── index.scss
│ │ ├── spec
│ │ │ ├── components
│ │ │ │ ├── easyPieChart.scss
│ │ │ │ ├── footer.scss
│ │ │ │ ├── forms.scss
│ │ │ │ ├── index.scss
│ │ │ │ ├── loader.scss
│ │ │ │ ├── masonry.scss
│ │ │ │ ├── pageContainer.scss
│ │ │ │ ├── progressBar.scss
│ │ │ │ ├── sidebar.scss
│ │ │ │ └── topbar.scss
│ │ │ ├── generic
│ │ │ │ ├── base.scss
│ │ │ │ └── index.scss
│ │ │ ├── index.scss
│ │ │ ├── screens
│ │ │ │ ├── chat.scss
│ │ │ │ ├── email.scss
│ │ │ │ └── index.scss
│ │ │ ├── settings
│ │ │ │ ├── baseColors.scss
│ │ │ │ ├── borders.scss
│ │ │ │ ├── brandColors.scss
│ │ │ │ ├── breakpoints.scss
│ │ │ │ ├── fonts.scss
│ │ │ │ ├── index.scss
│ │ │ │ └── materialColors.scss
│ │ │ ├── tools
│ │ │ │ ├── index.scss
│ │ │ │ └── mixins
│ │ │ │ │ ├── clearfix.scss
│ │ │ │ │ ├── index.scss
│ │ │ │ │ ├── mediaQueriesRanges.scss
│ │ │ │ │ └── placeholder.scss
│ │ │ └── utils
│ │ │ │ ├── colors.scss
│ │ │ │ ├── index.scss
│ │ │ │ └── layout
│ │ │ │ ├── helpers
│ │ │ │ ├── border.scss
│ │ │ │ ├── flex.scss
│ │ │ │ ├── index.scss
│ │ │ │ ├── layout.scss
│ │ │ │ ├── lists.scss
│ │ │ │ ├── margin.scss
│ │ │ │ ├── objects.scss
│ │ │ │ ├── padding.scss
│ │ │ │ ├── positions.scss
│ │ │ │ ├── pseudo.scss
│ │ │ │ ├── sizes.scss
│ │ │ │ └── typography.scss
│ │ │ │ ├── index.scss
│ │ │ │ ├── mixins
│ │ │ │ ├── generateResponsive.scss
│ │ │ │ ├── index.scss
│ │ │ │ └── mediaQueryCondition.scss
│ │ │ │ └── utils
│ │ │ │ ├── center.scss
│ │ │ │ ├── gap.scss
│ │ │ │ ├── index.scss
│ │ │ │ ├── layers.scss
│ │ │ │ └── peers.scss
│ │ └── vendor
│ │ │ ├── datepicker.scss
│ │ │ ├── font-awesome.css
│ │ │ ├── fullcalendar.scss
│ │ │ ├── index.scss
│ │ │ ├── jquery.datatables.scss
│ │ │ ├── perfectScrollbar.scss
│ │ │ ├── sparkline.scss
│ │ │ └── themify-icons.css
│ └── static
│ │ ├── fonts
│ │ └── icons
│ │ │ ├── fontawesome
│ │ │ ├── FontAwesome.otf
│ │ │ ├── fontawesome-webfont.eot
│ │ │ ├── fontawesome-webfont.svg
│ │ │ ├── fontawesome-webfont.ttf
│ │ │ ├── fontawesome-webfont.woff
│ │ │ └── fontawesome-webfont.woff2
│ │ │ └── themify
│ │ │ ├── themify.eot
│ │ │ ├── themify.svg
│ │ │ ├── themify.ttf
│ │ │ └── themify.woff
│ │ └── images
│ │ ├── 404.png
│ │ ├── 500.png
│ │ ├── datatables
│ │ ├── sort_asc.png
│ │ ├── sort_asc_disabled.png
│ │ ├── sort_both.png
│ │ ├── sort_desc.png
│ │ └── sort_desc_disabled.png
│ │ ├── spinner.gif
│ │ └── vmdash_logo.png
├── lang
│ ├── ar
│ │ ├── app.php
│ │ ├── auth.php
│ │ ├── pagination.php
│ │ ├── passwords.php
│ │ └── validation.php
│ ├── en
│ │ ├── app.php
│ │ ├── auth.php
│ │ ├── pagination.php
│ │ ├── passwords.php
│ │ └── validation.php
│ └── fr
│ │ ├── app.php
│ │ ├── auth.php
│ │ ├── pagination.php
│ │ ├── passwords.php
│ │ └── validation.php
├── macros
│ └── form.php
└── views
│ ├── admin
│ ├── dashboard
│ │ └── index.blade.php
│ ├── default.blade.php
│ ├── partials
│ │ ├── menu.blade.php
│ │ ├── messages.blade.php
│ │ ├── sidebar.blade.php
│ │ ├── spinner.blade.php
│ │ └── topbar.blade.php
│ ├── servers
│ │ ├── create.blade.php
│ │ ├── edit.blade.php
│ │ ├── form.blade.php
│ │ ├── index.blade.php
│ │ └── show.blade.php
│ └── users
│ │ ├── create.blade.php
│ │ ├── edit.blade.php
│ │ ├── form.blade.php
│ │ └── index.blade.php
│ ├── auth
│ ├── login.blade.php
│ └── passwords
│ │ ├── email.blade.php
│ │ └── reset.blade.php
│ ├── home.blade.php
│ ├── layouts
│ └── app.blade.php
│ └── welcome.blade.php
├── routes
├── api.php
├── channels.php
├── console.php
└── web.php
├── server.php
├── storage
├── app
│ ├── .gitignore
│ └── public
│ │ └── .gitignore
├── debugbar
│ └── .gitignore
├── framework
│ ├── .gitignore
│ ├── cache
│ │ └── .gitignore
│ ├── sessions
│ │ └── .gitignore
│ ├── testing
│ │ └── .gitignore
│ └── views
│ │ └── .gitignore
└── logs
│ └── .gitignore
├── tests
├── CreatesApplication.php
├── Feature
│ └── ExampleTest.php
├── TestCase.php
└── Unit
│ └── ExampleTest.php
├── webpack.mix.js
└── yarn.lock
/.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]
15 | indent_style = space
16 | indent_size = 2
17 |
--------------------------------------------------------------------------------
/.env.example:
--------------------------------------------------------------------------------
1 | APP_NAME=vmDash
2 | APP_ENV=local
3 | APP_KEY=
4 | APP_DEBUG=false
5 | APP_URL=http://localhost
6 |
7 | LOG_CHANNEL=stack
8 |
9 | DB_CONNECTION=mysql
10 | DB_HOST=127.0.0.1
11 | DB_PORT=3306
12 | DB_DATABASE=homestead
13 | DB_USERNAME=homestead
14 | DB_PASSWORD=secret
15 |
16 | BROADCAST_DRIVER=log
17 | CACHE_DRIVER=file
18 | SESSION_DRIVER=file
19 | SESSION_LIFETIME=120
20 | QUEUE_DRIVER=sync
21 |
22 | REDIS_HOST=127.0.0.1
23 | REDIS_PASSWORD=null
24 | REDIS_PORT=6379
25 |
26 | MAIL_DRIVER=smtp
27 | MAIL_HOST=smtp.mailtrap.io
28 | MAIL_PORT=2525
29 | MAIL_USERNAME=null
30 | MAIL_PASSWORD=null
31 | MAIL_ENCRYPTION=null
32 |
33 | PUSHER_APP_ID=
34 | PUSHER_APP_KEY=
35 | PUSHER_APP_SECRET=
36 | PUSHER_APP_CLUSTER=mt1
37 |
38 | MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
39 | MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
40 |
--------------------------------------------------------------------------------
/.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 | /.vscode
8 | /.vagrant
9 | Homestead.json
10 | Homestead.yaml
11 | npm-debug.log
12 | yarn-error.log
13 | .env
14 |
--------------------------------------------------------------------------------
/Guardfile:
--------------------------------------------------------------------------------
1 |
2 | guard 'livereload' do
3 | ignore(%r{storage})
4 | watch(%r{.*$})
5 | end
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 Rashed Alkhyeli
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
--------------------------------------------------------------------------------
/app/Console/Kernel.php:
--------------------------------------------------------------------------------
1 | command('migrate:fresh --seed')
28 | # ->everyThirtyMinutes();
29 | }
30 |
31 | /**
32 | * Register the commands for the application.
33 | *
34 | * @return void
35 | */
36 | protected function commands()
37 | {
38 | $this->load(__DIR__.'/Commands');
39 |
40 | require base_path('routes/console.php');
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/app/Exceptions/Handler.php:
--------------------------------------------------------------------------------
1 | middleware('guest');
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Auth/LoginController.php:
--------------------------------------------------------------------------------
1 | middleware('guest')->except('logout');
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Auth/RegisterController.php:
--------------------------------------------------------------------------------
1 | middleware('guest');
40 | }
41 |
42 | /**
43 | * Get a validator for an incoming registration request.
44 | *
45 | * @param array $data
46 | * @return \Illuminate\Contracts\Validation\Validator
47 | */
48 | protected function validator(array $data)
49 | {
50 | return Validator::make($data, [
51 | 'name' => 'required|string|max:255',
52 | 'email' => 'required|string|email|max:255|unique:users',
53 | 'password' => 'required|string|min:6|confirmed',
54 | ]);
55 | }
56 |
57 | /**
58 | * Create a new user instance after a valid registration.
59 | *
60 | * @param array $data
61 | * @return \App\User
62 | */
63 | protected function create(array $data)
64 | {
65 | // return User::create([
66 | // 'name' => $data['name'],
67 | // 'email' => $data['email'],
68 | // 'password' => $data['password'],
69 | // ]);
70 | }
71 | }
72 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Auth/ResetPasswordController.php:
--------------------------------------------------------------------------------
1 | middleware('guest');
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/app/Http/Controllers/CategoryController.php:
--------------------------------------------------------------------------------
1 | middleware('auth');
17 | }
18 |
19 | /**
20 | * Show the application dashboard.
21 | *
22 | * @return \Illuminate\Http\Response
23 | */
24 | public function index()
25 | {
26 | return view('home');
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/app/Http/Middleware/EncryptCookies.php:
--------------------------------------------------------------------------------
1 | check()) {
21 | return redirect('/home');
22 | }
23 |
24 | return $next($request);
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/app/Http/Middleware/Role.php:
--------------------------------------------------------------------------------
1 | user()->role < $role) {
26 | return abort(404);
27 | }
28 | return $next($request);
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/app/Http/Middleware/TrimStrings.php:
--------------------------------------------------------------------------------
1 | $uri]);
15 |
16 | try {
17 | if ($method == 'GET')
18 | $response = $client->get($uri, $params);
19 | else
20 | $response = $client->post($uri, $params);
21 |
22 | $result = $response->getBody()->getContents();
23 | $result = json_decode($result, true);
24 |
25 | }
26 | catch (BadResponseException $e)
27 | {
28 | $result = static::handleErrors($e);
29 | }
30 |
31 | return $result;
32 | }
33 |
34 | abstract public static function getServer($id);
35 | abstract public static function powerOn($id);
36 | abstract public static function powerOff($id);
37 | abstract public static function shutDown($id);
38 | abstract public static function softReboot($id);
39 | abstract public static function hardReboot($id);
40 | abstract public static function resetRootPassword($id);
41 | abstract public static function reinstallOs($id, $template);
42 | abstract public static function attachIso($id, $template);
43 | abstract public static function removeIso($id);
44 | abstract public static function enableRescue($id);
45 | abstract public static function disableRescue($id);
46 | abstract public static function handleErrors($e);
47 |
48 | }
49 |
--------------------------------------------------------------------------------
/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 | [
17 | 'App\Listeners\EventListener',
18 | ],
19 | ];
20 |
21 | /**
22 | * Register any events for your application.
23 | *
24 | * @return void
25 | */
26 | public function boot()
27 | {
28 | parent::boot();
29 |
30 | //
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/app/Providers/RouteServiceProvider.php:
--------------------------------------------------------------------------------
1 | mapApiRoutes();
39 |
40 | $this->mapWebRoutes();
41 |
42 | //
43 | }
44 |
45 | /**
46 | * Define the "web" routes for the application.
47 | *
48 | * These routes all receive session state, CSRF protection, etc.
49 | *
50 | * @return void
51 | */
52 | protected function mapWebRoutes()
53 | {
54 | Route::middleware('web')
55 | ->namespace($this->namespace)
56 | ->group(base_path('routes/web.php'));
57 | }
58 |
59 | /**
60 | * Define the "api" routes for the application.
61 | *
62 | * These routes are typically stateless.
63 | *
64 | * @return void
65 | */
66 | protected function mapApiRoutes()
67 | {
68 | Route::prefix('api')
69 | ->middleware('api')
70 | ->namespace($this->namespace)
71 | ->group(base_path('routes/api.php'));
72 | }
73 | }
74 |
--------------------------------------------------------------------------------
/app/Server.php:
--------------------------------------------------------------------------------
1 | "required",
18 | 'name' => "required",
19 | 'hostname' => "required",
20 | 'ipv4' => "required",
21 | 'sshport' => "required",
22 | 'provider' => "required",
23 | 'provider_url' => "nullable|url",
24 | 'location' => "required",
25 |
26 | ];
27 |
28 | if ($update) {
29 | return $commun;
30 | }
31 |
32 | return array_merge($commun, [
33 | 'type' => "required",
34 | 'name' => "required",
35 | 'hostname' => "required",
36 | 'ipv4' => "required",
37 | 'sshport' => "required",
38 | 'provider' => "required",
39 | 'provider_url' => "nullable|url",
40 | 'location' => "required",
41 |
42 | ]);
43 | }
44 | }
45 |
46 |
47 |
--------------------------------------------------------------------------------
/artisan:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env php
2 | 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": "laravel/laravel",
3 | "description": "The Laravel Framework.",
4 | "keywords": ["framework", "laravel"],
5 | "license": "MIT",
6 | "type": "project",
7 | "require": {
8 | "php": "^7.1.3",
9 | "barryvdh/laravel-debugbar": "^3.1",
10 | "fideloper/proxy": "^4.0",
11 | "guzzlehttp/guzzle": "^6.3",
12 | "laravel/framework": "5.6.*",
13 | "laravel/tinker": "^1.0",
14 | "laravelcollective/html": "^5.6",
15 | "phpseclib/phpseclib": "~2.0",
16 | "rinvex/country": "^3.1",
17 | "thomaswelton/laravel-gravatar": "~1.0"
18 | },
19 | "require-dev": {
20 | "filp/whoops": "^2.0",
21 | "fzaninotto/faker": "^1.4",
22 | "mockery/mockery": "^1.0",
23 | "nunomaduro/collision": "^2.0",
24 | "phpunit/phpunit": "^7.0"
25 | },
26 | "autoload": {
27 | "files": [
28 | "app/Http/helpers.php"
29 | ],
30 | "classmap": [
31 | "database/seeds",
32 | "database/factories"
33 | ],
34 | "psr-4": {
35 | "App\\": "app/"
36 | }
37 | },
38 | "autoload-dev": {
39 | "psr-4": {
40 | "Tests\\": "tests/"
41 | }
42 | },
43 | "extra": {
44 | "laravel": {
45 | "dont-discover": [
46 | ]
47 | }
48 | },
49 | "scripts": {
50 | "post-root-package-install": [
51 | "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
52 | ],
53 | "post-create-project-cmd": [
54 | "@php artisan key:generate"
55 | ],
56 | "post-autoload-dump": [
57 | "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
58 | "@php artisan package:discover"
59 | ]
60 | },
61 | "config": {
62 | "preferred-install": "dist",
63 | "sort-packages": true,
64 | "optimize-autoloader": true
65 | },
66 | "minimum-stability": "dev",
67 | "prefer-stable": true
68 | }
69 |
--------------------------------------------------------------------------------
/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 | 'encrypted' => 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/filesystems.php:
--------------------------------------------------------------------------------
1 | env('FILESYSTEM_DRIVER', 'public'),
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", "rackspace"
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 | ],
66 |
67 | ],
68 |
69 | ];
70 |
--------------------------------------------------------------------------------
/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/services.php:
--------------------------------------------------------------------------------
1 | [
18 | 'domain' => env('MAILGUN_DOMAIN'),
19 | 'secret' => env('MAILGUN_SECRET'),
20 | ],
21 |
22 | 'ses' => [
23 | 'key' => env('SES_KEY'),
24 | 'secret' => env('SES_SECRET'),
25 | 'region' => env('SES_REGION', 'us-east-1'),
26 | ],
27 |
28 | 'sparkpost' => [
29 | 'secret' => env('SPARKPOST_SECRET'),
30 | ],
31 |
32 | 'stripe' => [
33 | 'model' => App\User::class,
34 | 'key' => env('STRIPE_KEY'),
35 | 'secret' => env('STRIPE_SECRET'),
36 | ],
37 |
38 | ];
39 |
--------------------------------------------------------------------------------
/config/variables.php:
--------------------------------------------------------------------------------
1 | [
6 | '' => 'Please select ...',
7 | 'HetznerAPI' => 'Hetzner Cloud',
8 | 'VultrAPI' => 'Vultr',
9 | 'ScalewayAPI' => 'Scaleway (Paris)',
10 | ],
11 |
12 | 'boolean' => [
13 | '0' => 'No',
14 | '1' => 'Yes',
15 | ],
16 |
17 | 'role' => [
18 | '0' => 'User',
19 | '10' => 'Admin',
20 | ],
21 |
22 | 'status' => [
23 | '1' => 'Active',
24 | '0' => 'Inactive',
25 | ],
26 |
27 | 'avatar' => [
28 | 'public' => '/storage/avatar/',
29 | 'folder' => 'avatar',
30 |
31 | 'width' => 400,
32 | 'height' => 400,
33 | ],
34 |
35 | /*
36 | |------------------------------------------------------------------------------------
37 | | ENV of APP
38 | |------------------------------------------------------------------------------------
39 | */
40 | 'APP_ADMIN' => 'admin',
41 | 'APP_TOKEN' => env('APP_TOKEN', 'admin123456'),
42 | ];
43 |
--------------------------------------------------------------------------------
/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' => realpath(storage_path('framework/views')),
32 |
33 | ];
34 |
--------------------------------------------------------------------------------
/database/.gitignore:
--------------------------------------------------------------------------------
1 | *.sqlite
2 |
--------------------------------------------------------------------------------
/database/factories/UserFactory.php:
--------------------------------------------------------------------------------
1 | define(App\User::class, function (Faker $faker) {
17 | return [
18 | 'name' => $faker->name,
19 | 'email' => $faker->unique()->safeEmail,
20 | 'password' => '$2y$10$TKh8H1.PfQx37YgCzwiKb.KjNyWgaHb9cbcoQgdIVFlYg7B77UdFm', // secret
21 | 'remember_token' => str_random(10),
22 | ];
23 | });
24 |
--------------------------------------------------------------------------------
/database/migrations/2014_10_12_000000_create_users_table.php:
--------------------------------------------------------------------------------
1 | increments('id');
18 | $table->string('name');
19 | $table->string('email')->unique();
20 | $table->string('password');
21 | $table->string('avatar')->nullable();
22 | $table->integer('role')->default(0);
23 | $table->text('bio')->nullable();
24 | $table->rememberToken();
25 | $table->timestamps();
26 | });
27 | }
28 |
29 | /**
30 | * Reverse the migrations.
31 | *
32 | * @return void
33 | */
34 | public function down()
35 | {
36 | Schema::dropIfExists('users');
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/database/migrations/2014_10_12_100000_create_password_resets_table.php:
--------------------------------------------------------------------------------
1 | string('email')->index();
18 | $table->string('token');
19 | $table->timestamp('created_at')->nullable();
20 | });
21 | }
22 |
23 | /**
24 | * Reverse the migrations.
25 | *
26 | * @return void
27 | */
28 | public function down()
29 | {
30 | Schema::dropIfExists('password_resets');
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/database/migrations/2018_06_24_075613_create_servers_table.php:
--------------------------------------------------------------------------------
1 | increments('id');
18 | $table->string('name');
19 | $table->string('hostname');
20 | $table->string('ipv4');
21 | $table->integer('sshport');
22 | $table->text('sshkey')->nullable();
23 | $table->string('type')->nullable();
24 | $table->string('apiserverid')->nullable();
25 | $table->string('apiurl')->nullable();
26 | $table->string('apikey')->nullable();
27 | $table->string('apipass')->nullable();
28 | $table->string('provider');
29 | $table->string('provider_url');
30 | $table->string('location');
31 | $table->timestamps();
32 | });
33 | }
34 |
35 | /**
36 | * Reverse the migrations.
37 | *
38 | * @return void
39 | */
40 | public function down()
41 | {
42 | Schema::dropIfExists('servers');
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/database/migrations/2018_07_07_112054_fix_servers_table_substr.php:
--------------------------------------------------------------------------------
1 | type, 'API')))
23 | {
24 | $server->update([
25 | 'type' => str_replace("API","",$server->type)
26 | ]);
27 | }
28 |
29 | }
30 | }
31 |
32 | /**
33 | * Reverse the migrations.
34 | *
35 | * @return void
36 | */
37 | public function down()
38 | {
39 | //
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/database/seeds/DatabaseSeeder.php:
--------------------------------------------------------------------------------
1 | call(users::class);
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/database/seeds/users.php:
--------------------------------------------------------------------------------
1 | 'Admin Admin',
21 | 'email' => 'test@example.com',
22 | 'password' => bcrypt('123456'),
23 | 'role' => 10,
24 | 'bio' => '',
25 | ]);
26 | }
27 |
28 | User::insert($data);
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/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 --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
6 | "watch": "npm run development -- --watch",
7 | "watch-poll": "npm run watch -- --watch-poll",
8 | "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
9 | "prod": "npm run production",
10 | "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
11 | },
12 | "devDependencies": {
13 | "axios": "^0.18",
14 | "babel-polyfill": "^6.26.0",
15 | "bootstrap": "^4.0.0",
16 | "bootstrap-datepicker": "^1.7.1",
17 | "browser-sync": "^2.23.6",
18 | "browser-sync-webpack-plugin": "^1.2.0",
19 | "chart.js": "^2.7.2",
20 | "cross-env": "^5.1",
21 | "datatables": "^1.10.13",
22 | "easy-pie-chart": "^2.1.7",
23 | "file-loader": "^1.1.11",
24 | "fullcalendar": "^3.9.0",
25 | "jquery": "^3.3.1",
26 | "jquery-sparkline": "^2.4.0",
27 | "jvectormap": "^2.0.4",
28 | "laravel-mix": "^2.0",
29 | "load-google-maps-api": "^1.2.0",
30 | "lodash": "^4.17.5",
31 | "masonry-layout": "^4.2.1",
32 | "moment": "^2.21.0",
33 | "perfect-scrollbar": "^1.1.0",
34 | "popper.js": "^1.12",
35 | "skycons": "^1.0.0",
36 | "sweetalert2": "^7.15.1",
37 | "vue": "^2.5.7"
38 | },
39 | "dependencies": {
40 | "nprogress": "^0.2.0"
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/phpunit.xml:
--------------------------------------------------------------------------------
1 |
2 |
11 |
12 |
13 | ./tests/Feature
14 |
15 |
16 |
17 | ./tests/Unit
18 |
19 |
20 |
21 |
22 | ./app
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/public/config/providers/DigitalOcean.json:
--------------------------------------------------------------------------------
1 | {
2 | "details": {
3 | "name": "Digital Ocean",
4 | "website": "https://www.digitalocean.com/"
5 | },
6 | "instructions": {
7 | "title": "Adding a DO Server",
8 | "body": "
Follow the steps below:
- Login to the DO Dashboard
- Click on the API link on the left
- Click on the 'Generate New Token' button
- Use the API Token for the Provider API Key field
- Enter some name recognizable to you and generate the tokens.
- Select 'Droplets' in the left menu
- Click on your server's name
- Check the URL in the browser, you will find an ID (e.g. droplets/13000089/graphs?i=xxxxx)
- Use this ID for the Provider Server ID field (only the numeric ID)
"
9 | },
10 | "fields": {
11 | "apiserverid": {
12 | "type": "text",
13 | "label": "Provider Server ID",
14 | "required": true
15 | },
16 | "apikey": {
17 | "type": "text",
18 | "label": "Provider API Key",
19 | "required": true
20 | },
21 | "name": {
22 | "type": "text",
23 | "label": "Friendly Name",
24 | "required": true
25 | },
26 | "hostname": {
27 | "type": "text",
28 | "label": "Hostname",
29 | "required": true
30 | },
31 | "ipv4": {
32 | "type": "text",
33 | "label": "IPv4 Address",
34 | "required": true
35 | },
36 | "sshport": {
37 | "type": "text",
38 | "label": "SSH Port",
39 | "required": true
40 | },
41 | "provider": {
42 | "type": "text",
43 | "label": "Provider's Name",
44 | "required": true
45 | },
46 | "provider_url": {
47 | "type": "text",
48 | "label": "Provider's Website URL",
49 | "required": false
50 | },
51 | "location": {
52 | "type": "countries",
53 | "label": "Location",
54 | "required": true
55 | },
56 | "sshkey": {
57 | "type": "textarea",
58 | "label": "SSH Private Key",
59 | "required": false
60 | }
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/public/config/providers/Hetzner.json:
--------------------------------------------------------------------------------
1 | {
2 | "details": {
3 | "name": "Hetzner",
4 | "website": "https://www.hetzner.com/"
5 | },
6 | "instructions": {
7 | "title": "Adding a Hetzner Server",
8 | "body": "Follow the steps below:
- Login to the Hetzner Cloud Console
- Select a project
- Select a server
- On the overview page you will find an ID (e.g. #810003)
- Use this ID for the Provider Server ID field (without the #)
- Select 'Access' from the left menu
- Select 'API Tokens' from the top menu
- Generate an API Token
- Use the API Token for the Provider API Key field
"
9 | },
10 | "fields": {
11 | "apiserverid": {
12 | "type": "text",
13 | "label": "Provider Server ID",
14 | "required": true
15 | },
16 | "apikey": {
17 | "type": "text",
18 | "label": "Provider API Key",
19 | "required": true
20 | },
21 | "name": {
22 | "type": "text",
23 | "label": "Friendly Name",
24 | "required": true
25 | },
26 | "hostname": {
27 | "type": "text",
28 | "label": "Hostname",
29 | "required": true
30 | },
31 | "ipv4": {
32 | "type": "text",
33 | "label": "IPv4 Address",
34 | "required": true
35 | },
36 | "sshport": {
37 | "type": "text",
38 | "label": "SSH Port",
39 | "required": true
40 | },
41 | "provider": {
42 | "type": "text",
43 | "label": "Provider's Name",
44 | "required": true
45 | },
46 | "provider_url": {
47 | "type": "text",
48 | "label": "Provider's Website URL",
49 | "required": false
50 | },
51 | "location": {
52 | "type": "countries",
53 | "label": "Location",
54 | "required": true
55 | },
56 | "sshkey": {
57 | "type": "textarea",
58 | "label": "SSH Private Key",
59 | "required": false
60 | }
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/public/config/providers/Vultr.json:
--------------------------------------------------------------------------------
1 | {
2 | "details": {
3 | "name": "Vultr",
4 | "website": "https://www.vultr.com/"
5 | },
6 | "instructions": {
7 | "title": "Adding a Vultr Server",
8 | "body": "Follow the steps below:
- Login to the Vultr Dashboard
- Click on your name in the upper right corner
- Click on API
- Click on the 'Enable API' button
- Use the API Token for the Provider API Key field
- Make sure you allow your IP (where vmDash is hosted) to have access
- Select 'Servers' from the left menu
- Click on your server's name
- Check the URL in the browser, you will find an ID (e.g. SUBID=13000089)
- Use this ID for the Provider Server ID field (without the SUBID=)
"
9 | },
10 | "fields": {
11 | "apiserverid": {
12 | "type": "text",
13 | "label": "Provider Server ID",
14 | "required": true
15 | },
16 | "apikey": {
17 | "type": "text",
18 | "label": "Provider API Key",
19 | "required": true
20 | },
21 | "name": {
22 | "type": "text",
23 | "label": "Friendly Name",
24 | "required": true
25 | },
26 | "hostname": {
27 | "type": "text",
28 | "label": "Hostname",
29 | "required": true
30 | },
31 | "ipv4": {
32 | "type": "text",
33 | "label": "IPv4 Address",
34 | "required": true
35 | },
36 | "sshport": {
37 | "type": "text",
38 | "label": "SSH Port",
39 | "required": true
40 | },
41 | "provider": {
42 | "type": "text",
43 | "label": "Provider's Name",
44 | "required": true
45 | },
46 | "provider_url": {
47 | "type": "text",
48 | "label": "Provider's Website URL",
49 | "required": false
50 | },
51 | "location": {
52 | "type": "countries",
53 | "label": "Location",
54 | "required": true
55 | },
56 | "sshkey": {
57 | "type": "textarea",
58 | "label": "SSH Private Key",
59 | "required": false
60 | }
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/myrsk/vmdash/1bc3f8ae18a5e234d181addfdcba3b6ad9062941/public/favicon.ico
--------------------------------------------------------------------------------
/public/fonts/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/myrsk/vmdash/1bc3f8ae18a5e234d181addfdcba3b6ad9062941/public/fonts/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/public/fonts/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/myrsk/vmdash/1bc3f8ae18a5e234d181addfdcba3b6ad9062941/public/fonts/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/public/fonts/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/myrsk/vmdash/1bc3f8ae18a5e234d181addfdcba3b6ad9062941/public/fonts/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/public/fonts/fontawesome-webfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/myrsk/vmdash/1bc3f8ae18a5e234d181addfdcba3b6ad9062941/public/fonts/fontawesome-webfont.woff2
--------------------------------------------------------------------------------
/public/fonts/themify.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/myrsk/vmdash/1bc3f8ae18a5e234d181addfdcba3b6ad9062941/public/fonts/themify.eot
--------------------------------------------------------------------------------
/public/fonts/themify.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/myrsk/vmdash/1bc3f8ae18a5e234d181addfdcba3b6ad9062941/public/fonts/themify.ttf
--------------------------------------------------------------------------------
/public/fonts/themify.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/myrsk/vmdash/1bc3f8ae18a5e234d181addfdcba3b6ad9062941/public/fonts/themify.woff
--------------------------------------------------------------------------------
/public/git.php:
--------------------------------------------------------------------------------
1 |
8 | */
9 |
10 | define('LARAVEL_START', microtime(true));
11 |
12 | /*
13 | |--------------------------------------------------------------------------
14 | | Register The Auto Loader
15 | |--------------------------------------------------------------------------
16 | |
17 | | Composer provides a convenient, automatically generated class loader for
18 | | our application. We just need to utilize it! We'll simply require it
19 | | into the script here so that we don't have to worry about manual
20 | | loading any of our classes later on. It feels great to relax.
21 | |
22 | */
23 |
24 | require __DIR__.'/../vendor/autoload.php';
25 |
26 | /*
27 | |--------------------------------------------------------------------------
28 | | Turn On The Lights
29 | |--------------------------------------------------------------------------
30 | |
31 | | We need to illuminate PHP development, so let us turn on the lights.
32 | | This bootstraps the framework and gets it ready for use, then it
33 | | will load up this application so that we can run it and send
34 | | the responses back to the browser and delight our users.
35 | |
36 | */
37 |
38 | $app = require_once __DIR__.'/../bootstrap/app.php';
39 |
40 | /*
41 | |--------------------------------------------------------------------------
42 | | Run The Application
43 | |--------------------------------------------------------------------------
44 | |
45 | | Once we have the application, we can handle the incoming request
46 | | through the kernel, and send the associated response back to
47 | | the client's browser allowing them to enjoy the creative
48 | | and wonderful application we have prepared for them.
49 | |
50 | */
51 |
52 | $kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
53 |
54 | $response = $kernel->handle(
55 | $request = Illuminate\Http\Request::capture()
56 | );
57 |
58 | $response->send();
59 |
60 | $kernel->terminate($request, $response);
61 |
--------------------------------------------------------------------------------
/public/mix-manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "/js/app.js": "/js/app.js?id=6146a7ccd56932645af5",
3 | "/css/app.css": "/css/app.css?id=142ae54f1b5f57b00872",
4 | "/js/app.js.map": "/js/app.js.map?id=a0bda2bd1d88ec50fdc9",
5 | "/css/app.css.map": "/css/app.css.map?id=1b674510383ba0ef8036"
6 | }
--------------------------------------------------------------------------------
/public/robots.txt:
--------------------------------------------------------------------------------
1 | User-agent: *
2 | Disallow:
3 |
--------------------------------------------------------------------------------
/public/web.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/resources/assets/js/app.js:
--------------------------------------------------------------------------------
1 |
2 | /**
3 | * First we will load all of this project's JavaScript dependencies which
4 | * includes Vue and other libraries. It is a great starting point when
5 | * building robust, powerful web applications using Vue and Laravel.
6 | */
7 |
8 | require('./bootstrap');
9 |
10 | // window.Vue = require('vue');
11 |
12 | /**
13 | * Next, we will create a fresh Vue application instance and attach it to
14 | * the page. Then, you may begin adding components to this application
15 | * or customize the JavaScript scaffolding to fit your unique needs.
16 | */
17 |
18 | // Vue.component('example-component', require('./components/ExampleComponent.vue'));
19 |
20 | // const app = new Vue({
21 | // el: '#app'
22 | // });
23 |
--------------------------------------------------------------------------------
/resources/assets/js/bootstrap.js:
--------------------------------------------------------------------------------
1 |
2 | // window.axios = require('axios');
3 |
4 | // window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
5 |
6 | /**
7 | * Next we will register the CSRF Token as a common header with Axios so that
8 | * all outgoing HTTP requests automatically have it attached. This is just
9 | * a simple convenience so we don't have to attach every token manually.
10 | */
11 |
12 | // let token = document.head.querySelector('meta[name="csrf-token"]');
13 |
14 | // if (token) {
15 | // window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;
16 | // } else {
17 | // console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token');
18 | // }
19 |
20 | /**
21 | * Echo exposes an expressive API for subscribing to channels and listening
22 | * for events that are broadcast by Laravel. Echo and event broadcasting
23 | * allows your team to easily build robust real-time web applications.
24 | */
25 |
26 | // import Echo from 'laravel-echo'
27 |
28 | // window.Pusher = require('pusher-js');
29 |
30 | // window.Echo = new Echo({
31 | // broadcaster: 'pusher',
32 | // key: process.env.MIX_PUSHER_APP_KEY,
33 | // cluster: process.env.MIX_PUSHER_APP_CLUSTER,
34 | // encrypted: true
35 | // });
36 |
37 | import './masonry';
38 | import './charts';
39 | import './popover';
40 | import './scrollbar';
41 | import './search';
42 | import './sidebar';
43 | import './skycons';
44 | import './vectorMaps';
45 | import './chat';
46 | import './datatable';
47 | import './datepicker';
48 | import './email';
49 | import './fullcalendar';
50 | import './googleMaps';
51 | import './utils';
52 |
53 | import './sweetalert2';
54 |
--------------------------------------------------------------------------------
/resources/assets/js/charts/easyPieChart/index.js:
--------------------------------------------------------------------------------
1 | import * as $ from 'jquery';
2 | import 'easy-pie-chart/dist/jquery.easypiechart.min.js';
3 |
4 | export default (function () {
5 | if ($('.easy-pie-chart').length > 0) {
6 | $('.easy-pie-chart').easyPieChart({
7 | onStep(from, to, percent) {
8 | this.el.children[0].innerHTML = `${Math.round(percent)} %`;
9 | },
10 | });
11 | }
12 | }())
13 |
14 |
--------------------------------------------------------------------------------
/resources/assets/js/charts/index.js:
--------------------------------------------------------------------------------
1 | import './chartJS';
2 | import './easyPieChart';
3 | import './sparkline';
4 |
--------------------------------------------------------------------------------
/resources/assets/js/chat/index.js:
--------------------------------------------------------------------------------
1 | import * as $ from 'jquery';
2 |
3 | export default (function () {
4 | $('#chat-sidebar-toggle').on('click', e => {
5 | $('#chat-sidebar').toggleClass('open');
6 | e.preventDefault();
7 | });
8 | }())
9 |
--------------------------------------------------------------------------------
/resources/assets/js/components/ExampleComponent.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | I'm an example component.
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
24 |
--------------------------------------------------------------------------------
/resources/assets/js/datatable/index.js:
--------------------------------------------------------------------------------
1 | import * as $ from 'jquery';
2 | import 'datatables';
3 |
4 | export default (function () {
5 | $('#dataTable').DataTable({
6 | language: {
7 | // 'url' : 'https://cdn.datatables.net/plug-ins/1.10.16/i18n/French.json'
8 | // More languages : http://www.datatables.net/plug-ins/i18n/
9 | },
10 | aaSorting: []
11 | });
12 | }());
13 |
--------------------------------------------------------------------------------
/resources/assets/js/datepicker/index.js:
--------------------------------------------------------------------------------
1 | import * as $ from 'jquery';
2 | import 'bootstrap-datepicker/dist/js/bootstrap-datepicker.min.js';
3 | import 'bootstrap-datepicker/dist/css/bootstrap-datepicker.min.css';
4 |
5 | export default (function () {
6 | $('.start-date').datepicker();
7 | $('.end-date').datepicker();
8 | }())
9 |
--------------------------------------------------------------------------------
/resources/assets/js/email/index.js:
--------------------------------------------------------------------------------
1 | import * as $ from 'jquery';
2 |
3 | export default (function () {
4 | $('.email-side-toggle').on('click', e => {
5 | $('.email-app').toggleClass('side-active');
6 | e.preventDefault();
7 | });
8 |
9 | $('.email-list-item, .back-to-mailbox').on('click', e => {
10 | $('.email-content').toggleClass('open');
11 | e.preventDefault();
12 | });
13 | }())
14 |
--------------------------------------------------------------------------------
/resources/assets/js/fullcalendar/index.js:
--------------------------------------------------------------------------------
1 | import * as $ from 'jquery';
2 | import 'fullcalendar/dist/fullcalendar.min.js';
3 | import 'fullcalendar/dist/fullcalendar.min.css';
4 |
5 | export default (function () {
6 | const date = new Date();
7 | const d = date.getDate();
8 | const m = date.getMonth();
9 | const y = date.getFullYear();
10 |
11 | const events = [{
12 | title : 'All Day Event',
13 | start : new Date(y, m, 1),
14 | desc : 'Meetings',
15 | bullet : 'success',
16 | }, {
17 | title : 'Long Event',
18 | start : new Date(y, m, d - 5),
19 | end : new Date(y, m, d - 2),
20 | desc : 'Hangouts',
21 | bullet : 'success',
22 | }, {
23 | title : 'Repeating Event',
24 | start : new Date(y, m, d - 3, 16, 0),
25 | allDay : false,
26 | desc : 'Product Checkup',
27 | bullet : 'warning',
28 | }, {
29 | title : 'Repeating Event',
30 | start : new Date(y, m, d + 4, 16, 0),
31 | allDay : false,
32 | desc : 'Conference',
33 | bullet : 'danger',
34 | }, {
35 | title : 'Birthday Party',
36 | start : new Date(y, m, d + 1, 19, 0),
37 | end : new Date(y, m, d + 1, 22, 30),
38 | allDay : false,
39 | desc : 'Gathering',
40 | }, {
41 | title : 'Click for Google',
42 | start : new Date(y, m, 28),
43 | end : new Date(y, m, 29),
44 | url : 'http ://google.com/',
45 | desc : 'Google',
46 | bullet : 'success',
47 | }];
48 |
49 | $('#full-calendar').fullCalendar({
50 | events,
51 | height : 800,
52 | editable : true,
53 | header: {
54 | left : 'month,agendaWeek,agendaDay',
55 | center : 'title',
56 | right : 'today prev,next',
57 | },
58 | });
59 | }())
60 |
--------------------------------------------------------------------------------
/resources/assets/js/index.js:
--------------------------------------------------------------------------------
1 | import '../styles/index.scss';
2 |
3 | import './masonry';
4 | import './charts';
5 | import './popover';
6 | import './scrollbar';
7 | import './search';
8 | import './sidebar';
9 | import './skycons';
10 | import './vectorMaps';
11 | import './chat';
12 | import './datatable';
13 | import './datepicker';
14 | import './email';
15 | import './fullcalendar';
16 | import './googleMaps';
17 | import './utils';
18 |
--------------------------------------------------------------------------------
/resources/assets/js/masonry/index.js:
--------------------------------------------------------------------------------
1 | import * as $ from 'jquery';
2 | import Masonry from 'masonry-layout';
3 |
4 | export default (function () {
5 | window.addEventListener('load', () => {
6 | if ($('.masonry').length > 0) {
7 | new Masonry('.masonry', {
8 | itemSelector: '.masonry-item',
9 | columnWidth: '.masonry-sizer',
10 | percentPosition: true,
11 | });
12 | }
13 | });
14 | }());
15 |
--------------------------------------------------------------------------------
/resources/assets/js/popover/index.js:
--------------------------------------------------------------------------------
1 | import * as $ from 'jquery';
2 | import 'bootstrap';
3 |
4 | export default (function () {
5 | // ------------------------------------------------------
6 | // @Popover
7 | // ------------------------------------------------------
8 |
9 | $('[data-toggle="popover"]').popover();
10 |
11 | // ------------------------------------------------------
12 | // @Tooltips
13 | // ------------------------------------------------------
14 |
15 | $('[data-toggle="tooltip"]').tooltip();
16 | }());
17 |
--------------------------------------------------------------------------------
/resources/assets/js/scrollbar/index.js:
--------------------------------------------------------------------------------
1 | import * as $ from 'jquery';
2 | import PerfectScrollbar from 'perfect-scrollbar';
3 |
4 | export default (function () {
5 | const scrollables = $('.scrollable');
6 | if (scrollables.length > 0) {
7 | scrollables.each((index, el) => {
8 | new PerfectScrollbar(el);
9 | });
10 | }
11 | }());
12 |
--------------------------------------------------------------------------------
/resources/assets/js/search/index.js:
--------------------------------------------------------------------------------
1 | import * as $ from 'jquery';
2 |
3 | export default (function () {
4 | $('.search-toggle').on('click', e => {
5 | $('.search-box, .search-input').toggleClass('active');
6 | $('.search-input input').focus();
7 | e.preventDefault();
8 | });
9 | }());
10 |
--------------------------------------------------------------------------------
/resources/assets/js/sidebar/index.js:
--------------------------------------------------------------------------------
1 | import * as $ from 'jquery';
2 |
3 | export default (function () {
4 | // Sidebar links
5 | $('.sidebar .sidebar-menu li a').on('click', function () {
6 | const $this = $(this);
7 |
8 | if ($this.parent().hasClass('open')) {
9 | $this
10 | .parent()
11 | .children('.dropdown-menu')
12 | .slideUp(200, () => {
13 | $this.parent().removeClass('open');
14 | });
15 | } else {
16 | $this
17 | .parent()
18 | .parent()
19 | .children('li.open')
20 | .children('.dropdown-menu')
21 | .slideUp(200);
22 |
23 | $this
24 | .parent()
25 | .parent()
26 | .children('li.open')
27 | .children('a')
28 | .removeClass('open');
29 |
30 | $this
31 | .parent()
32 | .parent()
33 | .children('li.open')
34 | .removeClass('open');
35 |
36 | $this
37 | .parent()
38 | .children('.dropdown-menu')
39 | .slideDown(200, () => {
40 | $this.parent().addClass('open');
41 | });
42 | }
43 | });
44 |
45 | // Sidebar Activity Class
46 | const sidebarLinks = $('.sidebar').find('.sidebar-link');
47 |
48 | sidebarLinks
49 | .each((index, el) => {
50 | $(el).removeClass('active');
51 | })
52 | .filter(function () {
53 | const href = $(this).attr('href');
54 | const pattern = href[0] === '/' ? href.substr(1) : href;
55 | return pattern === (window.location.pathname).substr(1);
56 | })
57 | .addClass('active');
58 |
59 | // ٍSidebar Toggle
60 | $('.sidebar-toggle').on('click', e => {
61 | $('.app').toggleClass('is-collapsed');
62 | e.preventDefault();
63 | });
64 |
65 | /**
66 | * Wait untill sidebar fully toggled (animated in/out)
67 | * then trigger window resize event in order to recalculate
68 | * masonry layout widths and gutters.
69 | */
70 | $('#sidebar-toggle').click(e => {
71 | e.preventDefault();
72 | setTimeout(() => {
73 | window.dispatchEvent(window.EVENT);
74 | }, 300);
75 | });
76 | }());
77 |
--------------------------------------------------------------------------------
/resources/assets/js/skycons/index.js:
--------------------------------------------------------------------------------
1 | import SkyconsInit from 'skycons';
2 |
3 | const Skycons = SkyconsInit(window);
4 |
5 | export default (function () {
6 | const icons = new Skycons({ 'color': '#ff6849' });
7 | const list = [
8 | 'clear-day',
9 | 'clear-night',
10 | 'partly-cloudy-day',
11 | 'partly-cloudy-night',
12 | 'cloudy',
13 | 'rain',
14 | 'sleet',
15 | 'snow',
16 | 'wind',
17 | 'fog',
18 | ];
19 | let i = list.length;
20 |
21 | while (i--) {
22 | const
23 | weatherType = list[i],
24 | elements = document.getElementsByClassName(weatherType);
25 | let j = elements.length;
26 |
27 | while (j--) {
28 | icons.set(elements[j], weatherType);
29 | }
30 | }
31 |
32 | icons.play();
33 | }());
34 |
--------------------------------------------------------------------------------
/resources/assets/js/sweetalert2/index.js:
--------------------------------------------------------------------------------
1 | import * as $ from 'jquery';
2 | import swal from 'sweetalert2';
3 |
4 | export default (function () {
5 | $(document).on('click', "form.delete button", function(e) {
6 | var _this = $(this);
7 | e.preventDefault();
8 | swal({
9 | title: 'Are you sure?', // Opération Dangereuse
10 | text: 'Are you sure you want to continue ?', // Êtes-vous sûr de continuer ?
11 | type: 'error',
12 | showCancelButton: true,
13 | confirmButtonColor: 'null',
14 | cancelButtonColor: 'null',
15 | confirmButtonClass: 'btn btn-danger',
16 | cancelButtonClass: 'btn btn-primary',
17 | confirmButtonText: 'Yes, sure!', // Oui, sûr
18 | cancelButtonText: 'Cancel', // Annuler
19 | closeOnConfirm: false
20 | }).then(res => {
21 | if (res.value) {
22 | _this.closest("form").submit();
23 | }
24 | });
25 | });
26 | }())
27 |
--------------------------------------------------------------------------------
/resources/assets/js/utils/index.js:
--------------------------------------------------------------------------------
1 | import * as $ from 'jquery';
2 |
3 | export default (function () {
4 | // ------------------------------------------------------
5 | // @Window Resize
6 | // ------------------------------------------------------
7 |
8 | /**
9 | * NOTE: Register resize event for Masonry layout
10 | */
11 | const EVENT = document.createEvent('UIEvents');
12 | window.EVENT = EVENT;
13 | EVENT.initUIEvent('resize', true, false, window, 0);
14 |
15 |
16 | window.addEventListener('load', () => {
17 | /**
18 | * Trigger window resize event after page load
19 | * for recalculation of masonry layout.
20 | */
21 | window.dispatchEvent(EVENT);
22 | });
23 |
24 | // ------------------------------------------------------
25 | // @External Links
26 | // ------------------------------------------------------
27 |
28 | // Open external links in new window
29 | $('a')
30 | .filter('[href^="http"], [href^="//"]')
31 | .not(`[href*="${window.location.host}"]`)
32 | .attr('rel', 'noopener noreferrer')
33 | .attr('target', '_blank');
34 |
35 | // ------------------------------------------------------
36 | // @Resize Trigger
37 | // ------------------------------------------------------
38 |
39 | // Trigger resize on any element click
40 | document.addEventListener('click', () => {
41 | window.dispatchEvent(window.EVENT);
42 | });
43 | }());
44 |
--------------------------------------------------------------------------------
/resources/assets/sass/_variables.scss:
--------------------------------------------------------------------------------
1 |
2 | // Body
3 | $body-bg: #f5f8fa;
4 |
5 | // Typography
6 | $font-family-sans-serif: "Raleway", sans-serif;
7 | $font-size-base: 0.9rem;
8 | $line-height-base: 1.6;
9 | $text-color: #636b6f;
10 |
11 | // Navbar
12 | $navbar-default-bg: #fff;
13 |
14 | // Buttons
15 | $btn-default-color: $text-color;
16 |
17 | // Panels
18 | $panel-default-heading-bg: #fff;
--------------------------------------------------------------------------------
/resources/assets/sass/app.scss:
--------------------------------------------------------------------------------
1 | @import 'spec/settings/index';
2 | @import 'spec/tools/index';
3 | @import "~bootstrap/scss/bootstrap";
4 | @import 'spec/index';
5 | @import 'vendor/index';
6 |
7 | #loader {
8 | transition: all 0.3s ease-in-out;
9 | opacity: 1;
10 | visibility: visible;
11 | position: fixed;
12 | height: 100vh;
13 | width: 100%;
14 | background: #fff;
15 | z-index: 90000;
16 | }
17 |
18 | #loader.fadeOut {
19 | opacity: 0;
20 | visibility: hidden;
21 | }
22 |
23 | .spinner {
24 | width: 40px;
25 | height: 40px;
26 | position: absolute;
27 | top: calc(50% - 20px);
28 | left: calc(50% - 20px);
29 | background-color: #333;
30 | border-radius: 100%;
31 | -webkit-animation: sk-scaleout 1.0s infinite ease-in-out;
32 | animation: sk-scaleout 1.0s infinite ease-in-out;
33 | }
34 |
35 | @-webkit-keyframes sk-scaleout {
36 | 0% {
37 | -webkit-transform: scale(0)
38 | }
39 | 100% {
40 | -webkit-transform: scale(1.0);
41 | opacity: 0;
42 | }
43 | }
44 |
45 | @keyframes sk-scaleout {
46 | 0% {
47 | -webkit-transform: scale(0);
48 | transform: scale(0);
49 | }
50 | 100% {
51 | -webkit-transform: scale(1.0);
52 | transform: scale(1.0);
53 | opacity: 0;
54 | }
55 | }
56 |
57 |
58 | .menu-btn {
59 | padding: 10px 15px;
60 | border: none;
61 | background: none;
62 | }
63 |
--------------------------------------------------------------------------------
/resources/assets/sass/index.scss:
--------------------------------------------------------------------------------
1 | @import 'spec/settings/index';
2 | @import 'spec/tools/index';
3 | @import "~bootstrap/scss/bootstrap";
4 | @import 'spec/index';
5 | @import 'vendor/index';
6 |
7 |
--------------------------------------------------------------------------------
/resources/assets/sass/spec/components/easyPieChart.scss:
--------------------------------------------------------------------------------
1 | .easy-pie-chart {
2 | position: relative;
3 |
4 | span {
5 | position: absolute;
6 | top: 50%;
7 | left: 50%;
8 | transform: translate(-50%, -50%);
9 | line-height: 0;
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/resources/assets/sass/spec/components/footer.scss:
--------------------------------------------------------------------------------
1 | footer {
2 | z-index: 1;
3 | position: relative;
4 | }
5 |
--------------------------------------------------------------------------------
/resources/assets/sass/spec/components/index.scss:
--------------------------------------------------------------------------------
1 | @import 'sidebar';
2 | @import 'topbar';
3 | @import 'pageContainer';
4 | @import 'progressBar';
5 | @import 'easyPieChart';
6 | @import 'forms';
7 | @import 'masonry';
8 | @import 'loader';
9 | @import 'footer';
10 |
--------------------------------------------------------------------------------
/resources/assets/sass/spec/components/loader.scss:
--------------------------------------------------------------------------------
1 | #loader {
2 | transition: all 0.3s ease-in-out;
3 | opacity: 1;
4 | display: default;
5 | }
6 |
7 | #loader.fadeOut {
8 | opacity: 0;
9 | display: none;
10 | }
11 |
12 |
13 |
14 | .spinner {
15 | width: 40px;
16 | height: 40px;
17 | position: absolute;
18 | top: calc(50% - 20px);
19 | left: calc(50% - 20px);
20 | background-color: #333;
21 | border-radius: 100%;
22 | -webkit-animation: sk-scaleout 1.0s infinite ease-in-out;
23 | animation: sk-scaleout 1.0s infinite ease-in-out;
24 | }
25 |
26 | @-webkit-keyframes sk-scaleout {
27 | 0% { -webkit-transform: scale(0) }
28 | 100% {
29 | -webkit-transform: scale(1.0);
30 | opacity: 0;
31 | }
32 | }
33 |
34 | @keyframes sk-scaleout {
35 | 0% {
36 | -webkit-transform: scale(0);
37 | transform: scale(0);
38 | } 100% {
39 | -webkit-transform: scale(1.0);
40 | transform: scale(1.0);
41 | opacity: 0;
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/resources/assets/sass/spec/components/masonry.scss:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/resources/assets/sass/spec/components/progressBar.scss:
--------------------------------------------------------------------------------
1 | .progress {
2 | height: 4px;
3 | background-color: #eaeef3;
4 | border-radius: 4px;
5 | margin-bottom: 10px;
6 | }
7 |
--------------------------------------------------------------------------------
/resources/assets/sass/spec/generic/base.scss:
--------------------------------------------------------------------------------
1 | html, html a, body {
2 | -webkit-font-smoothing: antialiased;
3 | }
4 |
5 | a {
6 | transition: all 0.3s ease-in-out;
7 | }
8 |
9 | body {
10 | font-family: $font-primary;
11 | font-size: 14px;
12 | color: $default-text-color;
13 | line-height: 1.5;
14 | letter-spacing: 0.2px;
15 | overflow-x: hidden;
16 | }
17 |
18 | h1,
19 | h2,
20 | h3,
21 | h4,
22 | h5,
23 | h6 {
24 | font-family: $font-secondary;
25 | letter-spacing: 0.5px;
26 | line-height: 1.5;
27 |
28 | a {
29 | font-family: $font-secondary;
30 | }
31 |
32 | small {
33 | font-weight: 300;
34 | color: lighten($default-dark, 5%);
35 | }
36 | }
37 |
38 | p {
39 | font-family: $font-primary;
40 | line-height: 1.9;
41 | }
42 |
43 | .lead {
44 | font-size: 18px;
45 | }
46 |
47 | ul {
48 | margin-bottom: 0;
49 | }
50 |
51 | a {
52 | color: $default-info;
53 |
54 | &:hover,
55 | &:focus {
56 | text-decoration: none;
57 | color: darken($default-info, 10%);
58 | }
59 |
60 | &:focus {
61 | outline: none;
62 | }
63 |
64 | &.text-gray {
65 | &:hover,
66 | &:focus,
67 | &.active {
68 | color: $default-dark !important;
69 | }
70 | }
71 | }
72 |
73 | :focus {
74 | outline: none;
75 | }
76 |
77 | hr {
78 | border-top: 1px solid $border-color;
79 | }
80 |
--------------------------------------------------------------------------------
/resources/assets/sass/spec/generic/index.scss:
--------------------------------------------------------------------------------
1 | @import 'base';
2 |
--------------------------------------------------------------------------------
/resources/assets/sass/spec/index.scss:
--------------------------------------------------------------------------------
1 | @import 'generic/index';
2 | @import 'components/index';
3 | @import 'screens/index';
4 | @import 'utils/index';
5 |
--------------------------------------------------------------------------------
/resources/assets/sass/spec/screens/chat.scss:
--------------------------------------------------------------------------------
1 | #chat-sidebar {
2 | width: 250px;
3 | height: calc(100vh - #{$header-height} - 60px);
4 | overflow: auto;
5 |
6 | @include to($breakpoint-md) {
7 | transition: all 0.3s ease-in-out;
8 | margin-left: -250px;
9 |
10 | &.open {
11 | margin-left: 0;
12 | }
13 | }
14 | }
15 |
16 | #chat-box {
17 | height: calc(100vh - #{$header-height} - 60px);
18 | overflow: auto;
19 | }
20 |
--------------------------------------------------------------------------------
/resources/assets/sass/spec/screens/index.scss:
--------------------------------------------------------------------------------
1 | @import 'chat';
2 | @import 'email';
3 |
--------------------------------------------------------------------------------
/resources/assets/sass/spec/settings/borders.scss:
--------------------------------------------------------------------------------
1 | // ---------------------------------------------------------
2 | // @Borders
3 | // ---------------------------------------------------------
4 |
5 | $border-width: 1px;
6 | $border-color: rgba(0, 0, 0, 0.0625);
7 |
--------------------------------------------------------------------------------
/resources/assets/sass/spec/settings/breakpoints.scss:
--------------------------------------------------------------------------------
1 | // ---------------------------------------------------------
2 | // @Breakpoints
3 | // ---------------------------------------------------------
4 |
5 | $breakpoint-xl : 1440px;
6 | $breakpoint-lg : 1200px;
7 | $breakpoint-md : 992px;
8 | $breakpoint-sm : 768px;
9 | $breakpoint-xs : 0;
10 |
11 | $breakpoints: (
12 | "xl\\+" "screen and (min-width: #{$breakpoint-xl})",
13 | "lg\\+" "screen and (min-width: #{$breakpoint-lg})",
14 | "md\\+" "screen and (min-width: #{$breakpoint-md})",
15 | "sm\\+" "screen and (min-width: #{$breakpoint-sm})",
16 | "xs\\+" "screen and (min-width: #{$breakpoint-xs})",
17 |
18 | "xl-" "screen and (max-width: #{$breakpoint-xl - 1px})",
19 | "lg-" "screen and (max-width: #{$breakpoint-lg - 1px})",
20 | "md-" "screen and (max-width: #{$breakpoint-md - 1px})",
21 | "sm-" "screen and (max-width: #{$breakpoint-sm - 1px})",
22 |
23 | "lg" "screen and (min-width: #{$breakpoint-lg - 1px}) and (max-width: #{$breakpoint-xl - 1px})",
24 | "md" "screen and (min-width: #{$breakpoint-md - 1px}) and (max-width: #{$breakpoint-lg - 1px})",
25 | "sm" "screen and (min-width: #{$breakpoint-sm - 1px}) and (max-width: #{$breakpoint-md - 1px})",
26 | );
27 |
--------------------------------------------------------------------------------
/resources/assets/sass/spec/settings/fonts.scss:
--------------------------------------------------------------------------------
1 | $font-primary:
2 | Roboto, -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", Arial, sans-serif;
3 | $font-secondary: $font-primary;
4 | $font-size-base: 0.875rem;
5 |
--------------------------------------------------------------------------------
/resources/assets/sass/spec/settings/index.scss:
--------------------------------------------------------------------------------
1 | @import 'breakpoints';
2 | @import 'fonts';
3 | @import 'brandColors';
4 | @import 'materialColors';
5 | @import 'baseColors';
6 | @import 'borders';
7 |
--------------------------------------------------------------------------------
/resources/assets/sass/spec/tools/index.scss:
--------------------------------------------------------------------------------
1 | @import 'mixins/index';
2 |
--------------------------------------------------------------------------------
/resources/assets/sass/spec/tools/mixins/clearfix.scss:
--------------------------------------------------------------------------------
1 | //----------------------------------------------------------
2 | // @Clearfix
3 | //----------------------------------------------------------
4 |
5 | @mixin clearfix {
6 | &::before,
7 | &::after {
8 | content: ' ';
9 | display: table;
10 | }
11 |
12 | &::after {
13 | clear: both;
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/resources/assets/sass/spec/tools/mixins/index.scss:
--------------------------------------------------------------------------------
1 | @import 'placeholder';
2 | @import 'clearfix';
3 | @import 'mediaQueriesRanges';
4 |
--------------------------------------------------------------------------------
/resources/assets/sass/spec/tools/mixins/mediaQueriesRanges.scss:
--------------------------------------------------------------------------------
1 | // ---------------------------------------------------------
2 | // @TOC
3 | // ---------------------------------------------------------
4 |
5 | // + @General Media Query
6 | // + @All Above Media Query
7 | // + @All Under Media Query
8 | // + @Between Two Devices Media Query
9 |
10 | // ---------------------------------------------------------
11 | // @General Media Query Mixin
12 | // ---------------------------------------------------------
13 |
14 | // Mixin used for custom rules that don't follow
15 | // any of the following premade media queries.
16 |
17 | @mixin mq($condition) {
18 | @media #{$condition} {
19 | @content;
20 | }
21 | }
22 |
23 | // ---------------------------------------------------------
24 | // @All Above Media Query Mixin
25 | // ---------------------------------------------------------
26 |
27 | // Mixin used to match certain breakpoint
28 | // and all devices above it.
29 |
30 | @mixin from($breakpoint) {
31 | @media screen and (min-width: $breakpoint){
32 | @content;
33 | }
34 | }
35 |
36 | // ---------------------------------------------------------
37 | // @All Under Media Query Mixin
38 | // ---------------------------------------------------------
39 |
40 | // Mixin used to match all devices under certain breakpoint.
41 |
42 | @mixin to($breakpoint) {
43 | @media screen and (max-width: $breakpoint - 1px) {
44 | @content;
45 | }
46 | }
47 |
48 | // ---------------------------------------------------------
49 | // @Between Two Devices Media Query Mixin
50 | // ---------------------------------------------------------
51 |
52 | // Mixin used to match the devices between 2 breakpoints.
53 |
54 | @mixin between($start, $end){
55 | @media screen and (min-width: $start) and (max-width: $end - 1px) {
56 | @content;
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/resources/assets/sass/spec/tools/mixins/placeholder.scss:
--------------------------------------------------------------------------------
1 | //----------------------------------------------------------
2 | // @Placeholder
3 | //----------------------------------------------------------
4 |
5 | @mixin placeholder {
6 | &::-webkit-input-placeholder { @content; }
7 | &:-moz-placeholder { @content; }
8 | &::-moz-placeholder { @content; }
9 | &:-ms-input-placeholder { @content; }
10 | }
11 |
--------------------------------------------------------------------------------
/resources/assets/sass/spec/utils/colors.scss:
--------------------------------------------------------------------------------
1 | // ---------------------------------------------------------
2 | // @TOC
3 | // ---------------------------------------------------------
4 |
5 | // + @Material Color
6 | // + @Grey Colors
7 |
8 | // ---------------------------------------------------------
9 | // @Material Color
10 | // ---------------------------------------------------------
11 |
12 | @each $item, $color in $md-colors {
13 | .c-#{$item}, .cH-#{$item}:hover { color: $color !important; }
14 | .bgc-#{$item}, .bgcH-#{$item}:hover { background-color: $color !important; }
15 | .bdc-#{$item}, .bdcH-#{$item}:hover { border-color: $color !important; }
16 | .fill-#{$item}, .fillH-#{$item}:hover { fill: $color !important; }
17 | .str-#{$item}, .strH-#{$item}:hover { stroke: $color !important; }
18 | }
19 |
20 | // ---------------------------------------------------------
21 | // @Grey Colors
22 | // ---------------------------------------------------------
23 |
24 | @each $item, $color in $grey-colors-alt {
25 | .c-#{$item}, .cH-#{$item}:hover { color: $color !important; }
26 | .bgc-#{$item}, .bgcH-#{$item}:hover { background-color: $color !important; }
27 | .bdc-#{$item}, .bdcH-#{$item}:hover { border-color: $color !important; }
28 | .fill-#{$item}, .fillH-#{$item}:hover { fill: $color !important; }
29 | .str-#{$item}, .strH-#{$item}:hover { stroke: $color !important; }
30 | }
31 |
--------------------------------------------------------------------------------
/resources/assets/sass/spec/utils/index.scss:
--------------------------------------------------------------------------------
1 | @import 'layout/index';
2 | @import 'colors';
3 |
--------------------------------------------------------------------------------
/resources/assets/sass/spec/utils/layout/helpers/index.scss:
--------------------------------------------------------------------------------
1 | @import 'flex';
2 | @import 'layout';
3 | @import 'lists';
4 | @import 'margin';
5 | @import 'objects';
6 | @import 'padding';
7 | @import 'positions';
8 | @import 'sizes';
9 | @import 'typography';
10 | @import 'border';
11 | @import 'pseudo';
12 |
--------------------------------------------------------------------------------
/resources/assets/sass/spec/utils/layout/helpers/lists.scss:
--------------------------------------------------------------------------------
1 | // ---------------------------------------------------------
2 | // @TOC
3 | // ---------------------------------------------------------
4 |
5 | // + @List Style Position
6 | // + @List Style Type
7 |
8 | // ---------------------------------------------------------
9 | // @List Style Position
10 | // ---------------------------------------------------------
11 |
12 | .lisp-i { list-style-position: inside; }
13 | .lisp-o { list-style-position: outside; }
14 |
15 | // ---------------------------------------------------------
16 | // @List Style Type
17 | // ---------------------------------------------------------
18 |
19 | .lis-n { list-style: none; }
20 | .list-c { list-style-type: circle; }
21 | .list-s { list-style-type: square; }
22 | .list-u { list-style-type: upper-roman; }
23 | .list-l { list-style-type: lower-alpha; }
24 |
--------------------------------------------------------------------------------
/resources/assets/sass/spec/utils/layout/helpers/pseudo.scss:
--------------------------------------------------------------------------------
1 | // ---------------------------------------------------------
2 | // @Pseudo Elements
3 | // ---------------------------------------------------------
4 |
5 | .no-after::after { display: none !important; }
6 | .no-before::before { display: none !important; }
7 |
--------------------------------------------------------------------------------
/resources/assets/sass/spec/utils/layout/index.scss:
--------------------------------------------------------------------------------
1 | @import 'mixins/index';
2 | @import 'utils/index';
3 | @import 'helpers/index';
4 |
--------------------------------------------------------------------------------
/resources/assets/sass/spec/utils/layout/mixins/generateResponsive.scss:
--------------------------------------------------------------------------------
1 | // ---------------------------------------------------------
2 | // @Responsive Suffix Generator
3 | // ---------------------------------------------------------
4 |
5 | // Mixin used to generate responsive suffixes for classes (i.e. m-10@sm+).
6 |
7 |
8 | @mixin generateResponsive() {
9 | @each $breakpoint in $breakpoints {
10 | $breakpointAlias : nth($breakpoint, 1) !global;
11 | $breakpointCondition : nth($breakpoint, 2);
12 |
13 | @include mediaQueryCondition($breakpointAlias) {
14 | @content;
15 | }
16 |
17 | $breakpointAlias: null !global;
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/resources/assets/sass/spec/utils/layout/mixins/index.scss:
--------------------------------------------------------------------------------
1 | @import 'mediaQueryCondition';
2 | @import 'generateResponsive';
3 |
--------------------------------------------------------------------------------
/resources/assets/sass/spec/utils/layout/mixins/mediaQueryCondition.scss:
--------------------------------------------------------------------------------
1 | // ---------------------------------------------------------
2 | // @Media Queries Generator
3 | // ---------------------------------------------------------
4 |
5 | // Mixin used to generate responsive versions of css rules.
6 |
7 | @mixin mediaQueryCondition($mq) {
8 | $breakpointFound: false;
9 |
10 | @each $breakpoint in $breakpoints {
11 | $alias: nth($breakpoint, 1);
12 | $condition: nth($breakpoint, 2);
13 |
14 | @if $mq == $alias and $condition {
15 | $breakpointFound: true;
16 |
17 | @media #{$condition} {
18 | @content;
19 | }
20 | }
21 | }
22 |
23 | @if $breakpointFound == false {
24 | @warn "Oops! Breakpoint ‘#{$mq}’ does not exist \:";
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/resources/assets/sass/spec/utils/layout/utils/center.scss:
--------------------------------------------------------------------------------
1 | // ---------------------------------------------------------
2 | // @TOC
3 | // ---------------------------------------------------------
4 |
5 | // + @Variables
6 | // + @Centering
7 |
8 | // ---------------------------------------------------------
9 | // @Variables
10 | // ---------------------------------------------------------
11 |
12 | $responsive: true;
13 |
14 | // ---------------------------------------------------------
15 | // @Centering
16 | // ---------------------------------------------------------
17 |
18 | .centerY {
19 | top: 50%;
20 | transform: translateY(-50%);
21 | }
22 |
23 | .centerX {
24 | left: 50%;
25 | transform: translateX(-50%);
26 | }
27 |
28 | .centerXY {
29 | top: 50%;
30 | left: 50%;
31 | transform: translate(-50%, -50%);
32 | }
33 |
34 | @if ($responsive == true) {
35 | @include generateResponsive() {
36 | .centerY\@#{$breakpointAlias} {
37 | top: 50%;
38 | transform: translateY(-50%);
39 | }
40 |
41 | .centerX\@#{$breakpointAlias} {
42 | left: 50%;
43 | transform: translateX(-50%);
44 | }
45 |
46 | .centerXY\@#{$breakpointAlias} {
47 | top: 50%;
48 | left: 50%;
49 | transform: translate(-50%, -50%);
50 | }
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/resources/assets/sass/spec/utils/layout/utils/index.scss:
--------------------------------------------------------------------------------
1 | @import 'center';
2 | @import 'gap';
3 | @import 'peers';
4 | @import 'layers';
5 |
6 |
--------------------------------------------------------------------------------
/resources/assets/sass/spec/utils/layout/utils/layers.scss:
--------------------------------------------------------------------------------
1 | .layers {
2 | display: flex;
3 | flex-flow: column nowrap;
4 | align-items: center;
5 | }
6 |
--------------------------------------------------------------------------------
/resources/assets/sass/spec/utils/layout/utils/peers.scss:
--------------------------------------------------------------------------------
1 | .peers {
2 | box-sizing: border-box;
3 | display: flex !important;
4 | align-items: flex-start;
5 | justify-content: flex-start;
6 | flex-flow: row wrap;
7 | height: auto;
8 | max-width: 100%;
9 | margin: 0;
10 | padding: 0;
11 | }
12 |
13 | .peer {
14 | display: block;
15 | height: auto;
16 | flex: 0 0 auto;
17 | }
18 |
19 | .peer-greed {
20 | flex: 1 1 auto;
21 | // overflow: hidden;
22 | }
23 |
24 | .peers-greed > .peer,
25 | .peers-greed > .peers {
26 | flex: 1 1 auto;
27 | }
28 |
29 | .peer > img {
30 | max-width: none;
31 | }
32 |
33 | .peer-greed > img {
34 | max-width: 100%;
35 | }
36 |
--------------------------------------------------------------------------------
/resources/assets/sass/vendor/fullcalendar.scss:
--------------------------------------------------------------------------------
1 | .fc {
2 | background-color: $default-white;
3 | border: 1px solid $border-color;
4 |
5 | th {
6 | text-align: center;
7 | padding: 15px;
8 | background-color: transparent;
9 | color: $default-text-color;
10 | font-size: 12px;
11 | text-transform: uppercase;
12 | border-right-width: 0;
13 | border-left-width: 0;
14 | }
15 |
16 | button {
17 | background-color: $default-white;
18 | background-image: none;
19 | height: 37px;
20 | padding: 0 15px;
21 | color: darken($default-text-color, 10%);
22 |
23 | &.fc-state-default {
24 | border-color: $border-color;
25 | box-shadow: none;
26 | }
27 |
28 | &.fc-state-active {
29 | box-shadow: none;
30 | background-color: $border-color;
31 | }
32 | }
33 | }
34 |
35 | .fc-toolbar {
36 | padding: 20px 20px 0;
37 | }
38 |
39 | .fc-view,
40 | .fc-view > table {
41 | background-color: $default-white;
42 | }
43 |
44 | .fc-basic-view td.fc-day-number,
45 | .fc-basic-view td.fc-week-number span {
46 | padding: 7px 15px;
47 | }
48 |
49 | .fc-unthemed {
50 | .fc-content,
51 | .fc-divider,
52 | .fc-popover,
53 | .fc-row,
54 | tbody,
55 | td,
56 | th,
57 | thead {
58 | border-color: $border-color;
59 | }
60 |
61 | .fc-today {
62 | background-color: transparent;
63 | }
64 | }
65 |
66 | .fc-basic-view {
67 | .fc-day-number {
68 | &.fc-today {
69 | background-color: $default-info;
70 | color: $default-white;
71 | display: inline-block;
72 | float: right;
73 | border-radius: 50%;
74 | padding: 6px 8px;
75 | line-height: 1;
76 | margin: 4px 4px 0 0;
77 | }
78 | }
79 | }
80 |
81 | .fc-event-container {
82 | .fc-event {
83 | border-radius: 0;
84 | border: 0;
85 | background-color: $inverse-info;
86 | color: $default-info !important;
87 | font-size: 12px;
88 | line-height: 2.5;
89 | padding: 0 15px;
90 | }
91 |
92 | .fc-day-grid-event {
93 | margin: 1px 5px 5px;
94 | }
95 | }
96 |
--------------------------------------------------------------------------------
/resources/assets/sass/vendor/index.scss:
--------------------------------------------------------------------------------
1 | @import '~perfect-scrollbar/css/perfect-scrollbar';
2 | @import 'themify-icons';
3 | @import 'font-awesome';
4 | @import 'perfectScrollbar';
5 | @import 'sparkline';
6 | @import 'jquery.datatables';
7 | @import 'fullcalendar';
8 | @import 'datepicker';
9 |
--------------------------------------------------------------------------------
/resources/assets/sass/vendor/perfectScrollbar.scss:
--------------------------------------------------------------------------------
1 | .ps__rail-y {
2 | right: 0 !important;
3 | left: auto !important;
4 | }
5 |
--------------------------------------------------------------------------------
/resources/assets/sass/vendor/sparkline.scss:
--------------------------------------------------------------------------------
1 | #jqstooltip {
2 | width: auto !important;
3 | height: auto !important;
4 | padding: 5px 10px !important;
5 | border-radius: 2px !important;
6 | }
7 |
--------------------------------------------------------------------------------
/resources/assets/static/fonts/icons/fontawesome/FontAwesome.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/myrsk/vmdash/1bc3f8ae18a5e234d181addfdcba3b6ad9062941/resources/assets/static/fonts/icons/fontawesome/FontAwesome.otf
--------------------------------------------------------------------------------
/resources/assets/static/fonts/icons/fontawesome/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/myrsk/vmdash/1bc3f8ae18a5e234d181addfdcba3b6ad9062941/resources/assets/static/fonts/icons/fontawesome/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/resources/assets/static/fonts/icons/fontawesome/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/myrsk/vmdash/1bc3f8ae18a5e234d181addfdcba3b6ad9062941/resources/assets/static/fonts/icons/fontawesome/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/resources/assets/static/fonts/icons/fontawesome/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/myrsk/vmdash/1bc3f8ae18a5e234d181addfdcba3b6ad9062941/resources/assets/static/fonts/icons/fontawesome/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/resources/assets/static/fonts/icons/fontawesome/fontawesome-webfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/myrsk/vmdash/1bc3f8ae18a5e234d181addfdcba3b6ad9062941/resources/assets/static/fonts/icons/fontawesome/fontawesome-webfont.woff2
--------------------------------------------------------------------------------
/resources/assets/static/fonts/icons/themify/themify.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/myrsk/vmdash/1bc3f8ae18a5e234d181addfdcba3b6ad9062941/resources/assets/static/fonts/icons/themify/themify.eot
--------------------------------------------------------------------------------
/resources/assets/static/fonts/icons/themify/themify.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/myrsk/vmdash/1bc3f8ae18a5e234d181addfdcba3b6ad9062941/resources/assets/static/fonts/icons/themify/themify.ttf
--------------------------------------------------------------------------------
/resources/assets/static/fonts/icons/themify/themify.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/myrsk/vmdash/1bc3f8ae18a5e234d181addfdcba3b6ad9062941/resources/assets/static/fonts/icons/themify/themify.woff
--------------------------------------------------------------------------------
/resources/assets/static/images/404.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/myrsk/vmdash/1bc3f8ae18a5e234d181addfdcba3b6ad9062941/resources/assets/static/images/404.png
--------------------------------------------------------------------------------
/resources/assets/static/images/500.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/myrsk/vmdash/1bc3f8ae18a5e234d181addfdcba3b6ad9062941/resources/assets/static/images/500.png
--------------------------------------------------------------------------------
/resources/assets/static/images/datatables/sort_asc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/myrsk/vmdash/1bc3f8ae18a5e234d181addfdcba3b6ad9062941/resources/assets/static/images/datatables/sort_asc.png
--------------------------------------------------------------------------------
/resources/assets/static/images/datatables/sort_asc_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/myrsk/vmdash/1bc3f8ae18a5e234d181addfdcba3b6ad9062941/resources/assets/static/images/datatables/sort_asc_disabled.png
--------------------------------------------------------------------------------
/resources/assets/static/images/datatables/sort_both.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/myrsk/vmdash/1bc3f8ae18a5e234d181addfdcba3b6ad9062941/resources/assets/static/images/datatables/sort_both.png
--------------------------------------------------------------------------------
/resources/assets/static/images/datatables/sort_desc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/myrsk/vmdash/1bc3f8ae18a5e234d181addfdcba3b6ad9062941/resources/assets/static/images/datatables/sort_desc.png
--------------------------------------------------------------------------------
/resources/assets/static/images/datatables/sort_desc_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/myrsk/vmdash/1bc3f8ae18a5e234d181addfdcba3b6ad9062941/resources/assets/static/images/datatables/sort_desc_disabled.png
--------------------------------------------------------------------------------
/resources/assets/static/images/spinner.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/myrsk/vmdash/1bc3f8ae18a5e234d181addfdcba3b6ad9062941/resources/assets/static/images/spinner.gif
--------------------------------------------------------------------------------
/resources/assets/static/images/vmdash_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/myrsk/vmdash/1bc3f8ae18a5e234d181addfdcba3b6ad9062941/resources/assets/static/images/vmdash_logo.png
--------------------------------------------------------------------------------
/resources/lang/ar/app.php:
--------------------------------------------------------------------------------
1 | "تمت الإضافة بنجاح ",
7 | "success_update" => "تم التحديث بنجاح",
8 | "success_destroy" => "تم الإزالة بنجاح",
9 |
10 | // My Views
11 | "manage" => "إدارة",
12 | "edit_title" => "تعديل",
13 | "delete_title" => "حذف",
14 | "add_new_item" => "جديد",
15 | "update_item" => "تعديل",
16 |
17 | // View buttons
18 | "add_button" => "إضافة",
19 | "edit_button" => "تعديل",
20 |
21 | // Login, Logout ..etc
22 | "start_session" => "تسجيل الدخول",
23 | "remember_me" => "تذكرنى",
24 | "forgot_password" => "لقد نسيت كلمة المرور",
25 | "login_btn" => "تسجيل الدخول",
26 | "reset_password" => "اعادة تعيين كلمة السر",
27 | "reset_password_btn" => "إرسال رابط إعادة تعيين",
28 | "connect" => "تسجيل الدخول",
29 |
30 |
31 |
32 | ];
--------------------------------------------------------------------------------
/resources/lang/ar/auth.php:
--------------------------------------------------------------------------------
1 | 'بيانات الاعتماد هذه غير متطابقة مع البيانات المسجلة لدينا.',
17 | 'throttle' => 'عدد كبير جدا من محاولات الدخول. يرجى المحاولة مرة أخرى بعد :seconds ثانية.',
18 |
19 | ];
20 |
--------------------------------------------------------------------------------
/resources/lang/ar/pagination.php:
--------------------------------------------------------------------------------
1 | '« السابق',
17 | 'next' => 'التالي »',
18 |
19 | ];
20 |
--------------------------------------------------------------------------------
/resources/lang/ar/passwords.php:
--------------------------------------------------------------------------------
1 | 'يجب أن لا يقل طول كلمة المرور عن ستة أحرف، كما يجب أن تتطابق مع حقل التأكيد',
17 | 'reset' => 'تمت إعادة تعيين كلمة المرور',
18 | 'sent' => 'تم إرسال تفاصيل استعادة كلمة المرور الخاصة بك إلى بريدك الإلكتروني',
19 | 'token' => '.رمز استعادة كلمة المرور الذي أدخلته غير صحيح',
20 | 'user' => 'لم يتم العثور على أيّ حسابٍ بهذا العنوان الإلكتروني',
21 |
22 | ];
23 |
--------------------------------------------------------------------------------
/resources/lang/en/app.php:
--------------------------------------------------------------------------------
1 | "Item added",
7 | "success_update" => "Updated successfully",
8 | "success_destroy" => "Removed successfully",
9 |
10 | // My Views
11 | "manage" => "manage",
12 | "edit_title" => "Edit Item",
13 | "delete_title" => "Delete Item",
14 | "add_new_item" => "new",
15 | "update_item" => "update",
16 |
17 | // View buttons
18 | "add_button" => "Add",
19 | "edit_button" => "Edit",
20 |
21 | // Login, Logout ..etc
22 | "start_session" => "Sign in to start your session",
23 | "remember_me" => "Remember Me",
24 | "forgot_password" => "I forgot my password",
25 | "login_btn" => "Sign In",
26 | "reset_password" => "Reset Password",
27 | "reset_password_btn" => "Send reset link",
28 | "connect" => "Loggin",
29 |
30 |
31 |
32 | ];
--------------------------------------------------------------------------------
/resources/lang/en/auth.php:
--------------------------------------------------------------------------------
1 | 'These credentials do not match our records.',
17 | 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
18 |
19 | ];
20 |
--------------------------------------------------------------------------------
/resources/lang/en/pagination.php:
--------------------------------------------------------------------------------
1 | '« Previous',
17 | 'next' => 'Next »',
18 |
19 | ];
20 |
--------------------------------------------------------------------------------
/resources/lang/en/passwords.php:
--------------------------------------------------------------------------------
1 | 'Passwords must be at least six characters and match the confirmation.',
17 | 'reset' => 'Your password has been reset!',
18 | 'sent' => 'We have e-mailed your password reset link!',
19 | 'token' => 'This password reset token is invalid.',
20 | 'user' => "We can't find a user with that e-mail address.",
21 |
22 | ];
23 |
--------------------------------------------------------------------------------
/resources/lang/fr/app.php:
--------------------------------------------------------------------------------
1 | "Élément ajouté",
7 | "success_update" => "Mise à jour faite avec succès",
8 | "success_destroy" => "Supprimé avec succès",
9 |
10 | // My Views
11 | "manage" => "gestion",
12 | "edit_title" => "Modifier l'élément",
13 | "delete_title" => "Supprimer l'élément",
14 | "add_new_item" => "Nouveau",
15 | "update_item" => "Modifier",
16 |
17 | // View buttons
18 | "add_button" => "Ajouter",
19 | "edit_button" => "Editer",
20 |
21 | // Login, Logout ..etc
22 | "start_session" => "Connectez-vous pour commencer votre session",
23 | "remember_me" => "Souviens-toi de moi",
24 | "forgot_password" => "j'ai oublié mon mot de passe",
25 | "login_btn" => "Connecter",
26 | "reset_password" => "Réinitialiser mot de passe",
27 | "reset_password_btn" => "Envoyer lien de réinitialisation",
28 | "connect" => "S'identifier",
29 |
30 |
31 |
32 |
33 | ];
--------------------------------------------------------------------------------
/resources/lang/fr/auth.php:
--------------------------------------------------------------------------------
1 | 'Ces identifiants ne correspondent pas à nos enregistrements',
17 | 'throttle' => 'Tentatives de connexion trop nombreuses. Veuillez essayer de nouveau dans :seconds secondes.',
18 |
19 | ];
20 |
--------------------------------------------------------------------------------
/resources/lang/fr/pagination.php:
--------------------------------------------------------------------------------
1 | '« Précédent',
17 | 'next' => 'Suivant »',
18 |
19 | ];
20 |
--------------------------------------------------------------------------------
/resources/lang/fr/passwords.php:
--------------------------------------------------------------------------------
1 | 'Les mots de passe doivent contenir au moins six caractères et être identiques.',
17 | 'reset' => 'Votre mot de passe a été réinitialisé !',
18 | 'sent' => 'Nous vous avons envoyé par courriel le lien de réinitialisation du mot de passe !',
19 | 'token' => "Ce jeton de réinitialisation du mot de passe n'est pas valide.",
20 | 'user' => "Aucun utilisateur n'a été trouvé avec cette adresse courriel.",
21 |
22 | ];
23 |
--------------------------------------------------------------------------------
/resources/macros/form.php:
--------------------------------------------------------------------------------
1 |
8 | ". $label .
9 | Form::input($type, $name, $default, array_merge(["class" => "form-control"], $options)). "
10 |
11 | ";
12 | });
13 |
14 | Form::macro('mySelect', function($name, $label="", $values=[], $selected=null, $options=[])
15 | {
16 | $label = ($label =='') ? '' : html_entity_decode(Form::label($name, $label));
17 | return "
18 |
19 | ". $label .
20 | Form::select($name, $values, $selected,array_merge(["class" => "form-control"], $options)). "
21 |
22 | ";
23 | });
24 |
25 | Form::macro('myFile', function($name, $label="", $options=[])
26 | {
27 | $label = ($label =='') ? '' : html_entity_decode(Form::label($name, $label));
28 | return "
29 |
30 | ". $label .
31 | Form::file($name, array_merge(["class" => "form-control"], $options)). "
32 |
33 | ";
34 | });
35 |
36 | Form::macro('myTextArea', function($name, $label="", $options=[], $default = null)
37 | {
38 | $label = ($label =='') ? '' : html_entity_decode(Form::label($name, $label));
39 | return "
40 |
41 | ". $label .
42 | Form::textarea($name, $default, array_merge(["class" => "form-control", "rows"=> 3], $options)). "
43 |
44 | ";
45 | });
46 |
47 | Form::macro('myCheckbox', function($name, $label="", $value='', $checked='', $options=[])
48 | {
49 | // $label = ($label =='') ? '' : html_entity_decode(Form::label($name, $label));
50 | return "
51 |
52 |
55 |
56 | ";
57 | });
58 |
59 | Form::macro('myRange', function($name, $start, $end, $selected='', $options=[])
60 | {
61 | return "
62 |
63 | " . Form::selectRange($name, $start, $end, $selected,array_merge(["class" => "form-control"], $options)). "
64 |
65 | ";
66 | });
--------------------------------------------------------------------------------
/resources/views/admin/default.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | {{ config('app.name', 'Laravel') }}
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | @include('admin.partials.spinner')
20 |
21 |
22 |
23 | @include('admin.partials.sidebar')
24 |
25 |
26 |
27 |
28 | @include('admin.partials.topbar')
29 |
30 |
31 |
32 |
33 |
34 |
35 |
@yield('page-header')
36 |
37 | @include('admin.partials.messages')
38 | @yield('content')
39 |
40 |
41 |
42 |
43 |
44 |
45 |
48 |
49 |
50 |
51 |
55 |
56 |
57 |
58 |
63 | @yield('footer_scripts')
64 |
65 |
66 |
67 |
--------------------------------------------------------------------------------
/resources/views/admin/partials/menu.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
9 |
10 |
11 |
17 |
18 |
19 |
25 |
26 |
--------------------------------------------------------------------------------
/resources/views/admin/partials/messages.blade.php:
--------------------------------------------------------------------------------
1 | @if (Session::has('errors'))
2 |
3 |
4 |
5 | @foreach (Session::get('errors')->all() as $error)
6 | - {{ $error }}
7 | @endforeach
8 |
9 |
10 | @endif
11 |
12 |
13 | @if (Session::has('error'))
14 |
15 |
16 | {{Session::get('error')}}
17 |
18 | @endif
19 |
20 | @if (Session::has('warning'))
21 |
22 |
23 | {{Session::get('warning')}}
24 |
25 | @endif
26 |
27 |
28 | @if (Session::has('info'))
29 |
30 |
31 | {{Session::get('info')}}
32 |
33 | @endif
34 |
35 |
36 | @if (Session::has('success'))
37 |
38 |
39 | {{Session::get('success')}}
40 |
41 | @endif
42 |
43 | @if (Session::has('message'))
44 |
45 |
46 | {{Session::get('message')}}
47 |
48 | @endif
--------------------------------------------------------------------------------
/resources/views/admin/partials/sidebar.blade.php:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/resources/views/admin/partials/spinner.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
--------------------------------------------------------------------------------
/resources/views/admin/partials/topbar.blade.php:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/resources/views/admin/servers/create.blade.php:
--------------------------------------------------------------------------------
1 | @extends('admin.default')
2 |
3 | @section('page-header')
4 | Server {{ trans('app.add_new_item') }}
5 | @stop
6 |
7 | @section('content')
8 | {!! Form::open([
9 | 'action' => ['ServerController@store'],
10 | 'files' => true
11 | ])
12 | !!}
13 |
14 | @include('admin.servers.form')
15 |
16 |
17 |
18 | {!! Form::close() !!}
19 | @stop
--------------------------------------------------------------------------------
/resources/views/admin/servers/edit.blade.php:
--------------------------------------------------------------------------------
1 | @extends('admin.default')
2 |
3 | @section('page-header')
4 | Server {{ trans('app.update_item') }}
5 | @stop
6 |
7 | @section('content')
8 | {!! Form::model($item, [
9 | 'action' => ['ServerController@update', $item->id],
10 | 'method' => 'put',
11 | 'files' => true
12 | ])
13 | !!}
14 |
15 | @include('admin.servers.form')
16 |
17 |
18 |
19 | {!! Form::close() !!}
20 | @stop
21 |
--------------------------------------------------------------------------------
/resources/views/admin/users/create.blade.php:
--------------------------------------------------------------------------------
1 | @extends('admin.default')
2 |
3 | @section('page-header')
4 | User {{ trans('app.add_new_item') }}
5 | @stop
6 |
7 | @section('content')
8 | {!! Form::open([
9 | 'action' => ['UserController@store'],
10 | 'files' => true
11 | ])
12 | !!}
13 |
14 | @include('admin.users.form')
15 |
16 |
17 |
18 | {!! Form::close() !!}
19 |
20 |
21 | @stop
22 |
23 |
--------------------------------------------------------------------------------
/resources/views/admin/users/edit.blade.php:
--------------------------------------------------------------------------------
1 | @extends('admin.default')
2 |
3 | @section('page-header')
4 | User {{ trans('app.update_item') }}
5 | @stop
6 |
7 | @section('content')
8 | {!! Form::model($item, [
9 | 'action' => ['UserController@update', $item->id],
10 | 'method' => 'put',
11 | 'files' => true
12 | ])
13 | !!}
14 |
15 | @include('admin.users.form')
16 |
17 |
18 |
19 | {!! Form::close() !!}
20 |
21 |
22 | @stop
23 |
24 |
--------------------------------------------------------------------------------
/resources/views/admin/users/form.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {!! Form::myInput('text', 'name', 'Username') !!}
5 |
6 | {!! Form::myInput('email', 'email', 'Email') !!}
7 |
8 | {!! Form::myInput('password', 'password', 'Password') !!}
9 |
10 | {!! Form::myInput('password', 'password_confirmation', 'Password again') !!}
11 |
12 | {!! Form::mySelect('role', 'Role', config('variables.role')) !!}
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/resources/views/auth/login.blade.php:
--------------------------------------------------------------------------------
1 | @extends('layouts.app')
2 |
3 | @section('content')
4 |
5 | vmDash Login
6 |
54 |
55 | @endsection
56 |
--------------------------------------------------------------------------------
/resources/views/auth/passwords/email.blade.php:
--------------------------------------------------------------------------------
1 | @extends('layouts.app')
2 |
3 | @section('content')
4 | Reset Password
5 |
6 | @if (session('status'))
7 |
8 | {{ session('status') }}
9 |
10 | @endif
11 |
12 |
37 |
38 | @endsection
39 |
--------------------------------------------------------------------------------
/resources/views/home.blade.php:
--------------------------------------------------------------------------------
1 | @extends('layouts.app')
2 |
3 | @section('content')
4 |
5 |
6 |
7 |
8 |
Dashboard
9 |
10 |
11 | @if (session('status'))
12 |
13 | {{ session('status') }}
14 |
15 | @endif
16 |
17 | You are logged in!
18 |
19 |
20 |
21 |
22 |
23 | @endsection
24 |
--------------------------------------------------------------------------------
/resources/views/layouts/app.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | {{ config('app.name', 'Laravel') }}
12 |
13 |
14 |
15 |
16 |
17 |
18 | @include('admin.partials.spinner')
19 |
20 |
21 |
22 |
23 |
24 |
}})
25 |
26 |
27 |
28 |
29 | @yield('content')
30 |
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/routes/api.php:
--------------------------------------------------------------------------------
1 | get('/user', function (Request $request) {
17 | return $request->user();
18 | });
19 |
--------------------------------------------------------------------------------
/routes/channels.php:
--------------------------------------------------------------------------------
1 | id === (int) $id;
16 | });
17 |
--------------------------------------------------------------------------------
/routes/console.php:
--------------------------------------------------------------------------------
1 | comment(Inspiring::quote());
18 | })->describe('Display an inspiring quote');
19 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/storage/app/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !public/
3 | !.gitignore
4 |
--------------------------------------------------------------------------------
/storage/app/public/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/debugbar/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
--------------------------------------------------------------------------------
/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 | !.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);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/webpack.mix.js:
--------------------------------------------------------------------------------
1 | let 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.webpackConfig(webpack => {
15 | return {
16 | plugins: [
17 | new webpack.ProvidePlugin({
18 | $: 'jquery',
19 | jQuery: 'jquery',
20 | 'window.jQuery': 'jquery',
21 | Popper: ['popper.js', 'default'],
22 | })
23 | ]
24 | };
25 | });
26 |
27 |
28 | mix.js('resources/assets/js/app.js', 'public/js')
29 | .sass('resources/assets/sass/app.scss', 'public/css')
30 | .copyDirectory('resources/assets/static/images','public/images')
31 | .browserSync('laradminator.local')
32 | .version()
33 | .sourceMaps();
34 |
--------------------------------------------------------------------------------