mirror of
				https://github.com/cp6/my-idlers.git
				synced 2025-11-04 08:09:09 +00:00 
			
		
		
		
	
						commit
						525b1d29f0
					
				
					 45 changed files with 38545 additions and 6812 deletions
				
			
		
							
								
								
									
										49
									
								
								.env.example
									
										
									
									
									
								
							
							
						
						
									
										49
									
								
								.env.example
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,49 +0,0 @@
 | 
			
		|||
APP_NAME=MyIdlers
 | 
			
		||||
APP_ENV=local
 | 
			
		||||
APP_KEY=
 | 
			
		||||
APP_DEBUG=true
 | 
			
		||||
APP_URL=http://localhost
 | 
			
		||||
 | 
			
		||||
LOG_CHANNEL=stack
 | 
			
		||||
LOG_LEVEL=debug
 | 
			
		||||
 | 
			
		||||
DB_CONNECTION=mysql
 | 
			
		||||
DB_HOST=127.0.0.1
 | 
			
		||||
DB_PORT=3306
 | 
			
		||||
DB_DATABASE=my_idlers
 | 
			
		||||
DB_USERNAME=root
 | 
			
		||||
DB_PASSWORD=
 | 
			
		||||
 | 
			
		||||
BROADCAST_DRIVER=log
 | 
			
		||||
CACHE_DRIVER=file
 | 
			
		||||
QUEUE_CONNECTION=sync
 | 
			
		||||
SESSION_DRIVER=file
 | 
			
		||||
SESSION_LIFETIME=120
 | 
			
		||||
 | 
			
		||||
MEMCACHED_HOST=127.0.0.1
 | 
			
		||||
 | 
			
		||||
REDIS_HOST=127.0.0.1
 | 
			
		||||
REDIS_PASSWORD=null
 | 
			
		||||
REDIS_PORT=6379
 | 
			
		||||
 | 
			
		||||
MAIL_MAILER=smtp
 | 
			
		||||
MAIL_HOST=mailhog
 | 
			
		||||
MAIL_PORT=1025
 | 
			
		||||
MAIL_USERNAME=null
 | 
			
		||||
MAIL_PASSWORD=null
 | 
			
		||||
MAIL_ENCRYPTION=null
 | 
			
		||||
MAIL_FROM_ADDRESS=null
 | 
			
		||||
MAIL_FROM_NAME="${APP_NAME}"
 | 
			
		||||
 | 
			
		||||
AWS_ACCESS_KEY_ID=
 | 
			
		||||
AWS_SECRET_ACCESS_KEY=
 | 
			
		||||
AWS_DEFAULT_REGION=us-east-1
 | 
			
		||||
AWS_BUCKET=
 | 
			
		||||
 | 
			
		||||
PUSHER_APP_ID=
 | 
			
		||||
PUSHER_APP_KEY=
 | 
			
		||||
PUSHER_APP_SECRET=
 | 
			
		||||
PUSHER_APP_CLUSTER=mt1
 | 
			
		||||
 | 
			
		||||
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
 | 
			
		||||
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
FROM php:8.1-fpm-alpine
 | 
			
		||||
FROM php:8.2-fpm-alpine
 | 
			
		||||
 | 
			
		||||
RUN docker-php-ext-install pdo pdo_mysql sockets
 | 
			
		||||
RUN curl -sS https://getcomposer.org/installer | php -- \
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										53
									
								
								README.md
									
										
									
									
									
								
							
							
						
						
									
										53
									
								
								README.md
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,13 +1,15 @@
 | 
			
		|||
# My idlers
 | 
			
		||||
 | 
			
		||||
A self-hosted web app for displaying, organizing and storing information about your servers (VPS/Dedi), shared & reseller hosting, seedboxes,
 | 
			
		||||
A self-hosted web app for displaying, organizing and storing information about your servers (VPS/Dedi), shared &
 | 
			
		||||
reseller hosting, seedboxes,
 | 
			
		||||
domains, DNS and misc services.
 | 
			
		||||
 | 
			
		||||
Despite what the name infers this self-hosted web app isn't just for storing idling server information. By using
 | 
			
		||||
a [YABS](https://github.com/masonr/yet-another-bench-script) output you can get disk & network speed values along with
 | 
			
		||||
GeekBench 5 & 6 scores to do easier comparing and sorting. Of course storing other services e.g. web hosting is possible and supported too with My idlers.
 | 
			
		||||
GeekBench 5 & 6 scores to do easier comparing and sorting. Of course storing other services e.g. web hosting is possible
 | 
			
		||||
and supported too with My idlers.
 | 
			
		||||
 | 
			
		||||
[](https://shields.io/) [](https://shields.io/) [](https://shields.io/) [](https://shields.io/)
 | 
			
		||||
[](https://shields.io/) [](https://shields.io/) [](https://shields.io/) [](https://shields.io/)
 | 
			
		||||
 | 
			
		||||
<img src="https://raw.githubusercontent.com/cp6/my-idlers/main/public/My%20Idlers%20logo.jpg" width="128" height="128" />
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -19,20 +21,27 @@ GeekBench 5 & 6 scores to do easier comparing and sorting. Of course storing oth
 | 
			
		|||
 | 
			
		||||
Currently seeking a project sponsor
 | 
			
		||||
 | 
			
		||||
## 2.3.2 changes (26th September 2023):
 | 
			
		||||
## 3.0.0 changes (9 December 2024):
 | 
			
		||||
 | 
			
		||||
* Added tabs to the homepage for stats and avg summary cards
 | 
			
		||||
* Added Geekbench 6 columns to YABS table
 | 
			
		||||
* Added Geekbench 6 insert from YABS result
 | 
			
		||||
* Updated YABS insert to include Geekbench 5 results also
 | 
			
		||||
* Updated server show page and public show to display Geekbench 6 values
 | 
			
		||||
* Updated tests to pass
 | 
			
		||||
* Updated footer to only have one conditional check for the setting
 | 
			
		||||
* Updated homepage table to be rounded
 | 
			
		||||
* Fixed setting causing a fail with validation
 | 
			
		||||
* Fixed pricing cache not being refreshed
 | 
			
		||||
* Fixed object being accessed instead of array for certain models
 | 
			
		||||
* Removed unused Vue component
 | 
			
		||||
* Updated PHP version to 8.3
 | 
			
		||||
* Updated Laravel version to ^11
 | 
			
		||||
* Updated composer package versions
 | 
			
		||||
* Updated routes into middleware grouping for auth
 | 
			
		||||
* Updated login and register forms
 | 
			
		||||
* Updated servers, shared, reseller and domains pages to use Datatables
 | 
			
		||||
* Added icons to back and submit button components
 | 
			
		||||
* Added icon button to shared and reseller create pages
 | 
			
		||||
* Added several updated OS versions to OsSeeder
 | 
			
		||||
* Added Font awesome Brands webfont
 | 
			
		||||
* Added IP whois data columns to the ips table
 | 
			
		||||
* Added IP whois data fetching and updating DB
 | 
			
		||||
* Added Note to API
 | 
			
		||||
* Fixed OS icons not loading in servers index page
 | 
			
		||||
* Fixed Settings being called without being created (existing)
 | 
			
		||||
* Fixed issue with OS: `Call to a member function toJson() on array`
 | 
			
		||||
* Fixed due in (days) column showing a massive float
 | 
			
		||||
* Removed 1 user being seeded
 | 
			
		||||
* Removed doctrine/dbal
 | 
			
		||||
 | 
			
		||||
#### Please run the following if updating from an existing install:
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -45,7 +54,7 @@ php artisan cache:clear
 | 
			
		|||
 | 
			
		||||
## Requires
 | 
			
		||||
 | 
			
		||||
* PHP 8.1
 | 
			
		||||
* PHP 8.3
 | 
			
		||||
 | 
			
		||||
## Features
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -121,9 +130,9 @@ Example yabs.sh call to POST the result:
 | 
			
		|||
 | 
			
		||||
`curl -sL yabs.sh | bash -s -- -s "https://yourdomain.com/api/yabs/SERVERID/USERAPIKEYISHERE"`
 | 
			
		||||
 | 
			
		||||
## TODO
 | 
			
		||||
## Credits
 | 
			
		||||
 | 
			
		||||
Add Geekbench 6 single and multi-core scores (On dev branch)
 | 
			
		||||
IP who is data provided by [ipwhois.io](https://ipwhois.io/documentation)
 | 
			
		||||
 | 
			
		||||
## API endpoints
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -189,6 +198,8 @@ All API requests must be appended with `api/` e.g `mydomain.com/api/servers/gYk8
 | 
			
		|||
 | 
			
		||||
`shared/{id}`
 | 
			
		||||
 | 
			
		||||
`note/{id}`
 | 
			
		||||
 | 
			
		||||
**POST requests**
 | 
			
		||||
 | 
			
		||||
Create a server
 | 
			
		||||
| 
						 | 
				
			
			@ -307,10 +318,6 @@ or
 | 
			
		|||
 | 
			
		||||
```curl -sL yabs.sh | bash -s -- -r```
 | 
			
		||||
 | 
			
		||||
**Make sure YABS output starts at the first line which is:**
 | 
			
		||||
 | 
			
		||||
```# ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #```
 | 
			
		||||
 | 
			
		||||
Logo icons created by Freepik - Flaticon
 | 
			
		||||
 | 
			
		||||
## Screenshots for v2
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,6 +7,7 @@ use App\Models\IPs;
 | 
			
		|||
use App\Models\Labels;
 | 
			
		||||
use App\Models\Misc;
 | 
			
		||||
use App\Models\NetworkSpeed;
 | 
			
		||||
use App\Models\Note;
 | 
			
		||||
use App\Models\OS;
 | 
			
		||||
use App\Models\Pricing;
 | 
			
		||||
use App\Models\Providers;
 | 
			
		||||
| 
						 | 
				
			
			@ -500,4 +501,10 @@ class ApiController extends Controller
 | 
			
		|||
        return response($yabs, 200);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected function getNote($id)
 | 
			
		||||
    {
 | 
			
		||||
        $note = Note::where('id', $id)->firstOrFail('note')->pluck('note');
 | 
			
		||||
        return response($note, 200)->header('Content-Type', 'text/plain');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,6 +8,7 @@ use App\Models\SeedBoxes;
 | 
			
		|||
use App\Models\Server;
 | 
			
		||||
use App\Models\Shared;
 | 
			
		||||
use Illuminate\Http\Request;
 | 
			
		||||
use Illuminate\Support\Facades\Http;
 | 
			
		||||
use Illuminate\Support\Str;
 | 
			
		||||
 | 
			
		||||
class IPsController extends Controller
 | 
			
		||||
| 
						 | 
				
			
			@ -37,7 +38,7 @@ class IPsController extends Controller
 | 
			
		|||
 | 
			
		||||
        $ip_id = Str::random(8);
 | 
			
		||||
 | 
			
		||||
        IPs::create([
 | 
			
		||||
        $ip = IPs::create([
 | 
			
		||||
            'id' => $ip_id,
 | 
			
		||||
            'address' => $request->address,
 | 
			
		||||
            'is_ipv4' => ($request->ip_type === 'ipv4') ? 1 : 0,
 | 
			
		||||
| 
						 | 
				
			
			@ -45,6 +46,8 @@ class IPsController extends Controller
 | 
			
		|||
            'active' => 1
 | 
			
		||||
        ]);
 | 
			
		||||
 | 
			
		||||
        $fetch = IPs::getUpdateIpInfo($ip);
 | 
			
		||||
 | 
			
		||||
        return redirect()->route('IPs.index')
 | 
			
		||||
            ->with('success', 'IP address created Successfully.');
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -58,4 +61,17 @@ class IPsController extends Controller
 | 
			
		|||
        return redirect()->route('IPs.index')
 | 
			
		||||
            ->with('error', 'IP was not deleted.');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getUpdateWhoIs(IPs $IP): \Illuminate\Http\RedirectResponse
 | 
			
		||||
    {
 | 
			
		||||
        $result = IPs::getUpdateIpInfo($IP);
 | 
			
		||||
 | 
			
		||||
        if ($result) {
 | 
			
		||||
            return redirect()->route('IPs.index')
 | 
			
		||||
                ->with('success', 'IP address updated Successfully.');
 | 
			
		||||
        }
 | 
			
		||||
        return redirect()->route('IPs.index')
 | 
			
		||||
            ->with('error', 'IP was not updated.');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,7 +10,7 @@ class OsController extends Controller
 | 
			
		|||
{
 | 
			
		||||
    public function index()
 | 
			
		||||
    {
 | 
			
		||||
        $os = OS::allOS();
 | 
			
		||||
        $os = OS::allOS()->toArray();
 | 
			
		||||
        return view('os.index', compact(['os']));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,6 +6,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory;
 | 
			
		|||
use Illuminate\Database\Eloquent\Model;
 | 
			
		||||
use Illuminate\Support\Facades\Cache;
 | 
			
		||||
use Illuminate\Support\Facades\DB;
 | 
			
		||||
use Illuminate\Support\Facades\Http;
 | 
			
		||||
use Illuminate\Support\Str;
 | 
			
		||||
 | 
			
		||||
class IPs extends Model
 | 
			
		||||
| 
						 | 
				
			
			@ -16,7 +17,7 @@ class IPs extends Model
 | 
			
		|||
 | 
			
		||||
    protected $keyType = 'string';
 | 
			
		||||
 | 
			
		||||
    protected $fillable = ['id', 'active', 'service_id', 'address', 'is_ipv4'];
 | 
			
		||||
    protected $fillable = ['id', 'service_id', 'address', 'is_ipv4', 'active', 'continent', 'country', 'region', 'city', 'org', 'isp', 'asn', 'timezone_gmt', 'fetched_at'];
 | 
			
		||||
 | 
			
		||||
    public $incrementing = false;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -52,4 +53,29 @@ class IPs extends Model
 | 
			
		|||
        return $this->hasOne(Note::class, 'service_id', 'id');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static function getUpdateIpInfo(IPs $IP): bool
 | 
			
		||||
    {
 | 
			
		||||
        $response = Http::get("https://ipwhois.app/json/{$IP->address}");
 | 
			
		||||
 | 
			
		||||
        if ($response->ok()) {
 | 
			
		||||
 | 
			
		||||
            $data = $response->json();
 | 
			
		||||
 | 
			
		||||
            $IP->update([
 | 
			
		||||
                'continent' => $data['continent'],
 | 
			
		||||
                'country' => $data['country'],
 | 
			
		||||
                'region' => $data['region'],
 | 
			
		||||
                'city' => $data['city'],
 | 
			
		||||
                'org' => $data['org'],
 | 
			
		||||
                'isp' => $data['isp'],
 | 
			
		||||
                'asn' => $data['asn'],
 | 
			
		||||
                'timezone_gmt' => $data['timezone_gmt'],
 | 
			
		||||
                'fetched_at' => now()
 | 
			
		||||
            ]);
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $response->ok();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,10 +16,10 @@ class OS extends Model
 | 
			
		|||
 | 
			
		||||
    protected $table = 'os';
 | 
			
		||||
 | 
			
		||||
    public static function allOS(): array
 | 
			
		||||
    public static function allOS()
 | 
			
		||||
    {
 | 
			
		||||
        return Cache::remember("operating_systems", now()->addMonth(1), function () {
 | 
			
		||||
            return self::orderBy('name')->get()->toArray();
 | 
			
		||||
            return self::orderBy('name')->get();
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -119,21 +119,21 @@ class Server extends Model
 | 
			
		|||
        if ($os === 1) {//None
 | 
			
		||||
            return "<i class='fas fa-expand' title='{$os_name}'></i>";
 | 
			
		||||
        } else if ($os <= 3) {//Centos
 | 
			
		||||
            return "<i class='fab fa-centos os-icon' title='{$os_name}'></i>";
 | 
			
		||||
        } elseif ($os > 7 && $os <= 11) {//Debain
 | 
			
		||||
            return "<i class='fab fa-linux os-icon' title='{$os_name}'></i>";
 | 
			
		||||
        } elseif ($os > 12 && $os < 15) {//Fedora
 | 
			
		||||
            return "<i class='fab fa-fedora os-icon' title='{$os_name}'></i>";
 | 
			
		||||
        } elseif ($os > 14 && $os < 18) {//FreeBSD
 | 
			
		||||
            return "<i class='fab fa-linux os-icon' title='{$os_name}'></i>";
 | 
			
		||||
        } elseif ($os > 17 && $os < 21) {//OpenBSD
 | 
			
		||||
            return "<i class='fab fa-linux os-icon' title='{$os_name}'></i>";
 | 
			
		||||
        } elseif ($os > 25 && $os < 32) {//Ubuntu
 | 
			
		||||
            return "<i class='fab fa-ubuntu os-icon' title='{$os_name}'></i>";
 | 
			
		||||
        } elseif ($os > 32 && $os < 38) {//Windows
 | 
			
		||||
            return "<i class='fab fa-windows os-icon' title='{$os_name}'></i>";
 | 
			
		||||
            return "<i class='fa-brands fa-centos os-icon' title='{$os_name}'></i>";
 | 
			
		||||
        } elseif (($os > 7 && $os <= 10) || $os === 44) {//Debian
 | 
			
		||||
            return "<i class='fa-brands fa-linux os-icon' title='{$os_name}'></i>";
 | 
			
		||||
        } elseif (($os > 11 && $os < 15) || $os === 43) {//Fedora
 | 
			
		||||
            return "<i class='fa-brands fa-fedora os-icon' title='{$os_name}'></i>";
 | 
			
		||||
        } elseif (($os > 14 && $os < 18) || $os === 46) {//FreeBSD
 | 
			
		||||
            return "<i class='fa-brands fa-linux os-icon' title='{$os_name}'></i>";
 | 
			
		||||
        } elseif (($os > 17 && $os < 21) || $os === 42) {//OpenBSD
 | 
			
		||||
            return "<i class='fa-brands fa-linux os-icon' title='{$os_name}'></i>";
 | 
			
		||||
        } elseif (($os > 25 && $os < 32) || $os === 41) {//Ubuntu
 | 
			
		||||
            return "<i class='fa-brands fa-ubuntu os-icon' title='{$os_name}'></i>";
 | 
			
		||||
        } elseif (($os > 32 && $os < 38) || $os === 40) {//Windows
 | 
			
		||||
            return "<i class='fa-brands fa-windows os-icon' title='{$os_name}'></i>";
 | 
			
		||||
        } else {//OTHER ISO CUSTOM etc
 | 
			
		||||
            return "<i class='fas fa-compact-disc os-icon' title='{$os_name}'></i>";
 | 
			
		||||
            return "<i class='fa-solid fa-compact-disc os-icon' title='{$os_name}'></i>";
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,7 +18,11 @@ class Settings extends Model
 | 
			
		|||
    public static function getSettings(): Settings
 | 
			
		||||
    {
 | 
			
		||||
        return Cache::remember('settings', now()->addWeek(1), function () {
 | 
			
		||||
            return self::where('id', 1)->first();
 | 
			
		||||
            $settings = self::where('id', 1)->first();
 | 
			
		||||
            if (is_null($settings)){
 | 
			
		||||
                $settings = Settings::create();
 | 
			
		||||
            }
 | 
			
		||||
            return $settings;
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,7 +11,7 @@ class OsSelect extends Component
 | 
			
		|||
    public function render()
 | 
			
		||||
    {
 | 
			
		||||
        return view('components.os-select', [
 | 
			
		||||
            'os' => OS::allOS()
 | 
			
		||||
            'os' => OS::allOS()->toArray()
 | 
			
		||||
        ]);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,23 +10,23 @@
 | 
			
		|||
    ],
 | 
			
		||||
    "license": "MIT",
 | 
			
		||||
    "require": {
 | 
			
		||||
        "php": "^8.1",
 | 
			
		||||
        "guzzlehttp/guzzle": "^7.8",
 | 
			
		||||
        "laravel/framework": "^10",
 | 
			
		||||
        "laravel/tinker": "^2.8",
 | 
			
		||||
        "laravel/ui": "^4.2",
 | 
			
		||||
        "yajra/laravel-datatables-oracle": "~10.8",
 | 
			
		||||
        "php": "^8.3",
 | 
			
		||||
        "guzzlehttp/guzzle": "^7.9.2",
 | 
			
		||||
        "laravel/framework": "^v11.34.2",
 | 
			
		||||
        "laravel/tinker": "^v2.10.0",
 | 
			
		||||
        "laravel/ui": "^v4.6.0",
 | 
			
		||||
        "yajra/laravel-datatables-oracle": "~v11.1.5",
 | 
			
		||||
        "ext-json": "*",
 | 
			
		||||
        "doctrine/dbal": "^3"
 | 
			
		||||
        "illuminate/view": "^v11.6.0"
 | 
			
		||||
    },
 | 
			
		||||
    "require-dev": {
 | 
			
		||||
        "fakerphp/faker": "^1.23",
 | 
			
		||||
        "laravel/breeze": "^1.24",
 | 
			
		||||
        "laravel/sail": "^1.25",
 | 
			
		||||
        "mockery/mockery": "^1.6",
 | 
			
		||||
        "nunomaduro/collision": "^7",
 | 
			
		||||
        "phpunit/phpunit": "^10",
 | 
			
		||||
        "spatie/laravel-ignition": "^2"
 | 
			
		||||
        "fakerphp/faker": "^v1.24.1",
 | 
			
		||||
        "laravel/breeze": "^v2.2.6",
 | 
			
		||||
        "laravel/sail": "^v1.39.1",
 | 
			
		||||
        "mockery/mockery": "^1.6.12",
 | 
			
		||||
        "nunomaduro/collision": "^v8.5.0",
 | 
			
		||||
        "phpunit/phpunit": "^11.5.0",
 | 
			
		||||
        "spatie/laravel-ignition": "^2.9.0"
 | 
			
		||||
    },
 | 
			
		||||
    "config": {
 | 
			
		||||
        "optimize-autoloader": true,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										8357
									
								
								composer.lock
									
										
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										8357
									
								
								composer.lock
									
										
									
										generated
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							| 
						 | 
				
			
			@ -18,10 +18,10 @@ class CreatePricingTable extends Migration
 | 
			
		|||
            $table->tinyInteger('service_type');
 | 
			
		||||
            $table->tinyInteger('active')->default(1);
 | 
			
		||||
            $table->char('currency', 3);
 | 
			
		||||
            $table->decimal('price',10,2);
 | 
			
		||||
            $table->decimal('price', 10, 2);
 | 
			
		||||
            $table->tinyInteger('term');
 | 
			
		||||
            $table->decimal('as_usd',10,2);
 | 
			
		||||
            $table->decimal('usd_per_month',10,2);
 | 
			
		||||
            $table->decimal('as_usd', 10, 2);
 | 
			
		||||
            $table->decimal('usd_per_month', 10, 2);
 | 
			
		||||
            $table->date('next_due_date');
 | 
			
		||||
            $table->timestamps();
 | 
			
		||||
        });
 | 
			
		||||
| 
						 | 
				
			
			@ -34,6 +34,6 @@ class CreatePricingTable extends Migration
 | 
			
		|||
     */
 | 
			
		||||
    public function down()
 | 
			
		||||
    {
 | 
			
		||||
         Schema::dropIfExists('pricings');
 | 
			
		||||
        Schema::dropIfExists('pricings');
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,29 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
use Illuminate\Database\Migrations\Migration;
 | 
			
		||||
use Illuminate\Database\Schema\Blueprint;
 | 
			
		||||
use Illuminate\Support\Facades\Schema;
 | 
			
		||||
 | 
			
		||||
return new class extends Migration {
 | 
			
		||||
    public function up(): void
 | 
			
		||||
    {
 | 
			
		||||
        Schema::table('ips', function (Blueprint $table) {
 | 
			
		||||
            $table->string('continent')->default(null)->nullable()->after('active');
 | 
			
		||||
            $table->string('country')->default(null)->nullable()->after('active');
 | 
			
		||||
            $table->string('region')->default(null)->nullable()->after('active');
 | 
			
		||||
            $table->string('city')->default(null)->nullable()->after('active');
 | 
			
		||||
            $table->string('org')->default(null)->nullable()->after('active');
 | 
			
		||||
            $table->string('isp')->default(null)->nullable()->after('active');
 | 
			
		||||
            $table->string('asn')->default(null)->nullable()->after('active');
 | 
			
		||||
            $table->string('timezone_gmt')->default(null)->nullable()->after('active');
 | 
			
		||||
            $table->dateTime('fetched_at')->default(null)->nullable()->after('active');
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function down(): void
 | 
			
		||||
    {
 | 
			
		||||
        Schema::table('ips', function (Blueprint $table) {
 | 
			
		||||
            $table->dropColumn(['continent', 'country', 'region', 'city', 'org', 'isp', 'asn', 'timezone_gmt', 'fetched_at']);
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -14,42 +14,49 @@ class OsSeeder extends Seeder
 | 
			
		|||
            ["name" => "None", "created_at" => Carbon::now()],
 | 
			
		||||
            ["name" => "AlmaLinux 8", "created_at" => Carbon::now()],
 | 
			
		||||
            ["name" => "AlmaLinux", "created_at" => Carbon::now()],
 | 
			
		||||
            ["name" => "Centos 7", "created_at" => Carbon::now()],
 | 
			
		||||
            ["name" => "Centos 7", "created_at" => Carbon::now()],//3
 | 
			
		||||
            ["name" => "Centos 8", "created_at" => Carbon::now()],
 | 
			
		||||
            ["name" => "Centos 9", "created_at" => Carbon::now()],
 | 
			
		||||
            ["name" => "Centos", "created_at" => Carbon::now()],
 | 
			
		||||
            ["name" => "Debian 9", "created_at" => Carbon::now()],
 | 
			
		||||
            ["name" => "Debian 9", "created_at" => Carbon::now()],//7
 | 
			
		||||
            ["name" => "Debian 10", "created_at" => Carbon::now()],
 | 
			
		||||
            ["name" => "Debian", "created_at" => Carbon::now()],
 | 
			
		||||
            ["name" => "Fedora 32", "created_at" => Carbon::now()],
 | 
			
		||||
            ["name" => "Fedora 32", "created_at" => Carbon::now()],//10
 | 
			
		||||
            ["name" => "Fedora 33", "created_at" => Carbon::now()],
 | 
			
		||||
            ["name" => "Fedora 34", "created_at" => Carbon::now()],
 | 
			
		||||
            ["name" => "Fedora", "created_at" => Carbon::now()],
 | 
			
		||||
            ["name" => "Fedora", "created_at" => Carbon::now()],//13
 | 
			
		||||
            ["name" => "FreeBSD 11.4", "created_at" => Carbon::now()],
 | 
			
		||||
            ["name" => "FreeBSD 12.1", "created_at" => Carbon::now()],
 | 
			
		||||
            ["name" => "FreeBSD 12.1", "created_at" => Carbon::now()],//15
 | 
			
		||||
            ["name" => "FreeBSD", "created_at" => Carbon::now()],
 | 
			
		||||
            ["name" => "OpenBSD 6.7", "created_at" => Carbon::now()],
 | 
			
		||||
            ["name" => "OpenBSD 6.8", "created_at" => Carbon::now()],
 | 
			
		||||
            ["name" => "OpenBSD", "created_at" => Carbon::now()],
 | 
			
		||||
            ["name" => "Red Hat Enterprise Linux 8", "created_at" => Carbon::now()],
 | 
			
		||||
            ["name" => "Red Hat Enterprise Linux 8", "created_at" => Carbon::now()],//20
 | 
			
		||||
            ["name" => "Red Hat Enterprise Linux 9", "created_at" => Carbon::now()],
 | 
			
		||||
            ["name" => "Red Hat Enterprise Linux", "created_at" => Carbon::now()],
 | 
			
		||||
            ["name" => "Rocky Linux 8", "created_at" => Carbon::now()],
 | 
			
		||||
            ["name" => "Rocky Linux", "created_at" => Carbon::now()],
 | 
			
		||||
            ["name" => "Ubuntu 16.04", "created_at" => Carbon::now()],
 | 
			
		||||
            ["name" => "Ubuntu 16.04", "created_at" => Carbon::now()],//25
 | 
			
		||||
            ["name" => "Ubuntu 18.04", "created_at" => Carbon::now()],
 | 
			
		||||
            ["name" => "Ubuntu 20.04", "created_at" => Carbon::now()],
 | 
			
		||||
            ["name" => "Ubuntu 20.10", "created_at" => Carbon::now()],
 | 
			
		||||
            ["name" => "Ubuntu 22.10", "created_at" => Carbon::now()],
 | 
			
		||||
            ["name" => "Ubuntu", "created_at" => Carbon::now()],
 | 
			
		||||
            ["name" => "Ubuntu", "created_at" => Carbon::now()],//30
 | 
			
		||||
            ["name" => "Windows Server 2008", "created_at" => Carbon::now()],
 | 
			
		||||
            ["name" => "Windows Server 2012", "created_at" => Carbon::now()],
 | 
			
		||||
            ["name" => "Windows Server 2016", "created_at" => Carbon::now()],
 | 
			
		||||
            ["name" => "Windows Server 2019", "created_at" => Carbon::now()],
 | 
			
		||||
            ["name" => "Windows 10", "created_at" => Carbon::now()],
 | 
			
		||||
            ["name" => "Windows 11", "created_at" => Carbon::now()],
 | 
			
		||||
            ["name" => "Custom", "created_at" => Carbon::now()],
 | 
			
		||||
            ["name" => "Other", "created_at" => Carbon::now()]
 | 
			
		||||
            ["name" => "Windows 11", "created_at" => Carbon::now()],//38
 | 
			
		||||
            ["name" => "Custom", "created_at" => Carbon::now()],//39
 | 
			
		||||
            ["name" => "Other", "created_at" => Carbon::now()],//40
 | 
			
		||||
            ["name" => "Windows Server 2022", "created_at" => Carbon::now()],//41
 | 
			
		||||
            ["name" => "Ubuntu 24.04", "created_at" => Carbon::now()],//42
 | 
			
		||||
            ["name" => "OpenBSD 7.5", "created_at" => Carbon::now()],//43
 | 
			
		||||
            ["name" => "Fedora 41", "created_at" => Carbon::now()],//44
 | 
			
		||||
            ["name" => "Debian 11", "created_at" => Carbon::now()],//45
 | 
			
		||||
            ["name" => "AlmaLinux 9", "created_at" => Carbon::now()],//46
 | 
			
		||||
            ["name" => "FreeBSD 14.1", "created_at" => Carbon::now()],//47
 | 
			
		||||
        ];
 | 
			
		||||
 | 
			
		||||
        DB::table('os')->insert($os);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										17727
									
								
								package-lock.json
									
										
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										17727
									
								
								package-lock.json
									
										
									
										generated
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										20
									
								
								package.json
									
										
									
									
									
								
							
							
						
						
									
										20
									
								
								package.json
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -11,25 +11,25 @@
 | 
			
		|||
        "build": "webpack --config webpack.config.js"
 | 
			
		||||
    },
 | 
			
		||||
    "devDependencies": {
 | 
			
		||||
        "axios": "^0.27.2",
 | 
			
		||||
        "bootstrap": "^5.3.2",
 | 
			
		||||
        "axios": "^1.7.9",
 | 
			
		||||
        "bootstrap": "^5.3.3",
 | 
			
		||||
        "bootstrap-dark-5": "^1.1.3",
 | 
			
		||||
        "bootstrap-data-table": "^1.0.0",
 | 
			
		||||
        "datatables": "^1.10.18",
 | 
			
		||||
        "datatables.net-bs": "^1.13.6",
 | 
			
		||||
        "datatables.net-bs": "^2.1.8",
 | 
			
		||||
        "font-awesome": "^4.7.0",
 | 
			
		||||
        "jquery": "^3.7.1",
 | 
			
		||||
        "laravel-mix": "^6.0.49",
 | 
			
		||||
        "resolve-url-loader": "^5.0.0",
 | 
			
		||||
        "sass": "^1.68.0",
 | 
			
		||||
        "sass": "^1.82.0",
 | 
			
		||||
        "sass-loader": "^12.6.0",
 | 
			
		||||
        "vue": "^2.7.14",
 | 
			
		||||
        "vue-loader": "^17.2.2",
 | 
			
		||||
        "vue": "^2.7.16",
 | 
			
		||||
        "vue-loader": "^17.4.2",
 | 
			
		||||
        "vue-resource": "^1.5.3",
 | 
			
		||||
        "vue-template-compiler": "^2.7.14"
 | 
			
		||||
        "vue-template-compiler": "^2.7.16"
 | 
			
		||||
    },
 | 
			
		||||
    "dependencies": {
 | 
			
		||||
        "@fortawesome/fontawesome-free": "^6.4.2",
 | 
			
		||||
        "datatables.net-bs5": "^1.13.6"
 | 
			
		||||
        "@fortawesome/fontawesome-free": "^6.7.1",
 | 
			
		||||
        "datatables.net-bs5": "^1.13.11"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										12029
									
								
								public/css/app.css
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										12029
									
								
								public/css/app.css
									
										
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										51
									
								
								public/css/light.css
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										51
									
								
								public/css/light.css
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
@charset "UTF-8";
 | 
			
		||||
/*!
 | 
			
		||||
 * Bootstrap  v5.3.2 (https://getbootstrap.com/)
 | 
			
		||||
 * Copyright 2011-2023 The Bootstrap Authors
 | 
			
		||||
 * Bootstrap  v5.3.3 (https://getbootstrap.com/)
 | 
			
		||||
 * Copyright 2011-2024 The Bootstrap Authors
 | 
			
		||||
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
 | 
			
		||||
 */
 | 
			
		||||
:root,
 | 
			
		||||
| 
						 | 
				
			
			@ -2998,6 +2998,9 @@ textarea.form-control-lg {
 | 
			
		|||
.btn-check:checked + .btn:focus-visible, :not(.btn-check) + .btn:active:focus-visible, .btn:first-child:active:focus-visible, .btn.active:focus-visible, .btn.show:focus-visible {
 | 
			
		||||
  box-shadow: var(--bs-btn-focus-box-shadow);
 | 
			
		||||
}
 | 
			
		||||
.btn-check:checked:focus-visible + .btn {
 | 
			
		||||
  box-shadow: var(--bs-btn-focus-box-shadow);
 | 
			
		||||
}
 | 
			
		||||
.btn:disabled, .btn.disabled, fieldset:disabled .btn {
 | 
			
		||||
  color: var(--bs-btn-disabled-color);
 | 
			
		||||
  pointer-events: none;
 | 
			
		||||
| 
						 | 
				
			
			@ -4529,12 +4532,11 @@ textarea.form-control-lg {
 | 
			
		|||
  --bs-accordion-btn-padding-y: 1rem;
 | 
			
		||||
  --bs-accordion-btn-color: var(--bs-body-color);
 | 
			
		||||
  --bs-accordion-btn-bg: var(--bs-accordion-bg);
 | 
			
		||||
  --bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
 | 
			
		||||
  --bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23212529' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%3e%3c/svg%3e");
 | 
			
		||||
  --bs-accordion-btn-icon-width: 1.25rem;
 | 
			
		||||
  --bs-accordion-btn-icon-transform: rotate(-180deg);
 | 
			
		||||
  --bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;
 | 
			
		||||
  --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23052c65'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
 | 
			
		||||
  --bs-accordion-btn-focus-border-color: #86b7fe;
 | 
			
		||||
  --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23052c65' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%3e%3c/svg%3e");
 | 
			
		||||
  --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
 | 
			
		||||
  --bs-accordion-body-padding-x: 1.25rem;
 | 
			
		||||
  --bs-accordion-body-padding-y: 1rem;
 | 
			
		||||
| 
						 | 
				
			
			@ -4592,7 +4594,6 @@ textarea.form-control-lg {
 | 
			
		|||
}
 | 
			
		||||
.accordion-button:focus {
 | 
			
		||||
  z-index: 3;
 | 
			
		||||
  border-color: var(--bs-accordion-btn-focus-border-color);
 | 
			
		||||
  outline: 0;
 | 
			
		||||
  box-shadow: var(--bs-accordion-btn-focus-box-shadow);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -4610,7 +4611,7 @@ textarea.form-control-lg {
 | 
			
		|||
  border-top-left-radius: var(--bs-accordion-border-radius);
 | 
			
		||||
  border-top-right-radius: var(--bs-accordion-border-radius);
 | 
			
		||||
}
 | 
			
		||||
.accordion-item:first-of-type .accordion-button {
 | 
			
		||||
.accordion-item:first-of-type > .accordion-header .accordion-button {
 | 
			
		||||
  border-top-left-radius: var(--bs-accordion-inner-border-radius);
 | 
			
		||||
  border-top-right-radius: var(--bs-accordion-inner-border-radius);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -4621,11 +4622,11 @@ textarea.form-control-lg {
 | 
			
		|||
  border-bottom-right-radius: var(--bs-accordion-border-radius);
 | 
			
		||||
  border-bottom-left-radius: var(--bs-accordion-border-radius);
 | 
			
		||||
}
 | 
			
		||||
.accordion-item:last-of-type .accordion-button.collapsed {
 | 
			
		||||
.accordion-item:last-of-type > .accordion-header .accordion-button.collapsed {
 | 
			
		||||
  border-bottom-right-radius: var(--bs-accordion-inner-border-radius);
 | 
			
		||||
  border-bottom-left-radius: var(--bs-accordion-inner-border-radius);
 | 
			
		||||
}
 | 
			
		||||
.accordion-item:last-of-type .accordion-collapse {
 | 
			
		||||
.accordion-item:last-of-type > .accordion-collapse {
 | 
			
		||||
  border-bottom-right-radius: var(--bs-accordion-border-radius);
 | 
			
		||||
  border-bottom-left-radius: var(--bs-accordion-border-radius);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -4634,21 +4635,21 @@ textarea.form-control-lg {
 | 
			
		|||
  padding: var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.accordion-flush .accordion-collapse {
 | 
			
		||||
  border-width: 0;
 | 
			
		||||
}
 | 
			
		||||
.accordion-flush .accordion-item {
 | 
			
		||||
.accordion-flush > .accordion-item {
 | 
			
		||||
  border-right: 0;
 | 
			
		||||
  border-left: 0;
 | 
			
		||||
  border-radius: 0;
 | 
			
		||||
}
 | 
			
		||||
.accordion-flush .accordion-item:first-child {
 | 
			
		||||
.accordion-flush > .accordion-item:first-child {
 | 
			
		||||
  border-top: 0;
 | 
			
		||||
}
 | 
			
		||||
.accordion-flush .accordion-item:last-child {
 | 
			
		||||
.accordion-flush > .accordion-item:last-child {
 | 
			
		||||
  border-bottom: 0;
 | 
			
		||||
}
 | 
			
		||||
.accordion-flush .accordion-item .accordion-button, .accordion-flush .accordion-item .accordion-button.collapsed {
 | 
			
		||||
.accordion-flush > .accordion-item > .accordion-header .accordion-button, .accordion-flush > .accordion-item > .accordion-header .accordion-button.collapsed {
 | 
			
		||||
  border-radius: 0;
 | 
			
		||||
}
 | 
			
		||||
.accordion-flush > .accordion-item > .accordion-collapse {
 | 
			
		||||
  border-radius: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -5533,7 +5534,6 @@ textarea.form-control-lg {
 | 
			
		|||
  display: flex;
 | 
			
		||||
  flex-shrink: 0;
 | 
			
		||||
  align-items: center;
 | 
			
		||||
  justify-content: space-between;
 | 
			
		||||
  padding: var(--bs-modal-header-padding);
 | 
			
		||||
  border-bottom: var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);
 | 
			
		||||
  border-top-left-radius: var(--bs-modal-inner-border-radius);
 | 
			
		||||
| 
						 | 
				
			
			@ -6098,20 +6098,12 @@ textarea.form-control-lg {
 | 
			
		|||
  background-size: 100% 100%;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* rtl:options: {
 | 
			
		||||
  "autoRename": true,
 | 
			
		||||
  "stringMap":[ {
 | 
			
		||||
    "name"    : "prev-next",
 | 
			
		||||
    "search"  : "prev",
 | 
			
		||||
    "replace" : "next"
 | 
			
		||||
  } ]
 | 
			
		||||
} */
 | 
			
		||||
.carousel-control-prev-icon {
 | 
			
		||||
  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e");
 | 
			
		||||
  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e") /*rtl:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")*/;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.carousel-control-next-icon {
 | 
			
		||||
  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
 | 
			
		||||
  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e") /*rtl:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")*/;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.carousel-indicators {
 | 
			
		||||
| 
						 | 
				
			
			@ -6731,14 +6723,11 @@ textarea.form-control-lg {
 | 
			
		|||
.offcanvas-header {
 | 
			
		||||
  display: flex;
 | 
			
		||||
  align-items: center;
 | 
			
		||||
  justify-content: space-between;
 | 
			
		||||
  padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);
 | 
			
		||||
}
 | 
			
		||||
.offcanvas-header .btn-close {
 | 
			
		||||
  padding: calc(var(--bs-offcanvas-padding-y) * 0.5) calc(var(--bs-offcanvas-padding-x) * 0.5);
 | 
			
		||||
  margin-top: calc(-0.5 * var(--bs-offcanvas-padding-y));
 | 
			
		||||
  margin-right: calc(-0.5 * var(--bs-offcanvas-padding-x));
 | 
			
		||||
  margin-bottom: calc(-0.5 * var(--bs-offcanvas-padding-y));
 | 
			
		||||
  margin: calc(-0.5 * var(--bs-offcanvas-padding-y)) calc(-0.5 * var(--bs-offcanvas-padding-x)) calc(-0.5 * var(--bs-offcanvas-padding-y)) auto;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.offcanvas-title {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										6626
									
								
								public/js/app.js
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										6626
									
								
								public/js/app.js
									
										
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										39
									
								
								public/js/app.js.LICENSE.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								public/js/app.js.LICENSE.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,39 @@
 | 
			
		|||
/*!
 | 
			
		||||
  * Bootstrap v5.3.3 (https://getbootstrap.com/)
 | 
			
		||||
  * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
 | 
			
		||||
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/*!
 | 
			
		||||
 * The buffer module from node.js, for the browser.
 | 
			
		||||
 *
 | 
			
		||||
 * @author   Feross Aboukhadijeh <http://feross.org>
 | 
			
		||||
 * @license  MIT
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*!
 | 
			
		||||
 * Vue.js v2.7.16
 | 
			
		||||
 * (c) 2014-2023 Evan You
 | 
			
		||||
 * Released under the MIT License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*!
 | 
			
		||||
 * jQuery JavaScript Library v3.7.1
 | 
			
		||||
 * https://jquery.com/
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright OpenJS Foundation and other contributors
 | 
			
		||||
 * Released under the MIT license
 | 
			
		||||
 * https://jquery.org/license
 | 
			
		||||
 *
 | 
			
		||||
 * Date: 2023-08-28T13:37Z
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*! DataTables 1.10.18
 | 
			
		||||
 * ©2008-2018 SpryMedia Ltd - datatables.net/license
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*! DataTables Bootstrap 5 integration
 | 
			
		||||
 * 2020 SpryMedia Ltd - datatables.net/license
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */
 | 
			
		||||
| 
						 | 
				
			
			@ -6,5 +6,6 @@
 | 
			
		|||
    "/webfonts/fa-regular-400.ttf": "/webfonts/fa-regular-400.ttf",
 | 
			
		||||
    "/webfonts/fa-regular-400.woff2": "/webfonts/fa-regular-400.woff2",
 | 
			
		||||
    "/webfonts/fa-solid-900.ttf": "/webfonts/fa-solid-900.ttf",
 | 
			
		||||
    "/webfonts/fa-solid-900.woff2": "/webfonts/fa-solid-900.woff2"
 | 
			
		||||
    "/webfonts/fa-solid-900.woff2": "/webfonts/fa-solid-900.woff2",
 | 
			
		||||
    "/webfonts/fa-brands-400.ttf": "/webfonts/fa-brands-400.ttf"
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										
											BIN
										
									
								
								public/webfonts/fa-brands-400.ttf
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								public/webfonts/fa-brands-400.ttf
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								public/webfonts/fa-brands-400.woff2
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								public/webfonts/fa-brands-400.woff2
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										5
									
								
								resources/css/style.css
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								resources/css/style.css
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -21,6 +21,11 @@ Custom styles go in here
 | 
			
		|||
    display: contents !important;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.form-signin input[type="password"] {
 | 
			
		||||
    margin-bottom: 10px;
 | 
			
		||||
    border-radius: var(--bs-border-radius) !important;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@media (min-width: 1400px) {
 | 
			
		||||
    .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {
 | 
			
		||||
        max-width: 1520px;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										3
									
								
								resources/sass/app.scss
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								resources/sass/app.scss
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -2,6 +2,7 @@
 | 
			
		|||
@import "~@fortawesome/fontawesome-free/scss/fontawesome";
 | 
			
		||||
@import "~@fortawesome/fontawesome-free/scss/regular";
 | 
			
		||||
@import "~@fortawesome/fontawesome-free/scss/solid";
 | 
			
		||||
@import "~@fortawesome/fontawesome-free/scss/brands";
 | 
			
		||||
 | 
			
		||||
// Variables
 | 
			
		||||
@import 'variables';
 | 
			
		||||
@import 'variables';
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,7 +6,7 @@
 | 
			
		|||
        <!-- Validation Errors -->
 | 
			
		||||
        <x-auth-validation-errors class="mb-4" :errors="$errors"/>
 | 
			
		||||
 | 
			
		||||
            <h3 class="text-center mb-4">@if (config()->has('app.name')) {{ config('app.name') }} @else My idlers @endif</h3>
 | 
			
		||||
            <h3 class="text-center mb-5">@if (config()->has('app.name')) {{ config('app.name') }} @else My idlers @endif</h3>
 | 
			
		||||
            <form method="POST" action="{{ route('login') }}">
 | 
			
		||||
                @csrf
 | 
			
		||||
                <div class="form-floating mb-3">
 | 
			
		||||
| 
						 | 
				
			
			@ -35,7 +35,7 @@
 | 
			
		|||
                        {{ __('Forgot your password?') }}
 | 
			
		||||
                    </a>
 | 
			
		||||
                @endif
 | 
			
		||||
                <x-button class="mt-3 w-100 btn btn-lg btn-primary">
 | 
			
		||||
                <x-button class="mt-4 w-100 btn btn-lg btn-primary">
 | 
			
		||||
                    {{ __('Login') }}
 | 
			
		||||
                </x-button>
 | 
			
		||||
            </form>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,7 +4,7 @@
 | 
			
		|||
        <!-- Validation Errors -->
 | 
			
		||||
        <x-auth-validation-errors class="mb-4" :errors="$errors"/>
 | 
			
		||||
 | 
			
		||||
        <h3 class="text-center mb-4">@if (config()->has('app.name')) {{ config('app.name') }} @else My idlers @endif Register</h3>
 | 
			
		||||
        <h3 class="text-center mb-5">@if (config()->has('app.name')) {{ config('app.name') }} @else My idlers @endif Register</h3>
 | 
			
		||||
        <form method="POST" action="{{ route('register') }}">
 | 
			
		||||
        @csrf
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -50,7 +50,7 @@
 | 
			
		|||
                    </a>
 | 
			
		||||
                </div>
 | 
			
		||||
                <div class="col-12">
 | 
			
		||||
                    <x-button class="mt-3 w-100 btn btn-lg btn-primary">
 | 
			
		||||
                    <x-button class="mt-4 w-100 btn btn-lg btn-primary">
 | 
			
		||||
                        {{ __('Register') }}
 | 
			
		||||
                    </x-button>
 | 
			
		||||
                </div>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1 +1 @@
 | 
			
		|||
<a href="{{$href}}" class="btn btn-primary py-0 px-4 mb-4">{{$slot}}</a>
 | 
			
		||||
<a href="{{$href}}" class="btn btn-primary py-1 px-4 mb-4"><i class="fas fa-arrow-left me-2"></i>{{$slot}}</a>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,5 @@
 | 
			
		|||
<button type="submit"
 | 
			
		||||
        class="btn btn-success py-0 px-4 mt-2">
 | 
			
		||||
        class="btn btn-success py-1 px-4 mt-2">
 | 
			
		||||
    <i class="fas fa-plus me-2"></i>
 | 
			
		||||
    {{$slot}}
 | 
			
		||||
</button>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,7 +9,7 @@
 | 
			
		|||
            <a href="{{ route('domains.create') }}" class="btn btn-primary mb-3">Add a domain</a>
 | 
			
		||||
            <x-response-alerts></x-response-alerts>
 | 
			
		||||
            <div class="table-responsive">
 | 
			
		||||
                <table class="table table-bordered">
 | 
			
		||||
                <table class="table table-bordered" id="domain-table">
 | 
			
		||||
                    <thead class="table-light">
 | 
			
		||||
                    <tr>
 | 
			
		||||
                        <th class="text-nowrap">Domain</th>
 | 
			
		||||
| 
						 | 
				
			
			@ -28,7 +28,7 @@
 | 
			
		|||
                                                           class="text-decoration-none">{{ $domain->domain }}
 | 
			
		||||
                                        .{{$domain->extension}}</a></td>
 | 
			
		||||
                                <td class="text-nowrap">{{ $domain->owned_since}}</td>
 | 
			
		||||
                                <td class="text-nowrap">{{ now()->diffInDays($domain->price->next_due_date) }} <small>days</small>
 | 
			
		||||
                                <td class="text-nowrap">{{ number_format(now()->diffInDays(Carbon\Carbon::parse($domain->price->next_due_date), false), 0) }} <small>days</small>
 | 
			
		||||
                                </td>
 | 
			
		||||
                                <td class="text-nowrap">{{ $domain->provider->name}}</td>
 | 
			
		||||
                                <td class="text-nowrap">{{ $domain->price->price }}
 | 
			
		||||
| 
						 | 
				
			
			@ -63,4 +63,23 @@
 | 
			
		|||
    <x-modal-delete-script>
 | 
			
		||||
        <x-slot name="uri">domains</x-slot>
 | 
			
		||||
    </x-modal-delete-script>
 | 
			
		||||
 | 
			
		||||
    @section('scripts')
 | 
			
		||||
        <script>
 | 
			
		||||
            window.addEventListener('load', function () {
 | 
			
		||||
                $('#domain-table').DataTable({
 | 
			
		||||
                    "pageLength": 15,
 | 
			
		||||
                    "lengthMenu": [5, 10, 15, 25, 30, 50, 75, 100],
 | 
			
		||||
                    "columnDefs": [
 | 
			
		||||
                        {"orderable": false, "targets": [5]}
 | 
			
		||||
                    ],
 | 
			
		||||
                    "initComplete": function () {
 | 
			
		||||
                        $('.dataTables_length,.dataTables_filter').addClass('mb-2');
 | 
			
		||||
                        $('.dataTables_paginate').addClass('mt-2');
 | 
			
		||||
                        $('.dataTables_info').addClass('mt-2 text-muted ');
 | 
			
		||||
                    }
 | 
			
		||||
                });
 | 
			
		||||
            })
 | 
			
		||||
        </script>
 | 
			
		||||
    @endsection
 | 
			
		||||
</x-app-layout>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,13 +7,17 @@
 | 
			
		|||
            <x-response-alerts></x-response-alerts>
 | 
			
		||||
            <x-card class="shadow mt-3">
 | 
			
		||||
                <a href="{{ route('IPs.create') }}" class="btn btn-primary mb-3">Add IP</a>
 | 
			
		||||
                <x-response-alerts></x-response-alerts>
 | 
			
		||||
                <div class="table-responsive">
 | 
			
		||||
                    <table class="table table-bordered" id="ips-table">
 | 
			
		||||
                        <thead class="table-light">
 | 
			
		||||
                        <tr>
 | 
			
		||||
                            <th class="text-nowrap">Type</th>
 | 
			
		||||
                            <th class="text-nowrap">Address</th>
 | 
			
		||||
                            <th class="text-nowrap">Country</th>
 | 
			
		||||
                            <th class="text-nowrap">City</th>
 | 
			
		||||
                            <th class="text-nowrap">ORG</th>
 | 
			
		||||
                            <th class="text-nowrap">ASN</th>
 | 
			
		||||
                            <th class="text-nowrap">ISP</th>
 | 
			
		||||
                            <th class="text-nowrap">Actions</th>
 | 
			
		||||
                        </tr>
 | 
			
		||||
                        </thead>
 | 
			
		||||
| 
						 | 
				
			
			@ -27,8 +31,17 @@
 | 
			
		|||
                                            IPv6
 | 
			
		||||
                                        @endif</td>
 | 
			
		||||
                                    <td class="text-nowrap">{{ $ip->address}}</td>
 | 
			
		||||
                                    <td class="text-nowrap">{{ $ip->country}}</td>
 | 
			
		||||
                                    <td class="text-nowrap">{{ $ip->city}}</td>
 | 
			
		||||
                                    <td class="text-nowrap">{{ $ip->org}}</td>
 | 
			
		||||
                                    <td class="text-nowrap">{{ $ip->asn}}</td>
 | 
			
		||||
                                    <td class="text-nowrap">{{ $ip->isp}}</td>
 | 
			
		||||
                                    <td class="text-nowrap">
 | 
			
		||||
                                        <form action="{{ route('IPs.destroy', $ip->id) }}" method="POST">
 | 
			
		||||
                                            <a href="{{ route('ip.pull.info', $ip->id) }}"
 | 
			
		||||
                                               class="text-body mx-1">
 | 
			
		||||
                                                <i class="fa-solid fa-arrows-rotate" title="Pull IP info"></i>
 | 
			
		||||
                                            </a>
 | 
			
		||||
                                            @csrf
 | 
			
		||||
                                            @method('DELETE')
 | 
			
		||||
                                            <i class="fas fa-trash text-danger ms-3" @click="confirmDeleteModal"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,10 +8,10 @@
 | 
			
		|||
            <div class="card-body">
 | 
			
		||||
                <h4 class="mb-3">Reseller hosting information</h4>
 | 
			
		||||
                <x-auth-validation-errors></x-auth-validation-errors>
 | 
			
		||||
                <a href="{{ route('reseller.index') }}"
 | 
			
		||||
                   class="btn btn-primary py-0 px-4 mb-4">
 | 
			
		||||
                <x-back-button>
 | 
			
		||||
                    <x-slot name="href">{{ route('reseller.index') }}</x-slot>
 | 
			
		||||
                    Go back
 | 
			
		||||
                </a>
 | 
			
		||||
                </x-back-button>
 | 
			
		||||
                <form action="{{ route('reseller.store') }}" method="POST">
 | 
			
		||||
                    @csrf
 | 
			
		||||
                    <div class="row">
 | 
			
		||||
| 
						 | 
				
			
			@ -209,10 +209,7 @@
 | 
			
		|||
                        </div>
 | 
			
		||||
                    </div>
 | 
			
		||||
                    <div>
 | 
			
		||||
                        <button type="submit"
 | 
			
		||||
                                class="btn btn-success py-0 px-4 mt-2">
 | 
			
		||||
                            Insert Reseller hosting
 | 
			
		||||
                        </button>
 | 
			
		||||
                        <x-submit-button>Insert Reseller hosting</x-submit-button>
 | 
			
		||||
                    </div>
 | 
			
		||||
                </form>
 | 
			
		||||
            </div>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,7 +9,7 @@
 | 
			
		|||
                <a href="{{ route('reseller.create') }}" class="btn btn-primary mb-3">Add a reseller</a>
 | 
			
		||||
                <x-response-alerts></x-response-alerts>
 | 
			
		||||
                <div class="table-responsive">
 | 
			
		||||
                    <table class="table table-bordered">
 | 
			
		||||
                    <table class="table table-bordered" id="reseller-table">
 | 
			
		||||
                        <thead class="table-light">
 | 
			
		||||
                        <tr>
 | 
			
		||||
                            <th>Name</th>
 | 
			
		||||
| 
						 | 
				
			
			@ -68,4 +68,23 @@
 | 
			
		|||
    <x-modal-delete-script>
 | 
			
		||||
        <x-slot name="uri">reseller</x-slot>
 | 
			
		||||
    </x-modal-delete-script>
 | 
			
		||||
 | 
			
		||||
    @section('scripts')
 | 
			
		||||
        <script>
 | 
			
		||||
            window.addEventListener('load', function () {
 | 
			
		||||
                $('#reseller-table').DataTable({
 | 
			
		||||
                    "pageLength": 15,
 | 
			
		||||
                    "lengthMenu": [5, 10, 15, 25, 30, 50, 75, 100],
 | 
			
		||||
                    "columnDefs": [
 | 
			
		||||
                        {"orderable": false, "targets": [10]}
 | 
			
		||||
                    ],
 | 
			
		||||
                    "initComplete": function () {
 | 
			
		||||
                        $('.dataTables_length,.dataTables_filter').addClass('mb-2');
 | 
			
		||||
                        $('.dataTables_paginate').addClass('mt-2');
 | 
			
		||||
                        $('.dataTables_info').addClass('mt-2 text-muted ');
 | 
			
		||||
                    }
 | 
			
		||||
                });
 | 
			
		||||
            })
 | 
			
		||||
        </script>
 | 
			
		||||
    @endsection
 | 
			
		||||
</x-app-layout>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -25,7 +25,7 @@
 | 
			
		|||
                    <a href="{{ route('servers-compare-choose') }}" class="btn btn-primary mb-3 ms-2">Compare
 | 
			
		||||
                        servers</a>
 | 
			
		||||
                    <div class="table-responsive">
 | 
			
		||||
                        <table class="table table-bordered">
 | 
			
		||||
                        <table class="table table-bordered" id="servers-table">
 | 
			
		||||
                            <thead class="table-light">
 | 
			
		||||
                            <tr class="bg-gray-100">
 | 
			
		||||
                                <th>Name</th>
 | 
			
		||||
| 
						 | 
				
			
			@ -68,7 +68,7 @@
 | 
			
		|||
                                        <td class="text-nowrap">{{ $server->provider->name }}</td>
 | 
			
		||||
                                        <td class="text-nowrap">{{ $server->price->price }} {{$server->price->currency}} {{\App\Process::paymentTermIntToString($server->price->term)}}</td>
 | 
			
		||||
                                        <td class="text-nowrap">
 | 
			
		||||
                                            {{now()->diffInDays(Carbon\Carbon::parse($server->price->next_due_date), false)}}
 | 
			
		||||
                                            {{number_format(now()->diffInDays(Carbon\Carbon::parse($server->price->next_due_date), false), 0)}}
 | 
			
		||||
                                            <small>days</small></td>
 | 
			
		||||
                                        <td class="text-nowrap"> {{ $server->owned_since }}</td>
 | 
			
		||||
                                        <td class="text-nowrap">
 | 
			
		||||
| 
						 | 
				
			
			@ -233,6 +233,21 @@
 | 
			
		|||
                    }
 | 
			
		||||
                });
 | 
			
		||||
            })
 | 
			
		||||
 | 
			
		||||
            window.addEventListener('load', function () {
 | 
			
		||||
                $('#servers-table').DataTable({
 | 
			
		||||
                    "pageLength": 15,
 | 
			
		||||
                    "lengthMenu": [5, 10, 15, 25, 30, 50, 75, 100],
 | 
			
		||||
                    "columnDefs": [
 | 
			
		||||
                        {"orderable": false, "targets": [1,11]}
 | 
			
		||||
                    ],
 | 
			
		||||
                    "initComplete": function () {
 | 
			
		||||
                        $('.dataTables_length,.dataTables_filter').addClass('mb-2');
 | 
			
		||||
                        $('.dataTables_paginate').addClass('mt-2');
 | 
			
		||||
                        $('.dataTables_info').addClass('mt-2 text-muted ');
 | 
			
		||||
                    }
 | 
			
		||||
                });
 | 
			
		||||
            })
 | 
			
		||||
        </script>
 | 
			
		||||
    @endsection
 | 
			
		||||
</x-app-layout>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,10 +8,10 @@
 | 
			
		|||
            <div class="card-body">
 | 
			
		||||
                <h4 class="mb-3">Shared hosting information</h4>
 | 
			
		||||
                <x-auth-validation-errors></x-auth-validation-errors>
 | 
			
		||||
                <a href="{{ route('shared.index') }}"
 | 
			
		||||
                   class="btn btn-primary py-0 px-4 mb-4">
 | 
			
		||||
                <x-back-button>
 | 
			
		||||
                    <x-slot name="href">{{ route('shared.index') }}</x-slot>
 | 
			
		||||
                    Go back
 | 
			
		||||
                </a>
 | 
			
		||||
                </x-back-button>
 | 
			
		||||
                <form action="{{ route('shared.store') }}" method="POST">
 | 
			
		||||
                    @csrf
 | 
			
		||||
                    <div class="row">
 | 
			
		||||
| 
						 | 
				
			
			@ -199,10 +199,7 @@
 | 
			
		|||
                        </div>
 | 
			
		||||
                    </div>
 | 
			
		||||
                    <div>
 | 
			
		||||
                        <button type="submit"
 | 
			
		||||
                                class="btn btn-success py-0 px-4 mt-2">
 | 
			
		||||
                            Insert Shared hosting
 | 
			
		||||
                        </button>
 | 
			
		||||
                        <x-submit-button>Insert Shared hosting</x-submit-button>
 | 
			
		||||
                    </div>
 | 
			
		||||
                </form>
 | 
			
		||||
            </div>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,7 +9,7 @@
 | 
			
		|||
                <a href="{{ route('shared.create') }}" class="btn btn-primary mb-3">Add shared hosting</a>
 | 
			
		||||
                <x-response-alerts></x-response-alerts>
 | 
			
		||||
                <div class="table-responsive">
 | 
			
		||||
                    <table class="table table-bordered">
 | 
			
		||||
                    <table class="table table-bordered" id="shared-table">
 | 
			
		||||
                        <thead class="table-light">
 | 
			
		||||
                        <tr class="bg-gray-100">
 | 
			
		||||
                            <th>Name</th>
 | 
			
		||||
| 
						 | 
				
			
			@ -70,4 +70,24 @@
 | 
			
		|||
    <x-modal-delete-script>
 | 
			
		||||
        <x-slot name="uri">shared</x-slot>
 | 
			
		||||
    </x-modal-delete-script>
 | 
			
		||||
 | 
			
		||||
    @section('scripts')
 | 
			
		||||
        <script>
 | 
			
		||||
            window.addEventListener('load', function () {
 | 
			
		||||
                $('#shared-table').DataTable({
 | 
			
		||||
                    "pageLength": 15,
 | 
			
		||||
                    "lengthMenu": [5, 10, 15, 25, 30, 50, 75, 100],
 | 
			
		||||
                    "columnDefs": [
 | 
			
		||||
                        {"orderable": false, "targets": [9]}
 | 
			
		||||
                    ],
 | 
			
		||||
                    "initComplete": function () {
 | 
			
		||||
                        $('.dataTables_length,.dataTables_filter').addClass('mb-2');
 | 
			
		||||
                        $('.dataTables_paginate').addClass('mt-2');
 | 
			
		||||
                        $('.dataTables_info').addClass('mt-2 text-muted ');
 | 
			
		||||
                    }
 | 
			
		||||
                });
 | 
			
		||||
            })
 | 
			
		||||
        </script>
 | 
			
		||||
    @endsection
 | 
			
		||||
 | 
			
		||||
</x-app-layout>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -77,3 +77,5 @@ Route::middleware('auth:api')->get('dns/{domainName}/{type}', 'App\Http\Controll
 | 
			
		|||
Route::middleware('throttle:4')->post('yabs/{server}/{key}', 'App\Http\Controllers\ApiController@storeYabs')->name('api.store-yabs');
 | 
			
		||||
Route::middleware('auth:api')->get('yabs/', 'App\Http\Controllers\ApiController@getAllYabs');
 | 
			
		||||
Route::middleware('auth:api')->get('yabs/{id}', 'App\Http\Controllers\ApiController@getYabs');
 | 
			
		||||
 | 
			
		||||
Route::middleware('auth:api')->get('note/{id}', 'App\Http\Controllers\ApiController@getNote');
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,6 +3,7 @@
 | 
			
		|||
use App\Http\Controllers\AccountController;
 | 
			
		||||
use App\Http\Controllers\DNSController;
 | 
			
		||||
use App\Http\Controllers\DomainsController;
 | 
			
		||||
use App\Http\Controllers\HomeController;
 | 
			
		||||
use App\Http\Controllers\IPsController;
 | 
			
		||||
use App\Http\Controllers\LabelsController;
 | 
			
		||||
use App\Http\Controllers\LocationsController;
 | 
			
		||||
| 
						 | 
				
			
			@ -18,61 +19,52 @@ use App\Http\Controllers\SharedController;
 | 
			
		|||
use App\Http\Controllers\YabsController;
 | 
			
		||||
use Illuminate\Support\Facades\Route;
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
|--------------------------------------------------------------------------
 | 
			
		||||
| Web Routes
 | 
			
		||||
|--------------------------------------------------------------------------
 | 
			
		||||
|
 | 
			
		||||
| Here is where you can register web routes for your application. These
 | 
			
		||||
| routes are loaded by the RouteServiceProvider within a group which
 | 
			
		||||
| contains the "web" middleware group. Now create something great!
 | 
			
		||||
|
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
Route::get('/', 'App\Http\Controllers\HomeController@index')->name('/');
 | 
			
		||||
Route::get('/', [HomeController::class, 'index'])->name('/');
 | 
			
		||||
 | 
			
		||||
require __DIR__ . '/auth.php';
 | 
			
		||||
 | 
			
		||||
Route::resource('account', AccountController::class)->middleware(['auth']);
 | 
			
		||||
Route::get('servers/public', [ServerController::class, 'showServersPublic'])->name('servers/public');
 | 
			
		||||
 | 
			
		||||
Route::resource('dns', DNSController::class)->middleware(['auth']);
 | 
			
		||||
Route::middleware(['auth'])->group(function () {
 | 
			
		||||
    Route::resource('account', AccountController::class);
 | 
			
		||||
 | 
			
		||||
Route::resource('domains', DomainsController::class)->middleware(['auth']);
 | 
			
		||||
    Route::resource('dns', DNSController::class);
 | 
			
		||||
 | 
			
		||||
Route::resource('IPs', IPsController::class)->middleware(['auth']);
 | 
			
		||||
    Route::resource('domains', DomainsController::class);
 | 
			
		||||
 | 
			
		||||
Route::resource('labels', LabelsController::class)->middleware(['auth']);
 | 
			
		||||
    Route::resource('IPs', IPsController::class);
 | 
			
		||||
 | 
			
		||||
Route::resource('locations', LocationsController::class)->middleware(['auth']);
 | 
			
		||||
    Route::resource('labels', LabelsController::class);
 | 
			
		||||
 | 
			
		||||
Route::resource('misc', MiscController::class)->middleware(['auth']);
 | 
			
		||||
    Route::resource('locations', LocationsController::class);
 | 
			
		||||
 | 
			
		||||
Route::resource('os', OsController::class)->middleware(['auth']);
 | 
			
		||||
    Route::resource('misc', MiscController::class);
 | 
			
		||||
 | 
			
		||||
Route::resource('providers', ProvidersController::class)->middleware(['auth']);
 | 
			
		||||
    Route::resource('os', OsController::class);
 | 
			
		||||
 | 
			
		||||
Route::resource('reseller', ResellerController::class)->middleware(['auth']);
 | 
			
		||||
    Route::resource('providers', ProvidersController::class);
 | 
			
		||||
 | 
			
		||||
Route::get('servers/public', 'App\Http\Controllers\ServerController@showServersPublic')->name('servers/public');
 | 
			
		||||
    Route::resource('reseller', ResellerController::class);
 | 
			
		||||
 | 
			
		||||
Route::resource('servers', ServerController::class)->middleware(['auth']);
 | 
			
		||||
    Route::resource('servers', ServerController::class);
 | 
			
		||||
 | 
			
		||||
Route::resource('settings', SettingsController::class)->middleware(['auth']);
 | 
			
		||||
    Route::resource('settings', SettingsController::class);
 | 
			
		||||
 | 
			
		||||
Route::resource('seedboxes', SeedBoxesController::class)->middleware(['auth']);
 | 
			
		||||
    Route::resource('seedboxes', SeedBoxesController::class);
 | 
			
		||||
 | 
			
		||||
Route::resource('shared', SharedController::class)->middleware(['auth']);
 | 
			
		||||
    Route::resource('shared', SharedController::class);
 | 
			
		||||
 | 
			
		||||
Route::resource('yabs', YabsController::class)->middleware(['auth']);
 | 
			
		||||
    Route::resource('yabs', YabsController::class);
 | 
			
		||||
 | 
			
		||||
Route::resource('notes', NoteController::class)->middleware(['auth']);
 | 
			
		||||
    Route::resource('notes', NoteController::class);
 | 
			
		||||
 | 
			
		||||
Route::get('yabs/{yab}/json', 'App\Http\Controllers\YabsController@yabsToJson')->middleware(['auth'])->name('yabs.json');
 | 
			
		||||
    Route::get('yabs/{yab}/json', [YabsController::class, 'yabsToJson'])->name('yabs.json');
 | 
			
		||||
    Route::get('yabs-compare-choose', [YabsController::class, 'chooseYabsCompare'])->name('yabs.compare-choose');
 | 
			
		||||
    Route::get('yabs-compare/{yabs1}/{yabs2}', [YabsController::class, 'compareYabs'])->name('yabs.compare');
 | 
			
		||||
 | 
			
		||||
Route::get('yabs-compare-choose', 'App\Http\Controllers\YabsController@chooseYabsCompare')->middleware(['auth'])->name('yabs.compare-choose');
 | 
			
		||||
    Route::get('servers-compare-choose', [ServerController::class, 'chooseCompare'])->name('servers-compare-choose');
 | 
			
		||||
    Route::get('servers-compare/{server1}/{server2}', [ServerController::class, 'compareServers'])->name('servers.compare');
 | 
			
		||||
 | 
			
		||||
Route::get('yabs-compare/{yabs1}/{yabs2}', 'App\Http\Controllers\YabsController@compareYabs')->middleware(['auth'])->name('yabs.compare');
 | 
			
		||||
 | 
			
		||||
Route::get('servers-compare-choose', 'App\Http\Controllers\ServerController@chooseCompare')->middleware(['auth'])->name('servers-compare-choose');
 | 
			
		||||
 | 
			
		||||
Route::get('servers-compare/{server1}/{server2}', 'App\Http\Controllers\ServerController@compareServers')->middleware(['auth'])->name('servers.compare');
 | 
			
		||||
    Route::get('ip/{IP}/pull-ip-info', [IPsController::class, 'getUpdateWhoIs'])->middleware(['throttle:10,1'])->name('ip.pull.info');
 | 
			
		||||
});
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										5
									
								
								webpack.mix.js
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								webpack.mix.js
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -26,6 +26,9 @@ mix.sass('resources/sass/app.scss', 'public/css').options({
 | 
			
		|||
).copy(
 | 
			
		||||
    'node_modules/@fortawesome/fontawesome-free/webfonts/fa-solid-900.woff2',
 | 
			
		||||
    'public/webfonts/fa-solid-900.woff2'
 | 
			
		||||
).copy(
 | 
			
		||||
    'node_modules/@fortawesome/fontawesome-free/webfonts/fa-brands-400.ttf',
 | 
			
		||||
    'public/webfonts/fa-brands-400.ttf'
 | 
			
		||||
);
 | 
			
		||||
mix.postCss('resources/css/light.css', 'public/css');
 | 
			
		||||
mix.postCss('resources/css/dark.css', 'public/css');
 | 
			
		||||
mix.postCss('resources/css/dark.css', 'public/css');
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue