mirror of
https://github.com/cp6/my-idlers.git
synced 2025-06-07 17:48:09 +00:00
Compare commits
No commits in common. "main" and "1.3" have entirely different histories.
368 changed files with 14887 additions and 151148 deletions
|
@ -1,15 +0,0 @@
|
|||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
|
||||
[*.{yml,yaml}]
|
||||
indent_size = 2
|
8
.gitattributes
vendored
8
.gitattributes
vendored
|
@ -1,8 +0,0 @@
|
|||
* text=auto
|
||||
*.css linguist-vendored
|
||||
*.scss linguist-vendored
|
||||
*.js linguist-vendored
|
||||
CHANGELOG.md export-ignore
|
||||
|
||||
/public/css/* -diff
|
||||
/public/js/* -diff
|
79
.github/workflows/main.yml
vendored
79
.github/workflows/main.yml
vendored
|
@ -1,79 +0,0 @@
|
|||
name: Docker
|
||||
|
||||
# This workflow uses actions that are not certified by GitHub.
|
||||
# They are provided by a third-party and are governed by
|
||||
# separate terms of service, privacy policy, and support
|
||||
# documentation.
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "main" ]
|
||||
|
||||
env:
|
||||
# Use docker.io for Docker Hub if empty
|
||||
REGISTRY: ghcr.io
|
||||
# github.repository as <account>/<repo>
|
||||
IMAGE_NAME: ${{ github.repository }}
|
||||
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
# This is used to complete the identity challenge
|
||||
# with sigstore/fulcio when running outside of PRs.
|
||||
id-token: write
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
|
||||
# Install the cosign tool except on PR
|
||||
# https://github.com/sigstore/cosign-installer
|
||||
- name: Install cosign
|
||||
if: github.event_name != 'pull_request'
|
||||
uses: sigstore/cosign-installer@main
|
||||
with:
|
||||
cosign-release: 'v1.11.0'
|
||||
|
||||
|
||||
# Workaround: https://github.com/docker/build-push-action/issues/461
|
||||
- name: Setup Docker buildx
|
||||
uses: docker/setup-buildx-action@79abd3f86f79a9d68a23c75a09a9a85889262adf
|
||||
|
||||
# Login against a Docker registry except on PR
|
||||
# https://github.com/docker/login-action
|
||||
- name: Log into registry ${{ env.REGISTRY }}
|
||||
if: github.event_name != 'pull_request'
|
||||
uses: docker/login-action@28218f9b04b4f3f62068d7b6ce6ca5b26e35336c
|
||||
with:
|
||||
registry: ${{ env.REGISTRY }}
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
# Extract metadata (tags, labels) for Docker
|
||||
# https://github.com/docker/metadata-action
|
||||
- name: Extract Docker metadata
|
||||
id: meta
|
||||
uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38
|
||||
with:
|
||||
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
||||
tags: |
|
||||
latest
|
||||
|
||||
|
||||
# Build and push Docker image with Buildx (don't push on PR)
|
||||
# https://github.com/docker/build-push-action
|
||||
- name: Build and push Docker image
|
||||
id: build-and-push
|
||||
uses: docker/build-push-action@v2
|
||||
with:
|
||||
context: .
|
||||
push: ${{ github.event_name != 'pull_request' }}
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
platforms: linux/amd64,linux/arm64
|
||||
cache-from: type=gha
|
||||
cache-to: type=gha,mode=max
|
60
.gitignore
vendored
60
.gitignore
vendored
|
@ -1,60 +0,0 @@
|
|||
### Laravel ###
|
||||
vendor/
|
||||
node_modules/
|
||||
npm-debug.log
|
||||
|
||||
# Laravel 4 specific
|
||||
bootstrap/compiled.php
|
||||
app/storage/
|
||||
|
||||
# Laravel 5 & Lumen specific
|
||||
public/storage
|
||||
public/hot
|
||||
storage/*.key
|
||||
.env.*.php
|
||||
.env.php
|
||||
.env
|
||||
Homestead.yaml
|
||||
Homestead.json
|
||||
|
||||
# Rocketeer PHP task runner and deployment package. https://github.com/rocketeers/rocketeer
|
||||
.rocketeer/
|
||||
|
||||
# Created by https://www.gitignore.io/api/phpstorm
|
||||
|
||||
### PhpStorm ###
|
||||
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
|
||||
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
|
||||
|
||||
# User-specific stuff:
|
||||
.idea/
|
||||
|
||||
## File-based project format:
|
||||
*.iws
|
||||
|
||||
## Plugin-specific files:
|
||||
|
||||
# IntelliJ
|
||||
/out/
|
||||
|
||||
# mpeltonen/sbt-idea plugin
|
||||
.idea_modules/
|
||||
|
||||
# JIRA plugin
|
||||
atlassian-ide-plugin.xml
|
||||
|
||||
# Crashlytics plugin (for Android Studio and IntelliJ)
|
||||
com_crashlytics_export_strings.xml
|
||||
crashlytics.properties
|
||||
crashlytics-build.properties
|
||||
fabric.properties
|
||||
|
||||
### PhpStorm Patch ###
|
||||
# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721
|
||||
|
||||
# *.iml
|
||||
# modules.xml
|
||||
# .idea/misc.xml
|
||||
# *.ipr
|
||||
storage/clockwork/
|
||||
!public/
|
13
.styleci.yml
13
.styleci.yml
|
@ -1,13 +0,0 @@
|
|||
php:
|
||||
preset: laravel
|
||||
disabled:
|
||||
- no_unused_imports
|
||||
finder:
|
||||
not-name:
|
||||
- index.php
|
||||
- server.php
|
||||
js:
|
||||
finder:
|
||||
not-name:
|
||||
- webpack.mix.js
|
||||
css: true
|
14
Dockerfile
14
Dockerfile
|
@ -1,14 +0,0 @@
|
|||
FROM php:8.2-fpm-alpine
|
||||
|
||||
RUN docker-php-ext-install pdo pdo_mysql sockets
|
||||
RUN curl -sS https://getcomposer.org/installer | php -- \
|
||||
--install-dir=/usr/local/bin --filename=composer
|
||||
|
||||
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
|
||||
|
||||
WORKDIR /app
|
||||
COPY . .
|
||||
RUN composer install
|
||||
|
||||
ENV APP_ENV production
|
||||
ENTRYPOINT ["/app/run.sh"]
|
376
README.md
376
README.md
|
@ -1,339 +1,123 @@
|
|||
# My idlers
|
||||
|
||||
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.
|
||||
A web app for displaying, organizing and storing information about servers (VPS), shared hosting and domains.
|
||||
|
||||
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.
|
||||
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 scores to do easier comparing and sorting.
|
||||
|
||||
[](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" />
|
||||
|
||||
[View demo site](https://demo.myidlers.com/)
|
||||
|
||||
**Note:** Create, Update and Delete are disabled on the demo site.
|
||||
|
||||
## Project sponsor
|
||||
|
||||
Currently seeking a project sponsor
|
||||
|
||||
## 3.0.0 changes (9 December 2024):
|
||||
|
||||
* 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:
|
||||
|
||||
```shell
|
||||
composer update
|
||||
php artisan migrate
|
||||
php artisan route:cache
|
||||
php artisan cache:clear
|
||||
```
|
||||
## 1.3 changes:
|
||||
**If you have version 1.2 already installed please run ```update1.2to1.3.sql```**
|
||||
* Added constant to set main view type (cards or table).
|
||||
* Fixed DNS GET requests.
|
||||
* Added label field/input for servers.
|
||||
* Fixed domain & shared hosting deletion.
|
||||
* Updated to dns_get_record() instead of DNS API calling.
|
||||
* Added KB/s to MB/s conversion.
|
||||
* Fixed active status for view type div.
|
||||
* Added attach domain to server or shared hosting.
|
||||
* Updated search to include tags and labels.
|
||||
* Updated server view more modal formatting.
|
||||
* Updated server edit modal formatting.
|
||||
* Updated `my_idlers.sql` for changes
|
||||
|
||||
## Requires
|
||||
|
||||
* PHP 8.3
|
||||
* PHP 7.4 (compatible with 8.0)
|
||||
* MySQL
|
||||
|
||||
## Features
|
||||
|
||||
* Add servers
|
||||
* Add shared hosting
|
||||
* Add domains
|
||||
* [Auto suggest locations](https://cdn.write.corbpie.com/wp-content/uploads/2021/01/my-idlers-self-hosted-server-domain-information-auto-location.gif)
|
||||
* [Auto suggest providers](https://cdn.write.corbpie.com/wp-content/uploads/2021/01/my-idlers-self-hosted-server-domain-information-auto-provider.gif)
|
||||
* [Auto get IP's from hostname](https://cdn.write.corbpie.com/wp-content/uploads/2021/01/my-idlers-self-hosted-server-domain-information-ips-from-hostname.gif)
|
||||
* [Check up/down status](https://cdn.write.corbpie.com/wp-content/uploads/2021/01/my-idlers-self-hosted-server-domain-information-ping-up-feature.gif)
|
||||
* Get YABS data from output
|
||||
* Compare 2 servers
|
||||
* Save & view YABS output
|
||||
* Update YABS disk & network results
|
||||
* Get YABs data from output
|
||||
* Save & view YABs output
|
||||
* Update YABs disk & network results
|
||||
* Next due date system
|
||||
* Multi currency compatibility
|
||||
* Multi payment-term compatibility
|
||||
* Pre-defined operating systems
|
||||
* Assign tags
|
||||
* Assign labels
|
||||
* Assign server type (KVM, OVZ, LXC & dedi)
|
||||
* Easy to edit values
|
||||
* Assign notes
|
||||
* Order by table
|
||||
* Search items
|
||||
* Tally/stats card
|
||||
* One-page design
|
||||
|
||||
## Install
|
||||
|
||||
* Run `git clone https://github.com/cp6/my-idlers.git` into your directory of choice
|
||||
* Run `composer install`
|
||||
* Run `cp .env.example .env`
|
||||
* Edit (If needed) MySQL details in .env
|
||||
* Run `php artisan key:generate`
|
||||
* Run `php artisan make:database my_idlers` to create database
|
||||
* Run `php artisan migrate:fresh --seed` to create tables and seed data
|
||||
* Run `php artisan serve`
|
||||
* Download [the zip](https://github.com/cp6/my-idlers/archive/main.zip) and unpack the files from ```my-idlers-main/``` into your directory of choice.
|
||||
* Run `my_idlers.sql` in MySQL.
|
||||
|
||||
* **Only run ```update1.2to1.3.sql``` if you have version 1.2 installed.**
|
||||
|
||||
* Edit ```class.php``` lines ```13-16``` for your MySQL details.
|
||||
* Edit ```class.php``` lines ```8-10``` for card order type.
|
||||
|
||||
## Updating
|
||||
* Make sure you have write access to process and store the YABs outputs.
|
||||
|
||||
If you already have at least version 2.0 installed:
|
||||
|
||||
* Run `git clone https://github.com/cp6/my-idlers.git`
|
||||
* Run `composer install`
|
||||
* Run `composer update`
|
||||
* Run `php artisan migrate`
|
||||
* Run `php artisan route:cache`
|
||||
* Run `php artisan cache:clear`
|
||||
|
||||
## Run using Docker
|
||||
|
||||
```
|
||||
docker run \
|
||||
-p 8000:8000\
|
||||
-e APP_URL=https://... \
|
||||
-e DB_HOST=... \
|
||||
-e DB_DATABASE=... \
|
||||
-e DB_USERNAME=... \
|
||||
-e DB_PASSWORD=... \
|
||||
ghcr.io/cp6/my-idlers:latest
|
||||
docker exec ... php artisan migrate:fresh --seed --force # Set up database one time
|
||||
```
|
||||
|
||||
## Managed Hosting
|
||||
|
||||
Run with a single click on [PikaPods.com](https://www.pikapods.com/)
|
||||
|
||||
[](https://www.pikapods.com/pods?run=my-idlers)
|
||||
|
||||
## Adding a YABS benchmark
|
||||
|
||||
yabs.sh now has JSON formatted response and can POST the output directly from calling the script.
|
||||
|
||||
With My idlers you can use your API key and the server id to directly POST the benchmark result
|
||||
|
||||
`https://yourdomain.com/api/yabs/SERVERID/USERAPIKEYISHERE`
|
||||
|
||||
Example yabs.sh call to POST the result:
|
||||
|
||||
`curl -sL yabs.sh | bash -s -- -s "https://yourdomain.com/api/yabs/SERVERID/USERAPIKEYISHERE"`
|
||||
|
||||
## Credits
|
||||
|
||||
IP who is data provided by [ipwhois.io](https://ipwhois.io/documentation)
|
||||
|
||||
## API endpoints
|
||||
|
||||
For GET requests the header must have `Accept: application/json` and your API token (found at `/account`)
|
||||
|
||||
`Authorization : Bearer API_TOKEN_HERE`
|
||||
|
||||
All API requests must be appended with `api/` e.g `mydomain.com/api/servers/gYk8J0a7`
|
||||
|
||||
**GET request:**
|
||||
|
||||
`dns/`
|
||||
|
||||
`dns/{id}`
|
||||
|
||||
`domains/`
|
||||
|
||||
`domains/{id}`
|
||||
|
||||
`servers`
|
||||
|
||||
`servers/{id}`
|
||||
|
||||
`labels/`
|
||||
|
||||
`labels/{id}`
|
||||
|
||||
`locations/`
|
||||
|
||||
`locations/{id}`
|
||||
|
||||
`misc/`
|
||||
|
||||
`misc/{id}`
|
||||
|
||||
`networkSpeeds/`
|
||||
|
||||
`networkSpeeds/{id}`
|
||||
|
||||
`os/`
|
||||
|
||||
`os/{id}`
|
||||
|
||||
`pricing/`
|
||||
|
||||
`pricing/{id}`
|
||||
|
||||
`providers/`
|
||||
|
||||
`providers/{id}`
|
||||
|
||||
`reseller/`
|
||||
|
||||
`reseller/{id}`
|
||||
|
||||
`seedbox/`
|
||||
|
||||
`seedbox/{id}`
|
||||
|
||||
`settings/`
|
||||
|
||||
`shared/`
|
||||
|
||||
`shared/{id}`
|
||||
|
||||
`note/{id}`
|
||||
|
||||
**POST requests**
|
||||
|
||||
Create a server
|
||||
|
||||
`/servers`
|
||||
|
||||
Body content template
|
||||
|
||||
```json
|
||||
{
|
||||
"active": 1,
|
||||
"show_public": 0,
|
||||
"hostname": "test.domain.com",
|
||||
"ns1": "ns1",
|
||||
"ns2": "ns2",
|
||||
"server_type": 1,
|
||||
"os_id": 2,
|
||||
"provider_id": 10,
|
||||
"location_id": 15,
|
||||
"ssh_port": 22,
|
||||
"bandwidth": 2000,
|
||||
"ram": 2024,
|
||||
"ram_type": "MB",
|
||||
"ram_as_mb": 2024,
|
||||
"disk": 30,
|
||||
"disk_type": "GB",
|
||||
"disk_as_gb": 30,
|
||||
"cpu": 2,
|
||||
"has_yabs": 0,
|
||||
"was_promo": 1,
|
||||
"ip1": "127.0.0.1",
|
||||
"ip2": null,
|
||||
"owned_since": "2022-01-01",
|
||||
"currency": "USD",
|
||||
"price": 4.00,
|
||||
"payment_term": 1,
|
||||
"as_usd": 4.00,
|
||||
"usd_per_month": 4.00,
|
||||
"next_due_date": "2022-02-01"
|
||||
}
|
||||
```
|
||||
|
||||
**PUT requests**
|
||||
|
||||
Update a server
|
||||
|
||||
`/servers/ID`
|
||||
|
||||
Body content template
|
||||
|
||||
```json
|
||||
{
|
||||
"active": 1,
|
||||
"show_public": 0,
|
||||
"hostname": "test.domain.com",
|
||||
"ns1": "ns1",
|
||||
"ns2": "ns2",
|
||||
"server_type": 1,
|
||||
"os_id": 2,
|
||||
"provider_id": 10,
|
||||
"location_id": 15,
|
||||
"ssh_port": 22,
|
||||
"bandwidth": 2000,
|
||||
"ram": 2024,
|
||||
"ram_type": "MB",
|
||||
"ram_as_mb": 2024,
|
||||
"disk": 30,
|
||||
"disk_type": "GB",
|
||||
"disk_as_gb": 30,
|
||||
"cpu": 2,
|
||||
"has_yabs": 0,
|
||||
"was_promo": 1,
|
||||
"owned_since": "2022-01-01"
|
||||
}
|
||||
```
|
||||
|
||||
Update pricing
|
||||
|
||||
`/pricing/ID`
|
||||
|
||||
Body content template
|
||||
|
||||
```json
|
||||
{
|
||||
"price": 10.50,
|
||||
"currency": "USD",
|
||||
"term": 1
|
||||
}
|
||||
```
|
||||
|
||||
**DELETE requests**
|
||||
|
||||
Delete a server
|
||||
|
||||
`/servers/ID`
|
||||
|
||||
## Notes
|
||||
|
||||
**Public viewable listings**
|
||||
|
||||
If enabled the public viewable table for your server listings is at `/servers/public`
|
||||
You can configure what you want viewable at ```/settings```
|
||||
|
||||
**Due date / due soon**
|
||||
|
||||
This is simply just a reminder. If the homepage is requested (viewed) when a service is over due date it will get reset
|
||||
to plus the term from the old due date.
|
||||
|
||||
E.g if the term is a month then the due date gets updated to be 1 month from the old due date.
|
||||
|
||||
**Supporting YABS commands:**
|
||||
|
||||
```curl -sL yabs.sh | bash```
|
||||
|
||||
**There is no authentication provided!**
|
||||
Either use on a local network or put behind authentication.
|
||||
|
||||
**Supporting YABS commands:**
|
||||
|
||||
```curl -sL yabs.sh | bash```
|
||||
|
||||
or
|
||||
|
||||
```curl -sL yabs.sh | bash -s -- -r```
|
||||
|
||||
Logo icons created by Freepik - Flaticon
|
||||
**Make sure YABs output starts at the first line which is:**
|
||||
|
||||
## Screenshots for v2
|
||||
```# ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #```
|
||||
|
||||
[](https://cdn.write.corbpie.com/wp-content/uploads/2022/03/My-idlers-v2-home-2.jpg)
|
||||
|
||||
**A trimmed Bootstrap is used.** Only the used classes and elements are in ```style.css```
|
||||
Therefore adding more obscure columns or Bootstrap classes will not initially work as intended until you put this source css into ```style.css```.
|
||||
|
||||
[](https://cdn.write.corbpie.com/wp-content/uploads/2022/03/My-idlers-v2-server-view.jpg)
|
||||
**Auto complete provider & location are text inputs!** This means that if your choice isn't there then simply type it out
|
||||
and upon form submission it gets added to the pool to choose from next time.
|
||||
|
||||
[](https://cdn.write.corbpie.com/wp-content/uploads/2022/03/My-idlers-v2-servers-home.jpg)
|
||||
### Screenshots
|
||||
|
||||
[](https://cdn.write.corbpie.com/wp-content/uploads/2022/03/My-idlers-v2-YABs.jpg)
|
||||
[](https://cdn.write.corbpie.com/wp-content/uploads/2021/01/my-idlers-self-hosted-server-domain-information-data.jpg)
|
||||
|
||||
[](https://cdn.write.corbpie.com/wp-content/uploads/2022/03/My-idlers-v2-add-server_2.png)
|
||||
|
||||
[](https://cdn.write.corbpie.com/wp-content/uploads/2022/03/My-idlers-v2-servers-compare.jpg)
|
||||
[](https://cdn.write.corbpie.com/wp-content/uploads/2021/01/my-idlers-self-hosted-server-domain-information-data-MORE-1.1.jpg)
|
||||
|
||||
[](https://cdn.write.corbpie.com/wp-content/uploads/2022/03/My-idlers-v2-Ips.jpg)
|
||||
|
||||
[](https://cdn.write.corbpie.com/wp-content/uploads/2022/03/My-idlers-v2-labels.jpg)
|
||||
[](https://cdn.write.corbpie.com/wp-content/uploads/2021/01/my-idlers-self-hosted-server-domain-information-data-EDIT-1.1.jpg)
|
||||
|
||||
|
||||
[](https://cdn.write.corbpie.com/wp-content/uploads/2021/01/my-idlers-self-hosted-server-domain-information-order-table.png)
|
||||
|
||||
|
||||
[](https://cdn.write.corbpie.com/wp-content/uploads/2021/01/my-idlers-self-hosted-server-domain-information-tally-card.png)
|
||||
|
||||
[](https://cdn.write.corbpie.com/wp-content/uploads/2021/01/my-idlers-self-hosted-server-domain-information-data-table-view.png)
|
||||
|
||||
|
||||
[](https://cdn.write.corbpie.com/wp-content/uploads/2021/01/my-idlers-self-hosted-server-domain-information-auto-location.gif)
|
||||
|
||||
|
||||
[](https://cdn.write.corbpie.com/wp-content/uploads/2021/01/my-idlers-self-hosted-server-domain-information-auto-provider.gif)
|
||||
|
||||
|
||||
[](https://cdn.write.corbpie.com/wp-content/uploads/2021/01/my-idlers-self-hosted-server-domain-information-ips-from-hostname.gif)
|
||||
|
||||
|
||||
[](https://cdn.write.corbpie.com/wp-content/uploads/2021/01/my-idlers-self-hosted-server-domain-information-ping-up-feature.gif)
|
||||
|
||||
|
||||
[](https://cdn.write.corbpie.com/wp-content/uploads/2021/01/my-idlers-self-hosted-server-domain-information-table-view.gif)
|
||||
|
||||
|
|
|
@ -1,33 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use Illuminate\Console\Command;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class CreateDatabaseCommand extends Command
|
||||
{
|
||||
protected $signature = 'make:database {name}';
|
||||
|
||||
protected $description = 'Creates my_idlers database';
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
public function handle()
|
||||
{
|
||||
$schemaName = $this->argument('name') ?: config("database.connections.mysql.database");
|
||||
$charset = config("database.connections.mysql.charset",'utf8mb4');
|
||||
$collation = config("database.connections.mysql.collation",'utf8mb4_unicode_ci');
|
||||
|
||||
config(["database.connections.mysql.database" => null]);
|
||||
|
||||
$query = "CREATE DATABASE IF NOT EXISTS $schemaName CHARACTER SET $charset COLLATE $collation;";
|
||||
|
||||
DB::statement($query);
|
||||
|
||||
config(["database.connections.mysql.database" => $schemaName]);
|
||||
}
|
||||
}
|
|
@ -1,41 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Console;
|
||||
|
||||
use Illuminate\Console\Scheduling\Schedule;
|
||||
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
|
||||
|
||||
class Kernel extends ConsoleKernel
|
||||
{
|
||||
/**
|
||||
* The Artisan commands provided by your application.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $commands = [
|
||||
//
|
||||
];
|
||||
|
||||
/**
|
||||
* Define the application's command schedule.
|
||||
*
|
||||
* @param \Illuminate\Console\Scheduling\Schedule $schedule
|
||||
* @return void
|
||||
*/
|
||||
protected function schedule(Schedule $schedule)
|
||||
{
|
||||
// $schedule->command('inspire')->hourly();
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the commands for the application.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function commands()
|
||||
{
|
||||
$this->load(__DIR__.'/Commands');
|
||||
|
||||
require base_path('routes/console.php');
|
||||
}
|
||||
}
|
|
@ -1,40 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Exceptions;
|
||||
|
||||
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
|
||||
use Throwable;
|
||||
|
||||
class Handler extends ExceptionHandler
|
||||
{
|
||||
/**
|
||||
* A list of the exception types that are not reported.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $dontReport = [
|
||||
//
|
||||
];
|
||||
|
||||
/**
|
||||
* A list of the inputs that are never flashed for validation exceptions.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $dontFlash = [
|
||||
'password',
|
||||
'password_confirmation',
|
||||
];
|
||||
|
||||
/**
|
||||
* Register the exception handling callbacks for the application.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function register()
|
||||
{
|
||||
$this->reportable(function (Throwable $e) {
|
||||
//
|
||||
});
|
||||
}
|
||||
}
|
|
@ -1,26 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class AccountController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('account.index');
|
||||
}
|
||||
|
||||
public function update(Request $request)
|
||||
{
|
||||
$user = Auth::user();
|
||||
$user->name = $request->name;
|
||||
$user->email = $request->email;
|
||||
$user->save();
|
||||
|
||||
return redirect()->route('account.index')
|
||||
->with('success', 'Account Updated Successfully.');
|
||||
}
|
||||
}
|
|
@ -1,510 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Domains;
|
||||
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;
|
||||
use App\Models\Reseller;
|
||||
use App\Models\SeedBoxes;
|
||||
use App\Models\Server;
|
||||
use App\Models\Shared;
|
||||
use App\Models\User;
|
||||
use App\Models\Yabs;
|
||||
use DataTables;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class ApiController extends Controller
|
||||
{
|
||||
protected function getAllServers()
|
||||
{
|
||||
$servers = Server::allServers()->toJson(JSON_PRETTY_PRINT);
|
||||
return response($servers, 200);
|
||||
}
|
||||
|
||||
protected function getServer($id)
|
||||
{
|
||||
$server = Server::server($id)->toJson(JSON_PRETTY_PRINT);
|
||||
return response($server, 200);
|
||||
}
|
||||
|
||||
protected function getAllPricing()
|
||||
{
|
||||
$pricing = Pricing::all()->toJson(JSON_PRETTY_PRINT);
|
||||
return response($pricing, 200);
|
||||
}
|
||||
|
||||
protected function getPricing($id)
|
||||
{
|
||||
$pricing = Pricing::where('id', $id)
|
||||
->get()->toJson(JSON_PRETTY_PRINT);
|
||||
return response($pricing, 200);
|
||||
}
|
||||
|
||||
protected function getAllNetworkSpeeds()
|
||||
{
|
||||
$ns = NetworkSpeed::all()->toJson(JSON_PRETTY_PRINT);
|
||||
return response($ns, 200);
|
||||
}
|
||||
|
||||
protected function getNetworkSpeeds($id)
|
||||
{
|
||||
$ns = NetworkSpeed::where('server_id', $id)
|
||||
->get()->toJson(JSON_PRETTY_PRINT);
|
||||
return response($ns, 200);
|
||||
}
|
||||
|
||||
protected function getAllLabels()
|
||||
{
|
||||
$labels = Labels::all()->toJson(JSON_PRETTY_PRINT);
|
||||
return response($labels, 200);
|
||||
}
|
||||
|
||||
protected function getLabel($id)
|
||||
{
|
||||
$label = Labels::where('id', $id)
|
||||
->get()->toJson(JSON_PRETTY_PRINT);
|
||||
return response($label, 200);
|
||||
}
|
||||
|
||||
protected function getAllShared()
|
||||
{
|
||||
$shared = Shared::allSharedHosting()->toJson(JSON_PRETTY_PRINT);
|
||||
return response($shared, 200);
|
||||
}
|
||||
|
||||
protected function getShared($id)
|
||||
{
|
||||
$shared = Shared::sharedHosting($id)->toJson(JSON_PRETTY_PRINT);
|
||||
return response($shared, 200);
|
||||
}
|
||||
|
||||
protected function getAllReseller()
|
||||
{
|
||||
$reseller = Reseller::allResellerHosting()->toJson(JSON_PRETTY_PRINT);
|
||||
return response($reseller, 200);
|
||||
}
|
||||
|
||||
protected function getReseller($id)
|
||||
{
|
||||
$reseller = Reseller::resellerHosting($id)->toJson(JSON_PRETTY_PRINT);
|
||||
return response($reseller, 200);
|
||||
}
|
||||
|
||||
protected function getAllSeedbox()
|
||||
{
|
||||
$reseller = SeedBoxes::allSeedboxes()->toJson(JSON_PRETTY_PRINT);
|
||||
return response($reseller, 200);
|
||||
}
|
||||
|
||||
protected function getSeedbox($id)
|
||||
{
|
||||
$reseller = SeedBoxes::seedbox($id)->toJson(JSON_PRETTY_PRINT);
|
||||
return response($reseller, 200);
|
||||
}
|
||||
|
||||
protected function getAllDomains()
|
||||
{
|
||||
$domains = Domains::allDomains()->toJson(JSON_PRETTY_PRINT);
|
||||
return response($domains, 200);
|
||||
}
|
||||
|
||||
protected function getDomains($id)
|
||||
{
|
||||
$domain = Domains::domain($id)->toJson(JSON_PRETTY_PRINT);
|
||||
return response($domain, 200);
|
||||
}
|
||||
|
||||
protected function getAllMisc()
|
||||
{
|
||||
$misc = Misc::allMisc()->toJson(JSON_PRETTY_PRINT);
|
||||
return response($misc, 200);
|
||||
}
|
||||
|
||||
protected function getMisc($id)
|
||||
{
|
||||
$misc = Misc::misc($id)->toJson(JSON_PRETTY_PRINT);
|
||||
return response($misc, 200);
|
||||
}
|
||||
|
||||
protected function getAllDns()
|
||||
{
|
||||
$dns = DB::table('d_n_s')
|
||||
->get()->toJson(JSON_PRETTY_PRINT);
|
||||
return response($dns, 200);
|
||||
}
|
||||
|
||||
protected function getDns($id)
|
||||
{
|
||||
$dns = DB::table('d_n_s')
|
||||
->where('id', $id)
|
||||
->get()->toJson(JSON_PRETTY_PRINT);
|
||||
return response($dns, 200);
|
||||
}
|
||||
|
||||
protected function getAllLocations()
|
||||
{
|
||||
$locations = DB::table('locations')
|
||||
->get()->toJson(JSON_PRETTY_PRINT);
|
||||
return response($locations, 200);
|
||||
}
|
||||
|
||||
protected function getLocation($id)
|
||||
{
|
||||
$location = DB::table('locations')
|
||||
->where('id', $id)
|
||||
->get()->toJson(JSON_PRETTY_PRINT);
|
||||
return response($location, 200);
|
||||
}
|
||||
|
||||
protected function getAllProviders()
|
||||
{
|
||||
$providers = DB::table('providers')
|
||||
->get()->toJson(JSON_PRETTY_PRINT);
|
||||
return response($providers, 200);
|
||||
}
|
||||
|
||||
protected function getProvider($id)
|
||||
{
|
||||
$providers = DB::table('providers')
|
||||
->where('id', $id)
|
||||
->get()->toJson(JSON_PRETTY_PRINT);
|
||||
return response($providers, 200);
|
||||
}
|
||||
|
||||
protected function getAllSettings()
|
||||
{
|
||||
$settings = DB::table('settings')
|
||||
->get()->toJson(JSON_PRETTY_PRINT);
|
||||
return response($settings, 200);
|
||||
}
|
||||
|
||||
protected function getAllOs()
|
||||
{
|
||||
$os = OS::allOS()->toJson(JSON_PRETTY_PRINT);
|
||||
return response($os, 200);
|
||||
}
|
||||
|
||||
protected function getOs($id)
|
||||
{
|
||||
$os = DB::table('os as o')
|
||||
->where('o.id', $id)
|
||||
->get()->toJson(JSON_PRETTY_PRINT);
|
||||
return response($os, 200);
|
||||
}
|
||||
|
||||
protected function getAllIPs()
|
||||
{
|
||||
$ip = IPs::all()->toJson(JSON_PRETTY_PRINT);
|
||||
return response($ip, 200);
|
||||
}
|
||||
|
||||
protected function getIP($id)
|
||||
{
|
||||
$ip = DB::table('ips as i')
|
||||
->where('i.id', $id)
|
||||
->get()->toJson(JSON_PRETTY_PRINT);
|
||||
return response($ip, 200);
|
||||
}
|
||||
|
||||
public function getAllProvidersTable(Request $request)
|
||||
{
|
||||
if ($request->ajax()) {
|
||||
$data = Providers::latest()->get();
|
||||
$dt = Datatables::of($data)
|
||||
->addIndexColumn()
|
||||
->addColumn('action', function ($row) {
|
||||
$actionBtn = '<form action="' . route('providers.destroy', $row['id']) . '" method="POST"><i class="fas fa-trash text-danger ms-3" @click="modalForm" id="btn-' . $row['name'] . '" title="' . $row['id'] . '"></i> </form>';
|
||||
return $actionBtn;
|
||||
})
|
||||
->rawColumns(['action'])
|
||||
->make(true);
|
||||
return $dt;
|
||||
}
|
||||
}
|
||||
|
||||
protected function checkHostIsUp(string $hostname)
|
||||
{//Check if host/ip is "up"
|
||||
($fp = @fsockopen($hostname, 80, $errCode, $errStr, 1)) ? $result = true : $result = false;
|
||||
if ($fp) {
|
||||
@fclose($fp);
|
||||
}
|
||||
return response(array('is_online' => $result), 200);
|
||||
}
|
||||
|
||||
protected function getIpForDomain(string $domainname, string $type)
|
||||
{//Gets IP from A record for a domain
|
||||
switch ($type) {
|
||||
case "A":
|
||||
$data = dns_get_record($domainname, DNS_A);
|
||||
if (isset($data['0']['ip'])) {
|
||||
return response(array('ip' => $data['0']['ip']), 200);
|
||||
}
|
||||
break;
|
||||
case "AAAA":
|
||||
$data = dns_get_record($domainname, DNS_AAAA);
|
||||
if (isset($data['0']['ipv6'])) {
|
||||
return response(array('ip' => $data['0']['ipv6']), 200);
|
||||
}
|
||||
break;
|
||||
}
|
||||
return response(array('ip' => null), 200);
|
||||
}
|
||||
|
||||
protected function storeServer(Request $request)
|
||||
{
|
||||
$rules = [
|
||||
'hostname' => 'min:3',
|
||||
'server_type' => 'required|integer',
|
||||
'os_id' => 'required|integer',
|
||||
'provider_id' => 'required|integer',
|
||||
'location_id' => 'required|integer',
|
||||
'ssh_port' => 'required|integer',
|
||||
'ram' => 'required|integer',
|
||||
'ram_as_mb' => 'required|integer',
|
||||
'disk' => 'required|integer',
|
||||
'disk_as_gb' => 'required|integer',
|
||||
'cpu' => 'required|integer',
|
||||
'bandwidth' => 'required|integer',
|
||||
'was_promo' => 'required|integer',
|
||||
'active' => 'required|integer',
|
||||
'show_public' => 'required|integer',
|
||||
'ip1' => 'ip',
|
||||
'ip2' => 'ip',
|
||||
'owned_since' => 'required|date',
|
||||
'ram_type' => 'required|string|size:2',
|
||||
'disk_type' => 'required|string|size:2',
|
||||
'currency' => 'required|string|size:3',
|
||||
'price' => 'required|numeric',
|
||||
'payment_term' => 'required|integer',
|
||||
'next_due_date' => 'date',
|
||||
];
|
||||
|
||||
$messages = [
|
||||
'required' => ':attribute is required',
|
||||
'min' => ':attribute must be longer than 3',
|
||||
'integer' => ':attribute must be an integer',
|
||||
'string' => ':attribute must be a string',
|
||||
'size' => ':attribute must be exactly :size characters',
|
||||
'numeric' => ':attribute must be a float',
|
||||
'ip' => ':attribute must be a valid IP address',
|
||||
'date' => ':attribute must be a date Y-m-d',
|
||||
];
|
||||
|
||||
$validator = Validator::make($request->all(), $rules, $messages);
|
||||
|
||||
if ($validator->fails()) {
|
||||
return response()->json(['result' => 'fail', 'messages' => $validator->messages()], 400);
|
||||
}
|
||||
|
||||
$server_id = Str::random(8);
|
||||
|
||||
$pricing = new Pricing();
|
||||
$pricing->insertPricing(1, $server_id, $request->currency, $request->price, $request->payment_term, $request->next_due_date);
|
||||
|
||||
if (!is_null($request->ip1)) {
|
||||
IPs::insertIP($server_id, $request->ip1);
|
||||
}
|
||||
|
||||
if (!is_null($request->ip2)) {
|
||||
IPs::insertIP($server_id, $request->ip2);
|
||||
}
|
||||
|
||||
$insert = Server::create([
|
||||
'id' => $server_id,
|
||||
'hostname' => $request->hostname,
|
||||
'server_type' => $request->server_type,
|
||||
'os_id' => $request->os_id,
|
||||
'ssh_port' => $request->ssh_port,
|
||||
'provider_id' => $request->provider_id,
|
||||
'location_id' => $request->location_id,
|
||||
'ram' => $request->ram,
|
||||
'ram_type' => $request->ram_type,
|
||||
'ram_as_mb' => ($request->ram_type === 'MB') ? $request->ram : ($request->ram * 1024),
|
||||
'disk' => $request->disk,
|
||||
'disk_type' => $request->disk_type,
|
||||
'disk_as_gb' => ($request->disk_type === 'GB') ? $request->disk : ($request->disk * 1024),
|
||||
'owned_since' => $request->owned_since,
|
||||
'ns1' => $request->ns1,
|
||||
'ns2' => $request->ns2,
|
||||
'bandwidth' => $request->bandwidth,
|
||||
'cpu' => $request->cpu,
|
||||
'was_promo' => $request->was_promo,
|
||||
'show_public' => (isset($request->show_public)) ? 1 : 0
|
||||
]);
|
||||
|
||||
Server::serverRelatedCacheForget();
|
||||
|
||||
if ($insert) {
|
||||
return response()->json(array('result' => 'success', 'server_id' => $server_id), 200);
|
||||
}
|
||||
|
||||
return response()->json(array('result' => 'fail', 'request' => $request->post()), 500);
|
||||
}
|
||||
|
||||
public function destroyServer(Request $request)
|
||||
{
|
||||
$items = Server::find($request->id);
|
||||
|
||||
(!is_null($items)) ? $result = $items->delete() : $result = false;
|
||||
|
||||
$p = new Pricing();
|
||||
$p->deletePricing($request->id);
|
||||
|
||||
Labels::deleteLabelsAssignedTo($request->id);
|
||||
IPs::deleteIPsAssignedTo($request->id);
|
||||
Server::serverRelatedCacheForget();
|
||||
|
||||
if ($result) {
|
||||
return response()->json(array('result' => 'success'), 200);
|
||||
}
|
||||
|
||||
return response()->json(array('result' => 'fail'), 500);
|
||||
}
|
||||
|
||||
public function updateServer(Request $request)
|
||||
{
|
||||
$rules = [
|
||||
'hostname' => 'string|min:3',
|
||||
'server_type' => 'integer',
|
||||
'os_id' => 'integer',
|
||||
'provider_id' => 'integer',
|
||||
'location_id' => 'integer',
|
||||
'ssh_port' => 'integer',
|
||||
'ram' => 'integer',
|
||||
'ram_as_mb' => 'integer',
|
||||
'disk' => 'integer',
|
||||
'disk_as_gb' => 'integer',
|
||||
'cpu' => 'integer',
|
||||
'bandwidth' => 'integer',
|
||||
'was_promo' => 'integer',
|
||||
'active' => 'integer',
|
||||
'show_public' => 'integer',
|
||||
'owned_since' => 'date',
|
||||
'ram_type' => 'string|size:2',
|
||||
'disk_type' => 'string|size:2',
|
||||
'currency' => 'string|size:3',
|
||||
'price' => 'numeric',
|
||||
'payment_term' => 'integer',
|
||||
'next_due_date' => 'date',
|
||||
];
|
||||
|
||||
$messages = [
|
||||
'required' => ':attribute is required',
|
||||
'min' => ':attribute must be longer than 3',
|
||||
'integer' => ':attribute must be an integer',
|
||||
'string' => ':attribute must be a string',
|
||||
'size' => ':attribute must be exactly :size characters',
|
||||
'numeric' => ':attribute must be a float',
|
||||
'date' => ':attribute must be a date Y-m-d',
|
||||
];
|
||||
|
||||
$validator = Validator::make($request->all(), $rules, $messages);
|
||||
|
||||
if ($validator->fails()) {
|
||||
return response()->json(['result' => 'fail', 'messages' => $validator->messages()], 400);
|
||||
}
|
||||
|
||||
$server_update = Server::where('id', $request->id)->update(request()->all());
|
||||
|
||||
Server::serverRelatedCacheForget();
|
||||
Server::serverSpecificCacheForget($request->id);
|
||||
|
||||
if ($server_update) {
|
||||
return response()->json(array('result' => 'success', 'server_id' => $request->id), 200);
|
||||
}
|
||||
|
||||
return response()->json(array('result' => 'fail', 'request' => $request->post()), 500);
|
||||
}
|
||||
|
||||
public function updatePricing(Request $request)
|
||||
{
|
||||
$rules = [
|
||||
'price' => 'required|numeric',
|
||||
'currency' => 'required|string|size:3',
|
||||
'term' => 'required|integer',
|
||||
'active' => 'integer',
|
||||
'next_due_date' => 'date',
|
||||
];
|
||||
|
||||
$messages = [
|
||||
'required' => ':attribute is required',
|
||||
'integer' => ':attribute must be an integer',
|
||||
'string' => ':attribute must be a string',
|
||||
'size' => ':attribute must be exactly :size characters',
|
||||
'numeric' => ':attribute must be a float',
|
||||
'date' => ':attribute must be a date Y-m-d',
|
||||
];
|
||||
|
||||
$validator = Validator::make($request->all(), $rules, $messages);
|
||||
|
||||
if ($validator->fails()) {
|
||||
return response()->json(['result' => 'fail', 'messages' => $validator->messages()], 400);
|
||||
}
|
||||
|
||||
$pricing = new Pricing();
|
||||
|
||||
$request->as_usd = $pricing->convertToUSD($request->price, $request->currency);
|
||||
|
||||
$request->usd_per_month = $pricing->costAsPerMonth($request->as_usd, $request->term);
|
||||
|
||||
$price_update = Pricing::where('id', $request->id)->update(request()->all());
|
||||
|
||||
Cache::forget("all_pricing");
|
||||
Server::serverRelatedCacheForget();
|
||||
|
||||
if ($price_update) {
|
||||
return response()->json(array('result' => 'success', 'server_id' => $request->id), 200);
|
||||
}
|
||||
|
||||
return response()->json(array('result' => 'fail', 'request' => $request->post()), 500);
|
||||
}
|
||||
|
||||
public function storeYabs(Request $request, Server $server, string $key): \Illuminate\Http\JsonResponse
|
||||
{
|
||||
$r = User::where('api_token', $key)->first();
|
||||
if (!isset($r->id)) {
|
||||
return response()->json(['error' => 'Unauthenticated'], 401);
|
||||
}
|
||||
|
||||
$insert = Yabs::insertFromJson($request, $server->id);
|
||||
|
||||
if ($insert) {
|
||||
Cache::forget('all_active_servers');//all servers cache
|
||||
Cache::forget('non_active_servers');//all servers cache
|
||||
Cache::forget('all_yabs');//Forget the all YABS cache
|
||||
return response()->json(array('message' => 'Successfully added YABS'), 200);
|
||||
}
|
||||
|
||||
return response()->json(array('error' => 'Server error'), 500);
|
||||
}
|
||||
|
||||
public function getAllYabs()
|
||||
{
|
||||
$yabs = Yabs::allYabs()->toJson(JSON_PRETTY_PRINT);
|
||||
return response($yabs, 200);
|
||||
}
|
||||
|
||||
protected function getYabs($id)
|
||||
{
|
||||
$yabs = Yabs::yabs($id)->toJson(JSON_PRETTY_PRINT);
|
||||
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');
|
||||
}
|
||||
|
||||
}
|
|
@ -1,59 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\Auth\LoginRequest;
|
||||
use App\Models\User;
|
||||
use App\Providers\RouteServiceProvider;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class AuthenticatedSessionController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display the login view.
|
||||
*
|
||||
* @return \Illuminate\View\View
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
$users = User::all();
|
||||
if ($users->count() === 0) {//Only allow 1 user for this app
|
||||
return redirect('/register');
|
||||
}
|
||||
return view('auth.login');
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle an incoming authentication request.
|
||||
*
|
||||
* @param \App\Http\Requests\Auth\LoginRequest $request
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function store(LoginRequest $request)
|
||||
{
|
||||
$request->authenticate();
|
||||
|
||||
$request->session()->regenerate();
|
||||
|
||||
return redirect()->intended(RouteServiceProvider::HOME);
|
||||
}
|
||||
|
||||
/**
|
||||
* Destroy an authenticated session.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function destroy(Request $request)
|
||||
{
|
||||
Auth::guard('web')->logout();
|
||||
|
||||
$request->session()->invalidate();
|
||||
|
||||
$request->session()->regenerateToken();
|
||||
|
||||
return redirect('/');
|
||||
}
|
||||
}
|
|
@ -1,40 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Providers\RouteServiceProvider;
|
||||
use Illuminate\Foundation\Auth\ConfirmsPasswords;
|
||||
|
||||
class ConfirmPasswordController extends Controller
|
||||
{
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Confirm Password Controller
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This controller is responsible for handling password confirmations and
|
||||
| uses a simple trait to include the behavior. You're free to explore
|
||||
| this trait and override any functions that require customization.
|
||||
|
|
||||
*/
|
||||
|
||||
use ConfirmsPasswords;
|
||||
|
||||
/**
|
||||
* Where to redirect users when the intended url fails.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $redirectTo = RouteServiceProvider::HOME;
|
||||
|
||||
/**
|
||||
* Create a new controller instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('auth');
|
||||
}
|
||||
}
|
|
@ -1,44 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Providers\RouteServiceProvider;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
|
||||
class ConfirmablePasswordController extends Controller
|
||||
{
|
||||
/**
|
||||
* Show the confirm password view.
|
||||
*
|
||||
* @return \Illuminate\View\View
|
||||
*/
|
||||
public function show()
|
||||
{
|
||||
return view('auth.confirm-password');
|
||||
}
|
||||
|
||||
/**
|
||||
* Confirm the user's password.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return mixed
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
if (! Auth::guard('web')->validate([
|
||||
'email' => $request->user()->email,
|
||||
'password' => $request->password,
|
||||
])) {
|
||||
throw ValidationException::withMessages([
|
||||
'password' => __('auth.password'),
|
||||
]);
|
||||
}
|
||||
|
||||
$request->session()->put('auth.password_confirmed_at', time());
|
||||
|
||||
return redirect()->intended(RouteServiceProvider::HOME);
|
||||
}
|
||||
}
|
|
@ -1,27 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Providers\RouteServiceProvider;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class EmailVerificationNotificationController extends Controller
|
||||
{
|
||||
/**
|
||||
* Send a new email verification notification.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
if ($request->user()->hasVerifiedEmail()) {
|
||||
return redirect()->intended(RouteServiceProvider::HOME);
|
||||
}
|
||||
|
||||
$request->user()->sendEmailVerificationNotification();
|
||||
|
||||
return back()->with('status', 'verification-link-sent');
|
||||
}
|
||||
}
|
|
@ -1,23 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Providers\RouteServiceProvider;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class EmailVerificationPromptController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display the email verification prompt.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return mixed
|
||||
*/
|
||||
public function __invoke(Request $request)
|
||||
{
|
||||
return $request->user()->hasVerifiedEmail()
|
||||
? redirect()->intended(RouteServiceProvider::HOME)
|
||||
: view('auth.verify-email');
|
||||
}
|
||||
}
|
|
@ -1,22 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
|
||||
|
||||
class ForgotPasswordController extends Controller
|
||||
{
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Password Reset Controller
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This controller is responsible for handling password reset emails and
|
||||
| includes a trait which assists in sending these notifications from
|
||||
| your application to your users. Feel free to explore this trait.
|
||||
|
|
||||
*/
|
||||
|
||||
use SendsPasswordResetEmails;
|
||||
}
|
|
@ -1,42 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Providers\RouteServiceProvider;
|
||||
use Illuminate\Foundation\Auth\AuthenticatesUsers;
|
||||
|
||||
class LoginController extends Controller
|
||||
{
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Login Controller
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This controller handles authenticating users for the application and
|
||||
| redirecting them to your home screen. The controller uses a trait
|
||||
| to conveniently provide its functionality to your applications.
|
||||
|
|
||||
*/
|
||||
|
||||
use AuthenticatesUsers;
|
||||
|
||||
/**
|
||||
* Where to redirect users after login.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $redirectTo = RouteServiceProvider::HOME;
|
||||
|
||||
/**
|
||||
* Create a new controller instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('guest')->except('logout');
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -1,65 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Auth\Events\PasswordReset;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Facades\Password;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Validation\Rules;
|
||||
|
||||
class NewPasswordController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display the password reset view.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\View\View
|
||||
*/
|
||||
public function create(Request $request)
|
||||
{
|
||||
return view('auth.reset-password', ['request' => $request]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle an incoming new password request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*
|
||||
* @throws \Illuminate\Validation\ValidationException
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'token' => ['required'],
|
||||
'email' => ['required', 'email'],
|
||||
'password' => ['required', 'confirmed', Rules\Password::defaults()],
|
||||
]);
|
||||
|
||||
// Here we will attempt to reset the user's password. If it is successful we
|
||||
// will update the password on an actual user model and persist it to the
|
||||
// database. Otherwise we will parse the error and return the response.
|
||||
$status = Password::reset(
|
||||
$request->only('email', 'password', 'password_confirmation', 'token'),
|
||||
function ($user) use ($request) {
|
||||
$user->forceFill([
|
||||
'password' => Hash::make($request->password),
|
||||
'remember_token' => Str::random(60),
|
||||
])->save();
|
||||
|
||||
event(new PasswordReset($user));
|
||||
}
|
||||
);
|
||||
|
||||
// If the password was successfully reset, we will redirect the user back to
|
||||
// the application's home authenticated view. If there is an error we can
|
||||
// redirect them back to where they came from with their error message.
|
||||
return $status == Password::PASSWORD_RESET
|
||||
? redirect()->route('login')->with('status', __($status))
|
||||
: back()->withInput($request->only('email'))
|
||||
->withErrors(['email' => __($status)]);
|
||||
}
|
||||
}
|
|
@ -1,47 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Password;
|
||||
|
||||
class PasswordResetLinkController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display the password reset link request view.
|
||||
*
|
||||
* @return \Illuminate\View\View
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
return view('auth.forgot-password');
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle an incoming password reset link request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*
|
||||
* @throws \Illuminate\Validation\ValidationException
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'email' => ['required', 'email'],
|
||||
]);
|
||||
|
||||
// We will send the password reset link to this user. Once we have attempted
|
||||
// to send the link, we will examine the response then see the message we
|
||||
// need to show to the user. Finally, we'll send out a proper response.
|
||||
$status = Password::sendResetLink(
|
||||
$request->only('email')
|
||||
);
|
||||
|
||||
return $status == Password::RESET_LINK_SENT
|
||||
? back()->with('status', __($status))
|
||||
: back()->withInput($request->only('email'))
|
||||
->withErrors(['email' => __($status)]);
|
||||
}
|
||||
}
|
|
@ -1,75 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Providers\RouteServiceProvider;
|
||||
use App\Models\User;
|
||||
use Illuminate\Foundation\Auth\RegistersUsers;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class RegisterController extends Controller
|
||||
{
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Register Controller
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This controller handles the registration of new users as well as their
|
||||
| validation and creation. By default this controller uses a trait to
|
||||
| provide this functionality without requiring any additional code.
|
||||
|
|
||||
*/
|
||||
|
||||
use RegistersUsers;
|
||||
|
||||
/**
|
||||
* Where to redirect users after registration.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $redirectTo = RouteServiceProvider::HOME;
|
||||
|
||||
/**
|
||||
* Create a new controller instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('guest');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a validator for an incoming registration request.
|
||||
*
|
||||
* @param array $data
|
||||
* @return \Illuminate\Contracts\Validation\Validator
|
||||
*/
|
||||
protected function validator(array $data)
|
||||
{
|
||||
return Validator::make($data, [
|
||||
'name' => ['required', 'string', 'max:255'],
|
||||
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
|
||||
'password' => ['required', 'string', 'min:8', 'confirmed'],
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new user instance after a valid registration.
|
||||
*
|
||||
* @param array $data
|
||||
* @return \App\Models\User
|
||||
*/
|
||||
protected function create(array $data)
|
||||
{
|
||||
return User::create([
|
||||
'name' => $data['name'],
|
||||
'email' => $data['email'],
|
||||
'password' => Hash::make($data['password']),
|
||||
'api_token' => Str::random(60)
|
||||
]);
|
||||
}
|
||||
}
|
|
@ -1,61 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Settings;
|
||||
use App\Models\User;
|
||||
use App\Providers\RouteServiceProvider;
|
||||
use Illuminate\Auth\Events\Registered;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Validation\Rules;
|
||||
|
||||
class RegisteredUserController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display the registration view.
|
||||
*
|
||||
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector|\Illuminate\View\View
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
$users = User::all();
|
||||
if ($users->count() >= 1) {//Only allow 1 user for this app
|
||||
return redirect('/login');
|
||||
}
|
||||
return view('auth.register');
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle an incoming registration request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*
|
||||
* @throws \Illuminate\Validation\ValidationException
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'name' => ['required', 'string', 'max:255'],
|
||||
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
|
||||
'password' => ['required', 'confirmed', Rules\Password::defaults()],
|
||||
]);
|
||||
|
||||
$user = User::create([
|
||||
'name' => $request->name,
|
||||
'email' => $request->email,
|
||||
'password' => Hash::make($request->password),
|
||||
'api_token' => Str::random(60)
|
||||
]);
|
||||
|
||||
event(new Registered($user));
|
||||
|
||||
Auth::login($user);
|
||||
|
||||
return redirect('/');
|
||||
}
|
||||
}
|
|
@ -1,31 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Providers\RouteServiceProvider;
|
||||
use Illuminate\Foundation\Auth\ResetsPasswords;
|
||||
|
||||
class ResetPasswordController extends Controller
|
||||
{
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Password Reset Controller
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This controller is responsible for handling password reset requests
|
||||
| and uses a simple trait to include this behavior. You're free to
|
||||
| explore this trait and override any methods you wish to tweak.
|
||||
|
|
||||
*/
|
||||
|
||||
use ResetsPasswords;
|
||||
|
||||
/**
|
||||
* Where to redirect users after resetting their password.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $redirectTo = RouteServiceProvider::HOME;
|
||||
|
||||
}
|
|
@ -1,42 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Providers\RouteServiceProvider;
|
||||
use Illuminate\Foundation\Auth\VerifiesEmails;
|
||||
|
||||
class VerificationController extends Controller
|
||||
{
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Email Verification Controller
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This controller is responsible for handling email verification for any
|
||||
| user that recently registered with the application. Emails may also
|
||||
| be re-sent if the user didn't receive the original email message.
|
||||
|
|
||||
*/
|
||||
|
||||
use VerifiesEmails;
|
||||
|
||||
/**
|
||||
* Where to redirect users after verification.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $redirectTo = RouteServiceProvider::HOME;
|
||||
|
||||
/**
|
||||
* Create a new controller instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('auth');
|
||||
$this->middleware('signed')->only('verify');
|
||||
$this->middleware('throttle:6,1')->only('verify', 'resend');
|
||||
}
|
||||
}
|
|
@ -1,30 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Providers\RouteServiceProvider;
|
||||
use Illuminate\Auth\Events\Verified;
|
||||
use Illuminate\Foundation\Auth\EmailVerificationRequest;
|
||||
|
||||
class VerifyEmailController extends Controller
|
||||
{
|
||||
/**
|
||||
* Mark the authenticated user's email address as verified.
|
||||
*
|
||||
* @param \Illuminate\Foundation\Auth\EmailVerificationRequest $request
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function __invoke(EmailVerificationRequest $request)
|
||||
{
|
||||
if ($request->user()->hasVerifiedEmail()) {
|
||||
return redirect()->intended(RouteServiceProvider::HOME.'?verified=1');
|
||||
}
|
||||
|
||||
if ($request->user()->markEmailAsVerified()) {
|
||||
event(new Verified($request->user()));
|
||||
}
|
||||
|
||||
return redirect()->intended(RouteServiceProvider::HOME.'?verified=1');
|
||||
}
|
||||
}
|
|
@ -1,13 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
|
||||
use Illuminate\Foundation\Bus\DispatchesJobs;
|
||||
use Illuminate\Foundation\Validation\ValidatesRequests;
|
||||
use Illuminate\Routing\Controller as BaseController;
|
||||
|
||||
class Controller extends BaseController
|
||||
{
|
||||
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
|
||||
}
|
|
@ -1,137 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\DNS;
|
||||
use App\Models\Labels;
|
||||
use App\Models\Reseller;
|
||||
use App\Models\Server;
|
||||
use App\Models\Domains;
|
||||
use App\Models\Shared;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class DNSController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$dn = DB::table('d_n_s')->get();
|
||||
return view('dns.index', compact(['dn']));
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
$Servers = Server::all();
|
||||
$Domains = Domains::all();
|
||||
$Shareds = Shared::all();
|
||||
$Resellers = Reseller::all();
|
||||
return view('dns.create', compact(['Servers', 'Domains', 'Shareds', 'Resellers']));
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'hostname' => 'required|string|min:2',
|
||||
'address' => 'required|string|min:2',
|
||||
'dns_type' => 'required|string',
|
||||
'label1' => 'sometimes|nullable|string',
|
||||
'label2' => 'sometimes|nullable|string',
|
||||
'label3' => 'sometimes|nullable|string',
|
||||
'label4' => 'sometimes|nullable|string',
|
||||
]);
|
||||
|
||||
$dns_id = Str::random(8);
|
||||
|
||||
DNS::create([
|
||||
'id' => $dns_id,
|
||||
'hostname' => $request->hostname,
|
||||
'dns_type' => $request->dns_type,
|
||||
'address' => $request->address,
|
||||
'server_id' => ($request->server_id !== 'null') ? $request->server_id : null,
|
||||
'shared_id' => ($request->shared_id !== 'null') ? $request->shared_id : null,
|
||||
'reseller_id' => ($request->reseller_id !== 'null') ? $request->reseller_id : null,
|
||||
'domain_id' => ($request->domain_id !== 'null') ? $request->domain_id : null
|
||||
]);
|
||||
|
||||
Labels::insertLabelsAssigned([$request->label1, $request->label2, $request->label3, $request->label4], $dns_id);
|
||||
|
||||
Cache::forget('dns_count');
|
||||
|
||||
return redirect()->route('dns.index')
|
||||
->with('success', 'DNS Created Successfully.');
|
||||
}
|
||||
|
||||
public function show(DNS $dn)
|
||||
{
|
||||
$dns = DNS::findOrFail($dn->id);
|
||||
|
||||
$labels = DB::table('labels_assigned as l')
|
||||
->join('labels', 'l.label_id', 'labels.id')
|
||||
->where('l.service_id', $dn->id)
|
||||
->get(['labels.label']);
|
||||
|
||||
return view('dns.show', compact(['dn', 'dns', 'labels']));
|
||||
}
|
||||
|
||||
public function edit(DNS $dn)
|
||||
{
|
||||
$Servers = Server::all();
|
||||
$Domains = Domains::all();
|
||||
$Shareds = Shared::all();
|
||||
$Resellers = Reseller::all();
|
||||
$dn = DNS::findOrFail($dn->id);
|
||||
$labels = DB::table('labels_assigned as l')
|
||||
->join('labels', 'l.label_id', 'labels.id')
|
||||
->where('l.service_id', $dn->id)
|
||||
->get(['labels.id']);
|
||||
|
||||
return view('dns.edit', compact(['dn', 'labels', 'Servers', 'Domains', 'Shareds', 'Resellers']));
|
||||
}
|
||||
|
||||
public function update(Request $request, DNS $dn): \Illuminate\Http\RedirectResponse
|
||||
{
|
||||
$request->validate([
|
||||
'hostname' => 'required|string|min:2',
|
||||
'address' => 'required|string|min:2',
|
||||
'dns_type' => 'required|string',
|
||||
'label1' => 'sometimes|nullable|string',
|
||||
'label2' => 'sometimes|nullable|string',
|
||||
'label3' => 'sometimes|nullable|string',
|
||||
'label4' => 'sometimes|nullable|string',
|
||||
]);
|
||||
|
||||
$dn->update([
|
||||
'hostname' => $request->hostname,
|
||||
'dns_type' => $request->dns_type,
|
||||
'address' => $request->address,
|
||||
'server_id' => ($request->server_id !== 'null') ? $request->server_id : null,
|
||||
'shared_id' => ($request->shared_id !== 'null') ? $request->shared_id : null,
|
||||
'reseller_id' => ($request->reseller_id !== 'null') ? $request->reseller_id : null,
|
||||
'domain_id' => ($request->domain_id !== 'null') ? $request->domain_id : null
|
||||
]);
|
||||
|
||||
Labels::deleteLabelsAssignedTo($dn->id);
|
||||
|
||||
Labels::insertLabelsAssigned([$request->label1, $request->label2, $request->label3, $request->label4], $dn->id);
|
||||
|
||||
return redirect()->route('dns.index')
|
||||
->with('success', 'DNS updated Successfully.');
|
||||
}
|
||||
|
||||
public function destroy(DNS $dn): \Illuminate\Http\RedirectResponse
|
||||
{
|
||||
if ( $dn->delete()){
|
||||
Cache::forget('dns_count');
|
||||
|
||||
Labels::deleteLabelsAssignedTo($dn->id);
|
||||
|
||||
return redirect()->route('dns.index')
|
||||
->with('success', 'DNS was deleted Successfully.');
|
||||
}
|
||||
|
||||
return redirect()->route('dns.index')
|
||||
->with('error', 'DNS was not deleted.');
|
||||
}
|
||||
}
|
|
@ -1,11 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\DiskSpeed;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class DiskSpeedController extends Controller
|
||||
{
|
||||
|
||||
}
|
|
@ -1,148 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Domains;
|
||||
use App\Models\Home;
|
||||
use App\Models\Labels;
|
||||
use App\Models\Pricing;
|
||||
use App\Models\Providers;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class DomainsController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$domains = Domains::allDomains();
|
||||
return view('domains.index', compact(['domains']));
|
||||
}
|
||||
|
||||
public function show(Domains $domain)
|
||||
{//Need to modern
|
||||
$domain_info = Domains::domain($domain->id);
|
||||
return view('domains.show', compact(['domain_info']));
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
return view('domains.create');
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'domain' => 'required|string|min:2',
|
||||
'extension' => 'required|string|min:2',
|
||||
'ns1' => 'sometimes|nullable|min:2',
|
||||
'ns2' => 'sometimes|nullable|min:2',
|
||||
'ns3' => 'sometimes|nullable|min:2',
|
||||
'provider_id' => 'integer',
|
||||
'payment_term' => 'integer',
|
||||
'price' => 'numeric',
|
||||
'next_due_date' => 'required|date',
|
||||
'owned_since' => 'sometimes|nullable|date',
|
||||
'label1' => 'sometimes|nullable|string',
|
||||
'label2' => 'sometimes|nullable|string',
|
||||
'label3' => 'sometimes|nullable|string',
|
||||
'label4' => 'sometimes|nullable|string',
|
||||
]);
|
||||
|
||||
$domain_id = Str::random(8);
|
||||
$pricing = new Pricing();
|
||||
$pricing->insertPricing(4, $domain_id, $request->currency, $request->price, $request->payment_term, $request->next_due_date);
|
||||
|
||||
Domains::create([
|
||||
'id' => $domain_id,
|
||||
'domain' => $request->domain,
|
||||
'extension' => $request->extension,
|
||||
'ns1' => $request->ns1,
|
||||
'ns2' => $request->ns2,
|
||||
'ns3' => $request->ns3,
|
||||
'provider_id' => $request->provider_id,
|
||||
'owned_since' => $request->owned_since
|
||||
]);
|
||||
|
||||
Labels::insertLabelsAssigned([$request->label1, $request->label2, $request->label3, $request->label4], $domain_id);
|
||||
|
||||
Cache::forget("all_domains");
|
||||
Home::homePageCacheForget();
|
||||
|
||||
return redirect()->route('domains.index')
|
||||
->with('success', 'Domain Created Successfully.');
|
||||
}
|
||||
|
||||
public function edit(Domains $domain)
|
||||
{
|
||||
$domain_info = Domains::domain($domain->id);
|
||||
return view('domains.edit', compact(['domain_info']));
|
||||
}
|
||||
|
||||
public function update(Request $request, Domains $domain)
|
||||
{
|
||||
$request->validate([
|
||||
'domain' => 'required|string|min:2',
|
||||
'extension' => 'required|string|min:2',
|
||||
'ns1' => 'sometimes|nullable|min:2',
|
||||
'ns2' => 'sometimes|nullable|min:2',
|
||||
'ns3' => 'sometimes|nullable|min:2',
|
||||
'provider_id' => 'integer',
|
||||
'payment_term' => 'integer',
|
||||
'price' => 'numeric',
|
||||
'next_due_date' => 'required|date',
|
||||
'owned_since' => 'sometimes|nullable|date',
|
||||
'label1' => 'sometimes|nullable|string',
|
||||
'label2' => 'sometimes|nullable|string',
|
||||
'label3' => 'sometimes|nullable|string',
|
||||
'label4' => 'sometimes|nullable|string',
|
||||
]);
|
||||
|
||||
$pricing = new Pricing();
|
||||
$pricing->updatePricing($domain->id, $request->currency, $request->price, $request->payment_term, $request->next_due_date);
|
||||
|
||||
$domain->update([
|
||||
'domain' => $request->domain,
|
||||
'extension' => $request->extension,
|
||||
'ns1' => $request->ns1,
|
||||
'ns2' => $request->ns2,
|
||||
'ns3' => $request->ns3,
|
||||
'provider_id' => $request->provider_id,
|
||||
'owned_since' => $request->owned_since,
|
||||
'active' => (isset($request->is_active)) ? 1 : 0
|
||||
]);
|
||||
|
||||
Labels::deleteLabelsAssignedTo($domain->id);
|
||||
Labels::insertLabelsAssigned([$request->label1, $request->label2, $request->label3, $request->label4], $domain->id);
|
||||
|
||||
Cache::forget("all_domains");
|
||||
Cache::forget("domain.{$domain->id}");
|
||||
Cache::forget("labels_for_service.{$domain->id}");
|
||||
Home::homePageCacheForget();
|
||||
|
||||
return redirect()->route('domains.index')
|
||||
->with('success', 'Domain Updated Successfully.');
|
||||
}
|
||||
|
||||
public function destroy(Domains $domain)
|
||||
{
|
||||
if ($domain->delete()){
|
||||
$p = new Pricing();
|
||||
$p->deletePricing($domain->id);
|
||||
|
||||
Labels::deleteLabelsAssignedTo($domain->id);
|
||||
|
||||
Cache::forget("all_domains");
|
||||
Cache::forget("domain.{$domain->id}");
|
||||
Home::homePageCacheForget();
|
||||
|
||||
return redirect()->route('domains.index')
|
||||
->with('success', 'Domain was deleted Successfully.');
|
||||
}
|
||||
|
||||
return redirect()->route('domains.index')
|
||||
->with('error', 'Domain was not deleted.');
|
||||
}
|
||||
|
||||
}
|
|
@ -1,71 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\DNS;
|
||||
use App\Models\Home;
|
||||
use App\Models\Labels;
|
||||
use App\Models\Pricing;
|
||||
use App\Models\Settings;
|
||||
use App\Process;
|
||||
use Illuminate\Support\Facades\Session;
|
||||
|
||||
|
||||
class HomeController extends Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('auth');
|
||||
}
|
||||
|
||||
public function index()
|
||||
{
|
||||
$p = new Process();
|
||||
$p->startTimer();
|
||||
|
||||
//Get & set the settings, 1 minute cache
|
||||
$settings = Settings::getSettings();
|
||||
Settings::setSettingsToSession($settings);
|
||||
|
||||
//Check for past due date and refresh the due date if so:
|
||||
$due_soon = Home::doDueSoon(Home::dueSoonData());
|
||||
|
||||
//Orders services most recently added first, cached with limit from settings
|
||||
$recently_added = Home::recentlyAdded();
|
||||
|
||||
//Get count tally for each of the services type
|
||||
$service_count = Home::doServicesCount(Home::servicesCount());
|
||||
|
||||
//Get pricing for weekly, monthly, yearly, 2 yearly
|
||||
$pricing_breakdown = Home::breakdownPricing(Pricing::allPricing());
|
||||
|
||||
//Summary of servers specs
|
||||
$server_summary = Home::serverSummary();
|
||||
|
||||
$p->stopTimer();
|
||||
|
||||
$information = [
|
||||
'servers' => $service_count['servers'],
|
||||
'domains' => $service_count['domains'],
|
||||
'shared' => $service_count['shared'],
|
||||
'reseller' => $service_count['reseller'],
|
||||
'misc' => $service_count['other'],
|
||||
'seedbox' => $service_count['seedbox'],
|
||||
'labels' => Labels::labelsCount(),
|
||||
'dns' => DNS::dnsCount(),
|
||||
'total_services' => $service_count['total'],
|
||||
'total_inactive' => $pricing_breakdown['inactive_count'],
|
||||
'total_cost_weekly' => number_format($pricing_breakdown['total_cost_weekly'], 2),
|
||||
'total_cost_monthly' => number_format($pricing_breakdown['total_cost_monthly'], 2),
|
||||
'total_cost_yearly' => number_format($pricing_breakdown['total_cost_yearly'], 2),
|
||||
'total_cost_2_yearly' => number_format(($pricing_breakdown['total_cost_yearly'] * 2), 2),
|
||||
'due_soon' => $due_soon,
|
||||
'newest' => $recently_added,
|
||||
'execution_time' => number_format($p->getTimeTaken(), 2),
|
||||
'servers_summary' => $server_summary,
|
||||
'currency' => Session::get('dashboard_currency')
|
||||
];
|
||||
|
||||
return view('home', compact('information'));
|
||||
}
|
||||
}
|
|
@ -1,77 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\IPs;
|
||||
use App\Models\Reseller;
|
||||
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
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$ips = IPs::all();
|
||||
return view('ips.index', compact(['ips']));
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
$servers = Server::all();
|
||||
$shareds = Shared::all();
|
||||
$resellers = Reseller::all();
|
||||
$seed_boxes = SeedBoxes::all();
|
||||
return view('ips.create', compact(['servers', 'shareds', 'resellers', 'seed_boxes']));
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'address' => 'required|ip|min:2',
|
||||
'ip_type' => 'required|string|size:4',
|
||||
'service_id' => 'required|string'
|
||||
]);
|
||||
|
||||
$ip_id = Str::random(8);
|
||||
|
||||
$ip = IPs::create([
|
||||
'id' => $ip_id,
|
||||
'address' => $request->address,
|
||||
'is_ipv4' => ($request->ip_type === 'ipv4') ? 1 : 0,
|
||||
'service_id' => $request->service_id,
|
||||
'active' => 1
|
||||
]);
|
||||
|
||||
$fetch = IPs::getUpdateIpInfo($ip);
|
||||
|
||||
return redirect()->route('IPs.index')
|
||||
->with('success', 'IP address created Successfully.');
|
||||
}
|
||||
|
||||
public function destroy(IPs $IP)
|
||||
{
|
||||
if ($IP->delete()) {
|
||||
return redirect()->route('IPs.index')
|
||||
->with('success', 'IP address was deleted Successfully.');
|
||||
}
|
||||
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.');
|
||||
}
|
||||
|
||||
}
|
|
@ -1,73 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Labels;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class LabelsController extends Controller
|
||||
{
|
||||
|
||||
public function index()
|
||||
{
|
||||
$labels = Labels::all();
|
||||
return view('labels.index', compact(['labels']));
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
return view('labels.create');
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'label' => 'required|string|min:2'
|
||||
]);
|
||||
|
||||
Labels::create([
|
||||
'id' => Str::random(8),
|
||||
'label' => $request->label
|
||||
]);
|
||||
|
||||
Cache::forget('all_labels');
|
||||
Cache::forget('labels_count');
|
||||
|
||||
return redirect()->route('labels.index')
|
||||
->with('success', 'Label Created Successfully.');
|
||||
}
|
||||
|
||||
public function show(Labels $label)
|
||||
{
|
||||
$labels = DB::table('labels_assigned as las')
|
||||
->leftJoin('pricings as p', 'las.service_id', 'p.service_id')
|
||||
->leftJoin('servers as s', 'las.service_id', 's.id')
|
||||
->leftJoin('shared_hosting as sh', 'las.service_id', 'sh.id')
|
||||
->leftJoin('reseller_hosting as r', 'las.service_id', 'r.id')
|
||||
->leftJoin('domains as d', 'las.service_id', 'd.id')
|
||||
->where('las.label_id', $label->id)
|
||||
->get(['p.service_type', 'p.service_id', 's.hostname', 'sh.main_domain as shared', 'r.main_domain as reseller', 'd.domain', 'd.extension']);
|
||||
|
||||
return view('labels.show', compact(['label', 'labels']));
|
||||
}
|
||||
|
||||
public function destroy(Labels $label)
|
||||
{
|
||||
if ($label->delete()) {
|
||||
Cache::forget('labels_count');
|
||||
|
||||
Labels::deleteLabelAssignedAs($label->id);
|
||||
|
||||
Cache::forget('all_labels');
|
||||
|
||||
return redirect()->route('labels.index')
|
||||
->with('success', 'Label was deleted Successfully.');
|
||||
}
|
||||
|
||||
return redirect()->route('labels.index')
|
||||
->with('error', 'Label was not deleted.');
|
||||
}
|
||||
}
|
|
@ -1,75 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Locations;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
|
||||
class LocationsController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$locations = Locations::allLocations();
|
||||
return view('locations.index', compact(['locations']));
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
return view('locations.create');
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'location_name' => 'required|string|min:2|max:255'
|
||||
]);
|
||||
|
||||
Locations::create([
|
||||
'name' => $request->location_name
|
||||
]);
|
||||
|
||||
Cache::forget('locations');
|
||||
|
||||
return redirect()->route('locations.index')
|
||||
->with('success', 'Location Created Successfully.');
|
||||
}
|
||||
|
||||
public function show(Locations $location)
|
||||
{
|
||||
$servers = DB::table('servers as s')
|
||||
->where('s.location_id', $location->id)
|
||||
->get(['s.id', 's.hostname'])
|
||||
->toArray();
|
||||
|
||||
$shared = DB::table('shared_hosting as s')
|
||||
->where('s.location_id', $location->id)
|
||||
->get(['s.id', 's.main_domain as main_domain_shared'])
|
||||
->toArray();
|
||||
|
||||
$reseller = DB::table('reseller_hosting as r')
|
||||
->where('r.location_id', $location->id)
|
||||
->get(['r.id', 'r.main_domain as main_domain_reseller'])
|
||||
->toArray();
|
||||
|
||||
$data = array_merge($servers, $shared, $reseller);
|
||||
|
||||
return view('locations.show', compact(['location', 'data']));
|
||||
}
|
||||
|
||||
public function destroy(Locations $location)
|
||||
{
|
||||
if ($location->delete()){
|
||||
Cache::forget('locations');
|
||||
|
||||
return redirect()->route('locations.index')
|
||||
->with('success', 'Location was deleted Successfully.');
|
||||
}
|
||||
|
||||
return redirect()->route('locations.index')
|
||||
->with('error', 'Location was not deleted.');
|
||||
|
||||
}
|
||||
}
|
|
@ -1,111 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Home;
|
||||
use App\Models\Misc;
|
||||
use App\Models\Pricing;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class MiscController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$misc = Misc::allMisc();
|
||||
return view('misc.index', compact(['misc']));
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
return view('misc.create');
|
||||
}
|
||||
|
||||
public function show(Misc $misc)
|
||||
{
|
||||
$misc_data = Misc::misc($misc->id);
|
||||
return view('misc.show', compact(['misc_data']));
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'name' => 'required|string|min:3',
|
||||
'price' => 'required|numeric',
|
||||
'payment_term' => 'required|integer',
|
||||
'currency' => 'required|string|size:3',
|
||||
'owned_since' => 'sometimes|nullable|date',
|
||||
'next_due_date' => 'required|date'
|
||||
]);
|
||||
|
||||
$misc_id = Str::random(8);
|
||||
|
||||
$pricing = new Pricing();
|
||||
$pricing->insertPricing(5, $misc_id, $request->currency, $request->price, $request->payment_term, $request->next_due_date);
|
||||
|
||||
Misc::create([
|
||||
'id' => $misc_id,
|
||||
'name' => $request->name,
|
||||
'owned_since' => $request->owned_since
|
||||
]);
|
||||
|
||||
Cache::forget("all_misc");
|
||||
Home::homePageCacheForget();
|
||||
|
||||
return redirect()->route('misc.index')
|
||||
->with('success', 'Misc service created Successfully.');
|
||||
}
|
||||
|
||||
public function edit(Misc $misc)
|
||||
{
|
||||
$misc_data = Misc::misc($misc->id);
|
||||
return view('misc.edit', compact('misc_data'));
|
||||
}
|
||||
|
||||
public function update(Request $request, Misc $misc)
|
||||
{
|
||||
$request->validate([
|
||||
'name' => 'required|string|min:3',
|
||||
'price' => 'required|numeric',
|
||||
'payment_term' => 'required|integer',
|
||||
'currency' => 'required|string|size:3',
|
||||
'owned_since' => 'sometimes|nullable|date',
|
||||
'next_due_date' => 'required|date'
|
||||
]);
|
||||
|
||||
$misc->update([
|
||||
'name' => $request->name,
|
||||
'owned_since' => $request->owned_since,
|
||||
'active' => (isset($request->is_active)) ? 1 : 0
|
||||
]);
|
||||
|
||||
$pricing = new Pricing();
|
||||
$pricing->updatePricing($misc->id, $request->currency, $request->price, $request->payment_term, $request->next_due_date);
|
||||
|
||||
Cache::forget("all_misc");
|
||||
Cache::forget("misc.{$misc->id}");
|
||||
Home::homePageCacheForget();
|
||||
|
||||
return redirect()->route('misc.index')
|
||||
->with('success', 'Misc service updated Successfully.');
|
||||
}
|
||||
|
||||
public function destroy(Misc $misc)
|
||||
{
|
||||
if ($misc->delete()) {
|
||||
$p = new Pricing();
|
||||
$p->deletePricing($misc->id);
|
||||
|
||||
Cache::forget("all_misc");
|
||||
Cache::forget("misc.{$misc->id}");
|
||||
Home::homePageCacheForget();
|
||||
|
||||
return redirect()->route('misc.index')
|
||||
->with('success', 'Misc service was deleted Successfully.');
|
||||
}
|
||||
|
||||
return redirect()->route('misc.index')
|
||||
->with('error', 'Misc service was not deleted.');
|
||||
}
|
||||
}
|
|
@ -1,10 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\NetworkSpeed;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class NetworkSpeedController extends Controller
|
||||
{
|
||||
}
|
|
@ -1,123 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\DNS;
|
||||
use App\Models\Domains;
|
||||
use App\Models\IPs;
|
||||
use App\Models\Note;
|
||||
use App\Models\Reseller;
|
||||
use App\Models\Server;
|
||||
use App\Models\Shared;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class NoteController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$notes = Note::allNotes();
|
||||
return view('notes.index', compact('notes'));
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
$servers = Server::all();
|
||||
$shareds = Shared::all();
|
||||
$resellers = Reseller::all();
|
||||
$domains = Domains::all();
|
||||
$dns = DNS::all();
|
||||
$ips = IPs::all();
|
||||
|
||||
return view('notes.create', compact(['servers', 'shareds', 'resellers', 'domains', 'dns', 'ips']));
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'service_id' => 'required|string|size:8',
|
||||
'note' => 'required|string',
|
||||
]);
|
||||
|
||||
try {
|
||||
$note_id = Str::random(8);
|
||||
|
||||
$a = Note::create([
|
||||
'id' => $note_id,
|
||||
'service_id' => $request->service_id,
|
||||
'note' => $request->note
|
||||
]);
|
||||
|
||||
} catch (\Exception $e) {
|
||||
|
||||
if ($e->getCode() === "23000") {
|
||||
$message = "A note already exists for this service";
|
||||
} else {
|
||||
$message = "Error inserting note";
|
||||
}
|
||||
|
||||
return redirect()->route('notes.create')
|
||||
->withInput($request->input())->with('error', $message);
|
||||
}
|
||||
|
||||
Cache::forget('all_notes');
|
||||
|
||||
return redirect()->route('notes.index')
|
||||
->with('success', 'Note created successfully.');
|
||||
}
|
||||
|
||||
public function edit(Note $note)
|
||||
{
|
||||
$note = Note::note($note->service_id);
|
||||
$servers = Server::all();
|
||||
$shareds = Shared::all();
|
||||
$resellers = Reseller::all();
|
||||
$domains = Domains::all();
|
||||
$dns = DNS::all();
|
||||
$ips = IPs::all();
|
||||
|
||||
return view('notes.edit', compact(['note', 'servers', 'shareds', 'resellers', 'domains', 'dns', 'ips']));
|
||||
}
|
||||
|
||||
public function update(Request $request, Note $note)
|
||||
{
|
||||
$request->validate([
|
||||
'service_id' => 'required|string|size:8',
|
||||
'note' => 'required|string'
|
||||
]);
|
||||
|
||||
$note->update([
|
||||
'service_id' => $request->service_id,
|
||||
'note' => $request->note
|
||||
]);
|
||||
|
||||
Cache::forget('all_notes');
|
||||
Cache::forget("note.$note->service_id");
|
||||
|
||||
return redirect()->route('notes.index')
|
||||
->with('success', 'Note was updated successfully.');
|
||||
}
|
||||
|
||||
public function show(Note $note)
|
||||
{
|
||||
$note = Note::note($note->service_id);
|
||||
return view('notes.show', compact(['note']));
|
||||
}
|
||||
|
||||
public function destroy(Note $note)
|
||||
{
|
||||
if ($note->delete()) {
|
||||
Cache::forget("all_notes");
|
||||
Cache::forget("note.$note->service_id");
|
||||
|
||||
return redirect()->route('notes.index')
|
||||
->with('success', 'Note was deleted successfully.');
|
||||
}
|
||||
|
||||
return redirect()->route('notes.index')
|
||||
->with('error', 'Note was not deleted.');
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -1,51 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\OS;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
|
||||
class OsController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$os = OS::allOS()->toArray();
|
||||
return view('os.index', compact(['os']));
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
return view('os.create');
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'os_name' => 'required|string|min:2|max:255'
|
||||
]);
|
||||
|
||||
OS::create([
|
||||
'name' => $request->os_name
|
||||
]);
|
||||
|
||||
Cache::forget('operating_systems');
|
||||
|
||||
return redirect()->route('os.index')
|
||||
->with('success', 'OS Created Successfully.');
|
||||
}
|
||||
|
||||
public function destroy(OS $o)
|
||||
{
|
||||
if ($o->delete()) {
|
||||
Cache::forget('operating_systems');
|
||||
|
||||
return redirect()->route('os.index')
|
||||
->with('success', 'OS was deleted Successfully.');
|
||||
}
|
||||
|
||||
return redirect()->route('os.index')
|
||||
->with('error', 'OS was not deleted.');
|
||||
|
||||
}
|
||||
}
|
|
@ -1,11 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Pricing;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class PricingController extends Controller
|
||||
{
|
||||
|
||||
}
|
|
@ -1,59 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Providers;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
|
||||
class ProvidersController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$providers = Providers::allProviders();
|
||||
return view('providers.index', compact(['providers']));
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
return view('providers.create');
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'provider_name' => 'required|string|min:2|max:255'
|
||||
]);
|
||||
|
||||
Providers::create([
|
||||
'name' => $request->provider_name
|
||||
]);
|
||||
|
||||
Cache::forget('providers');
|
||||
|
||||
return redirect()->route('providers.index')
|
||||
->with('success', 'Provider Created Successfully.');
|
||||
}
|
||||
|
||||
public function show(Providers $provider)
|
||||
{
|
||||
$data = Providers::showServicesForProvider($provider->id);
|
||||
|
||||
return view('providers.show', compact(['provider', 'data']));
|
||||
}
|
||||
|
||||
public function destroy(Providers $provider)
|
||||
{
|
||||
if ($provider->delete()) {
|
||||
Cache::forget('providers');
|
||||
|
||||
return redirect()->route('providers.index')
|
||||
->with('success', 'Provider was deleted Successfully.');
|
||||
}
|
||||
|
||||
return redirect()->route('providers.index')
|
||||
->with('error', 'Provider was not deleted.');
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -1,194 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Home;
|
||||
use App\Models\IPs;
|
||||
use App\Models\Labels;
|
||||
use App\Models\Pricing;
|
||||
use App\Models\Reseller;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class ResellerController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$resellers = Reseller::allResellerHosting();
|
||||
return view('reseller.index', compact(['resellers']));
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
return view('reseller.create');
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'domain' => 'required|min:4',
|
||||
'reseller_type' => 'required|string',
|
||||
'disk' => 'integer',
|
||||
'os_id' => 'integer',
|
||||
'provider_id' => 'integer',
|
||||
'location_id' => 'integer',
|
||||
'price' => 'numeric',
|
||||
'payment_term' => 'integer',
|
||||
'was_promo' => 'integer',
|
||||
'owned_since' => 'sometimes|nullable|date',
|
||||
'accounts' => 'integer',
|
||||
'domains' => 'integer',
|
||||
'sub_domains' => 'integer',
|
||||
'bandwidth' => 'integer',
|
||||
'email' => 'integer',
|
||||
'ftp' => 'integer',
|
||||
'db' => 'integer',
|
||||
'next_due_date' => 'required|date',
|
||||
'label1' => 'sometimes|nullable|string',
|
||||
'label2' => 'sometimes|nullable|string',
|
||||
'label3' => 'sometimes|nullable|string',
|
||||
'label4' => 'sometimes|nullable|string',
|
||||
]);
|
||||
|
||||
$reseller_id = Str::random(8);
|
||||
|
||||
$pricing = new Pricing();
|
||||
$pricing->insertPricing(3, $reseller_id, $request->currency, $request->price, $request->payment_term, $request->next_due_date);
|
||||
|
||||
if (!is_null($request->dedicated_ip)) {
|
||||
IPs::insertIP($reseller_id, $request->dedicated_ip);
|
||||
}
|
||||
|
||||
Labels::insertLabelsAssigned([$request->label1, $request->label2, $request->label3, $request->label4], $reseller_id);
|
||||
|
||||
Reseller::create([
|
||||
'id' => $reseller_id,
|
||||
'main_domain' => $request->domain,
|
||||
'accounts' => $request->accounts,
|
||||
'reseller_type' => $request->reseller_type,
|
||||
'provider_id' => $request->provider_id,
|
||||
'location_id' => $request->location_id,
|
||||
'disk' => $request->disk,
|
||||
'disk_type' => 'GB',
|
||||
'disk_as_gb' => $request->disk,
|
||||
'owned_since' => $request->owned_since,
|
||||
'bandwidth' => $request->bandwidth,
|
||||
'was_promo' => $request->was_promo,
|
||||
'domains_limit' => $request->domains,
|
||||
'subdomains_limit' => $request->sub_domains,
|
||||
'email_limit' => $request->email,
|
||||
'ftp_limit' => $request->ftp,
|
||||
'db_limit' => $request->db
|
||||
]);
|
||||
|
||||
Cache::forget("all_reseller");
|
||||
Home::homePageCacheForget();
|
||||
|
||||
return redirect()->route('reseller.index')
|
||||
->with('success', 'Reseller hosting created Successfully.');
|
||||
}
|
||||
|
||||
public function show(Reseller $reseller)
|
||||
{
|
||||
$reseller = Reseller::resellerHosting($reseller->id);
|
||||
return view('reseller.show', compact(['reseller']));
|
||||
}
|
||||
|
||||
public function edit(Reseller $reseller)
|
||||
{
|
||||
$reseller = Reseller::resellerHosting($reseller->id);
|
||||
return view('reseller.edit', compact(['reseller']));
|
||||
}
|
||||
|
||||
public function update(Request $request, Reseller $reseller)
|
||||
{
|
||||
$request->validate([
|
||||
'domain' => 'required|min:4',
|
||||
'reseller_type' => 'required|string',
|
||||
'disk' => 'integer',
|
||||
'os_id' => 'integer',
|
||||
'provider_id' => 'integer',
|
||||
'location_id' => 'integer',
|
||||
'price' => 'numeric',
|
||||
'payment_term' => 'integer',
|
||||
'was_promo' => 'integer',
|
||||
'owned_since' => 'sometimes|nullable|date',
|
||||
'accounts' => 'integer',
|
||||
'domains' => 'integer',
|
||||
'sub_domains' => 'integer',
|
||||
'bandwidth' => 'integer',
|
||||
'email' => 'integer',
|
||||
'ftp' => 'integer',
|
||||
'db' => 'integer',
|
||||
'next_due_date' => 'required|date',
|
||||
'label1' => 'sometimes|nullable|string',
|
||||
'label2' => 'sometimes|nullable|string',
|
||||
'label3' => 'sometimes|nullable|string',
|
||||
'label4' => 'sometimes|nullable|string',
|
||||
]);
|
||||
|
||||
$reseller->update([
|
||||
'main_domain' => $request->domain,
|
||||
'reseller_type' => $request->reseller_type,
|
||||
'provider_id' => $request->provider_id,
|
||||
'location_id' => $request->location_id,
|
||||
'accounts' => $request->accounts,
|
||||
'disk' => $request->disk,
|
||||
'disk_type' => 'GB',
|
||||
'disk_as_gb' => $request->disk,
|
||||
'owned_since' => $request->owned_since,
|
||||
'bandwidth' => $request->bandwidth,
|
||||
'was_promo' => $request->was_promo,
|
||||
'domains_limit' => $request->domains,
|
||||
'subdomains_limit' => $request->sub_domains,
|
||||
'email_limit' => $request->email,
|
||||
'ftp_limit' => $request->ftp,
|
||||
'db_limit' => $request->db
|
||||
]);
|
||||
|
||||
$pricing = new Pricing();
|
||||
$pricing->updatePricing($reseller->id, $request->currency, $request->price, $request->payment_term, $request->next_due_date);
|
||||
|
||||
Labels::deleteLabelsAssignedTo($reseller->id);
|
||||
Labels::insertLabelsAssigned([$request->label1, $request->label2, $request->label3, $request->label4], $reseller->id);
|
||||
|
||||
IPs::deleteIPsAssignedTo($reseller->id);
|
||||
|
||||
if (!is_null($request->dedicated_ip)) {
|
||||
IPs::insertIP($reseller->id, $request->dedicated_ip);
|
||||
}
|
||||
|
||||
Cache::forget("all_reseller");
|
||||
Cache::forget("reseller_hosting.{$reseller->id}");
|
||||
Cache::forget("labels_for_service.{$reseller->id}");
|
||||
|
||||
Home::homePageCacheForget();
|
||||
|
||||
return redirect()->route('reseller.index')
|
||||
->with('success', 'Reseller hosting updated Successfully.');
|
||||
}
|
||||
|
||||
public function destroy(Reseller $reseller)
|
||||
{
|
||||
if ($reseller->delete()) {
|
||||
$p = new Pricing();
|
||||
$p->deletePricing($reseller->id);
|
||||
|
||||
Labels::deleteLabelsAssignedTo($reseller->id);
|
||||
|
||||
IPs::deleteIPsAssignedTo($reseller->id);
|
||||
|
||||
Cache::forget("all_reseller");
|
||||
Cache::forget("reseller_hosting.$reseller->id");
|
||||
Home::homePageCacheForget();
|
||||
|
||||
return redirect()->route('reseller.index')
|
||||
->with('success', 'Reseller hosting was deleted Successfully.');
|
||||
}
|
||||
|
||||
return redirect()->route('reseller.index')
|
||||
->with('error', 'Reseller was not deleted.');
|
||||
|
||||
}
|
||||
}
|
|
@ -1,163 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Home;
|
||||
use App\Models\Labels;
|
||||
use App\Models\Pricing;
|
||||
use App\Models\SeedBoxes;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class SeedBoxesController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$seedboxes = SeedBoxes::allSeedboxes();
|
||||
return view('seedboxes.index', compact(['seedboxes']));
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
return view('seedboxes.create');
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'title' => 'required|string|min:2',
|
||||
'hostname' => 'sometimes|nullable|string|min:2',
|
||||
'seed_box_type' => 'required|string',
|
||||
'provider_id' => 'integer',
|
||||
'location_id' => 'integer',
|
||||
'price' => 'numeric',
|
||||
'payment_term' => 'integer',
|
||||
'was_promo' => 'integer',
|
||||
'owned_since' => 'sometimes|nullable|date',
|
||||
'disk' => 'integer',
|
||||
'bandwidth' => 'integer',
|
||||
'port_speed' => 'integer',
|
||||
'next_due_date' => 'required|date',
|
||||
'label1' => 'sometimes|nullable|string',
|
||||
'label2' => 'sometimes|nullable|string',
|
||||
'label3' => 'sometimes|nullable|string',
|
||||
'label4' => 'sometimes|nullable|string',
|
||||
]);
|
||||
|
||||
$seedbox_id = Str::random(8);
|
||||
|
||||
$pricing = new Pricing();
|
||||
$pricing->insertPricing(6, $seedbox_id, $request->currency, $request->price, $request->payment_term, $request->next_due_date);
|
||||
|
||||
Labels::deleteLabelsAssignedTo($seedbox_id);
|
||||
Labels::insertLabelsAssigned([$request->label1, $request->label2, $request->label3, $request->label4], $seedbox_id);
|
||||
|
||||
SeedBoxes::create([
|
||||
'id' => $seedbox_id,
|
||||
'title' => $request->title,
|
||||
'hostname' => $request->hostname,
|
||||
'seed_box_type' => $request->seed_box_type,
|
||||
'provider_id' => $request->provider_id,
|
||||
'location_id' => $request->location_id,
|
||||
'disk' => $request->disk,
|
||||
'disk_type' => 'GB',
|
||||
'disk_as_gb' => $request->disk,
|
||||
'owned_since' => $request->owned_since,
|
||||
'bandwidth' => $request->bandwidth,
|
||||
'port_speed' => $request->port_speed,
|
||||
'was_promo' => $request->was_promo
|
||||
]);
|
||||
|
||||
Cache::forget("all_seedboxes");
|
||||
Home::homePageCacheForget();
|
||||
|
||||
return redirect()->route('seedboxes.index')
|
||||
->with('success', 'Seed box created Successfully.');
|
||||
|
||||
}
|
||||
|
||||
public function show(SeedBoxes $seedbox)
|
||||
{
|
||||
$seedbox_data = SeedBoxes::seedbox($seedbox->id);
|
||||
return view('seedboxes.show', compact(['seedbox_data']));
|
||||
}
|
||||
|
||||
public function edit(SeedBoxes $seedbox)
|
||||
{
|
||||
$seedbox_data = SeedBoxes::seedbox($seedbox->id);
|
||||
return view('seedboxes.edit', compact(['seedbox_data']));
|
||||
}
|
||||
|
||||
public function update(Request $request, SeedBoxes $seedbox)
|
||||
{
|
||||
$request->validate([
|
||||
'title' => 'required|string|min:2',
|
||||
'hostname' => 'sometimes|nullable|string|min:2',
|
||||
'seed_box_type' => 'required|string',
|
||||
'provider_id' => 'integer',
|
||||
'location_id' => 'integer',
|
||||
'price' => 'numeric',
|
||||
'payment_term' => 'integer',
|
||||
'was_promo' => 'integer',
|
||||
'owned_since' => 'sometimes|nullable|date',
|
||||
'disk' => 'integer',
|
||||
'bandwidth' => 'integer',
|
||||
'port_speed' => 'integer',
|
||||
'next_due_date' => 'required|date',
|
||||
'label1' => 'sometimes|nullable|string',
|
||||
'label2' => 'sometimes|nullable|string',
|
||||
'label3' => 'sometimes|nullable|string',
|
||||
'label4' => 'sometimes|nullable|string',
|
||||
]);
|
||||
|
||||
$seedbox->update([
|
||||
'title' => $request->title,
|
||||
'hostname' => $request->hostname,
|
||||
'seed_box_type' => $request->seed_box_type,
|
||||
'location_id' => $request->location_id,
|
||||
'provider_id' => $request->provider_id,
|
||||
'disk' => $request->disk,
|
||||
'disk_type' => 'GB',
|
||||
'disk_as_gb' => $request->disk,
|
||||
'owned_since' => $request->owned_since,
|
||||
'bandwidth' => $request->bandwidth,
|
||||
'port_speed' => $request->port_speed,
|
||||
'was_promo' => $request->was_promo
|
||||
]);
|
||||
|
||||
$pricing = new Pricing();
|
||||
$pricing->updatePricing($seedbox->id, $request->currency, $request->price, $request->payment_term, $request->next_due_date);
|
||||
|
||||
Labels::deleteLabelsAssignedTo($seedbox->id);
|
||||
Labels::insertLabelsAssigned([$request->label1, $request->label2, $request->label3, $request->label4], $seedbox->id);
|
||||
|
||||
Cache::forget("all_seedboxes");
|
||||
Cache::forget("seedbox.{$seedbox->id}");
|
||||
Cache::forget("labels_for_service.{$seedbox->id}");
|
||||
Home::homePageCacheForget();
|
||||
|
||||
return redirect()->route('seedboxes.index')
|
||||
->with('success', 'Seed box updated Successfully.');
|
||||
}
|
||||
|
||||
public function destroy(SeedBoxes $seedbox)
|
||||
{
|
||||
if ($seedbox->delete()) {
|
||||
$p = new Pricing();
|
||||
$p->deletePricing($seedbox->id);
|
||||
|
||||
Labels::deleteLabelsAssignedTo($seedbox->id);
|
||||
|
||||
Cache::forget("all_seedboxes");
|
||||
Cache::forget("seedbox.{$seedbox->id}");
|
||||
Home::homePageCacheForget();
|
||||
|
||||
return redirect()->route('seedboxes.index')
|
||||
->with('success', 'Seed box was deleted Successfully.');
|
||||
}
|
||||
|
||||
return redirect()->route('seedboxes.index')
|
||||
->with('error', 'Seed box was not deleted.');
|
||||
}
|
||||
}
|
|
@ -1,246 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\IPs;
|
||||
use App\Models\Labels;
|
||||
use App\Models\Pricing;
|
||||
use App\Models\Server;
|
||||
use App\Models\Settings;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Session;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class ServerController extends Controller
|
||||
{
|
||||
|
||||
public function index()
|
||||
{
|
||||
$servers = Server::allActiveServers();
|
||||
$non_active_servers = Server::allNonActiveServers();
|
||||
return view('servers.index', compact(['servers', 'non_active_servers']));
|
||||
}
|
||||
|
||||
public function showServersPublic()
|
||||
{
|
||||
$settings = Settings::getSettings();
|
||||
Settings::setSettingsToSession($settings);
|
||||
|
||||
if ((Session::get('show_servers_public') === 1)) {
|
||||
$servers = Server::allPublicServers();
|
||||
return view('servers.public-index', compact('servers'));
|
||||
}
|
||||
abort(404);
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
return view('servers.create');
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'hostname' => 'required|min:5',
|
||||
'ip1' => 'sometimes|nullable|ip',
|
||||
'ip2' => 'sometimes|nullable|ip',
|
||||
'ns1' => 'sometimes|nullable|string',
|
||||
'ns2' => 'sometimes|nullable|string',
|
||||
'server_type' => 'integer',
|
||||
'ssh_port' => 'integer',
|
||||
'bandwidth' => 'integer',
|
||||
'ram' => 'required|numeric',
|
||||
'disk' => 'required|integer',
|
||||
'os_id' => 'required|integer',
|
||||
'provider_id' => 'required|integer',
|
||||
'location_id' => 'required|integer',
|
||||
'price' => 'required|numeric',
|
||||
'cpu' => 'required|integer',
|
||||
'was_promo' => 'integer',
|
||||
'next_due_date' => 'required|date',
|
||||
'owned_since' => 'sometimes|nullable|date',
|
||||
'label1' => 'sometimes|nullable|string',
|
||||
'label2' => 'sometimes|nullable|string',
|
||||
'label3' => 'sometimes|nullable|string',
|
||||
'label4' => 'sometimes|nullable|string',
|
||||
]);
|
||||
|
||||
$server_id = Str::random(8);
|
||||
|
||||
$pricing = new Pricing();
|
||||
$pricing->insertPricing(1, $server_id, $request->currency, $request->price, $request->payment_term, $request->next_due_date);
|
||||
|
||||
if (!is_null($request->ip1)) {
|
||||
IPs::insertIP($server_id, $request->ip1);
|
||||
}
|
||||
|
||||
if (!is_null($request->ip2)) {
|
||||
IPs::insertIP($server_id, $request->ip2);
|
||||
}
|
||||
|
||||
Server::create([
|
||||
'id' => $server_id,
|
||||
'hostname' => $request->hostname,
|
||||
'server_type' => $request->server_type,
|
||||
'os_id' => $request->os_id,
|
||||
'ssh' => $request->ssh_port,
|
||||
'provider_id' => $request->provider_id,
|
||||
'location_id' => $request->location_id,
|
||||
'ram' => $request->ram,
|
||||
'ram_type' => $request->ram_type,
|
||||
'ram_as_mb' => ($request->ram_type === 'MB') ? $request->ram : ($request->ram * 1024),
|
||||
'disk' => $request->disk,
|
||||
'disk_type' => $request->disk_type,
|
||||
'disk_as_gb' => ($request->disk_type === 'GB') ? $request->disk : ($request->disk * 1024),
|
||||
'owned_since' => $request->owned_since,
|
||||
'ns1' => $request->ns1,
|
||||
'ns2' => $request->ns2,
|
||||
'bandwidth' => $request->bandwidth,
|
||||
'cpu' => $request->cpu,
|
||||
'was_promo' => $request->was_promo,
|
||||
'show_public' => (isset($request->show_public)) ? 1 : 0
|
||||
]);
|
||||
|
||||
Labels::insertLabelsAssigned([$request->label1, $request->label2, $request->label3, $request->label4], $server_id);
|
||||
|
||||
Server::serverRelatedCacheForget();
|
||||
|
||||
return redirect()->route('servers.index')
|
||||
->with('success', 'Server Created Successfully.');
|
||||
}
|
||||
|
||||
public function show(Server $server)
|
||||
{
|
||||
$server_data = Server::server($server->id);
|
||||
|
||||
return view('servers.show', compact(['server_data']));
|
||||
}
|
||||
|
||||
public function edit(Server $server)
|
||||
{
|
||||
$server_data = Server::server($server->id);
|
||||
|
||||
return view('servers.edit', compact(['server_data']));
|
||||
}
|
||||
|
||||
public function update(Request $request, Server $server)
|
||||
{
|
||||
$request->validate([
|
||||
'hostname' => 'required|min:5',
|
||||
'ip1' => 'sometimes|nullable|ip',
|
||||
'ip2' => 'sometimes|nullable|ip',
|
||||
'ns1' => 'sometimes|nullable|string',
|
||||
'ns2' => 'sometimes|nullable|string',
|
||||
'server_type' => 'integer',
|
||||
'ssh_port' => 'integer',
|
||||
'bandwidth' => 'integer',
|
||||
'ram' => 'required|numeric',
|
||||
'disk' => 'required|integer',
|
||||
'os_id' => 'required|integer',
|
||||
'provider_id' => 'required|integer',
|
||||
'location_id' => 'required|integer',
|
||||
'price' => 'required|numeric',
|
||||
'cpu' => 'required|integer',
|
||||
'was_promo' => 'integer',
|
||||
'next_due_date' => 'required|date',
|
||||
'owned_since' => 'sometimes|nullable|date',
|
||||
'label1' => 'sometimes|nullable|string',
|
||||
'label2' => 'sometimes|nullable|string',
|
||||
'label3' => 'sometimes|nullable|string',
|
||||
'label4' => 'sometimes|nullable|string',
|
||||
]);
|
||||
|
||||
$server->update([
|
||||
'hostname' => $request->hostname,
|
||||
'server_type' => $request->server_type,
|
||||
'os_id' => $request->os_id,
|
||||
'ssh' => $request->ssh_port,
|
||||
'provider_id' => $request->provider_id,
|
||||
'location_id' => $request->location_id,
|
||||
'ram' => $request->ram,
|
||||
'ram_type' => $request->ram_type,
|
||||
'ram_as_mb' => ($request->ram_type === 'MB') ? $request->ram : ($request->ram * 1024),
|
||||
'disk' => $request->disk,
|
||||
'disk_type' => $request->disk_type,
|
||||
'disk_as_gb' => ($request->disk_type === 'GB') ? $request->disk : ($request->disk * 1024),
|
||||
'owned_since' => $request->owned_since,
|
||||
'ns1' => $request->ns1,
|
||||
'ns2' => $request->ns2,
|
||||
'bandwidth' => $request->bandwidth,
|
||||
'cpu' => $request->cpu,
|
||||
'was_promo' => $request->was_promo,
|
||||
'active' => (isset($request->is_active)) ? 1 : 0,
|
||||
'show_public' => (isset($request->show_public)) ? 1 : 0
|
||||
]);
|
||||
|
||||
$pricing = new Pricing();
|
||||
$pricing->updatePricing($server->id, $request->currency, $request->price, $request->payment_term, $request->next_due_date);
|
||||
|
||||
Labels::deleteLabelsAssignedTo($server->id);
|
||||
|
||||
Labels::insertLabelsAssigned([$request->label1, $request->label2, $request->label3, $request->label4], $server->id);
|
||||
|
||||
IPs::deleteIPsAssignedTo($server->id);
|
||||
|
||||
for ($i = 1; $i <= 8; $i++) {//Max of 8 ips
|
||||
$obj = 'ip' . $i;
|
||||
if (isset($request->$obj) && !is_null($request->$obj)) {
|
||||
IPs::insertIP($server->id, $request->$obj);
|
||||
}
|
||||
}
|
||||
|
||||
Server::serverRelatedCacheForget();
|
||||
Server::serverSpecificCacheForget($server->id);
|
||||
|
||||
return redirect()->route('servers.index')
|
||||
->with('success', 'Server Updated Successfully.');
|
||||
}
|
||||
|
||||
public function destroy(Server $server)
|
||||
{
|
||||
if ($server->delete()) {
|
||||
$p = new Pricing();
|
||||
$p->deletePricing($server->id);
|
||||
|
||||
Labels::deleteLabelsAssignedTo($server->id);
|
||||
|
||||
IPs::deleteIPsAssignedTo($server->id);
|
||||
|
||||
Server::serverRelatedCacheForget();
|
||||
|
||||
return redirect()->route('servers.index')
|
||||
->with('success', 'Server was deleted Successfully.');
|
||||
}
|
||||
|
||||
return redirect()->route('servers.index')
|
||||
->with('error', 'Server was not deleted.');
|
||||
}
|
||||
|
||||
public function chooseCompare()
|
||||
{//NOTICE: Selecting servers is not cached yet
|
||||
$all_servers = Server::where('has_yabs', 1)->get();
|
||||
|
||||
if (isset($all_servers[1])) {
|
||||
return view('servers.choose-compare', compact('all_servers'));
|
||||
}
|
||||
|
||||
return redirect()->route('servers.index')
|
||||
->with('error', 'You need atleast 2 servers with a YABS to do a compare');
|
||||
}
|
||||
|
||||
public function compareServers($server1, $server2)
|
||||
{
|
||||
$server1_data = Server::server($server1);
|
||||
|
||||
if (!isset($server1_data[0]->yabs[0])) {
|
||||
abort(404);
|
||||
}
|
||||
|
||||
$server2_data = Server::server($server2);
|
||||
|
||||
if (!isset($server2_data[0]->yabs[0])) {
|
||||
abort(404);
|
||||
}
|
||||
return view('servers.compare', compact('server1_data', 'server2_data'));
|
||||
}
|
||||
}
|
|
@ -1,98 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Settings;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
|
||||
class SettingsController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('settings.index', ['setting' => Settings::where('id', 1)->first()]);
|
||||
}
|
||||
|
||||
public function update(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'dark_mode' => 'required|integer|min:0|max:1',
|
||||
'show_versions_footer' => 'required|integer|min:0|max:1',
|
||||
'show_server_value_ip' => 'required|integer|min:0|max:1',
|
||||
'show_server_value_hostname' => 'required|integer|min:0|max:1',
|
||||
'show_server_value_provider' => 'required|integer|min:0|max:1',
|
||||
'show_server_value_location' => 'required|integer|min:0|max:1',
|
||||
'show_server_value_price' => 'required|integer|min:0|max:1',
|
||||
'show_server_value_yabs' => 'required|integer|min:0|max:1',
|
||||
'save_yabs_as_txt' => 'integer|min:0|max:1',
|
||||
'default_currency' => 'required|string|size:3',
|
||||
'default_server_os' => 'required|integer',
|
||||
'due_soon_amount' => 'required|integer|between:0,12',
|
||||
'recently_added_amount' => 'required|integer|between:0,12',
|
||||
'currency' => 'required|string|size:3',
|
||||
'sort_on' => 'required|integer|between:1,10',
|
||||
'favicon' => 'sometimes|nullable|mimes:ico,jpg,png|max:40',
|
||||
]);
|
||||
|
||||
$settings = Settings::where('id', 1)->first();
|
||||
|
||||
if ($request->favicon) {//Has a favicon upload
|
||||
|
||||
$file = $request->favicon;
|
||||
$extension = $file->getClientOriginalExtension();
|
||||
$favicon_filename = "favicon.$extension";
|
||||
|
||||
if ($favicon_filename !== $settings->favicon && $settings->favicon !== 'favicon.ico') {
|
||||
Storage::disk('public_uploads')->delete($settings->favicon);//Delete old favicon
|
||||
}
|
||||
|
||||
$file->storeAs("", $favicon_filename, "public_uploads");//Save into /public
|
||||
}
|
||||
|
||||
$do_update = $settings->update([
|
||||
'dark_mode' => $request->dark_mode,
|
||||
'show_versions_footer' => $request->show_versions_footer,
|
||||
'show_servers_public' => $request->show_servers_public,
|
||||
'show_server_value_ip' => $request->show_server_value_ip,
|
||||
'show_server_value_hostname' => $request->show_server_value_hostname,
|
||||
'show_server_value_provider' => $request->show_server_value_provider,
|
||||
'show_server_value_location' => $request->show_server_value_location,
|
||||
'show_server_value_price' => $request->show_server_value_price,
|
||||
'show_server_value_yabs' => $request->show_server_value_yabs,
|
||||
'save_yabs_as_txt' => 0,
|
||||
'default_currency' => $request->default_currency,
|
||||
'default_server_os' => $request->default_server_os,
|
||||
'due_soon_amount' => $request->due_soon_amount,
|
||||
'recently_added_amount' => $request->recently_added_amount,
|
||||
'dashboard_currency' => $request->currency,
|
||||
'sort_on' => $request->sort_on,
|
||||
'favicon' => $favicon_filename ?? $settings->favicon
|
||||
]);
|
||||
|
||||
Cache::forget('due_soon');//Main page due_soon cache
|
||||
Cache::forget('recently_added');//Main page recently_added cache
|
||||
Cache::forget('pricing_breakdown');//Main page pricing breakdown
|
||||
|
||||
Cache::forget('settings');//Main page settings cache
|
||||
//Clear because they are affected by settings change (sort_on)
|
||||
Cache::forget('all_servers');
|
||||
Cache::forget('all_active_servers');
|
||||
Cache::forget('all_shared');
|
||||
Cache::forget('all_seedboxes');
|
||||
Cache::forget('all_reseller');
|
||||
Cache::forget('all_misc');
|
||||
Cache::forget('all_domains');
|
||||
|
||||
Settings::setSettingsToSession(Settings::getSettings());
|
||||
|
||||
if ($do_update) {
|
||||
return redirect()->route('settings.index')
|
||||
->with('success', 'Settings Updated Successfully.');
|
||||
}
|
||||
|
||||
return redirect()->route('settings.index')
|
||||
->with('error', 'Settings failed to update.');
|
||||
}
|
||||
|
||||
}
|
|
@ -1,190 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Home;
|
||||
use App\Models\IPs;
|
||||
use App\Models\Labels;
|
||||
use App\Models\Pricing;
|
||||
use App\Models\Shared;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class SharedController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$shared = Shared::allSharedHosting();
|
||||
return view('shared.index', compact(['shared']));
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
return view('shared.create');
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'domain' => 'required|min:4',
|
||||
'shared_type' => 'required|string',
|
||||
'disk' => 'integer',
|
||||
'os_id' => 'integer',
|
||||
'provider_id' => 'integer',
|
||||
'location_id' => 'integer',
|
||||
'price' => 'numeric',
|
||||
'payment_term' => 'integer',
|
||||
'was_promo' => 'integer',
|
||||
'owned_since' => 'sometimes|nullable|date',
|
||||
'domains' => 'integer',
|
||||
'sub_domains' => 'integer',
|
||||
'bandwidth' => 'integer',
|
||||
'email' => 'integer',
|
||||
'ftp' => 'integer',
|
||||
'db' => 'integer',
|
||||
'next_due_date' => 'required|date',
|
||||
'label1' => 'sometimes|nullable|string',
|
||||
'label2' => 'sometimes|nullable|string',
|
||||
'label3' => 'sometimes|nullable|string',
|
||||
'label4' => 'sometimes|nullable|string',
|
||||
]);
|
||||
|
||||
$shared_id = Str::random(8);
|
||||
|
||||
$pricing = new Pricing();
|
||||
$pricing->insertPricing(2, $shared_id, $request->currency, $request->price, $request->payment_term, $request->next_due_date);
|
||||
|
||||
Labels::deleteLabelsAssignedTo($shared_id);
|
||||
Labels::insertLabelsAssigned([$request->label1, $request->label2, $request->label3, $request->label4], $shared_id);
|
||||
|
||||
IPs::deleteIPsAssignedTo($shared_id);
|
||||
if (!is_null($request->dedicated_ip)) {
|
||||
IPs::insertIP($shared_id, $request->dedicated_ip);
|
||||
}
|
||||
|
||||
Shared::create([
|
||||
'id' => $shared_id,
|
||||
'main_domain' => $request->domain,
|
||||
'shared_type' => $request->shared_type,
|
||||
'provider_id' => $request->provider_id,
|
||||
'location_id' => $request->location_id,
|
||||
'disk' => $request->disk,
|
||||
'disk_type' => 'GB',
|
||||
'disk_as_gb' => $request->disk,
|
||||
'owned_since' => $request->owned_since,
|
||||
'bandwidth' => $request->bandwidth,
|
||||
'was_promo' => $request->was_promo,
|
||||
'domains_limit' => $request->domains,
|
||||
'subdomains_limit' => $request->sub_domains,
|
||||
'email_limit' => $request->email,
|
||||
'ftp_limit' => $request->ftp,
|
||||
'db__limit' => $request->db
|
||||
]);
|
||||
|
||||
Cache::forget('all_shared');
|
||||
Home::homePageCacheForget();
|
||||
|
||||
return redirect()->route('shared.index')
|
||||
->with('success', 'Shared hosting created Successfully.');
|
||||
}
|
||||
|
||||
public function show(Shared $shared)
|
||||
{
|
||||
$shared = Shared::sharedHosting($shared->id);
|
||||
return view('shared.show', compact(['shared']));
|
||||
}
|
||||
|
||||
public function edit(Shared $shared)
|
||||
{
|
||||
$shared = Shared::sharedHosting($shared->id);
|
||||
return view('shared.edit', compact(['shared']));
|
||||
}
|
||||
|
||||
public function update(Request $request, Shared $shared)
|
||||
{
|
||||
$request->validate([
|
||||
'domain' => 'required|min:4',
|
||||
'shared_type' => 'required|string',
|
||||
'disk' => 'integer',
|
||||
'os_id' => 'integer',
|
||||
'provider_id' => 'integer',
|
||||
'location_id' => 'integer',
|
||||
'price' => 'numeric',
|
||||
'payment_term' => 'integer',
|
||||
'was_promo' => 'integer',
|
||||
'owned_since' => 'sometimes|nullable|date',
|
||||
'domains' => 'integer',
|
||||
'sub_domains' => 'integer',
|
||||
'bandwidth' => 'integer',
|
||||
'email' => 'integer',
|
||||
'ftp' => 'integer',
|
||||
'db' => 'integer',
|
||||
'next_due_date' => 'required|date',
|
||||
'label1' => 'sometimes|nullable|string',
|
||||
'label2' => 'sometimes|nullable|string',
|
||||
'label3' => 'sometimes|nullable|string',
|
||||
'label4' => 'sometimes|nullable|string',
|
||||
]);
|
||||
|
||||
$shared->update([
|
||||
'main_domain' => $request->domain,
|
||||
'shared_type' => $request->shared_type,
|
||||
'provider_id' => $request->provider_id,
|
||||
'location_id' => $request->location_id,
|
||||
'disk' => $request->disk,
|
||||
'disk_type' => 'GB',
|
||||
'disk_as_gb' => $request->disk,
|
||||
'owned_since' => $request->owned_since,
|
||||
'bandwidth' => $request->bandwidth,
|
||||
'was_promo' => $request->was_promo,
|
||||
'domains_limit' => $request->domains,
|
||||
'subdomains_limit' => $request->sub_domains,
|
||||
'email_limit' => $request->email,
|
||||
'ftp_limit' => $request->ftp,
|
||||
'db_limit' => $request->db
|
||||
]);
|
||||
|
||||
$pricing = new Pricing();
|
||||
$pricing->updatePricing($shared->id, $request->currency, $request->price, $request->payment_term, $request->next_due_date);
|
||||
|
||||
Labels::deleteLabelsAssignedTo($shared->id);
|
||||
Labels::insertLabelsAssigned([$request->label1, $request->label2, $request->label3, $request->label4], $shared->id);
|
||||
Cache::forget("labels_for_service.{$shared->id}");
|
||||
|
||||
IPs::deleteIPsAssignedTo($shared->id);
|
||||
if (isset($request->dedicated_ip)) {
|
||||
IPs::insertIP($shared->id, $request->dedicated_ip);
|
||||
}
|
||||
|
||||
Cache::forget("shared_hosting.{$shared->id}");
|
||||
Cache::forget('all_shared');
|
||||
Home::homePageCacheForget();
|
||||
|
||||
return redirect()->route('shared.index')
|
||||
->with('success', 'Shared hosting updated Successfully.');
|
||||
}
|
||||
|
||||
public function destroy(Shared $shared)
|
||||
{
|
||||
if ($shared->delete()) {
|
||||
$p = new Pricing();
|
||||
$p->deletePricing($shared->id);
|
||||
|
||||
Labels::deleteLabelsAssignedTo($shared->id);
|
||||
|
||||
IPs::deleteIPsAssignedTo($shared->id);
|
||||
|
||||
Cache::forget("shared_hosting.$shared->id");
|
||||
Cache::forget('all_shared');
|
||||
Home::homePageCacheForget();
|
||||
|
||||
return redirect()->route('shared.index')
|
||||
->with('success', 'Shared hosting was deleted Successfully.');
|
||||
}
|
||||
|
||||
return redirect()->route('shared.index')
|
||||
->with('error', 'Shared was not deleted.');
|
||||
}
|
||||
|
||||
}
|
|
@ -1,77 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Server;
|
||||
use App\Models\Yabs;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class YabsController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('yabs.index', ['yabs' => Yabs::allYabs()]);
|
||||
}
|
||||
|
||||
public function show(Yabs $yab)
|
||||
{
|
||||
return view('yabs.show', ['yabs' => Yabs::yabs($yab->id)]);
|
||||
}
|
||||
|
||||
public function destroy(Yabs $yab)
|
||||
{
|
||||
if ($yab->delete()) {
|
||||
if (Server::serverYabsAmount($yab->server_id) === 0) {
|
||||
DB::table('servers')
|
||||
->where('id', $yab->server_id)
|
||||
->update(['has_yabs' => 0]);
|
||||
}
|
||||
|
||||
Cache::forget('all_yabs');
|
||||
Cache::forget("yabs.{$yab->id}");
|
||||
|
||||
return redirect()->route('yabs.index')
|
||||
->with('success', 'YABS was deleted Successfully.');
|
||||
}
|
||||
|
||||
return redirect()->route('yabs.index')
|
||||
->with('error', 'YABS was not deleted.');
|
||||
}
|
||||
|
||||
public function chooseYabsCompare()
|
||||
{
|
||||
$all_yabs = Yabs::allYabs();
|
||||
|
||||
if (isset($all_yabs[1])) {
|
||||
return view('yabs.choose-compare', compact('all_yabs'));
|
||||
}
|
||||
|
||||
return redirect()->route('yabs.index')
|
||||
->with('error', 'You need atleast 2 YABS to do a compare');
|
||||
}
|
||||
|
||||
public function compareYabs(string $yabs1, string $yabs2)
|
||||
{
|
||||
$yabs1_data = Yabs::yabs($yabs1);
|
||||
|
||||
if (is_null($yabs1_data)) {
|
||||
abort(404);
|
||||
}
|
||||
|
||||
$yabs2_data = Yabs::yabs($yabs2);
|
||||
|
||||
if (is_null($yabs2_data)) {
|
||||
abort(404);
|
||||
}
|
||||
|
||||
return view('yabs.compare', compact('yabs1_data', 'yabs2_data'));
|
||||
}
|
||||
|
||||
public function yabsToJson(Yabs $yab): array
|
||||
{
|
||||
$all_yabs = Yabs::yabs($yab->id)[0];
|
||||
return Yabs::buildYabsArray($all_yabs);
|
||||
}
|
||||
|
||||
}
|
|
@ -1,71 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http;
|
||||
|
||||
use App\Console\Commands\CreateDatabaseCommand;
|
||||
use Illuminate\Foundation\Http\Kernel as HttpKernel;
|
||||
|
||||
class Kernel extends HttpKernel
|
||||
{
|
||||
/**
|
||||
* The application's global HTTP middleware stack.
|
||||
*
|
||||
* These middleware are run during every request to your application.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $middleware = [
|
||||
// \App\Http\Middleware\TrustHosts::class,
|
||||
\App\Http\Middleware\TrustProxies::class,
|
||||
\Illuminate\Http\Middleware\HandleCors::class,
|
||||
\App\Http\Middleware\PreventRequestsDuringMaintenance::class,
|
||||
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
|
||||
\App\Http\Middleware\TrimStrings::class,
|
||||
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
|
||||
];
|
||||
|
||||
/**
|
||||
* The application's route middleware groups.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $middlewareGroups = [
|
||||
'web' => [
|
||||
\App\Http\Middleware\EncryptCookies::class,
|
||||
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
|
||||
\Illuminate\Session\Middleware\StartSession::class,
|
||||
// \Illuminate\Session\Middleware\AuthenticateSession::class,
|
||||
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
|
||||
\App\Http\Middleware\VerifyCsrfToken::class,
|
||||
\Illuminate\Routing\Middleware\SubstituteBindings::class,
|
||||
],
|
||||
|
||||
'api' => [
|
||||
'throttle:api',
|
||||
\Illuminate\Routing\Middleware\SubstituteBindings::class,
|
||||
],
|
||||
];
|
||||
|
||||
/**
|
||||
* The application's route middleware.
|
||||
*
|
||||
* These middleware may be assigned to groups or used individually.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $routeMiddleware = [
|
||||
'auth' => \App\Http\Middleware\Authenticate::class,
|
||||
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
|
||||
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
|
||||
'can' => \Illuminate\Auth\Middleware\Authorize::class,
|
||||
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
|
||||
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
|
||||
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
|
||||
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
|
||||
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
|
||||
];
|
||||
|
||||
protected $commands = [
|
||||
CreateDatabaseCommand::class
|
||||
];
|
||||
}
|
|
@ -1,21 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Illuminate\Auth\Middleware\Authenticate as Middleware;
|
||||
|
||||
class Authenticate extends Middleware
|
||||
{
|
||||
/**
|
||||
* Get the path the user should be redirected to when they are not authenticated.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return string|null
|
||||
*/
|
||||
protected function redirectTo($request)
|
||||
{
|
||||
if (! $request->expectsJson()) {
|
||||
return route('login');
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,17 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Illuminate\Cookie\Middleware\EncryptCookies as Middleware;
|
||||
|
||||
class EncryptCookies extends Middleware
|
||||
{
|
||||
/**
|
||||
* The names of the cookies that should not be encrypted.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $except = [
|
||||
//
|
||||
];
|
||||
}
|
|
@ -1,17 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance as Middleware;
|
||||
|
||||
class PreventRequestsDuringMaintenance extends Middleware
|
||||
{
|
||||
/**
|
||||
* The URIs that should be reachable while maintenance mode is enabled.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $except = [
|
||||
//
|
||||
];
|
||||
}
|
|
@ -1,32 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use App\Providers\RouteServiceProvider;
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class RedirectIfAuthenticated
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure $next
|
||||
* @param string|null ...$guards
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle(Request $request, Closure $next, ...$guards)
|
||||
{
|
||||
$guards = empty($guards) ? [null] : $guards;
|
||||
|
||||
foreach ($guards as $guard) {
|
||||
if (Auth::guard($guard)->check()) {
|
||||
return redirect(RouteServiceProvider::HOME);
|
||||
}
|
||||
}
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Illuminate\Foundation\Http\Middleware\TrimStrings as Middleware;
|
||||
|
||||
class TrimStrings extends Middleware
|
||||
{
|
||||
/**
|
||||
* The names of the attributes that should not be trimmed.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $except = [
|
||||
'password',
|
||||
'password_confirmation',
|
||||
];
|
||||
}
|
|
@ -1,20 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Illuminate\Http\Middleware\TrustHosts as Middleware;
|
||||
|
||||
class TrustHosts extends Middleware
|
||||
{
|
||||
/**
|
||||
* Get the host patterns that should be trusted.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function hosts()
|
||||
{
|
||||
return [
|
||||
$this->allSubdomainsOfApplicationUrl(),
|
||||
];
|
||||
}
|
||||
}
|
|
@ -1,28 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Illuminate\Http\Middleware\TrustProxies as Middleware;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class TrustProxies extends Middleware
|
||||
{
|
||||
/**
|
||||
* The trusted proxies for this application.
|
||||
*
|
||||
* @var array|string|null
|
||||
*/
|
||||
protected $proxies;
|
||||
|
||||
/**
|
||||
* The headers that should be used to detect proxies.
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
protected $headers =
|
||||
Request::HEADER_X_FORWARDED_FOR |
|
||||
Request::HEADER_X_FORWARDED_HOST |
|
||||
Request::HEADER_X_FORWARDED_PORT |
|
||||
Request::HEADER_X_FORWARDED_PROTO |
|
||||
Request::HEADER_X_FORWARDED_AWS_ELB;
|
||||
}
|
|
@ -1,17 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
|
||||
|
||||
class VerifyCsrfToken extends Middleware
|
||||
{
|
||||
/**
|
||||
* The URIs that should be excluded from CSRF verification.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $except = [
|
||||
//
|
||||
];
|
||||
}
|
|
@ -1,93 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Requests\Auth;
|
||||
|
||||
use Illuminate\Auth\Events\Lockout;
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\RateLimiter;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
|
||||
class LoginRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function authorize()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
'email' => ['required', 'string', 'email'],
|
||||
'password' => ['required', 'string'],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Attempt to authenticate the request's credentials.
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @throws \Illuminate\Validation\ValidationException
|
||||
*/
|
||||
public function authenticate()
|
||||
{
|
||||
$this->ensureIsNotRateLimited();
|
||||
|
||||
if (! Auth::attempt($this->only('email', 'password'), $this->boolean('remember'))) {
|
||||
RateLimiter::hit($this->throttleKey());
|
||||
|
||||
throw ValidationException::withMessages([
|
||||
'email' => __('auth.failed'),
|
||||
]);
|
||||
}
|
||||
|
||||
RateLimiter::clear($this->throttleKey());
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensure the login request is not rate limited.
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @throws \Illuminate\Validation\ValidationException
|
||||
*/
|
||||
public function ensureIsNotRateLimited()
|
||||
{
|
||||
if (! RateLimiter::tooManyAttempts($this->throttleKey(), 5)) {
|
||||
return;
|
||||
}
|
||||
|
||||
event(new Lockout($this));
|
||||
|
||||
$seconds = RateLimiter::availableIn($this->throttleKey());
|
||||
|
||||
throw ValidationException::withMessages([
|
||||
'email' => trans('auth.throttle', [
|
||||
'seconds' => $seconds,
|
||||
'minutes' => ceil($seconds / 60),
|
||||
]),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the rate limiting throttle key for the request.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function throttleKey()
|
||||
{
|
||||
return Str::lower($this->input('email')).'|'.$this->ip();
|
||||
}
|
||||
}
|
|
@ -1,34 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class DNS extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
|
||||
public $incrementing = false;
|
||||
|
||||
protected $keyType = 'string';
|
||||
|
||||
protected $fillable = ['id', 'service_id', 'hostname', 'dns_type', 'address', 'server_id', 'domain_id'];
|
||||
|
||||
public static $dns_types = ['A', 'AAAA', 'DNAME', 'MX', 'NS', 'SOA', 'TXT', 'URI'];
|
||||
|
||||
public static function dnsCount()
|
||||
{
|
||||
return Cache::remember('dns_count', now()->addMonth(1), function () {
|
||||
return DNS::count();
|
||||
});
|
||||
}
|
||||
|
||||
public function note(): \Illuminate\Database\Eloquent\Relations\HasOne
|
||||
{
|
||||
return $this->hasOne(Note::class, 'service_id', 'id');
|
||||
}
|
||||
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class DiskSpeed extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
|
||||
public $incrementing = false;
|
||||
|
||||
protected $keyType = 'string';
|
||||
|
||||
protected $table = 'disk_speed';
|
||||
|
||||
protected $fillable = ['id', 'server_id', 'd_4k', 'd_4k_type', 'd_4k_as_mbps', 'd_64k', 'd_64k_type', 'd_64k_as_mbps', 'd_512k', 'd_512k_type', 'd_512k_as_mbps', 'd_1m', 'd_1m_type', 'd_1m_as_mbps'];
|
||||
|
||||
public function yabs(): \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
{
|
||||
return $this->belongsTo(Yabs::class, 'id', 'id');
|
||||
}
|
||||
}
|
|
@ -1,63 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Support\Facades\Session;
|
||||
|
||||
class Domains extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
|
||||
public $incrementing = false;
|
||||
|
||||
protected $table = 'domains';
|
||||
|
||||
protected $keyType = 'string';
|
||||
|
||||
protected $fillable = ['id', 'domain', 'extension', 'ns1', 'ns2', 'ns3', 'price', 'currency', 'payment_term', 'owned_since', 'provider_id', 'next_due_date'];
|
||||
|
||||
|
||||
public static function allDomains()
|
||||
{//All domains and relationships (no using joins)
|
||||
return Cache::remember("all_domains", now()->addMonth(1), function () {
|
||||
$query = Domains::with(['provider', 'price', 'labels']);
|
||||
if (in_array(Session::get('sort_on'), [3, 4, 5, 6], true)) {
|
||||
$options = Settings::orderByProcess(Session::get('sort_on'));
|
||||
$query->orderBy(Pricing::select("pricings.$options[0]")->whereColumn("pricings.service_id", "domains.id"), $options[1]);
|
||||
}
|
||||
return $query->get();
|
||||
});
|
||||
}
|
||||
|
||||
public static function domain(string $domain_id)
|
||||
{//Single domains and relationships (no using joins)
|
||||
return Cache::remember("domain.$domain_id", now()->addMonth(1), function () use ($domain_id) {
|
||||
return Domains::where('id', $domain_id)
|
||||
->with(['provider', 'price', 'labels'])->first();
|
||||
});
|
||||
}
|
||||
|
||||
public function provider(): \Illuminate\Database\Eloquent\Relations\HasOne
|
||||
{
|
||||
return $this->hasOne(Providers::class, 'id', 'provider_id');
|
||||
}
|
||||
|
||||
public function price(): \Illuminate\Database\Eloquent\Relations\HasOne
|
||||
{
|
||||
return $this->hasOne(Pricing::class, 'service_id', 'id');
|
||||
}
|
||||
|
||||
public function labels(): \Illuminate\Database\Eloquent\Relations\HasMany
|
||||
{
|
||||
return $this->hasMany(LabelsAssigned::class, 'service_id', 'id');
|
||||
}
|
||||
|
||||
public function note(): \Illuminate\Database\Eloquent\Relations\HasOne
|
||||
{
|
||||
return $this->hasOne(Note::class, 'service_id', 'id');
|
||||
}
|
||||
|
||||
}
|
|
@ -1,210 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Carbon\Carbon;
|
||||
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\Session;
|
||||
|
||||
class Home extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
|
||||
public static function homePageCacheForget(): void
|
||||
{
|
||||
Cache::forget('services_count');//Main page services_count cache
|
||||
Cache::forget('due_soon');//Main page due_soon cache
|
||||
Cache::forget('recently_added');//Main page recently_added cache
|
||||
Cache::forget('all_pricing');//All the pricing
|
||||
Cache::forget('services_count_all');
|
||||
Cache::forget('pricing_breakdown');
|
||||
}
|
||||
|
||||
public static function servicesCount()
|
||||
{
|
||||
return Cache::remember('services_count', now()->addHours(6), function () {
|
||||
return DB::table('pricings')
|
||||
->select('service_type', DB::raw('COUNT(*) as amount'))
|
||||
->groupBy('service_type')
|
||||
->where('active', 1)
|
||||
->get();
|
||||
});
|
||||
}
|
||||
|
||||
public static function dueSoonData()
|
||||
{
|
||||
return Cache::remember('due_soon', now()->addHours(6), function () {
|
||||
return DB::table('pricings as p')
|
||||
->leftJoin('servers as s', 'p.service_id', 's.id')
|
||||
->leftJoin('shared_hosting as sh', 'p.service_id', 'sh.id')
|
||||
->leftJoin('reseller_hosting as r', 'p.service_id', 'r.id')
|
||||
->leftJoin('domains as d', 'p.service_id', 'd.id')
|
||||
->leftJoin('misc_services as ms', 'p.service_id', 'ms.id')
|
||||
->leftJoin('seedboxes as sb', 'p.service_id', 'sb.id')
|
||||
->where('p.active', 1)
|
||||
->orderBy('next_due_date', 'ASC')
|
||||
->limit(Session::get('due_soon_amount'))
|
||||
->get(['p.*', 's.hostname', 'd.domain', 'd.extension', 'r.main_domain as reseller', 'sh.main_domain', 'ms.name', 'sb.title']);
|
||||
});
|
||||
}
|
||||
|
||||
public static function serverSummary()
|
||||
{
|
||||
return Cache::remember('servers_summary', now()->addHours(6), function () {
|
||||
$cpu_sum = DB::table('servers')->get()->where('active', 1)->sum('cpu');
|
||||
$ram_mb = DB::table('servers')->get()->where('active', 1)->sum('ram_as_mb');
|
||||
$disk_gb = DB::table('servers')->get()->where('active', 1)->sum('disk_as_gb');
|
||||
$bandwidth = DB::table('servers')->get()->where('active', 1)->sum('bandwidth');
|
||||
$locations_sum = DB::table('servers')->get()->where('active', 1)->groupBy('location_id')->count();
|
||||
$providers_sum = DB::table('servers')->get()->where('active', 1)->groupBy('provider_id')->count();
|
||||
return array(
|
||||
'cpu_sum' => $cpu_sum,
|
||||
'ram_mb_sum' => $ram_mb,
|
||||
'disk_gb_sum' => $disk_gb,
|
||||
'bandwidth_sum' => $bandwidth,
|
||||
'locations_sum' => $locations_sum,
|
||||
'providers_sum' => $providers_sum,
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
public static function recentlyAdded()
|
||||
{
|
||||
return Cache::remember('recently_added', now()->addHours(6), function () {
|
||||
return DB::table('pricings as p')
|
||||
->leftJoin('servers as s', 'p.service_id', 's.id')
|
||||
->leftJoin('shared_hosting as sh', 'p.service_id', 'sh.id')
|
||||
->leftJoin('reseller_hosting as r', 'p.service_id', 'r.id')
|
||||
->leftJoin('domains as d', 'p.service_id', 'd.id')
|
||||
->leftJoin('misc_services as ms', 'p.service_id', 'ms.id')
|
||||
->leftJoin('seedboxes as sb', 'p.service_id', 'sb.id')
|
||||
->where('p.active', 1)
|
||||
->orderBy('created_at', 'DESC')
|
||||
->limit(Session::get('recently_added_amount'))
|
||||
->get(['p.*', 's.hostname', 'd.domain', 'd.extension', 'r.main_domain as reseller', 'sh.main_domain', 'ms.name', 'sb.title']);
|
||||
});
|
||||
}
|
||||
|
||||
public static function doDueSoon($due_soon)
|
||||
{
|
||||
$pricing = new Pricing();
|
||||
$count = $altered_due_soon = 0;
|
||||
$server_due_date_changed = false;
|
||||
foreach ($due_soon as $service) {
|
||||
if (Carbon::createFromFormat('Y-m-d', $service->next_due_date)->isPast()) {
|
||||
$months = $pricing->termAsMonths($service->term);//Get months for term to update the next due date to
|
||||
$new_due_date = Carbon::createFromFormat('Y-m-d', $service->next_due_date)->addMonths($months)->format('Y-m-d');
|
||||
DB::table('pricings')//Update the DB
|
||||
->where('service_id', $service->service_id)
|
||||
->update(['next_due_date' => $new_due_date]);
|
||||
$due_soon[$count]->next_due_date = $new_due_date;//Update array being sent to view
|
||||
$altered_due_soon = 1;
|
||||
if ($service->service_type === 1) {
|
||||
$server_due_date_changed = true;
|
||||
Server::serverSpecificCacheForget($service->service_id);
|
||||
}
|
||||
} else {
|
||||
break;//Break because if this date isnt past than the ones after it in the loop wont be either
|
||||
}
|
||||
$count++;
|
||||
}
|
||||
|
||||
if ($server_due_date_changed) {
|
||||
Server::serverRelatedCacheForget();
|
||||
}
|
||||
|
||||
if ($altered_due_soon === 1) {//Made changes to due soon so re-write it
|
||||
Cache::put('due_soon', $due_soon);
|
||||
}
|
||||
|
||||
return $due_soon;
|
||||
}
|
||||
|
||||
public static function breakdownPricing($all_pricing): array
|
||||
{
|
||||
$pricing = json_decode($all_pricing, true);
|
||||
|
||||
return Cache::remember('pricing_breakdown', now()->addWeek(1), function () use ($pricing) {
|
||||
$total_cost_weekly = $total_cost_pm = $inactive_count = 0;
|
||||
foreach ($pricing as $price) {
|
||||
if ($price['active'] === 1) {
|
||||
if (Session::get('dashboard_currency') !== 'USD') {
|
||||
$the_price = Pricing::convertFromUSD($price['as_usd'], Session::get('dashboard_currency'));
|
||||
} else {
|
||||
$the_price = $price['as_usd'];
|
||||
}
|
||||
if ($price['term'] === 1) {//1 month
|
||||
$total_cost_weekly += ($the_price / 4);
|
||||
$total_cost_pm += $the_price;
|
||||
} elseif ($price['term'] === 2) {//3 months
|
||||
$total_cost_weekly += ($the_price / 12);
|
||||
$total_cost_pm += ($the_price / 3);
|
||||
} elseif ($price['term'] === 3) {// 6 month
|
||||
$total_cost_weekly += ($the_price / 24);
|
||||
$total_cost_pm += ($the_price / 6);
|
||||
} elseif ($price['term'] === 4) {// 1 year
|
||||
$total_cost_weekly += ($the_price / 48);
|
||||
$total_cost_pm += ($the_price / 12);
|
||||
} elseif ($price['term'] === 5) {//2 years
|
||||
$total_cost_weekly += ($the_price / 96);
|
||||
$total_cost_pm += ($the_price / 24);
|
||||
} elseif ($price['term'] === 6) {//3 years
|
||||
$total_cost_weekly += ($the_price / 144);
|
||||
$total_cost_pm += ($the_price / 36);
|
||||
}
|
||||
} else {
|
||||
$inactive_count++;
|
||||
}
|
||||
}
|
||||
$total_cost_yearly = ($total_cost_pm * 12);
|
||||
|
||||
return array(
|
||||
'total_cost_weekly' => $total_cost_weekly,
|
||||
'total_cost_monthly' => $total_cost_pm,
|
||||
'total_cost_yearly' => $total_cost_yearly,
|
||||
'inactive_count' => $inactive_count,
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
public static function doServicesCount($services_count): array
|
||||
{
|
||||
$services_count = json_decode($services_count, true);
|
||||
|
||||
return Cache::remember('services_count_all', now()->addWeek(1), function () use ($services_count) {
|
||||
$servers_count = $domains_count = $shared_count = $reseller_count = $other_count = $seedbox_count = $total_services = 0;
|
||||
foreach ($services_count as $sc) {
|
||||
$total_services += $sc['amount'];
|
||||
if ($sc['service_type'] === 1) {
|
||||
$servers_count = $sc['amount'];
|
||||
} else if ($sc['service_type'] === 2) {
|
||||
$shared_count = $sc['amount'];
|
||||
} else if ($sc['service_type'] === 3) {
|
||||
$reseller_count = $sc['amount'];
|
||||
} else if ($sc['service_type'] === 4) {
|
||||
$domains_count = $sc['amount'];
|
||||
} else if ($sc['service_type'] === 5) {
|
||||
$other_count = $sc['amount'];
|
||||
} else if ($sc['service_type'] === 6) {
|
||||
$seedbox_count = $sc['amount'];
|
||||
}
|
||||
}
|
||||
|
||||
return array(
|
||||
'servers' => $servers_count,
|
||||
'shared' => $shared_count,
|
||||
'reseller' => $reseller_count,
|
||||
'domains' => $domains_count,
|
||||
'other' => $other_count,
|
||||
'seedbox' => $seedbox_count,
|
||||
'total' => $total_services
|
||||
);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -1,81 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
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
|
||||
{
|
||||
use HasFactory;
|
||||
|
||||
public $table = 'ips';
|
||||
|
||||
protected $keyType = 'string';
|
||||
|
||||
protected $fillable = ['id', 'service_id', 'address', 'is_ipv4', 'active', 'continent', 'country', 'region', 'city', 'org', 'isp', 'asn', 'timezone_gmt', 'fetched_at'];
|
||||
|
||||
public $incrementing = false;
|
||||
|
||||
public static function deleteIPsAssignedTo($service_id): void
|
||||
{
|
||||
DB::table('ips')->where('service_id', $service_id)->delete();
|
||||
}
|
||||
|
||||
public static function insertIP(string $service_id, string $address): IPs
|
||||
{
|
||||
return self::create(
|
||||
[
|
||||
'id' => Str::random(8),
|
||||
'service_id' => $service_id,
|
||||
'address' => $address,
|
||||
'is_ipv4' => (filter_var($address, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) ? 0 : 1,
|
||||
'active' => 1
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
public static function ipsForServer(string $server_id)
|
||||
{
|
||||
return Cache::remember("ip_addresses.$server_id", now()->addHours(1), function () use ($server_id) {
|
||||
return json_decode(DB::table('ips as i')
|
||||
->where('i.service_id', $server_id)
|
||||
->get(), true);
|
||||
});
|
||||
}
|
||||
|
||||
public function note(): \Illuminate\Database\Eloquent\Relations\HasOne
|
||||
{
|
||||
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();
|
||||
}
|
||||
|
||||
}
|
|
@ -1,60 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Mockery\Exception;
|
||||
|
||||
class Labels extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
|
||||
public $incrementing = false;
|
||||
|
||||
protected $table = 'labels';
|
||||
|
||||
protected $keyType = 'string';
|
||||
|
||||
protected $fillable = ['id', 'label', 'server_id', 'server_id_2', 'domain_id', 'domain_id_2', 'shared_id', 'shared_id_2'];
|
||||
|
||||
public static function deleteLabelsAssignedTo($service_id): void
|
||||
{
|
||||
LabelsAssigned::where('service_id', $service_id)->delete();
|
||||
}
|
||||
|
||||
public static function deleteLabelAssignedAs($label_id): void
|
||||
{
|
||||
LabelsAssigned::where('label_id', $label_id)->delete();
|
||||
}
|
||||
|
||||
public static function insertLabelsAssigned(array $labels_array, string $service_id): void
|
||||
{
|
||||
for ($i = 1; $i <= 4; $i++) {
|
||||
if (!is_null($labels_array[($i - 1)])) {
|
||||
try {
|
||||
LabelsAssigned::create([
|
||||
'label_id' => $labels_array[($i - 1)],
|
||||
'service_id' => $service_id
|
||||
]);
|
||||
} catch (Exception $exception) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static function labelsCount(): int
|
||||
{
|
||||
return Cache::remember('labels_count', now()->addMonth(1), function () {
|
||||
return Labels::count();
|
||||
});
|
||||
}
|
||||
|
||||
public function assigned(): \Illuminate\Database\Eloquent\Relations\HasMany
|
||||
{
|
||||
return $this->hasMany(LabelsAssigned::class, 'label_id', 'id');
|
||||
}
|
||||
|
||||
}
|
|
@ -1,27 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class LabelsAssigned extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
|
||||
public $incrementing = false;
|
||||
|
||||
public $timestamps = false;
|
||||
|
||||
public $table = 'labels_assigned';
|
||||
|
||||
protected $fillable = ['label_id', 'service_id'];
|
||||
|
||||
protected $keyType = 'string';
|
||||
|
||||
public function label(): \Illuminate\Database\Eloquent\Relations\HasOne
|
||||
{
|
||||
return $this->hasOne(Labels::class, 'id', 'label_id');
|
||||
}
|
||||
|
||||
}
|
|
@ -1,25 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
|
||||
class Locations extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
|
||||
protected $fillable = ['name'];
|
||||
|
||||
protected $table = 'locations';
|
||||
|
||||
protected $keyType = 'string';
|
||||
|
||||
public static function allLocations(): array
|
||||
{
|
||||
return Cache::remember("locations", now()->addMonth(1), function () {
|
||||
return self::orderBy('name')->get()->toArray();
|
||||
});
|
||||
}
|
||||
}
|
|
@ -1,60 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Support\Facades\Session;
|
||||
|
||||
class Misc extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
|
||||
public $incrementing = false;
|
||||
|
||||
protected $table = 'misc_services';
|
||||
|
||||
protected $keyType = 'string';
|
||||
|
||||
protected $fillable = ['id', 'name', 'owned_since'];
|
||||
|
||||
protected static function boot()
|
||||
{
|
||||
parent::boot();
|
||||
|
||||
static::addGlobalScope('order', function (Builder $builder) {
|
||||
$array = Settings::orderByProcess(Session::get('sort_on') ?? 2);//created_at desc if not set
|
||||
if (!in_array(Session::get('sort_on'), [3, 4, 5, 6], true)) {
|
||||
$builder->orderBy($array[0], $array[1]);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static function allMisc()
|
||||
{//All misc and relationships (no using joins)
|
||||
return Cache::remember("all_misc", now()->addMonth(1), function () {
|
||||
$query = Misc::with(['price']);
|
||||
if (in_array(Session::get('sort_on'), [3, 4, 5, 6], true)) {
|
||||
$options = Settings::orderByProcess(Session::get('sort_on'));
|
||||
$query->orderBy(Pricing::select("pricings.$options[0]")->whereColumn("pricings.service_id", "misc_services.id"), $options[1]);
|
||||
}
|
||||
return $query->get();
|
||||
});
|
||||
}
|
||||
|
||||
public static function misc(string $misc_id)
|
||||
{//Single misc and relationships (no using joins)
|
||||
return Cache::remember("misc.$misc_id", now()->addMonth(1), function () use ($misc_id) {
|
||||
return Misc::where('id', $misc_id)
|
||||
->with(['price'])->first();
|
||||
});
|
||||
}
|
||||
|
||||
public function price(): \Illuminate\Database\Eloquent\Relations\HasOne
|
||||
{
|
||||
return $this->hasOne(Pricing::class, 'service_id', 'id');
|
||||
}
|
||||
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class NetworkSpeed extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
|
||||
public $incrementing = false;
|
||||
|
||||
protected $keyType = 'string';
|
||||
|
||||
protected $table = 'network_speed';
|
||||
|
||||
protected $fillable = ['id', 'server_id', 'location', 'send', 'send_type', 'send_as_mbps', 'receive', 'receive_type', 'receive_as_mbps', 'created_at', 'updated_at'];
|
||||
|
||||
public function yabs(): \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
{
|
||||
return $this->belongsTo(Yabs::class, 'id', 'id');
|
||||
}
|
||||
}
|
|
@ -1,65 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
|
||||
class Note extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
|
||||
public $incrementing = false;
|
||||
|
||||
protected $table = 'notes';
|
||||
|
||||
protected $keyType = 'string';
|
||||
|
||||
protected $fillable = ['id', 'service_id', 'note'];
|
||||
|
||||
public static function note(string $service_id): Note
|
||||
{
|
||||
return Cache::remember("note.$service_id", now()->addMonth(1), function () use ($service_id) {
|
||||
return self::where('service_id', $service_id)->with(['server', 'shared', 'reseller', 'domain', 'dns', 'ip'])->first();
|
||||
});
|
||||
}
|
||||
|
||||
public static function allNotes()
|
||||
{
|
||||
return Cache::remember("all_notes", now()->addMonth(1), function () {
|
||||
return self::with(['server', 'shared', 'reseller', 'domain', 'dns', 'ip'])->orderBy('created_at', 'desc')->get();
|
||||
});
|
||||
}
|
||||
|
||||
public function server(): \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
{
|
||||
return $this->belongsTo(Server::class, 'service_id', 'id');
|
||||
}
|
||||
|
||||
public function shared(): \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
{
|
||||
return $this->belongsTo(Shared::class, 'service_id', 'id');
|
||||
}
|
||||
|
||||
public function reseller(): \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
{
|
||||
return $this->belongsTo(Reseller::class, 'service_id', 'id');
|
||||
}
|
||||
|
||||
public function domain(): \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
{
|
||||
return $this->belongsTo(Domains::class, 'service_id', 'id');
|
||||
}
|
||||
|
||||
public function dns(): \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
{
|
||||
return $this->belongsTo(DNS::class, 'service_id', 'id');
|
||||
}
|
||||
|
||||
public function ip(): \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||
{
|
||||
return $this->belongsTo(IPs::class, 'service_id', 'id');
|
||||
}
|
||||
|
||||
}
|
|
@ -1,25 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
|
||||
class OS extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
|
||||
protected $fillable = ['name'];
|
||||
|
||||
protected $keyType = 'string';
|
||||
|
||||
protected $table = 'os';
|
||||
|
||||
public static function allOS()
|
||||
{
|
||||
return Cache::remember("operating_systems", now()->addMonth(1), function () {
|
||||
return self::orderBy('name')->get();
|
||||
});
|
||||
}
|
||||
}
|
|
@ -1,151 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Exception;
|
||||
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\Log;
|
||||
|
||||
class Pricing extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
|
||||
protected $table = 'pricings';
|
||||
|
||||
public $incrementing = false;
|
||||
|
||||
protected $keyType = 'string';
|
||||
|
||||
protected $fillable = ['service_id', 'service_type', 'currency', 'price', 'term', 'as_usd', 'usd_per_month', 'next_due_date'];
|
||||
|
||||
private static function refreshRates(): object
|
||||
{
|
||||
if (Cache::has("currency_rates")) {
|
||||
return Cache::get("currency_rates");
|
||||
}
|
||||
$response_json = file_get_contents("https://open.er-api.com/v6/latest/USD");
|
||||
if (false === $response_json) {
|
||||
Log::error("do file_get_contents failed");
|
||||
return (object)null;
|
||||
}
|
||||
try {
|
||||
$response = json_decode($response_json);
|
||||
if ('success' === $response->result) {
|
||||
return Cache::remember("currency_rates", now()->addWeek(1), function () use ($response) {
|
||||
return $response->rates;
|
||||
});
|
||||
}
|
||||
Log::error("server response is " . $response->result . ", expecting success");
|
||||
} catch (Exception $e) {
|
||||
Log::error("failed to request v6.exchangerate-api.com", ['err' => $e]);
|
||||
}
|
||||
return (object)null;
|
||||
}
|
||||
|
||||
private static function getRates($currency): float
|
||||
{
|
||||
$rate = self::refreshRates()->$currency;
|
||||
return $rate ?? 1.00;
|
||||
}
|
||||
|
||||
public static function getCurrencyList(): array
|
||||
{
|
||||
return array_keys((array)self::refreshRates());
|
||||
}
|
||||
|
||||
public static function convertFromUSD(string $amount, string $convert_to): float
|
||||
{
|
||||
return $amount * self::getRates($convert_to);
|
||||
}
|
||||
|
||||
public function convertToUSD(string $amount, string $convert_from): float
|
||||
{
|
||||
return $amount / self::getRates($convert_from);
|
||||
}
|
||||
|
||||
public function costAsPerMonth(string $cost, int $term): float
|
||||
{
|
||||
if ($term === 1) {
|
||||
return $cost;
|
||||
} elseif ($term === 2) {
|
||||
return ($cost / 3);
|
||||
} elseif ($term === 3) {
|
||||
return ($cost / 6);
|
||||
} elseif ($term === 4) {
|
||||
return ($cost / 12);
|
||||
} elseif ($term === 5) {
|
||||
return ($cost / 24);
|
||||
} elseif ($term === 6) {
|
||||
return ($cost / 36);
|
||||
} else {
|
||||
return $cost;
|
||||
}
|
||||
}
|
||||
|
||||
public function termAsMonths(int $term): int
|
||||
{
|
||||
if ($term === 1) {
|
||||
return 1;
|
||||
} elseif ($term === 2) {
|
||||
return 3;
|
||||
} elseif ($term === 3) {
|
||||
return 6;
|
||||
} elseif ($term === 4) {
|
||||
return 12;
|
||||
} elseif ($term === 5) {
|
||||
return 24;
|
||||
} elseif ($term === 6) {
|
||||
return 36;
|
||||
} else {
|
||||
return 62;
|
||||
}
|
||||
}
|
||||
|
||||
public function deletePricing($id): void
|
||||
{
|
||||
DB::table('pricings')->where('service_id', $id)->delete();
|
||||
}
|
||||
|
||||
public function insertPricing(int $type, string $service_id, string $currency, float $price, int $term, string $next_due_date, int $is_active = 1): Pricing
|
||||
{
|
||||
$as_usd = $this->convertToUSD($price, $currency);
|
||||
return self::create([
|
||||
'service_type' => $type,
|
||||
'service_id' => $service_id,
|
||||
'currency' => $currency,
|
||||
'price' => $price,
|
||||
'term' => $term,
|
||||
'as_usd' => $as_usd,
|
||||
'usd_per_month' => $this->costAsPerMonth($as_usd, $term),
|
||||
'next_due_date' => $next_due_date,
|
||||
'active' => $is_active
|
||||
]);
|
||||
}
|
||||
|
||||
public function updatePricing(string $service_id, string $currency, float $price, int $term, string $next_due_date, int $is_active = 1): int
|
||||
{
|
||||
$as_usd = $this->convertToUSD($price, $currency);
|
||||
return DB::table('pricings')
|
||||
->where('service_id', $service_id)
|
||||
->update([
|
||||
'currency' => $currency,
|
||||
'price' => $price,
|
||||
'term' => $term,
|
||||
'as_usd' => $as_usd,
|
||||
'usd_per_month' => $this->costAsPerMonth($as_usd, $term),
|
||||
'next_due_date' => $next_due_date,
|
||||
'active' => $is_active
|
||||
]);
|
||||
}
|
||||
|
||||
public static function allPricing()
|
||||
{
|
||||
return Cache::remember('all_active_pricing', now()->addWeek(1), function () {
|
||||
return Pricing::where('active', 1)->get();
|
||||
});
|
||||
}
|
||||
|
||||
}
|
|
@ -1,46 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class Providers extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
|
||||
protected $fillable = ['name'];
|
||||
|
||||
protected $keyType = 'string';
|
||||
|
||||
protected $table = 'providers';
|
||||
|
||||
public static function allProviders(): array
|
||||
{
|
||||
return Cache::remember("providers", now()->addMonth(1), function () {
|
||||
return self::orderBy('name')->get()->toArray();
|
||||
});
|
||||
}
|
||||
|
||||
public static function showServicesForProvider($provider): array
|
||||
{
|
||||
$servers = DB::table('servers as s')
|
||||
->where('s.provider_id', $provider)
|
||||
->get(['s.id', 's.hostname'])
|
||||
->toArray();
|
||||
|
||||
$shared = DB::table('shared_hosting as s')
|
||||
->where('s.provider_id', $provider)
|
||||
->get(['s.id', 's.main_domain as main_domain_shared'])
|
||||
->toArray();
|
||||
|
||||
$reseller = DB::table('reseller_hosting as r')
|
||||
->where('r.provider_id', $provider)
|
||||
->get(['r.id', 'r.main_domain as main_domain_reseller'])
|
||||
->toArray();
|
||||
|
||||
return array_merge($servers, $shared, $reseller);
|
||||
}
|
||||
}
|
|
@ -1,86 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
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\Session;
|
||||
|
||||
class Reseller extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
|
||||
protected $table = 'reseller_hosting';
|
||||
|
||||
protected $keyType = 'string';
|
||||
|
||||
protected $fillable = ['id', 'active', 'accounts', 'main_domain', 'has_dedicated_ip', 'ip', 'reseller_type', 'provider_id', 'location_id', 'bandwidth', 'disk', 'disk_type', 'disk_as_gb', 'domains_limit', 'subdomains_limit', 'ftp_limit', 'email_limit', 'db_limit', 'was_promo', 'owned_since'];
|
||||
|
||||
public $incrementing = false;
|
||||
|
||||
protected static function boot()
|
||||
{
|
||||
parent::boot();
|
||||
|
||||
static::addGlobalScope('order', function (Builder $builder) {
|
||||
$array = Settings::orderByProcess(Session::get('sort_on') ?? 2);//created_at desc if not set
|
||||
if (!in_array(Session::get('sort_on'), [3, 4, 5, 6], true)) {
|
||||
$builder->orderBy($array[0], $array[1]);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static function allResellerHosting()
|
||||
{//All reseller hosting and relationships (no using joins)
|
||||
return Cache::remember("all_reseller", now()->addMonth(1), function () {
|
||||
$query = Reseller::with(['location', 'provider', 'price', 'ips', 'labels']);
|
||||
if (in_array(Session::get('sort_on'), [3, 4, 5, 6], true)) {
|
||||
$options = Settings::orderByProcess(Session::get('sort_on'));
|
||||
$query->orderBy(Pricing::select("pricings.$options[0]")->whereColumn("pricings.service_id", "reseller_hosting.id"), $options[1]);
|
||||
}
|
||||
return $query->get();
|
||||
});
|
||||
}
|
||||
|
||||
public static function resellerHosting(string $reseller_id)
|
||||
{//Single reseller hosting and relationships (no using joins)
|
||||
return Cache::remember("reseller_hosting.$reseller_id", now()->addMonth(1), function () use ($reseller_id) {
|
||||
return Reseller::where('id', $reseller_id)
|
||||
->with(['location', 'provider', 'price', 'ips', 'labels'])->first();
|
||||
});
|
||||
}
|
||||
|
||||
public function ips(): \Illuminate\Database\Eloquent\Relations\HasMany
|
||||
{
|
||||
return $this->hasMany(IPs::class, 'service_id', 'id');
|
||||
}
|
||||
|
||||
public function location(): \Illuminate\Database\Eloquent\Relations\HasOne
|
||||
{
|
||||
return $this->hasOne(Locations::class, 'id', 'location_id');
|
||||
}
|
||||
|
||||
public function provider(): \Illuminate\Database\Eloquent\Relations\HasOne
|
||||
{
|
||||
return $this->hasOne(Providers::class, 'id', 'provider_id');
|
||||
}
|
||||
|
||||
public function price(): \Illuminate\Database\Eloquent\Relations\HasOne
|
||||
{
|
||||
return $this->hasOne(Pricing::class, 'service_id', 'id');
|
||||
}
|
||||
|
||||
public function labels(): \Illuminate\Database\Eloquent\Relations\HasMany
|
||||
{
|
||||
return $this->hasMany(LabelsAssigned::class, 'service_id', 'id');
|
||||
}
|
||||
|
||||
public function note(): \Illuminate\Database\Eloquent\Relations\HasOne
|
||||
{
|
||||
return $this->hasOne(Note::class, 'service_id', 'id');
|
||||
}
|
||||
|
||||
}
|
|
@ -1,75 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Support\Facades\Session;
|
||||
|
||||
class SeedBoxes extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
|
||||
protected $table = 'seedboxes';
|
||||
|
||||
protected $keyType = 'string';
|
||||
|
||||
public $incrementing = false;
|
||||
|
||||
protected $fillable = ['id', 'active', 'title', 'hostname', 'seed_box_type', 'provider_id', 'location_id', 'bandwidth', 'port_speed', 'disk', 'disk_type', 'disk_as_gb', 'was_promo', 'owned_since'];
|
||||
|
||||
protected static function boot()
|
||||
{
|
||||
parent::boot();
|
||||
|
||||
static::addGlobalScope('order', function (Builder $builder) {
|
||||
$array = Settings::orderByProcess(Session::get('sort_on') ?? 2);//created_at desc if not set
|
||||
if (!in_array(Session::get('sort_on'), [3, 4, 5, 6], true)) {
|
||||
$builder->orderBy($array[0], $array[1]);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static function allSeedboxes()
|
||||
{//All seedboxes and relationships (no using joins)
|
||||
return Cache::remember("all_seedboxes", now()->addMonth(1), function () {
|
||||
$query = SeedBoxes::with(['location', 'provider', 'price']);
|
||||
if (in_array(Session::get('sort_on'), [3, 4, 5, 6], true)) {
|
||||
$options = Settings::orderByProcess(Session::get('sort_on'));
|
||||
$query->orderBy(Pricing::select("pricings.$options[0]")->whereColumn("pricings.service_id", "seedboxes.id"), $options[1]);
|
||||
}
|
||||
return $query->get();
|
||||
});
|
||||
}
|
||||
|
||||
public static function seedbox(string $seedbox_id)
|
||||
{//Single seedbox and relationships (no using joins)
|
||||
return Cache::remember("seedbox.$seedbox_id", now()->addMonth(1), function () use ($seedbox_id) {
|
||||
return SeedBoxes::where('id', $seedbox_id)
|
||||
->with(['location', 'provider', 'price'])->first();
|
||||
});
|
||||
}
|
||||
|
||||
public function location(): \Illuminate\Database\Eloquent\Relations\HasOne
|
||||
{
|
||||
return $this->hasOne(Locations::class, 'id', 'location_id');
|
||||
}
|
||||
|
||||
public function provider(): \Illuminate\Database\Eloquent\Relations\HasOne
|
||||
{
|
||||
return $this->hasOne(Providers::class, 'id', 'provider_id');
|
||||
}
|
||||
|
||||
public function price(): \Illuminate\Database\Eloquent\Relations\HasOne
|
||||
{
|
||||
return $this->hasOne(Pricing::class, 'service_id', 'id');
|
||||
}
|
||||
|
||||
public function labels(): \Illuminate\Database\Eloquent\Relations\HasMany
|
||||
{
|
||||
return $this->hasMany(LabelsAssigned::class, 'service_id', 'id');
|
||||
}
|
||||
|
||||
}
|
|
@ -1,239 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Support\Facades\Session;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
|
||||
class Server extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
|
||||
protected $table = 'servers';
|
||||
|
||||
protected $keyType = 'string';
|
||||
|
||||
public $incrementing = false;
|
||||
|
||||
protected $fillable = ['id', 'hostname', 'ipv4', 'ipv6', 'server_type', 'os_id', 'location_id', 'provider_id',
|
||||
'ram', 'disk', 'ram_type', 'disk_type', 'ns1', 'ns2', 'label', 'bandwidth', 'ram_as_mb', 'disk_as_gb',
|
||||
'has_yabs', 'was_promo', 'owned_since', 'ssh', 'active', 'show_public', 'cpu'];
|
||||
/**
|
||||
* @var mixed
|
||||
*/
|
||||
private $id;
|
||||
|
||||
protected static function boot()
|
||||
{
|
||||
parent::boot();
|
||||
|
||||
static::addGlobalScope('order', function (Builder $builder) {
|
||||
$array = Settings::orderByProcess(Session::get('sort_on') ?? 2);//created_at desc if not set
|
||||
if (!in_array(Session::get('sort_on'), [3, 4, 5, 6], true)) {
|
||||
$builder->orderBy($array[0], $array[1]);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static function allServers()
|
||||
{//All servers and relationships (no using joins)
|
||||
return Cache::remember("all_servers", now()->addMonth(1), function () {
|
||||
$query = Server::with(['location', 'provider', 'os', 'price', 'ips', 'yabs', 'yabs.disk_speed', 'yabs.network_speed', 'labels']);
|
||||
if (in_array(Session::get('sort_on'), [3, 4, 5, 6], true)) {
|
||||
$options = Settings::orderByProcess(Session::get('sort_on'));
|
||||
$query->orderBy(Pricing::select("pricings.$options[0]")->whereColumn("pricings.service_id", "servers.id"), $options[1]);
|
||||
}
|
||||
return $query->get();
|
||||
});
|
||||
}
|
||||
|
||||
public static function server(string $server_id): Server
|
||||
{//Single server and relationships (no using joins)
|
||||
return Cache::remember("server.$server_id", now()->addMonth(1), function () use ($server_id) {
|
||||
return Server::where('id', $server_id)
|
||||
->with(['location', 'provider', 'os', 'price', 'ips', 'yabs', 'yabs.disk_speed', 'yabs.network_speed', 'labels'])->first();
|
||||
});
|
||||
}
|
||||
|
||||
public static function allActiveServers()
|
||||
{//All ACTIVE servers and relationships replaces activeServersDataIndexPage()
|
||||
return Cache::remember("all_active_servers", now()->addMonth(1), function () {
|
||||
$query = Server::where('active', 1)
|
||||
->with(['location', 'provider', 'os', 'ips', 'yabs', 'yabs.disk_speed', 'yabs.network_speed', 'labels', 'price']);
|
||||
if (in_array(Session::get('sort_on'), [3, 4, 5, 6], true)) {
|
||||
$options = Settings::orderByProcess(Session::get('sort_on'));
|
||||
$query->orderBy(Pricing::select("pricings.$options[0]")->whereColumn("pricings.service_id", "servers.id"), $options[1]);
|
||||
}
|
||||
return $query->get();
|
||||
});
|
||||
}
|
||||
|
||||
public static function allNonActiveServers()
|
||||
{//All NON ACTIVE servers and relationships replaces nonActiveServersDataIndexPage()
|
||||
return Cache::remember("non_active_servers", now()->addMonth(1), function () {
|
||||
return Server::where('active', 0)
|
||||
->with(['location', 'provider', 'os', 'price', 'ips', 'yabs', 'yabs.disk_speed', 'yabs.network_speed', 'labels'])
|
||||
->get();
|
||||
});
|
||||
}
|
||||
|
||||
public static function allPublicServers()
|
||||
{//server data that will be publicly viewable (values in settings)
|
||||
return Cache::remember("public_server_data", now()->addMonth(1), function () {
|
||||
return Server::where('show_public', 1)
|
||||
->with(['location', 'provider', 'os', 'price', 'ips', 'yabs', 'yabs.disk_speed', 'yabs.network_speed', 'labels'])
|
||||
->get();
|
||||
});
|
||||
}
|
||||
|
||||
public static function serviceServerType(int $type, bool $short = true): string
|
||||
{
|
||||
if ($type === 1) {
|
||||
return "KVM";
|
||||
} elseif ($type === 2) {
|
||||
return "OVZ";
|
||||
} elseif ($type === 3) {
|
||||
if (!$short) {
|
||||
return "Dedicated";
|
||||
}
|
||||
return "DEDI";
|
||||
} elseif ($type === 4) {
|
||||
return "LXC";
|
||||
} elseif ($type === 6) {
|
||||
return "VMware";
|
||||
} elseif ($type === 7) {
|
||||
return "NAT";
|
||||
} else {
|
||||
if (!$short) {
|
||||
return "Semi-dedicated";
|
||||
}
|
||||
return "SEMI-DEDI";
|
||||
}
|
||||
}
|
||||
|
||||
public static function osIntToIcon(int $os, string $os_name): string
|
||||
{
|
||||
if ($os === 1) {//None
|
||||
return "<i class='fas fa-expand' title='{$os_name}'></i>";
|
||||
} else if ($os <= 3) {//Centos
|
||||
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='fa-solid fa-compact-disc os-icon' title='{$os_name}'></i>";
|
||||
}
|
||||
}
|
||||
|
||||
public static function tableRowCompare(string $val1, string $val2, string $value_type = '', bool $is_int = true): string
|
||||
{
|
||||
//<td class="td-nowrap plus-td">+303<span class="data-type">MBps</span></td>
|
||||
$str = '<td class="td-nowrap ';
|
||||
$value_append = '<span class="data-type">' . $value_type . '</span>';
|
||||
if ($is_int) {
|
||||
$val1 = (int)$val1;
|
||||
$val2 = (int)$val2;
|
||||
}
|
||||
if ($val1 > $val2) {//val1 is greater than val2
|
||||
$result = '+' . ($val1 - $val2);
|
||||
if (!empty($value_type)) {
|
||||
$result = '+' . ($val1 - $val2) . $value_append;
|
||||
|
||||
}
|
||||
$str .= 'plus-td">' . $result . '</td>';
|
||||
} elseif ($val1 < $val2) {//val1 is less than val2
|
||||
$result = '-' . ($val2 - $val1);
|
||||
if (!empty($value_type)) {
|
||||
$result = '-' . ($val2 - $val1) . $value_append;
|
||||
}
|
||||
$str .= 'neg-td">' . $result . '</td>';
|
||||
} else {//Equal
|
||||
$result = 0;
|
||||
if (!empty($value_type)) {
|
||||
$result = '0' . $value_append;
|
||||
}
|
||||
$str .= 'equal-td">' . $result . '</td>';
|
||||
}
|
||||
return $str;
|
||||
}
|
||||
|
||||
public static function serverRelatedCacheForget(): void
|
||||
{
|
||||
Cache::forget('all_servers');//All servers
|
||||
Cache::forget('services_count');//Main page services_count cache
|
||||
Cache::forget('due_soon');//Main page due_soon cache
|
||||
Cache::forget('recently_added');//Main page recently_added cache
|
||||
Cache::forget('all_active_servers');//all active servers cache
|
||||
Cache::forget('non_active_servers');//all non active servers cache
|
||||
Cache::forget('servers_summary');//servers summary cache
|
||||
Cache::forget('public_server_data');//public servers
|
||||
Cache::forget('all_pricing');//All pricing
|
||||
Cache::forget('services_count_all');
|
||||
Cache::forget('pricing_breakdown');
|
||||
Cache::forget('all_active_pricing');
|
||||
}
|
||||
|
||||
public static function serverSpecificCacheForget(string $server_id): void
|
||||
{
|
||||
Cache::forget("server.$server_id");//Will replace one below
|
||||
Cache::forget("service_pricing.$server_id");//Pricing
|
||||
}
|
||||
|
||||
public static function serverYabsAmount(string $server_id): int
|
||||
{//Returns amount of YABS a server has
|
||||
return Yabs::where('server_id', $server_id)->count();
|
||||
}
|
||||
|
||||
public function yabs(): \Illuminate\Database\Eloquent\Relations\HasMany
|
||||
{
|
||||
return $this->hasMany(Yabs::class, 'server_id', 'id');
|
||||
}
|
||||
|
||||
public function ips(): \Illuminate\Database\Eloquent\Relations\HasMany
|
||||
{
|
||||
return $this->hasMany(IPs::class, 'service_id', 'id');
|
||||
}
|
||||
|
||||
public function location(): \Illuminate\Database\Eloquent\Relations\HasOne
|
||||
{
|
||||
return $this->hasOne(Locations::class, 'id', 'location_id');
|
||||
}
|
||||
|
||||
public function provider(): \Illuminate\Database\Eloquent\Relations\HasOne
|
||||
{
|
||||
return $this->hasOne(Providers::class, 'id', 'provider_id');
|
||||
}
|
||||
|
||||
public function os(): \Illuminate\Database\Eloquent\Relations\HasOne
|
||||
{
|
||||
return $this->hasOne(OS::class, 'id', 'os_id');
|
||||
}
|
||||
|
||||
public function price(): \Illuminate\Database\Eloquent\Relations\HasOne
|
||||
{
|
||||
return $this->hasOne(Pricing::class, 'service_id', 'id');
|
||||
}
|
||||
|
||||
public function labels(): \Illuminate\Database\Eloquent\Relations\HasMany
|
||||
{
|
||||
return $this->hasMany(LabelsAssigned::class, 'service_id', 'id');
|
||||
}
|
||||
|
||||
public function note(): \Illuminate\Database\Eloquent\Relations\HasOne
|
||||
{
|
||||
return $this->hasOne(Note::class, 'service_id', 'id');
|
||||
}
|
||||
|
||||
}
|
|
@ -1,77 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Support\Facades\Session;
|
||||
|
||||
class Settings extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
|
||||
protected $table = 'settings';
|
||||
|
||||
protected $fillable = ['id', 'show_versions_footer', 'show_servers_public', 'show_server_value_ip', 'show_server_value_hostname', 'show_server_value_provider', 'show_server_value_location', 'show_server_value_price', 'show_server_value_yabs', 'save_yabs_as_txt', 'default_currency', 'default_server_os', 'due_soon_amount', 'recently_added_amount', 'dark_mode', 'dashboard_currency', 'sort_on', 'favicon'];
|
||||
|
||||
public static function getSettings(): Settings
|
||||
{
|
||||
return Cache::remember('settings', now()->addWeek(1), function () {
|
||||
$settings = self::where('id', 1)->first();
|
||||
if (is_null($settings)){
|
||||
$settings = Settings::create();
|
||||
}
|
||||
return $settings;
|
||||
});
|
||||
}
|
||||
|
||||
public static function setSettingsToSession($settings): void
|
||||
{
|
||||
Session::put('dark_mode', $settings->dark_mode ?? 0);
|
||||
Session::put('timer_version_footer', $settings->show_versions_footer ?? 1);
|
||||
Session::put('show_servers_public', $settings->show_servers_public ?? 0);
|
||||
Session::put('show_server_value_ip', $settings->show_server_value_ip ?? 0);
|
||||
Session::put('show_server_value_hostname', $settings->show_server_value_hostname ?? 0);
|
||||
Session::put('show_server_value_price', $settings->show_server_value_price ?? 0);
|
||||
Session::put('show_server_value_yabs', $settings->show_server_value_yabs ?? 0);
|
||||
Session::put('show_server_value_provider', $settings->show_server_value_provider ?? 0);
|
||||
Session::put('show_server_value_location', $settings->show_server_value_location ?? 0);
|
||||
Session::put('save_yabs_as_txt', $settings->save_yabs_as_txt ?? 0);
|
||||
Session::put('default_currency', $settings->default_currency ?? 'USD');
|
||||
Session::put('default_server_os', $settings->default_server_os ?? 1);
|
||||
Session::put('due_soon_amount', $settings->due_soon_amount ?? 6);
|
||||
Session::put('recently_added_amount', $settings->recently_added_amount ?? 6);
|
||||
Session::put('dashboard_currency', $settings->dashboard_currency ?? 'USD');
|
||||
Session::put('sort_on', $settings->sort_on ?? 1);
|
||||
Session::put('favicon', $settings->favicon ?? 'favicon.ico');
|
||||
Session::save();
|
||||
}
|
||||
|
||||
public static function orderByProcess(int $value): array
|
||||
{
|
||||
if ($value === 1) {//created_at ASC
|
||||
return ['created_at', 'asc'];
|
||||
} elseif ($value === 2) {//created_at DESC
|
||||
return ['created_at', 'desc'];
|
||||
} elseif ($value === 3) {//next_due_date ASC
|
||||
return ['next_due_date', 'asc'];
|
||||
} elseif ($value === 4) {//next_due_date DESC
|
||||
return ['next_due_date', 'desc'];
|
||||
} elseif ($value === 5) {//as_usd ASC
|
||||
return ['as_usd', 'asc'];
|
||||
} elseif ($value === 6) {//as_usd DESC
|
||||
return ['as_usd', 'desc'];
|
||||
} elseif ($value === 7) {//owned_since ASC
|
||||
return ['owned_since', 'asc'];
|
||||
} elseif ($value === 8) {//owned_since DESC
|
||||
return ['owned_since', 'desc'];
|
||||
} elseif ($value === 9) {//updated_at ASC
|
||||
return ['updated_at', 'asc'];
|
||||
} elseif ($value === 10) {//updated_at DESC
|
||||
return ['updated_at', 'desc'];
|
||||
}
|
||||
return ['created_at', 'desc'];
|
||||
}
|
||||
|
||||
}
|
|
@ -1,85 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Support\Facades\Session;
|
||||
|
||||
class Shared extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
|
||||
public $table = 'shared_hosting';
|
||||
|
||||
protected $keyType = 'string';
|
||||
|
||||
protected $fillable = ['id', 'active', 'main_domain', 'has_dedicated_ip', 'ip', 'shared_type', 'provider_id', 'location_id', 'bandwidth', 'disk', 'disk_type', 'disk_as_gb', 'domains_limit', 'subdomains_limit', 'ftp_limit', 'email_limit', 'db_limit', 'was_promo', 'owned_since'];
|
||||
|
||||
public $incrementing = false;
|
||||
|
||||
protected static function boot()
|
||||
{
|
||||
parent::boot();
|
||||
|
||||
static::addGlobalScope('order', function (Builder $builder) {
|
||||
$array = Settings::orderByProcess(Session::get('sort_on') ?? 2);//created_at desc if not set
|
||||
if (!in_array(Session::get('sort_on'), [3, 4, 5, 6], true)) {
|
||||
$builder->orderBy($array[0], $array[1]);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static function allSharedHosting()
|
||||
{//All shared hosting and relationships (no using joins)
|
||||
return Cache::remember("all_shared", now()->addMonth(1), function () {
|
||||
$query = Shared::with(['location', 'provider', 'price', 'ips', 'labels']);
|
||||
if (in_array(Session::get('sort_on'), [3, 4, 5, 6], true)) {
|
||||
$options = Settings::orderByProcess(Session::get('sort_on'));
|
||||
$query->orderBy(Pricing::select("pricings.$options[0]")->whereColumn("pricings.service_id", "shared_hosting.id"), $options[1]);
|
||||
}
|
||||
return $query->get();
|
||||
});
|
||||
}
|
||||
|
||||
public static function sharedHosting(string $shared_id)
|
||||
{//Single shared hosting and relationships (no using joins)
|
||||
return Cache::remember("shared_hosting.$shared_id", now()->addMonth(1), function () use ($shared_id) {
|
||||
return Shared::where('id', $shared_id)
|
||||
->with(['location', 'provider', 'price', 'ips', 'labels'])->first();
|
||||
});
|
||||
}
|
||||
|
||||
public function ips(): \Illuminate\Database\Eloquent\Relations\HasMany
|
||||
{
|
||||
return $this->hasMany(IPs::class, 'service_id', 'id');
|
||||
}
|
||||
|
||||
public function location(): \Illuminate\Database\Eloquent\Relations\HasOne
|
||||
{
|
||||
return $this->hasOne(Locations::class, 'id', 'location_id');
|
||||
}
|
||||
|
||||
public function provider(): \Illuminate\Database\Eloquent\Relations\HasOne
|
||||
{
|
||||
return $this->hasOne(Providers::class, 'id', 'provider_id');
|
||||
}
|
||||
|
||||
public function price(): \Illuminate\Database\Eloquent\Relations\HasOne
|
||||
{
|
||||
return $this->hasOne(Pricing::class, 'service_id', 'id');
|
||||
}
|
||||
|
||||
public function labels(): \Illuminate\Database\Eloquent\Relations\HasMany
|
||||
{
|
||||
return $this->hasMany(LabelsAssigned::class, 'service_id', 'id');
|
||||
}
|
||||
|
||||
public function note(): \Illuminate\Database\Eloquent\Relations\HasOne
|
||||
{
|
||||
return $this->hasOne(Note::class, 'service_id', 'id');
|
||||
}
|
||||
|
||||
}
|
|
@ -1,44 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Contracts\Auth\MustVerifyEmail;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
|
||||
class User extends Authenticatable
|
||||
{
|
||||
use HasFactory, Notifiable;
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $fillable = [
|
||||
'name',
|
||||
'email',
|
||||
'password',
|
||||
'api_token'
|
||||
];
|
||||
|
||||
/**
|
||||
* The attributes that should be hidden for arrays.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $hidden = [
|
||||
'password',
|
||||
'remember_token',
|
||||
];
|
||||
|
||||
/**
|
||||
* The attributes that should be cast to native types.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $casts = [
|
||||
'email_verified_at' => 'datetime',
|
||||
];
|
||||
}
|
|
@ -1,337 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use DateTime;
|
||||
use Exception;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class Yabs extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
|
||||
public $incrementing = false;
|
||||
|
||||
protected $keyType = 'string';
|
||||
|
||||
protected $table = 'yabs';
|
||||
|
||||
protected $fillable = ['id', 'server_id', 'has_ipv6', 'aes', 'vm', 'output_date', 'cpu_cores', 'cpu_freq', 'cpu_model', 'ram', 'ram_type', 'ram_mb', 'disk', 'disk_type', 'disk_gb', 'gb5_single', 'gb5_multi', 'gb5_id', 'gb6_single', 'gb6_multi', 'gb6_id', '4k', '4k_type', '4k_as_mbps', '64k', '64k_type', '64k_as_mbps', '512k', '512k_type', '512k_as_mbps', '1m', '1m_type', '1m_as_mbps', 'location', 'send', 'send_type', 'send_as_mbps', 'receive', 'receive_type', 'receive_as_mbps', 'uptime', 'distro', 'kernel', 'swap', 'swap_type', 'swap_mb'];
|
||||
|
||||
public static function yabs(string $yabs_id)
|
||||
{
|
||||
return Cache::remember("yabs.$yabs_id", now()->addMonth(1), function () use ($yabs_id) {
|
||||
return self::where('id', $yabs_id)->with(['server', 'disk_speed', 'network_speed', 'server.location', 'server.provider'])
|
||||
->first();
|
||||
});
|
||||
}
|
||||
|
||||
public static function allYabs()
|
||||
{
|
||||
return Cache::remember("all_yabs", now()->addMonth(1), function () {
|
||||
return self::with(['server', 'disk_speed', 'network_speed', 'server.location', 'server.provider'])
|
||||
->get();
|
||||
});
|
||||
}
|
||||
|
||||
public function server(): \Illuminate\Database\Eloquent\Relations\HasOne
|
||||
{
|
||||
return $this->hasOne(Server::class, 'id', 'server_id');
|
||||
}
|
||||
|
||||
public function disk_speed(): \Illuminate\Database\Eloquent\Relations\HasOne
|
||||
{
|
||||
return $this->hasOne(DiskSpeed::class, 'id', 'id');
|
||||
}
|
||||
|
||||
public function network_speed(): \Illuminate\Database\Eloquent\Relations\HasMany
|
||||
{
|
||||
return $this->hasMany(NetworkSpeed::class, 'id', 'id');
|
||||
}
|
||||
|
||||
public static function buildYabsArray($data): array
|
||||
{
|
||||
$speed_tests = [];
|
||||
foreach ($data->network_speed as $ns) {
|
||||
$speed_tests[] = [
|
||||
'location' => $ns->location,
|
||||
'send' => $ns->send . ' ' . $ns->send_type,
|
||||
'receive' => $ns->receive . ' ' . $ns->receive_type,
|
||||
];
|
||||
}
|
||||
return [
|
||||
'date_time' => $data->output_date,
|
||||
'location' => $data->server->location->name,
|
||||
'provider' => $data->server->provider->name,
|
||||
'uptime' => $data->uptime,
|
||||
'distro' => $data->distro,
|
||||
'kernel' => $data->kernel,
|
||||
'cpu' => [
|
||||
'cores' => $data->cpu_cores,
|
||||
'speed_mhz' => $data->cpu_freq,
|
||||
'model' => $data->cpu_model,
|
||||
'aes' => $data->aes === 1,
|
||||
'vm' => $data->vm === 1,
|
||||
'GB5_single' => $data->gb5_single,
|
||||
'GB5_multi' => $data->gb5_multi,
|
||||
],
|
||||
'ram' => [
|
||||
'amount' => $data->ram . ' ' . $data->ram_type,
|
||||
'mb' => $data->ram_mb,
|
||||
'swap' => [
|
||||
'amount' => $data->swap ?? null . ' ' . $data->swap_type ?? null,
|
||||
'mb' => $data->swap_mb ?? null,
|
||||
],
|
||||
],
|
||||
'disk' => [
|
||||
'amount' => $data->disk . ' ' . $data->disk_type,
|
||||
'gb' => $data->disk_gb,
|
||||
'speed_tests' => [
|
||||
'4k' => $data->disk_speed->d_4k . ' ' . $data->disk_speed->d_4k_type,
|
||||
'64k' => $data->disk_speed->d_64k . ' ' . $data->disk_speed->d_64k_type,
|
||||
'512k' => $data->disk_speed->d_512k . ' ' . $data->disk_speed->d_512k_type,
|
||||
'1m' => $data->disk_speed->d_1m . ' ' . $data->disk_speed->d_1m_type,
|
||||
],
|
||||
],
|
||||
'network' => [
|
||||
'has_ipv6' => $data->has_ipv6 === 1,
|
||||
'speed_tests' => $speed_tests
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
public static function speedAsMbps(string $string): float
|
||||
{
|
||||
$data = explode(" ", $string);
|
||||
if ($data[0] === 'busy') {
|
||||
return 0;
|
||||
}
|
||||
if ($data[1] === "Gbits/sec") {
|
||||
return $data[0] * 1000;
|
||||
} else if ($data[1] === "Mbits/sec") {
|
||||
return $data[0];
|
||||
} else {//Kbps
|
||||
return $data[0] / 1000;
|
||||
}
|
||||
}
|
||||
|
||||
public static function speedType(string $string): string
|
||||
{
|
||||
$data = explode(" ", $string);
|
||||
if ($data[0] === 'busy') {
|
||||
return "MBps";
|
||||
}
|
||||
if ($data[1] === "Gbits/sec") {
|
||||
return "GBps";
|
||||
} else if ($data[1] === "Mbits/sec") {
|
||||
return "MBps";
|
||||
} else {//Kbps
|
||||
return "KBps";
|
||||
}
|
||||
}
|
||||
|
||||
public static function speedAsFloat(string $string): float
|
||||
{
|
||||
$data = explode(" ", $string);
|
||||
if ($data[0] === 'busy') {
|
||||
return 0;
|
||||
}
|
||||
return (float)$data[0];
|
||||
}
|
||||
|
||||
public static function formatRunTime(string $date): string
|
||||
{
|
||||
return DateTime::createFromFormat('Ymd-His', $date)->format('Y-m-d H:i:s');
|
||||
}
|
||||
|
||||
public static function gb5IdFromURL(string $url): int
|
||||
{
|
||||
return str_replace("https://browser.geekbench.com/v5/cpu/", "", $url);
|
||||
}
|
||||
|
||||
public static function gb6IdFromURL(string $url): int
|
||||
{
|
||||
return str_replace("https://browser.geekbench.com/v6/cpu/", "", $url);
|
||||
}
|
||||
|
||||
public static function KBstoMBs(int $kbs): float
|
||||
{
|
||||
return $kbs / 1000;
|
||||
}
|
||||
|
||||
public static function insertFromJson($data, string $server_id): bool
|
||||
{
|
||||
$data = (object)$data;
|
||||
try {
|
||||
$date_ran = self::formatRunTime($data->time);
|
||||
$version = $data['version'];
|
||||
$has_ipv4 = $data['net']['ipv4'];
|
||||
$has_ipv6 = $data['net']['ipv6'];
|
||||
//OS
|
||||
$arch = $data['os']['arch'];
|
||||
$distro = $data['os']['distro'];
|
||||
$kernel = $data['os']['kernel'];
|
||||
$uptime = $data['os']['uptime'];
|
||||
//CPU
|
||||
$model = $data['cpu']['model'];
|
||||
$cores = $data['cpu']['cores'];
|
||||
$freq = $data['cpu']['freq'];
|
||||
$aes = $data['cpu']['aes'];
|
||||
$virt = $data['cpu']['virt'];
|
||||
//RAM Disk
|
||||
$ram = $data['mem']['ram'];
|
||||
$swap = $data['mem']['swap'];
|
||||
$disk = $data['mem']['disk'];
|
||||
|
||||
$gb5_single = $gb5_multi = $gb5_id = $gb6_single = $gb6_multi = $gb6_id = null;
|
||||
foreach ($data['geekbench'] as $gb) {
|
||||
if ($gb['version'] === 5) {
|
||||
$gb5_single = $gb['single'];
|
||||
$gb5_multi = $gb['multi'];
|
||||
$gb5_id = self::gb5IdFromURL($gb['url']);
|
||||
} elseif ($gb['version'] === 6) {
|
||||
$gb6_single = $gb['single'];
|
||||
$gb6_multi = $gb['multi'];
|
||||
$gb6_id = self::gb6IdFromURL($gb['url']);
|
||||
}
|
||||
}
|
||||
|
||||
$yabs_id = Str::random(8);
|
||||
|
||||
if ($ram > 999999) {
|
||||
$ram_f = ($ram / 1024 / 1024);
|
||||
$ram_type = 'GB';
|
||||
} else {
|
||||
$ram_f = ($ram / 1024);
|
||||
$ram_type = 'MB';
|
||||
}
|
||||
|
||||
if ($disk > 100000000) {
|
||||
$disk_f = ($disk / 1024 / 1024 / 1024);
|
||||
$disk_type = 'TB';
|
||||
} else {
|
||||
$disk_f = ($disk / 1024 / 1024);
|
||||
$disk_type = 'GB';
|
||||
}
|
||||
|
||||
self::create([
|
||||
'id' => $yabs_id,
|
||||
'server_id' => $server_id,
|
||||
'has_ipv6' => $has_ipv6,
|
||||
'aes' => $aes,
|
||||
'vm' => $virt,
|
||||
'distro' => $distro,
|
||||
'kernel' => $kernel,
|
||||
'uptime' => $uptime,
|
||||
'cpu_model' => $model,
|
||||
'cpu_cores' => $cores,
|
||||
'cpu_freq' => (float)$freq,
|
||||
'ram' => $ram_f,
|
||||
'ram_type' => $ram_type,
|
||||
'ram_mb' => ($ram / 1024),
|
||||
'swap' => $swap / 1024,
|
||||
'swap_mb' => ($swap / 1024),
|
||||
'swap_type' => 'MB',
|
||||
'disk' => $disk_f,
|
||||
'disk_gb' => ($disk / 1024 / 1024),
|
||||
'disk_type' => $disk_type,
|
||||
'output_date' => $date_ran,
|
||||
'gb5_single' => $gb5_single,
|
||||
'gb5_multi' => $gb5_multi,
|
||||
'gb5_id' => $gb5_id,
|
||||
'gb6_single' => $gb6_single,
|
||||
'gb6_multi' => $gb6_multi,
|
||||
'gb6_id' => $gb6_id
|
||||
]);
|
||||
|
||||
//fio
|
||||
foreach ($data['fio'] as $ds) {
|
||||
if ($ds['bs'] === '4k') {
|
||||
$d4k = ($ds['speed_rw'] > 999999) ? ($ds['speed_rw'] / 1000 / 1000) : $ds['speed_rw'] / 1000;
|
||||
$d4k_type = ($ds['speed_rw'] > 999999) ? 'GB/s' : 'MB/s';
|
||||
$d4k_mbps = self::KBstoMBs($ds['speed_rw']);
|
||||
}
|
||||
if ($ds['bs'] === '64k') {
|
||||
$d64k = ($ds['speed_rw'] > 999999) ? ($ds['speed_rw'] / 1000 / 1000) : $ds['speed_rw'] / 1000;
|
||||
$d64k_type = ($ds['speed_rw'] > 999999) ? 'GB/s' : 'MB/s';
|
||||
$d64k_mbps = self::KBstoMBs($ds['speed_rw']);
|
||||
}
|
||||
if ($ds['bs'] === '512k') {
|
||||
$d512k = ($ds['speed_rw'] > 999999) ? ($ds['speed_rw'] / 1000 / 1000) : $ds['speed_rw'] / 1000;
|
||||
$d512k_type = ($ds['speed_rw'] > 999999) ? 'GB/s' : 'MB/s';
|
||||
$d512k_mbps = self::KBstoMBs($ds['speed_rw']);
|
||||
}
|
||||
if ($ds['bs'] === '1m') {
|
||||
$d1m = ($ds['speed_rw'] > 999999) ? ($ds['speed_rw'] / 1000 / 1000) : $ds['speed_rw'] / 1000;
|
||||
$d1m_type = ($ds['speed_rw'] > 999999) ? 'GB/s' : 'MB/s';
|
||||
$d1m_mbps = self::KBstoMBs($ds['speed_rw']);
|
||||
}
|
||||
}
|
||||
|
||||
DiskSpeed::create([
|
||||
'id' => $yabs_id,
|
||||
'server_id' => $server_id,
|
||||
'd_4k' => $d4k,
|
||||
'd_4k_type' => $d4k_type,
|
||||
'd_4k_as_mbps' => $d4k_mbps,
|
||||
'd_64k' => $d64k,
|
||||
'd_64k_type' => $d64k_type,
|
||||
'd_64k_as_mbps' => $d64k_mbps,
|
||||
'd_512k' => $d512k,
|
||||
'd_512k_type' => $d512k_type,
|
||||
'd_512k_as_mbps' => $d512k_mbps,
|
||||
'd_1m' => $d1m,
|
||||
'd_1m_type' => $d1m_type,
|
||||
'd_1m_as_mbps' => $d1m_mbps
|
||||
]);
|
||||
|
||||
//iperf
|
||||
foreach ($data['iperf'] as $st) {
|
||||
($has_ipv4) ? $match = 'IPv4' : $match = 'IPv6';
|
||||
if ($st['mode'] === $match) {
|
||||
if ($st['send'] !== "busy " || $st['recv'] !== "busy ") {
|
||||
NetworkSpeed::create([
|
||||
'id' => $yabs_id,
|
||||
'server_id' => $server_id,
|
||||
'location' => $st['loc'],
|
||||
'send' => self::speedAsFloat($st['send']),
|
||||
'send_type' => self::speedType($st['send']),
|
||||
'send_as_mbps' => self::speedAsMbps($st['send']),
|
||||
'receive' => self::speedAsFloat($st['recv']),
|
||||
'receive_type' => self::speedType($st['recv']),
|
||||
'receive_as_mbps' => self::speedAsMbps($st['recv'])
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Update server
|
||||
$update_server = DB::table('servers')
|
||||
->where('id', $server_id)
|
||||
->update([
|
||||
'ram' => $ram_f,
|
||||
'ram_type' => $ram_type,
|
||||
'ram_as_mb' => ($ram / 1024),
|
||||
'disk' => $disk_f,
|
||||
'disk_as_gb' => ($disk / 1024 / 1024),
|
||||
'disk_type' => $disk_type,
|
||||
'cpu' => $cores,
|
||||
'has_yabs' => 1
|
||||
]);
|
||||
|
||||
Cache::forget("yabs.$yabs_id");
|
||||
Cache::forget("all_yabs");
|
||||
Cache::forget("server.$server_id");
|
||||
Cache::forget("all_servers");
|
||||
|
||||
} catch (Exception $e) {//Not valid JSON
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,43 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App;
|
||||
|
||||
class Process
|
||||
{
|
||||
public string $start_time;
|
||||
public string $end_time;
|
||||
|
||||
public function startTimer(): void
|
||||
{
|
||||
$this->start_time = microtime(true);
|
||||
}
|
||||
|
||||
public function stopTimer(): void
|
||||
{
|
||||
$this->end_time = microtime(true);
|
||||
}
|
||||
|
||||
public function getTimeTaken(): float
|
||||
{//In seconds
|
||||
return ($this->end_time - $this->start_time) * 100;
|
||||
}
|
||||
|
||||
public static function paymentTermIntToString(int $term): string
|
||||
{
|
||||
if ($term === 1) {
|
||||
return "p/m";
|
||||
} elseif ($term === 2) {
|
||||
return "p/qtr";
|
||||
} elseif ($term === 3) {
|
||||
return "p/hy";
|
||||
} elseif ($term === 4) {
|
||||
return "p/y";
|
||||
} elseif ($term === 5) {
|
||||
return "p/2y";
|
||||
} elseif ($term === 6) {
|
||||
return "p/3y";
|
||||
} else {
|
||||
return "unknown";
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,28 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
|
||||
class AppServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* Register any application services.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function register()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Bootstrap any application services.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function boot()
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
|
@ -1,30 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
|
||||
use Illuminate\Support\Facades\Gate;
|
||||
|
||||
class AuthServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* The policy mappings for the application.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $policies = [
|
||||
// 'App\Models\Model' => 'App\Policies\ModelPolicy',
|
||||
];
|
||||
|
||||
/**
|
||||
* Register any authentication / authorization services.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function boot()
|
||||
{
|
||||
$this->registerPolicies();
|
||||
|
||||
//
|
||||
}
|
||||
}
|
|
@ -1,21 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
use Illuminate\Support\Facades\Broadcast;
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
|
||||
class BroadcastServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* Bootstrap any application services.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function boot()
|
||||
{
|
||||
Broadcast::routes();
|
||||
|
||||
require base_path('routes/channels.php');
|
||||
}
|
||||
}
|
|
@ -1,32 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
use Illuminate\Auth\Events\Registered;
|
||||
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
|
||||
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
|
||||
use Illuminate\Support\Facades\Event;
|
||||
|
||||
class EventServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* The event listener mappings for the application.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $listen = [
|
||||
Registered::class => [
|
||||
SendEmailVerificationNotification::class,
|
||||
],
|
||||
];
|
||||
|
||||
/**
|
||||
* Register any events for your application.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function boot()
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
|
@ -1,66 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
use Illuminate\Cache\RateLimiting\Limit;
|
||||
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\RateLimiter;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
class RouteServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* The path to the "home" route for your application.
|
||||
*
|
||||
* This is used by Laravel authentication to redirect users after login.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public const HOME = '/';
|
||||
|
||||
/**
|
||||
* The controller namespace for the application.
|
||||
*
|
||||
* When present, controller route declarations will automatically be prefixed with this namespace.
|
||||
*
|
||||
* @var string|null
|
||||
*/
|
||||
// protected $namespace = 'App\\Http\\Controllers';
|
||||
|
||||
/**
|
||||
* Define your route model bindings, pattern filters, etc.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function boot()
|
||||
{
|
||||
if (config('app.env') === 'production') {
|
||||
\Illuminate\Support\Facades\URL::forceScheme('https');
|
||||
}
|
||||
$this->configureRateLimiting();
|
||||
|
||||
$this->routes(function () {
|
||||
Route::prefix('api')
|
||||
->middleware('api')
|
||||
->namespace($this->namespace)
|
||||
->group(base_path('routes/api.php'));
|
||||
|
||||
Route::middleware('web')
|
||||
->namespace($this->namespace)
|
||||
->group(base_path('routes/web.php'));
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Configure the rate limiters for the application.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function configureRateLimiting()
|
||||
{
|
||||
RateLimiter::for('api', function (Request $request) {
|
||||
return Limit::perMinute(60)->by(optional($request->user())->id ?: $request->ip());
|
||||
});
|
||||
}
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\View\Components;
|
||||
|
||||
use Illuminate\View\Component;
|
||||
|
||||
class AppLayout extends Component
|
||||
{
|
||||
/**
|
||||
* Get the view / contents that represents the component.
|
||||
*
|
||||
* @return \Illuminate\View\View
|
||||
*/
|
||||
public function render()
|
||||
{
|
||||
return view('layouts.app');
|
||||
}
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\View\Components;
|
||||
|
||||
use Illuminate\View\Component;
|
||||
|
||||
class CurrencySelect extends Component
|
||||
{
|
||||
|
||||
/**
|
||||
* Get the view / contents that represent the component.
|
||||
*
|
||||
* @return \Illuminate\Contracts\View\View|\Closure|string
|
||||
*/
|
||||
public function render()
|
||||
{
|
||||
return view('components.currency-select');
|
||||
}
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\View\Components;
|
||||
|
||||
use Illuminate\View\Component;
|
||||
|
||||
class GuestLayout extends Component
|
||||
{
|
||||
/**
|
||||
* Get the view / contents that represents the component.
|
||||
*
|
||||
* @return \Illuminate\View\View
|
||||
*/
|
||||
public function render()
|
||||
{
|
||||
return view('layouts.guest');
|
||||
}
|
||||
}
|
|
@ -1,25 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\View\Components;
|
||||
|
||||
use App\Models\Labels;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\View\Component;
|
||||
|
||||
class LabelsSelect extends Component
|
||||
{
|
||||
/**
|
||||
* Get the view / contents that represent the component.
|
||||
*
|
||||
* @return \Illuminate\Contracts\View\View|\Closure|string
|
||||
*/
|
||||
public function render()
|
||||
{
|
||||
$all_labels = Cache::rememberForever('all_labels', function () {
|
||||
return Labels::all();
|
||||
});
|
||||
return view('components.labels-select', [
|
||||
'labels' => $all_labels
|
||||
]);
|
||||
}
|
||||
}
|
|
@ -1,23 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\View\Components;
|
||||
|
||||
use App\Models\Locations;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\View\Component;
|
||||
|
||||
class LocationsSelect extends Component
|
||||
{
|
||||
/**
|
||||
* Get the view / contents that represent the component.
|
||||
*
|
||||
* @return \Illuminate\Contracts\View\View|\Closure|string
|
||||
*/
|
||||
public function render()
|
||||
{
|
||||
$all_locations = Locations::allLocations();
|
||||
return view('components.locations-select', [
|
||||
'locations' => $all_locations
|
||||
]);
|
||||
}
|
||||
}
|
|
@ -1,17 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\View\Components;
|
||||
|
||||
use App\Models\OS;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\View\Component;
|
||||
|
||||
class OsSelect extends Component
|
||||
{
|
||||
public function render()
|
||||
{
|
||||
return view('components.os-select', [
|
||||
'os' => OS::allOS()->toArray()
|
||||
]);
|
||||
}
|
||||
}
|
|
@ -1,28 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\View\Components;
|
||||
|
||||
use Illuminate\View\Component;
|
||||
|
||||
class PricingSelect extends Component
|
||||
{
|
||||
/**
|
||||
* Create a new component instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the view / contents that represent the component.
|
||||
*
|
||||
* @return \Illuminate\Contracts\View\View|\Closure|string
|
||||
*/
|
||||
public function render()
|
||||
{
|
||||
return view('components.pricing-select');
|
||||
}
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\View\Components;
|
||||
|
||||
use App\Models\Providers;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\View\Component;
|
||||
|
||||
class ProvidersSelect extends Component
|
||||
{
|
||||
|
||||
/**
|
||||
* Get the view / contents that represent the component.
|
||||
*
|
||||
* @return \Illuminate\Contracts\View\View|\Closure|string
|
||||
*/
|
||||
public function render()
|
||||
{
|
||||
$all_providers = Providers::allProviders();
|
||||
return view('components.providers-select', [
|
||||
'providers' => $all_providers
|
||||
]);
|
||||
}
|
||||
}
|
|
@ -1,28 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\View\Components;
|
||||
|
||||
use Illuminate\View\Component;
|
||||
|
||||
class TermSelect extends Component
|
||||
{
|
||||
/**
|
||||
* Create a new component instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the view / contents that represent the component.
|
||||
*
|
||||
* @return \Illuminate\Contracts\View\View|\Closure|string
|
||||
*/
|
||||
public function render()
|
||||
{
|
||||
return view('components.term-select');
|
||||
}
|
||||
}
|
53
artisan
53
artisan
|
@ -1,53 +0,0 @@
|
|||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
define('LARAVEL_START', microtime(true));
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Register The Auto Loader
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Composer provides a convenient, automatically generated class loader
|
||||
| for our application. We just need to utilize it! We'll require it
|
||||
| into the script here so that we do not have to worry about the
|
||||
| loading of any our classes "manually". Feels great to relax.
|
||||
|
|
||||
*/
|
||||
|
||||
require __DIR__.'/vendor/autoload.php';
|
||||
|
||||
$app = require_once __DIR__.'/bootstrap/app.php';
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Run The Artisan Application
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| When we run the console application, the current CLI command will be
|
||||
| executed in this console and the response sent back to a terminal
|
||||
| or another output device for the developers. Here goes nothing!
|
||||
|
|
||||
*/
|
||||
|
||||
$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
|
||||
|
||||
$status = $kernel->handle(
|
||||
$input = new Symfony\Component\Console\Input\ArgvInput,
|
||||
new Symfony\Component\Console\Output\ConsoleOutput
|
||||
);
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Shutdown The Application
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Once Artisan has finished running, we will fire off the shutdown events
|
||||
| so that any final work may be done by the application before we shut
|
||||
| down the process. This is the last thing to happen to the request.
|
||||
|
|
||||
*/
|
||||
|
||||
$kernel->terminate($input, $status);
|
||||
|
||||
exit($status);
|
5
assets/css/all.min.css
vendored
Normal file
5
assets/css/all.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
1543
assets/css/style.css
Normal file
1543
assets/css/style.css
Normal file
File diff suppressed because it is too large
Load diff
BIN
assets/favicon.ico
Normal file
BIN
assets/favicon.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 13 KiB |
2
assets/js/bootstrap.min.js
vendored
Normal file
2
assets/js/bootstrap.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
assets/js/jquery.min.js
vendored
Normal file
1
assets/js/jquery.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
499
assets/js/scripts.min.js
vendored
Normal file
499
assets/js/scripts.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
assets/webfonts/fa-brands-400.eot
Normal file
BIN
assets/webfonts/fa-brands-400.eot
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue