Commit 307a2e3f authored by zhoujun's avatar zhoujun

初始版本

parent 280bd44c
Pipeline #550 failed with stages
in 0 seconds
# DevOps <p align="center"><img src="https://laravel.com/assets/img/components/logo-laravel.svg"></p>
<p align="center">
<a href="https://travis-ci.org/laravel/framework"><img src="https://travis-ci.org/laravel/framework.svg" alt="Build Status"></a>
<a href="https://packagist.org/packages/laravel/framework"><img src="https://poser.pugx.org/laravel/framework/d/total.svg" alt="Total Downloads"></a>
<a href="https://packagist.org/packages/laravel/framework"><img src="https://poser.pugx.org/laravel/framework/v/stable.svg" alt="Latest Stable Version"></a>
<a href="https://packagist.org/packages/laravel/framework"><img src="https://poser.pugx.org/laravel/framework/license.svg" alt="License"></a>
</p>
## About Laravel
Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel attempts to take the pain out of development by easing common tasks used in the majority of web projects, such as:
- [Simple, fast routing engine](https://laravel.com/docs/routing).
- [Powerful dependency injection container](https://laravel.com/docs/container).
- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage.
- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent).
- Database agnostic [schema migrations](https://laravel.com/docs/migrations).
- [Robust background job processing](https://laravel.com/docs/queues).
- [Real-time event broadcasting](https://laravel.com/docs/broadcasting).
Laravel is accessible, yet powerful, providing tools needed for large, robust applications.
## Learning Laravel
Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of any modern web application framework, making it a breeze to get started learning the framework.
If you're not in the mood to read, [Laracasts](https://laracasts.com) contains over 1100 video tutorials on a range of topics including Laravel, modern PHP, unit testing, JavaScript, and more. Boost the skill level of yourself and your entire team by digging into our comprehensive video library.
## Laravel Sponsors
We would like to extend our thanks to the following sponsors for helping fund on-going Laravel development. If you are interested in becoming a sponsor, please visit the Laravel [Patreon page](https://patreon.com/taylorotwell):
- **[Vehikl](https://vehikl.com/)**
- **[Tighten Co.](https://tighten.co)**
- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)**
- **[Cubet Techno Labs](https://cubettech.com)**
- **[British Software Development](https://www.britishsoftware.co)**
- **[Webdock, Fast VPS Hosting](https://www.webdock.io/en)**
- [UserInsights](https://userinsights.com)
- [Fragrantica](https://www.fragrantica.com)
- [SOFTonSOFA](https://softonsofa.com/)
- [User10](https://user10.com)
- [Soumettre.fr](https://soumettre.fr/)
- [CodeBrisk](https://codebrisk.com)
- [1Forge](https://1forge.com)
- [TECPRESSO](https://tecpresso.co.jp/)
- [Runtime Converter](http://runtimeconverter.com/)
- [WebL'Agence](https://weblagence.com/)
- [Invoice Ninja](https://www.invoiceninja.com)
- [iMi digital](https://www.imi-digital.de/)
- [Earthlink](https://www.earthlink.ro/)
- [Steadfast Collective](https://steadfastcollective.com/)
## Contributing
Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions).
## Security Vulnerabilities
If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed.
## License
The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT).
<?php
/**
* 验证手机号格式
* @param $phone sting 手机号
* @return bool
*/
if(!function_exists('getExceptionMsg')){
function getExceptionMsg($code,$msg)
{
return response()->json([
'code' => $code,
'msg' => $msg,
]);
}
}
/**
* 发送curl请求
* @param $url string 请求地址
* @param $data array 请求参数
* @return json
*/
if(!function_exists('getSendCurl')){
function getSendCurl($url, $data, $timeout = 30){
try {
//curl 调用
$data = json_encode($data);
$curl = curl_init();
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json','Content-Length: ' . strlen($data)));
curl_setopt($curl, CURLOPT_URL, $url);
$timeout = intval ( $timeout ) ? intval ( $timeout ) : 30;
curl_setopt($curl, CURLOPT_TIMEOUT, $timeout);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HEADER, 0);
$result = curl_exec($curl);
$curl_err_code = curl_errno($curl);
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
return $result;
} catch (exception $e) {
throw new Exception($e->getMessage());
}
}
}
/**
* 验证手机号格式
* @param $phone sting 手机号
* @return bool
*/
if(!function_exists('getVerifyPhone')){
function getVerifyPhone($phone)
{
if (empty($phone)||!preg_match("/^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|4|5|6|7|8|9]|17[0-9])|166|198|199\d{8}$/", $phone)) {
return false;
}
return true;
}
}
/**
* 检测json数据格式是否正确
*
* @param $string string 字符串
* @return bool
*/
if (!function_exists('getIsJsonFormat')) {
function getIsJsonFormat($string)
{
if (is_string($string) and $string !== '') {
@json_decode($string);
return json_last_error() ? false : true;
} else {
return false;
}
}
}
<?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');
}
}
<?php
namespace App\Exceptions;
use App\Http\Success;
use Exception;
class CommonException extends Exception
{
public function render($msg,$code)
{
$result = [
'code' => $code,
'msg' => $msg,
];
// 显示中文
return response()->json($result);
}
}
\ No newline at end of file
<?php
namespace App\Exceptions;
use Exception;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
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',
];
/**
* Report or log an exception.
*
* @param \Exception $exception
* @return void
*/
public function report(Exception $exception)
{
parent::report($exception);
}
/**
* Render an exception into an HTTP response.
*
* @param \Illuminate\Http\Request $request
* @param \Exception $exception
* @return \Illuminate\Http\Response
*/
public function render($request, Exception $exception)
{
return parent::render($request, $exception);
}
}
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\BaseController;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Throwable;
use Exception;
use Carbon\Carbon;
use Illuminate\Validation\Rule;
use App\Services\Cdn\ICdnService;
class CdnController extends BaseController
{
private $time;
private $cdnService;
public function __construct(ICdnService $cdnService)
{
$this->time = Carbon::now()->format('Y-m-d H:i:s');
$this->cdnService = $cdnService;
}
/**
* 新增cdn
* @return array
* @date 2020/11/18
* @author live
*/
public function getCdnAdd(Request $request)
{
$postData = $request->all();
$validate = Validator::make($postData, [
'originSite' => 'required|string',
'useDomain' => 'required|string',
'remark' => 'required|string',
'cdnDomain' => 'required|string',
'cloudId' => 'required|numeric',
'projectId' => 'required|numeric'
]);
if ($validate->fails()) return $this->getErrorMsg('1001', config('msg.common.1001'));
try {
$data = $this->cdnService->getCdnAdd($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
/**
* cdn列表
* @return array
* @date 2020/11/18
* @author live
*/
public function getCdnList(Request $request)
{
$postData = $request->all();
try {
$data = $this->cdnService->getCdnList($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
/**
* 编辑cdn
* @return array
* @date 2020/11/18
* @author live
*/
public function getCdnEdit(Request $request)
{
$postData = $request->all();
$validate = Validator::make($postData, [
'id' => 'required|numeric',
'originSite' => 'required|string',
'useDomain' => 'required|string',
'remark' => 'required|string',
'cdnDomain' => 'required|string',
'cloudId' => 'required|numeric',
'projectId' => 'required|numeric',
'createdAt' => 'required|string'
]);
if($validate->fails()) return $this->getErrorMsg('1001', config('msg.common.1001'));
try {
$data = $this->cdnService->getCdnEdit($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
/**
* 删除cdn
* @return array
* @date 2020/11/18
* @author live
*/
public function getCdnDel(Request $request)
{
$postData = $request->all();
$validate = Validator::make($postData, [
'id' => 'required|numeric',
'originSite' => 'required|string'
]);
if ($validate->fails()) return $this->getErrorMsg('1001', config('msg.common.1001'));
try {
$data = $this->cdnService->getCdnDel($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
}
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\BaseController;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Throwable;
use Exception;
use Carbon\Carbon;
use Illuminate\Validation\Rule;
use App\Services\Cloud\ICloudService;
class CloudController extends BaseController
{
private $time;
private $cloudService;
public function __construct(ICloudService $cloudService)
{
$this->time = Carbon::now()->format('Y-m-d H:i:s');
$this->cloudService = $cloudService;
}
/**
* 新增云平台账号
* @return array
* @date 2020/11/18
* @author live
*/
public function getCloudAdd(Request $request)
{
$postData = $request->all();
$validate = Validator::make($postData, [
'cloudName' => 'required|string',
'accountName' => 'required|string'
]);
if ($validate->fails()) return $this->getErrorMsg('1001', config('msg.common.1001'));
try {
$data = $this->cloudService->getCloudAdd($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
/**
* 云平台列表
* @return array
* @date 2020/11/18
* @author live
*/
public function getCloudList(Request $request)
{
$postData = $request->all();
try {
$data = $this->cloudService->getCloudList($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
/**
* 编辑云平台账号
* @return array
* @date 2020/11/16
* @author live
*/
public function getCloudEdit(Request $request)
{
$postData = $request->all();
$validate = Validator::make($postData, [
'id' => 'required|numeric',
'cloudName' => 'required|string',
'accountName' => 'required|string',
'createdAt' => 'required|string'
]);
if($validate->fails()) return $this->getErrorMsg('1001', config('msg.common.1001'));
try {
$data = $this->cloudService->getCloudEdit($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
/**
* 删除云平台账号
* @return array
* @date 2020/11/16
* @author live
*/
public function getCloudDel(Request $request)
{
$postData = $request->all();
$validate = Validator::make($postData, [
'id' => 'required|numeric',
'cloudName' => 'required|string',
'accountName' => 'required|string'
]);
if ($validate->fails()) return $this->getErrorMsg('1001', config('msg.common.1001'));
try {
$data = $this->cloudService->getCloudDel($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
/**
* 下拉框列表
* @return array
* @date 2020/11/18
* @author live
*/
public function getCloudSelectList(Request $request)
{
try {
$data = $this->cloudService->getCloudSelectList();
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
}
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\BaseController;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Throwable;
use Exception;
use Carbon\Carbon;
use Illuminate\Validation\Rule;
use App\Services\Cvm\ICvmService;
class CvmController extends BaseController
{
private $time;
private $cvmService;
public function __construct(ICvmService $cvmService)
{
$this->time = Carbon::now()->format('Y-m-d H:i:s');
$this->cvmService = $cvmService;
}
/**
* cvm列表
* @return array
* @date 2020/11/18
* @author live
*/
public function getCvmList(Request $request)
{
$postData = $request->all();
try {
$data = $this->cvmService->getCvmList($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
/**
* 删除cvm
* @return array
* @date 2020/11/18
* @author live
*/
public function getCvmDel(Request $request){
$postData = $request->all();
$validate = Validator::make($postData, [
'id' => 'required|numeric',
'instanceId' => 'required|string'
]);
if ($validate->fails()) return $this->getErrorMsg('1001', config('msg.common.1001'));
try {
$data = $this->cvmService->getCvmDel($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
/**
* 新增cvm
* @return array
* @date 2020/11/23
* @author live
*/
public function getCvmAdd(Request $request)
{
$postData = $request->all();
$validate = Validator::make($postData, [
'instanceName' => 'required|string',
'instanceId' => 'required|string',
'system' => 'required|string',
'publicId' => 'required|string',
'intranetId' => 'required|string',
'capacity' => 'required|string',
'payType' => 'required|numeric',
'networkType' => 'required|numeric',
'region' => 'required|string',
'config' => 'required|string',
'expireTime' => 'required|string',
'cloudId' => 'required|numeric',
'projectId' => 'required|numeric'
]);
if ($validate->fails()) return $this->getErrorMsg('1001', config('msg.common.1001'));
try {
$data = $this->cvmService->getCvmAdd($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
/**
* 编辑cvm
* @return array
* @date 2020/11/23
* @author live
*/
public function getCvmEdit(Request $request)
{
$postData = $request->all();
$validate = Validator::make($postData, [
'id' => 'required|numeric',
'instanceName' => 'required|string',
'instanceId' => 'required|string',
'system' => 'required|string',
'publicId' => 'required|string',
'intranetId' => 'required|string',
'capacity' => 'required|string',
'payType' => 'required|numeric',
'networkType' => 'required|numeric',
'region' => 'required|string',
'config' => 'required|string',
'expireTime' => 'required|string',
'cloudId' => 'required|numeric',
'projectId' => 'required|numeric',
'createdAt' => 'required|string'
]);
if($validate->fails()) return $this->getErrorMsg('1001', config('msg.common.1001'));
try {
$data = $this->cvmService->getCvmEdit($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
}
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\BaseController;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Throwable;
use Exception;
use Carbon\Carbon;
use Illuminate\Validation\Rule;
use App\Services\Records\IRecordsService;
class DomainRecordsController extends BaseController
{
private $time;
private $recordsService;
public function __construct(IRecordsService $recordsService)
{
$this->time = Carbon::now()->format('Y-m-d H:i:s');
$this->recordsService = $recordsService;
}
/**
* 新增记录
* @return array
* @date 2020/11/18
* @author live
*/
public function getRecordsAdd(Request $request)
{
$postData = $request->all();
$validate = Validator::make($postData, [
'record' => 'required|string',
'recordType' => 'required|numeric',
'ispLine' => 'required|numeric',
'recordValue' => 'required|string',
'remark' => 'required|string',
'domainId' => 'required|numeric'
]);
if ($validate->fails()) return $this->getErrorMsg('1001', config('msg.common.1001'));
try {
$data = $this->recordsService->getRecordsAdd($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
/**
* 记录列表
* @return array
* @date 2020/11/18
* @author live
*/
public function getRecordsList(Request $request)
{
$postData = $request->all();
try {
$data = $this->recordsService->getRecordsList($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
/**
* 编辑记录
* @return array
* @date 2020/11/18
* @author live
*/
public function geRecordsEdit(Request $request)
{
$postData = $request->all();
$validate = Validator::make($postData, [
'id' => 'required|numeric',
'record' => 'required|string',
'recordType' => 'required|numeric',
'ispLine' => 'required|numeric',
'recordValue' => 'required|string',
'remark' => 'required|string',
'domainId' => 'required|numeric',
'createdAt' => 'required|string'
]);
if($validate->fails()) return $this->getErrorMsg('1001', config('msg.common.1001'));
try {
$data = $this->recordsService->getRecordsEdit($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
/**
* 删除记录
* @return array
* @date 2020/11/18
* @author live
*/
public function getRecordsDel(Request $request)
{
$postData = $request->all();
$validate = Validator::make($postData, [
'id' => 'required|numeric',
'record' => 'required|string'
]);
if ($validate->fails()) return $this->getErrorMsg('1001', config('msg.common.1001'));
try {
$data = $this->recordsService->getRecordsDel($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
}
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\BaseController;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Throwable;
use Exception;
use Carbon\Carbon;
use Illuminate\Validation\Rule;
use App\Services\Domains\IDomainsService;
class DomainsController extends BaseController
{
private $time;
private $domainsService;
public function __construct(IDomainsService $domainsService)
{
$this->time = Carbon::now()->format('Y-m-d H:i:s');
$this->domainsService = $domainsService;
}
/**
* 新增域名
* @return array
* @date 2020/11/18
* @author live
*/
public function getDomainsAdd(Request $request)
{
$postData = $request->all();
$validate = Validator::make($postData, [
'name' => 'required|string',
'registrant' => 'required|string',
'registrantEmail' => 'required|email',
'registrar' => 'required|numeric',
'expireDate' => 'required|string',
'beianInfo' => 'required|string',
'hoster' => 'required|numeric',
'projectId' => 'required|numeric'
]);
if ($validate->fails()) return $this->getErrorMsg('1001', config('msg.common.1001'));
try {
$data = $this->domainsService->getDomainsAdd($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
/**
* 域名列表
* @return array
* @date 2020/11/18
* @author live
*/
public function getDomainsList(Request $request)
{
$postData = $request->all();
try {
$data = $this->domainsService->getDomainsList($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
/**
* 编辑域名
* @return array
* @date 2020/11/18
* @author live
*/
public function getDomainsEdit(Request $request)
{
$postData = $request->all();
$validate = Validator::make($postData, [
'id' => 'required|numeric',
'name' => 'required|string',
'registrant' => 'required|string',
'registrantEmail' => 'required|email',
'registrar' => 'required|numeric',
'expireDate' => 'required|string',
'beianInfo' => 'required|string',
'hoster' => 'required|numeric',
'projectId' => 'required|numeric',
'createdAt' => 'required|string'
]);
if($validate->fails()) return $this->getErrorMsg('1001', config('msg.common.1001'));
try {
$data = $this->domainsService->getDomainsEdit($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
/**
* 删除域名
* @return array
* @date 2020/11/18
* @author live
*/
public function getDomainsDel(Request $request)
{
$postData = $request->all();
$validate = Validator::make($postData, [
'id' => 'required|numeric',
'name' => 'required|string'
]);
if ($validate->fails()) return $this->getErrorMsg('1001', config('msg.common.1001'));
try {
$data = $this->domainsService->getDomainsDel($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
/**
* 域名下拉列表
* @return array
* @date 2020/11/18
* @author live
*/
public function getDomainsSelectList()
{
try {
$data = $this->domainsService->getDomainsSelectList();
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
}
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\BaseController;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Throwable;
use Exception;
use Carbon\Carbon;
use Illuminate\Validation\Rule;
use App\Services\Options\IOptionsService;
class OptionsController extends BaseController
{
private $time;
private $optionsService;
public function __construct(IOptionsService $optionsService)
{
$this->time = Carbon::now()->format('Y-m-d H:i:s');
$this->optionsService = $optionsService;
}
/**
* 新增选项卡
* @return array
* @date 2020/11/18
* @author live
*/
public function getOptionsAdd(Request $request)
{
$postData = $request->all();
$validate = Validator::make($postData, [
'itemTag' => 'required|string',
'itemKey' => 'required|string',
'itemValue' => 'required|string'
]);
if ($validate->fails()) return $this->getErrorMsg('1001', config('msg.common.1001'));
try {
$data = $this->optionsService->getOptionsAdd($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
/**
* 选项卡列表
* @return array
* @date 2020/11/18
* @author live
*/
public function getOptionsList(Request $request)
{
$postData = $request->all();
try {
$data = $this->optionsService->getOptionsList($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
/**
* 编辑选项卡
* @return array
* @date 2020/11/18
* @author live
*/
public function getOptionsEdit(Request $request)
{
$postData = $request->all();
$validate = Validator::make($postData, [
'id' => 'required|numeric',
'itemTag' => 'required|string',
'itemKey' => 'required|string',
'itemValue' => 'required|string'
]);
if($validate->fails()) return $this->getErrorMsg('1001', config('msg.common.1001'));
try {
$data = $this->optionsService->geOptionsEdit($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
/**
* 删除选项卡
* @return array
* @date 2020/11/18
* @author live
*/
public function getOptionsDel(Request $request)
{
$postData = $request->all();
$validate = Validator::make($postData, [
'id' => 'required|numeric',
'itemKey' => 'required|string',
'itemValue' => 'required|string'
]);
if ($validate->fails()) return $this->getErrorMsg('1001', config('msg.common.1001'));
try {
$data = $this->optionsService->getOptionsDel($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
/**
* 获取选项卡下拉
* @return array
* @date 2020/11/18
* @author live
*/
public function getOptionsSelectList(Request $request)
{
$postData = $request->all();
$validate = Validator::make($postData, [
'itemTag' => 'required|string'
]);
if ($validate->fails()) return $this->getErrorMsg('1001', config('msg.common.1001'));
try {
$data = $this->optionsService->getOptionsSelectList($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
}
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\BaseController;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Throwable;
use Exception;
use Carbon\Carbon;
use Illuminate\Validation\Rule;
use App\Services\Project\IProjectService;
class ProjectController extends BaseController
{
private $time;
private $projectService;
public function __construct(IProjectService $projectService)
{
$this->time = Carbon::now()->format('Y-m-d H:i:s');
$this->projectService = $projectService;
}
/**
* 新增项目
* @return array
* @date 2020/11/17
* @author live
*/
public function getProjectAdd(Request $request)
{
$postData = $request->all();
$validate = Validator::make($postData, [
'cnName' => 'required|string',
'enName' => 'required|string',
'mainMaster' => 'required|string',
'devMaster' => 'required|string',
'email' => 'required|email',
'phone' => 'required|regex:/^1[345789][0-9]{9}$/'
]);
if ($validate->fails()) return $this->getErrorMsg('1001', config('msg.common.1001'));
try {
$data = $this->projectService->getProjectAdd($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
/**
* 项目列表
* @return array
* @date 2020/11/16
* @author live
*/
public function getProjectList(Request $request)
{
$postData = $request->all();
try {
$data = $this->projectService->getProjectList($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
/**
* 编辑项目
* @return array
* @date 2020/11/16
* @author live
*/
public function getProjectEdit(Request $request)
{
$postData = $request->all();
$validate = Validator::make($postData, [
'id' => 'required|numeric',
'cnName' => 'required|string',
'enName' => 'required|string',
'mainMaster' => 'required|string',
'devMaster' => 'required|string',
'email' => 'required|email',
'phone' => 'required|regex:/^1[345789][0-9]{9}$/',
'createdAt' => 'required|string'
]);
if($validate->fails()) return $this->getErrorMsg('1001', config('msg.common.1001'));
try {
$data = $this->projectService->getProjectEdit($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
/**
* 删除项目
* @return array
* @date 2020/11/16
* @author live
*/
public function getProjectDel(Request $request)
{
$postData = $request->all();
$validate = Validator::make($postData, [
'id' => 'required|numeric',
'enName' => 'required|string'
]);
if ($validate->fails()) return $this->getErrorMsg('1001', config('msg.common.1001'));
try {
$data = $this->projectService->getProjectDel($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
/**
* 项目下拉框列表
* @return array
* @date 2020/11/17
* @author live
*/
public function getProjectSelectList(Request $request)
{
try {
$data = $this->projectService->getProjectSelectList();
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
}
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\BaseController;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Throwable;
use Exception;
use Carbon\Carbon;
use Illuminate\Validation\Rule;
use App\Services\Rdb\IRdbService;
class RdbController extends BaseController
{
private $time;
private $rdbService;
public function __construct(IRdbService $rdbService)
{
$this->time = Carbon::now()->format('Y-m-d H:i:s');
$this->rdbService = $rdbService;
}
/**
* rdb列表
* @return array
* @date 2020/11/18
* @author live
*/
public function getRdbList(Request $request)
{
$postData = $request->all();
try {
$data = $this->rdbService->getRdbList($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
/**
* 删除rdb
* @return array
* @date 2020/11/18
* @author live
*/
public function getRdbDel(Request $request){
$postData = $request->all();
$validate = Validator::make($postData, [
'id' => 'required|numeric',
'instanceId' => 'required|string'
]);
if ($validate->fails()) return $this->getErrorMsg('1001', config('msg.common.1001'));
try {
$data = $this->rdbService->getRdbDel($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
/**
* 新增rdb
* @return array
* @date 2020/11/23
* @author live
*/
public function getRdbAdd(Request $request)
{
$postData = $request->all();
$validate = Validator::make($postData, [
'instanceName' => 'required|string',
'instanceId' => 'required|string',
'type' => 'required|string',
'mysqlType' => 'required|string',
'capacity' => 'required|string',
'payType' => 'required|numeric',
'networkType' => 'required|numeric',
'region' => 'required|string',
'expireTime' => 'required|string',
'cloudId' => 'required|numeric',
'projectId' => 'required|numeric'
]);
if ($validate->fails()) return $this->getErrorMsg('1001', config('msg.common.1001'));
try {
$data = $this->rdbService->getRdbAdd($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
/**
* 编辑rdb
* @return array
* @date 2020/11/23
* @author live
*/
public function getRdbEdit(Request $request)
{
$postData = $request->all();
$validate = Validator::make($postData, [
'id' => 'required|numeric',
'instanceName' => 'required|string',
'instanceId' => 'required|string',
'type' => 'required|string',
'mysqlType' => 'required|string',
'capacity' => 'required|string',
'payType' => 'required|numeric',
'networkType' => 'required|numeric',
'region' => 'required|string',
'expireTime' => 'required|string',
'cloudId' => 'required|numeric',
'projectId' => 'required|numeric',
'createdAt' => 'required|string'
]);
if($validate->fails()) return $this->getErrorMsg('1001', config('msg.common.1001'));
try {
$data = $this->rdbService->getRdbEdit($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
}
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\BaseController;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Throwable;
use Exception;
use Carbon\Carbon;
use Illuminate\Validation\Rule;
use App\Services\Redis\IRedisService;
class RedisController extends BaseController
{
private $time;
private $redisService;
public function __construct(IRedisService $redisService)
{
$this->time = Carbon::now()->format('Y-m-d H:i:s');
$this->redisService = $redisService;
}
/**
* redis列表
* @return array
* @date 2020/11/18
* @author live
*/
public function getRedisList(Request $request)
{
$postData = $request->all();
try {
$data = $this->redisService->getRedisList($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
/**
* 删除redis
* @return array
* @date 2020/11/18
* @author live
*/
public function getRedisDel(Request $request){
$postData = $request->all();
$validate = Validator::make($postData, [
'id' => 'required|numeric',
'instanceId' => 'required|string'
]);
if ($validate->fails()) return $this->getErrorMsg('1001', config('msg.common.1001'));
try {
$data = $this->redisService->getRedisDel($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
/**
* 新增redis
* @return array
* @date 2020/11/23
* @author live
*/
public function getRedisAdd(Request $request)
{
$postData = $request->all();
$validate = Validator::make($postData, [
'instanceName' => 'required|string',
'instanceId' => 'required|string',
'capacity' => 'required|string',
'quota' => 'required|string',
'edition' => 'required|string',
'norms' => 'required|string',
'payType' => 'required|numeric',
'networkType' => 'required|numeric',
'region' => 'required|string',
'expireTime' => 'required|string',
'cloudId' => 'required|numeric',
'projectId' => 'required|numeric'
]);
if ($validate->fails()) return $this->getErrorMsg('1001', config('msg.common.1001'));
try {
$data = $this->redisService->getRedisAdd($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
/**
* 编辑redis
* @return array
* @date 2020/11/23
* @author live
*/
public function getRedisEdit(Request $request)
{
$postData = $request->all();
$validate = Validator::make($postData, [
'id' => 'required|numeric',
'instanceName' => 'required|string',
'instanceId' => 'required|string',
'capacity' => 'required|string',
'quota' => 'required|string',
'edition' => 'required|string',
'norms' => 'required|string',
'payType' => 'required|numeric',
'networkType' => 'required|numeric',
'region' => 'required|string',
'expireTime' => 'required|string',
'cloudId' => 'required|numeric',
'projectId' => 'required|numeric',
'createdAt' => 'required|string'
]);
if($validate->fails()) return $this->getErrorMsg('1001', config('msg.common.1001'));
try {
$data = $this->redisService->getRedisEdit($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
}
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\BaseController;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Throwable;
use Exception;
use Carbon\Carbon;
use Illuminate\Validation\Rule;
use App\Services\Slb\ISlbService;
class SlbController extends BaseController
{
private $time;
private $slbService;
public function __construct(ISlbService $slbService)
{
$this->time = Carbon::now()->format('Y-m-d H:i:s');
$this->slbService = $slbService;
}
/**
* slb列表
* @return array
* @date 2020/11/18
* @author live
*/
public function getSlbList(Request $request)
{
$postData = $request->all();
try {
$data = $this->slbService->getSlbList($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
/**
* 删除slb
* @return array
* @date 2020/11/18
* @author live
*/
public function getSlbDel(Request $request){
$postData = $request->all();
$validate = Validator::make($postData, [
'id' => 'required|numeric',
'instanceId' => 'required|string'
]);
if ($validate->fails()) return $this->getErrorMsg('1001', config('msg.common.1001'));
try {
$data = $this->slbService->getSlbDel($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
/**
* 新增slb
* @return array
* @date 2020/11/23
* @author live
*/
public function getSlbAdd(Request $request)
{
$postData = $request->all();
$validate = Validator::make($postData, [
'instanceName' => 'required|string',
'instanceId' => 'required|string',
'outerIp' => 'required|string',
'backendIpList' => 'required|string',
'cloudId' => 'required|numeric',
'projectId' => 'required|numeric'
]);
if ($validate->fails()) return $this->getErrorMsg('1001', config('msg.common.1001'));
try {
$data = $this->slbService->getSlbAdd($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
/**
* 编辑slb
* @return array
* @date 2020/11/23
* @author live
*/
public function getSlbEdit(Request $request)
{
$postData = $request->all();
$validate = Validator::make($postData, [
'id' => 'required|numeric',
'instanceName' => 'required|string',
'instanceId' => 'required|string',
'outerIp' => 'required|string',
'backendIpList' => 'required|string',
'cloudId' => 'required|numeric',
'projectId' => 'required|numeric',
'createdAt' => 'required|string'
]);
if($validate->fails()) return $this->getErrorMsg('1001', config('msg.common.1001'));
try {
$data = $this->slbService->getSlbEdit($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
}
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\BaseController;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Throwable;
use Exception;
use Carbon\Carbon;
use Illuminate\Validation\Rule;
use App\Services\User\IUserService;
class UserController extends BaseController
{
private $time;
private $userService;
public function __construct(IUserService $userService)
{
$this->time = Carbon::now()->format('Y-m-d H:i:s');
$this->userService = $userService;
}
/**
* 用户登陆
* @return array
* @date 2020/11/16
* @author live
*/
public function getUserLogin(Request $request)
{
$postData = $request->all();
$validate = Validator::make($postData, [
'name' => 'required|string',
'pwd' => 'required|string'
]);
if ($validate->fails()) return $this->getErrorMsg('1001', config('msg.common.1001'));
try {
$data = $this->userService->getLogin($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
/**
* 用户登出
* @return array
* @date 2020/11/16
* @author live
*/
public function getUserLogout(Request $request)
{
$token = $request->header('token');
try {
$data = $this->userService->getLoginOut($token);
return $this->getSuccessMsg($data,'退出成功');
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
/**
* 用户列表
* @return array
* @date 2020/11/16
* @author live
*/
public function getUserList(Request $request)
{
$postData = $request->all();
try {
$data = $this->userService->getUserList($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
/**
* 新增用户
* @return array
* @date 2020/11/16
* @author live
*/
public function getUserAdd(Request $request)
{
$postData = $request->all();
$validate = Validator::make($postData, [
'name' => 'required|string',
'realName' => 'required|string',
'email' => 'required|email',
'phone' => 'required|regex:/^1[345789][0-9]{9}$/',
'pwd' => 'required|string'
]);
if ($validate->fails()) return $this->getErrorMsg('1001', config('msg.common.1001'));
try {
$data = $this->userService->getUserAdd($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
/**
* 编辑用户
* @return array
* @date 2020/11/16
* @author live
*/
public function getUserEdit(Request $request)
{
$postData = $request->all();
$validate = Validator::make($postData, [
'id' => 'required|numeric',
'realName' => 'required|string',
'email' => 'required|email',
'phone' => 'regex:/^1[345789][0-9]{9}$/'
]);
if($validate->fails()) return $this->getErrorMsg('1001', config('msg.common.1001'));
try {
$data = $this->userService->getUserEdit($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
/**
* 删除用户
* @return array
* @date 2020/11/16
* @author live
*/
public function getUserDel(Request $request)
{
$postData = $request->all();
$validate = Validator::make($postData, [
'id' => 'required|numeric',
'name' => 'required|string'
]);
if ($validate->fails()) return $this->getErrorMsg('1001', config('msg.common.1001'));
try {
$data = $this->userService->getUserDel($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
/**
* 修改用户登录密码
* @return array
* @date 2020/11/16
* @author live
*/
public function getResetUserPwd(Request $request)
{
$postData = $request->all();
$validate = Validator::make($postData, [
'id' => 'required|numeric',
'name' => 'required|string',
'pwd' => 'required|string|min:6'
]);
if ($validate->fails()) return $this->getErrorMsg('1001', config('msg.common.1001'));
try {
$data = $this->userService->getResetUserPwd($postData);
return $this->getSuccessMsg($data);
} catch (Exception $e) {
return $this->getErrorMsg($e->getCode(), $e->getMessage());
}
}
}
\ No newline at end of file
<?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;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest');
}
}
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
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 = '/home';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest')->except('logout');
}
}
<?php
namespace App\Http\Controllers\Auth;
use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;
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 = '/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:6|confirmed',
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return \App\User
*/
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
}
}
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
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 = '/home';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest');
}
}
<?php
namespace App\Http\Controllers;
class BaseController extends Controller
{
/**
* @param array $data
* @param bool $needObject 数据为空时是否需要以对象的方式返回
* @param string $code
* @param string $msg
* @return \Illuminate\Http\JsonResponse
*/
protected function getSuccessMsg($data = array(), $msg = '操作成功', $needObject = true, $code = '200')
{
return response()->json([
'code' => $code,
'msg' => $msg,
'data' => $data ? $data : ($needObject ? (object)array() : []),
]);
}
protected function getErrorMsg($code = '', $msg = '')
{
return response()->json([
'code' => $code,
'msg' => $msg,
]);
}
}
<?php
namespace App\Http\Controllers;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
}
<?php
namespace App\Http;
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\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
\App\Http\Middleware\TrustProxies::class,
\App\Http\Middleware\EnableCrossRequestMiddleware::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:60,1',
'bindings',
],
];
/**
* The application's route middleware.
*
* These middleware may be assigned to groups or used individually.
*
* @var array
*/
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'login' => \App\Http\Middleware\LoginForApi::class,
];
}
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode as Middleware;
class CheckForMaintenanceMode extends Middleware
{
/**
* The URIs that should be reachable while maintenance mode is enabled.
*
* @var array
*/
protected $except = [
//
];
}
<?php
namespace App\Http\Middleware;
use Closure;
class EnableCrossRequestMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$response = $next($request);
$origin = $request->server('HTTP_ORIGIN') ? $request->server('HTTP_ORIGIN') : '';
$allow_origin = [
'http://localhost:8000',
];
//if (in_array($origin, $allow_origin)) {
$response->header('Access-Control-Allow-Origin', $origin);
$response->header('Access-Control-Allow-Headers', 'Origin, Content-Type, Cookie, X-CSRF-TOKEN, Accept, Authorization, X-XSRF-TOKEN');
$response->header('Access-Control-Expose-Headers', 'Authorization, authenticated');
$response->header('Access-Control-Allow-Methods', 'GET, POST, PATCH, PUT, OPTIONS');
$response->header('Access-Control-Allow-Credentials', 'true');
// }
return $response;
}
}
<?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 = [
//
];
}
<?php
namespace App\Http\Middleware;
use Closure;
use Exception;
use Illuminate\Http\Request;
use App\Models\AdminModel;
use Illuminate\Support\Facades\Cache;
class LoginForApi
{
/**
*
* @param $request
* @param Closure $next
* @return array|mixed
*/
public function handle(Request $request, Closure $next)
{
$userToken = $request->header('token','');
if($userToken == '') return getExceptionMsg(401,config('msg.common.401'));
$userToken = MD5($userToken);
$user = AdminModel::where('token',$userToken)->first();
if(!$user) return getExceptionMsg(401,config('msg.common.401'));
if(!Cache::has('login_'.$userToken)) return getExceptionMsg(401,config('msg.common.401'));
Cache::put('login_'.$userToken,1,60);
$request['user'] = $user->toArray();
unset($user);
return $next($request);
}
}
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
class RedirectIfAuthenticated
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|null $guard
* @return mixed
*/
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
return redirect('/home');
}
return $next($request);
}
}
<?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',
];
}
<?php
namespace App\Http\Middleware;
use Illuminate\Http\Request;
use Fideloper\Proxy\TrustProxies as Middleware;
class TrustProxies extends Middleware
{
/**
* The trusted proxies for this application.
*
* @var array
*/
protected $proxies;
/**
* The headers that should be used to detect proxies.
*
* @var int
*/
protected $headers = Request::HEADER_X_FORWARDED_ALL;
}
<?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 = [
//
];
}
<?php
namespace App\Models;
use Tymon\JWTAuth\Contracts\JWTSubject;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class AdminModel extends Authenticatable implements JWTSubject
{
use Notifiable;
protected $connection = 'mysql';
protected $table = 'cc_admin';
/**
* Get the identifier that will be stored in the subject claim of the JWT.
*
* @return mixed
*/
public function getJWTIdentifier()
{
return $this->getKey();
}
/**
* Return a key value array, containing any custom claims to be added to the JWT.
*
* @return array
*/
public function getJWTCustomClaims()
{
return [];
}
//定义添加人的关系
public function optionUser(){
return $this->belongsTo('App\Models\AdminModel','option_id');
}
}
\ No newline at end of file
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class BaseModel extends Model
{
}
\ No newline at end of file
<?php
namespace App\Models;
use App\Models\BaseModel;
class CdnModel extends BaseModel
{
protected $connection = 'mysql';
protected $table = 'cc_cdn';
/**
* 关联项目
* @date 2020/11/18
* @author live
*/
public function getRelationProject(){
return $this->belongsTo('App\Models\ProjectModel','project_id');
}
/**
* 关联云平台
* @date 2020/11/18
* @author live
*/
public function getCloudProject(){
return $this->belongsTo('App\Models\CloudModel','cloud_id');
}
}
<?php
namespace App\Models;
use App\Models\BaseModel;
class CloudModel extends BaseModel
{
protected $connection = 'mysql';
protected $table = 'cc_cloud_providers';
}
\ No newline at end of file
<?php
namespace App\Models;
use App\Models\BaseModel;
class CvmModel extends BaseModel
{
protected $connection = 'mysql';
protected $table = 'cc_cvm';
/**
* 关联项目
* @date 2020/11/18
* @author live
*/
public function getRelationProject(){
return $this->belongsTo('App\Models\ProjectModel','project_id');
}
/**
* 关联云平台
* @date 2020/11/18
* @author live
*/
public function getCloudProject(){
return $this->belongsTo('App\Models\CloudModel','cloud_id');
}
/**
* 付费方式
* @date 2020/11/18
* @author live
*/
public function getRelationPayType(){
return $this->belongsTo('App\Models\OptionsModel','pay_type');
}
/**
* 关联网络类型
* @date 2020/10/18
* @author live
*/
public function getRelationNetworkType(){
return $this->belongsTo('App\Models\OptionsModel','network_type');
}
}
<?php
namespace App\Models;
use App\Models\BaseModel;
class DomainRecordsModel extends BaseModel
{
protected $connection = 'mysql';
protected $table = 'cc_domain_records';
/**
* 关联记录类型
* @date 2020/11/18
* @author live
*/
public function getRelationRecordType(){
return $this->belongsTo('App\Models\OptionsModel','record_type');
}
/**
* 关联线路类型
* @date 2020/11/18
* @author live
*/
public function getRelationIspLine(){
return $this->belongsTo('App\Models\OptionsModel','isp_line');
}
/**
* 关联域名
* @date 2020/11/18
* @author live
*/
public function getRelationDomain(){
return $this->belongsTo('App\Models\DomainsModel','domain_id');
}
}
<?php
namespace App\Models;
use App\Models\BaseModel;
class DomainsModel extends BaseModel
{
protected $connection = 'mysql';
protected $table = 'cc_domains';
/**
* 关联注册商
* @date 2020/11/18
* @author live
*/
public function getRelationRegistrar(){
return $this->belongsTo('App\Models\OptionsModel','registrar');
}
/**
* 关联托管商
* @date 2020/11/18
* @author live
*/
public function getRelationHoster(){
return $this->belongsTo('App\Models\OptionsModel','hoster');
}
/**
* 关联项目
* @date 2020/11/18
* @author live
*/
public function getRelationProject(){
return $this->belongsTo('App\Models\ProjectModel','project_id');
}
}
<?php
namespace App\Models;
use App\Models\BaseModel;
class OptionsModel extends BaseModel
{
protected $connection = 'mysql';
protected $table = 'cc_options';
}
\ No newline at end of file
<?php
namespace App\Models;
use App\Models\BaseModel;
class ProjectModel extends BaseModel
{
protected $connection = 'mysql';
protected $table = 'cc_projects';
}
<?php
namespace App\Models;
use App\Models\BaseModel;
class RdbModel extends BaseModel
{
protected $connection = 'mysql';
protected $table = 'cc_rdb';
/**
* 关联项目
* @date 2020/11/18
* @author live
*/
public function getRelationProject(){
return $this->belongsTo('App\Models\ProjectModel','project_id');
}
/**
* 关联云平台
* @date 2020/11/18
* @author live
*/
public function getCloudProject(){
return $this->belongsTo('App\Models\CloudModel','cloud_id');
}
/**
* 付费方式
* @date 2020/11/18
* @author live
*/
public function getRelationPayType(){
return $this->belongsTo('App\Models\OptionsModel','pay_type');
}
/**
* 关联网络类型
* @date 2020/11/18
* @author live
*/
public function getRelationNetworkType(){
return $this->belongsTo('App\Models\OptionsModel','network_type');
}
}
<?php
namespace App\Models;
use App\Models\BaseModel;
class RedisModel extends BaseModel
{
protected $connection = 'mysql';
protected $table = 'cc_redis';
/**
* 关联项目
* @date 2020/11/18
* @author live
*/
public function getRelationProject(){
return $this->belongsTo('App\Models\ProjectModel','project_id');
}
/**
* 关联云平台
* @date 2020/11/18
* @author live
*/
public function getCloudProject(){
return $this->belongsTo('App\Models\CloudModel','cloud_id');
}
/**
* 付费方式
* @date 2020/11/18
* @author live
*/
public function getRelationPayType(){
return $this->belongsTo('App\Models\OptionsModel','pay_type');
}
/**
* 关联网络类型
* @date 2020/11/18
* @author live
*/
public function getRelationNetworkType(){
return $this->belongsTo('App\Models\OptionsModel','network_type');
}
}
<?php
namespace App\Models;
use App\Models\BaseModel;
class SlbModel extends BaseModel
{
protected $connection = 'mysql';
protected $table = 'cc_slb';
/**
* 关联项目
* @date 2020/11/18
* @author live
*/
public function getRelationProject(){
return $this->belongsTo('App\Models\ProjectModel','project_id');
}
/**
* 关联云平台
* @date 2020/11/18
* @author live
*/
public function getCloudProject(){
return $this->belongsTo('App\Models\CloudModel','cloud_id');
}
}
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
//
}
/**
* Register any application services.
*
* @return void
*/
public function register()
{
$this->app->bind('App\Services\User\IUserService', 'App\Services\User\UserService');
$this->app->bind('App\Services\Project\IProjectService', 'App\Services\Project\ProjectService');
$this->app->bind('App\Services\Cloud\ICloudService', 'App\Services\Cloud\CloudService');
$this->app->bind('App\Services\Cdn\ICdnService', 'App\Services\Cdn\CdnService');
$this->app->bind('App\Services\Options\IOptionsService', 'App\Services\Options\OptionsService');
$this->app->bind('App\Services\Domains\IDomainsService', 'App\Services\Domains\DomainsService');
$this->app->bind('App\Services\Records\IRecordsService', 'App\Services\Records\RecordsService');
$this->app->bind('App\Services\Slb\ISlbService', 'App\Services\Slb\SlbService');
$this->app->bind('App\Services\Cvm\ICvmService', 'App\Services\Cvm\CvmService');
$this->app->bind('App\Services\Rdb\IRdbService', 'App\Services\Rdb\RdbService');
$this->app->bind('App\Services\Redis\IRedisService', 'App\Services\Redis\RedisService');
}
}
<?php
namespace App\Providers;
use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
class AuthServiceProvider extends ServiceProvider
{
/**
* The policy mappings for the application.
*
* @var array
*/
protected $policies = [
'App\Model' => 'App\Policies\ModelPolicy',
];
/**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies();
//
}
}
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Broadcast;
class BroadcastServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Broadcast::routes();
require base_path('routes/channels.php');
}
}
<?php
namespace App\Providers;
use Illuminate\Support\Facades\Event;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
class EventServiceProvider extends ServiceProvider
{
/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
'App\Events\Event' => [
'App\Listeners\EventListener',
],
];
/**
* Register any events for your application.
*
* @return void
*/
public function boot()
{
parent::boot();
//
}
}
<?php
namespace App\Providers;
use Illuminate\Support\Facades\Route;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
class RouteServiceProvider extends ServiceProvider
{
/**
* This namespace is applied to your controller routes.
*
* In addition, it is set as the URL generator's root namespace.
*
* @var string
*/
protected $namespace = 'App\Http\Controllers';
/**
* Define your route model bindings, pattern filters, etc.
*
* @return void
*/
public function boot()
{
//
parent::boot();
}
/**
* Define the routes for the application.
*
* @return void
*/
public function map()
{
$this->mapApiRoutes();
$this->mapWebRoutes();
//
}
/**
* Define the "web" routes for the application.
*
* These routes all receive session state, CSRF protection, etc.
*
* @return void
*/
protected function mapWebRoutes()
{
Route::middleware('web')
->namespace($this->namespace)
->group(base_path('routes/web.php'));
}
/**
* Define the "api" routes for the application.
*
* These routes are typically stateless.
*
* @return void
*/
protected function mapApiRoutes()
{
Route::prefix('api')
->middleware('api')
->namespace($this->namespace)
->group(base_path('routes/api.php'));
}
}
<?php
namespace App\Services\Cdn;
use App\Models\CdnModel;
use App\Services\Cdn\ICdnService;
use Carbon\Carbon;
use Exception;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Cache;
class CdnService implements ICdnService
{
private $time;
public function __construct()
{
$this->time = Carbon::now()->format('Y-m-d H:i:s');
}
/**
* 新增cdn
* @return int
* @date 2020/11/18
* @author live
*/
public function getCdnAdd($postData)
{
$row = new CdnModel();
$row->origin_site = $postData['originSite'] ?? '';
$row->use_domain = $postData['useDomain'] ?? '';
$row->remark = $postData['remark'] ?? '';
$row->cdn_domain = $postData['cdnDomain'] ?? '';
$row->cloud_id = $postData['cloudId'] ?? '';
$row->project_id = $postData['projectId'] ?? '';
$row->created_at = $postData['createdAt'] ?? $this->time;
if( $row->save()) return $row->id;
throw new Exception(config('msg.cdn.5001'),5001);
}
/**
* cdn列表
* @return array
* @date 2020/10/18
* @author live
*/
public function getCdnList($postData)
{
$array = ['totalNum'=>0,'totalPage'=>0,'data'=>[]];
$originSite = $postData['originSite']??'';
$cloudId = $postData['cloudId']??0;
$projectId = $postData['projectId']??0;
$pagePerNum = $postData['pageSize']??20;
$currentPage = $postData['page']??1;
$cdns = CdnModel::with(['getRelationProject:id,cn_name,en_name','getCloudProject:id,cloud_name,account_name'])->when($originSite != '', function ($query) use ($originSite) {
return $query->where('origin_site', 'like',$originSite.'%');
})->when($cloudId > 0, function ($query) use ($cloudId) {
return $query->where('cloud_id',$cloudId);
})->when($projectId > 0, function ($query) use ($projectId) {
return $query->where('project_id',$projectId);
})->select('id','origin_site','use_domain','remark','cdn_domain','cloud_id','project_id','created_at')->orderBy('id','DESC')->paginate($pagePerNum, ['*'], 'currentPage',$currentPage);
$array['totalNum'] = $cdns->total();
$array['totalPage'] = $cdns->lastPage();
foreach($cdns as $cdn){
$tem['id'] = $cdn->id;
$tem['originSite'] = $cdn->origin_site;
$tem['useDomain'] = $cdn->use_domain;
$tem['remark'] = $cdn->remark;
$tem['cdnDomain'] = $cdn->cdn_domain;
$tem['projectId'] = $cdn->project_id;
$tem['projecCnName'] = $cdn->getRelationProject->cn_name ?? '';
$tem['projecEnName'] = $cdn->getRelationProject->en_name ?? '';
$tem['cloudId'] = $cdn->cloud_id;
$tem['cloudName'] = $cdn->getCloudProject->cloud_name ?? '';
$tem['cloudAccount'] = $cdn->getCloudProject->account_name ?? '';
$tem['created_at'] = Carbon::parse($cdn->created_at)->format('Y-m-d H:i:s');
$array['data'][] = $tem;
}
unset($cdns,$cdn,$tem);
return $array;
}
/**
* cdn编辑
* @return int
* @date 2020/10/18
* @author live
*/
public function getCdnEdit($postData)
{
$cdn = CdnModel::find($postData['id']);
if(!$cdn) throw new Exception(config('msg.cdn.5002'),5002);
$cdn->origin_site = $postData['originSite'] ?? '';
$cdn->use_domain = $postData['useDomain'] ?? '';
$cdn->remark = $postData['remark'] ?? '';
$cdn->cdn_domain = $postData['cdnDomain'] ?? '';
$cdn->cloud_id = $postData['cloudId'] ?? '';
$cdn->project_id = $postData['projectId'] ?? '';
$cdn->created_at = $postData['createdAt'];
if($cdn->save()) return $cdn->id;
throw new Exception(config('msg.cdn.5003'),5003);
}
/**
* 删除cdn
* @return bool
* @date 2020/10/18
* @author live
*/
public function getCdnDel($postData)
{
$cdn = CdnModel::where('id',$postData['id'])->where('origin_site',$postData['originSite'])->first();
if(!$cdn) throw new Exception(config('msg.cdn.5002'),5002);
if($cdn->delete()) return true;
throw new Exception(config('msg.cdn.5004'),5004);
}
}
<?php
namespace App\Services\Cdn;
interface ICdnService
{
public function getCdnAdd($postData);//cdn添加
public function getCdnList($postData);//cdn列表
public function getCdnEdit($postData);//cdn编辑
public function getCdnDel($postData);//cdn删除
}
<?php
namespace App\Services\Cloud;
use App\Models\CloudModel;
use App\Services\Cloud\ICloudService;
use Carbon\Carbon;
use Exception;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Cache;
class CloudService implements ICloudService
{
private $time;
public function __construct()
{
$this->time = Carbon::now()->format('Y-m-d H:i:s');
}
/**
* 新增云平台
* @return int
* @date 2020/11/18
* @author live
*/
public function getCloudAdd($postData)
{
$verity = self::getVerityRepeatCloud(0,$postData['cloudName'],$postData['accountName']);
if($verity){
$row = new CloudModel();
$row->cloud_name = $postData['cloudName'] ?? '';
$row->account_name = $postData['accountName'] ?? '';
$row->created_at = $postData['createdAt'] ?? $this->time;
if( $row->save()) return $row->id;
throw new Exception(config('msg.cloud.4002'),4002);
}
throw new Exception(config('msg.cloud.4001'),4001);
}
/**
* 检验云平台账号重复性
* @return bool
* @date 2020/10/18
* @author live
*/
public static function getVerityRepeatCloud($id,$cloudName,$accountName)
{
$verity = CloudModel::when($id > 0, function ($query) use ($id) {
return $query->where('id', '!=',$id);
})->where('cloud_name',$cloudName)->where('account_name',$accountName)->select('id')->first();
if($verity) return false;
return true;
}
/**
* 云平台账号列表
* @return array
* @date 2020/10/18
* @author live
*/
public function getCloudList($postData)
{
$array = ['totalNum'=>0,'totalPage'=>0,'data'=>[]];
$key = $postData['key']??'';
$pagePerNum = $postData['pageSize']??20;
$currentPage = $postData['page']??1;
$clouds = CloudModel::when($key != '', function ($query) use ($key) {
return $query->where('cloud_name', 'like',$key.'%')->orWhere('account_name', 'like',$key.'%');
})->select('id','cloud_name','account_name','created_at')->orderBy('id','DESC')->paginate($pagePerNum, ['*'], 'currentPage',$currentPage);
$array['totalNum'] = $clouds->total();
$array['totalPage'] = $clouds->lastPage();
foreach($clouds as $cloud){
$tem['id'] = $cloud->id;
$tem['cloudName'] = $cloud->cloud_name;
$tem['accountName'] = $cloud->account_name;
$tem['created_at'] = Carbon::parse($cloud->created_at)->format('Y-m-d H:i:s');
$array['data'][] = $tem;
}
unset($clouds,$cloud,$tem);
return $array;
}
/**
* 云平台账号编辑
* @return int
* @date 2020/10/18
* @author live
*/
public function getCloudEdit($postData)
{
$verity = self::getVerityRepeatCloud($postData['id'],$postData['cloudName'],$postData['accountName']);
if($verity){
$cloud = CloudModel::find($postData['id']);
if(!$cloud) throw new Exception(config('msg.project.4003'),4003);
$cloud->cloud_name = $postData['cloudName'];
$cloud->account_name = $postData['accountName'];
$cloud->created_at = $postData['createdAt'];
if($cloud->save()) return $cloud->id;
throw new Exception(config('msg.cloud.4004'),4004);
}
throw new Exception(config('msg.cloud.4001'),4001);
}
/**
* 删除云平台账号
* @return bool
* @date 2020/10/17
* @author live
*/
public function getCloudDel($postData)
{
$cloud = CloudModel::where('id',$postData['id'])->where('cloud_name',$postData['cloudName'])->where('account_name',$postData['accountName'])->first();
if(!$cloud) throw new Exception(config('msg.cloud.4003'),4003);
if($cloud->delete()) return true;
throw new Exception(config('msg.cloud.4005'),4005);
}
/**
* 下拉框列表
* @return array
* @date 2020/10/17
* @author live
*/
public function getCloudSelectList()
{
$clouds = CloudModel::select('id','cloud_name as cloudName','account_name as accountName')->orderBy('id','DESC')->get()->toArray();
return $clouds;
}
}
<?php
namespace App\Services\Cloud;
interface ICloudService
{
public function getCloudAdd($postData);//云平台添加
public function getCloudList($postData);//云平台列表
public function getCloudEdit($postData);//云平台编辑
public function getCloudDel($postData);//云平台删除
public function getCloudSelectList();//云平台下拉框列表
}
<?php
namespace App\Services\Common;
use Carbon\Carbon;
use Exception;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Cache;
class CommonService
{
private $time;
public function __construct()
{
$this->time = Carbon::now()->format('Y-m-d H:i:s');
}
}
<?php
namespace App\Services\Cvm;
use App\Models\CvmModel;
use App\Services\Cvm\ICvmService;
use Carbon\Carbon;
use Exception;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Cache;
class CvmService implements ICvmService
{
private $time;
public function __construct()
{
$this->time = Carbon::now()->format('Y-m-d H:i:s');
}
/**
* cvm列表
* @return array
* @date 2020/10/18
* @author live
*/
public function getCvmList($postData)
{
$array = ['totalNum'=>0,'totalPage'=>0,'data'=>[]];
$instanceName = $postData['instanceName']??'';
$payType = $postData['payType']??'';
$networkType = $postData['networkType']??'';
$cloudId = $postData['cloudId']??0;
$projectId = $postData['projectId']??0;
$pagePerNum = $postData['pageSize']??20;
$currentPage = $postData['page']??1;
$cvms = CvmModel::with(['getRelationProject:id,cn_name,en_name','getCloudProject:id,cloud_name,account_name','getRelationPayType:id,item_value','getRelationNetworkType:id,item_value'])->when($instanceName != '', function ($query) use ($instanceName) {
return $query->where('instance_name', 'like',$instanceName.'%');
})->when($payType > 0, function ($query) use ($payType) {
return $query->where('pay_type',$payType);
})->when($networkType > 0, function ($query) use ($networkType) {
return $query->where('network_type',$networkType);
})->when($cloudId > 0, function ($query) use ($cloudId) {
return $query->where('cloud_id',$cloudId);
})->when($projectId > 0, function ($query) use ($projectId) {
return $query->where('project_id',$projectId);
})->select('id','instance_name','instance_id','system','public_id','intranet_id','capacity','pay_type','network_type','region','config','expire_time','cloud_id','project_id','created_at')->orderBy('expire_time','ASC')->paginate($pagePerNum, ['*'], 'currentPage',$currentPage);
$array['totalNum'] = $cvms->total();
$array['totalPage'] = $cvms->lastPage();
foreach($cvms as $cvm){
$tem['id'] = $cvm->id;
$tem['instanceName'] = $cvm->instance_name;
$tem['instanceId'] = $cvm->instance_id;
$tem['system'] = $cvm->system;
$tem['publicId'] = $cvm->public_id;
$tem['intranetId'] = $cvm->intranet_id;
$tem['capacity'] = $cvm->capacity;
$tem['payTypeId'] = $cvm->pay_type;
$tem['payTypeName'] = $cvm->getRelationPayType->item_value ?? '';
$tem['networkTypeId'] = $cvm->network_type;
$tem['networkTypeName'] = $cvm->getRelationNetworkType->item_value ?? '';
$tem['region'] = $cvm->region;
$tem['config'] = $cvm->config;
$tem['expire_time'] = $cvm->expire_time;
$tem['projectId'] = $cvm->project_id;
$tem['projecCnName'] = $cvm->getRelationProject->cn_name ?? '';
$tem['projecEnName'] = $cvm->getRelationProject->en_name ?? '';
$tem['cloudId'] = $cvm->cloud_id;
$tem['cloudName'] = $cvm->getCloudProject->cloud_name ?? '';
$tem['cloudAccount'] = $cvm->getCloudProject->account_name ?? '';
$tem['created_at'] = Carbon::parse($cvm->created_at)->format('Y-m-d H:i:s');
$array['data'][] = $tem;
}
unset($cvms,$cvm,$tem);
return $array;
}
/**
* 删除cvm
* @return bool
* @date 2020/10/18
* @author live
*/
public function getCvmDel($postData)
{
$cvm = CvmModel::where('id',$postData['id'])->where('instance_id',$postData['instanceId'])->first();
if(!$cvm) throw new Exception(config('msg.cvm.1303'),1303);
if($cvm->delete()) return true;
throw new Exception(config('msg.cvm.1305'),1305);
}
/**
* 新增cvm
* @return array
* @date 2020/11/23
* @author live
*/
public function getCvmAdd($postData)
{
$verity = self::getVerityRepeatCvm(0,$postData['instanceName'],$postData['instanceId']);
if(!$verity) throw new Exception(config('msg.cvm.1302'), 1302);
$row = new CvmModel();
$row->instance_name = $postData['instanceName'] ?? '';
$row->instance_id = $postData['instanceId'] ?? '';
$row->system = $postData['system'] ?? '';
$row->public_id = $postData['publicId'] ?? '';
$row->intranet_id = $postData['intranetId'] ?? '';
$row->capacity = $postData['capacity'] ?? '';
$row->pay_type = $postData['payType'] ?? '';
$row->network_type = $postData['networkType'] ?? '';
$row->region = $postData['region'] ?? '';
$row->config = $postData['config'] ?? '';
$row->expire_time = $postData['expireTime'] ?? '';
$row->cloud_id = $postData['cloudId'] ?? 0;
$row->project_id = $postData['projectId'] ?? 0;
$row->created_at = $postData['createdAt'] ?? $this->time;
if ($row->save()) return $row->id;
throw new Exception(config('msg.cvm.1301'), 1301);
}
/**
* 验证cvm重复性
* @return bool
* @date 2020/10/23
* @author live
*/
public static function getVerityRepeatCvm($id,$instanceName,$instanceId)
{
$verity = CvmModel::when($id > 0, function ($query) use ($id) {
return $query->where('id', '!=',$id);
})->where(function ($query) use ($instanceName,$instanceId) {
return $query->where('instance_name', $instanceName)->orWhere('instance_id',$instanceId);
})->select('id')->first();
if($verity) return false;
return true;
}
/**
* 编辑cvm
* @return bool
* @date 2020/10/23
* @author live
*/
public function getCvmEdit($postData)
{
$verity = self::getVerityRepeatCvm($postData['id'],$postData['instanceName'],$postData['instanceId']);
if(!$verity) throw new Exception(config('msg.cvm.1302'), 1302);
$cvm = CvmModel::find($postData['id']);
if(!$cvm) throw new Exception(config('msg.cvm.1303'),1303);
$cvm->instance_name = $postData['instanceName'] ?? '';
$cvm->instance_id = $postData['instanceId'] ?? '';
$cvm->system = $postData['system'] ?? '';
$cvm->public_id = $postData['publicId'] ?? '';
$cvm->intranet_id = $postData['intranetId'] ?? '';
$cvm->capacity = $postData['capacity'] ?? '';
$cvm->pay_type = $postData['payType'] ?? '';
$cvm->network_type = $postData['networkType'] ?? '';
$cvm->region = $postData['region'] ?? '';
$cvm->config = $postData['config'] ?? '';
$cvm->expire_time = $postData['expireTime'] ?? '';
$cvm->cloud_id = $postData['cloudId'];
$cvm->project_id = $postData['projectId'];
$cvm->created_at = $postData['createdAt'];
if($cvm->save()) return $cvm->id;
throw new Exception(config('msg.cvm.1304'),1304);
}
}
<?php
namespace App\Services\Cvm;
interface ICvmService
{
public function getCvmList($postData);//cvm列表
public function getCvmDel($postData);//删除cvm
public function getCvmAdd($postData);//新增cvm
public function getCvmEdit($postData);//编辑cvm
}
<?php
namespace App\Services\Domains;
use App\Models\DomainsModel;
use App\Services\Domains\IDomainsService;
use Carbon\Carbon;
use Exception;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Cache;
use App\Services\Records\RecordsService;
use App\Models\DomainRecordsModel;
class DomainsService implements IDomainsService
{
private $time;
public function __construct()
{
$this->time = Carbon::now()->format('Y-m-d H:i:s');
}
/**
* 新增域名
* @return int
* @date 2020/11/18
* @author live
*/
public function getDomainsAdd($postData)
{
$verity = self::getVerityRepeatDomains(0,$postData['name']);
if($verity){
$row = new DomainsModel();
$row->name = $postData['name'] ?? '';
$row->registrant = $postData['registrant'] ?? '';
$row->registrant_email = $postData['registrantEmail'] ?? '';
$row->registrar = $postData['registrar'] ?? '';
$row->expire_date = $postData['expireDate'] ?? '';
$row->beian_info = $postData['beianInfo'] ?? '';
$row->hoster = $postData['hoster'] ?? '';
$row->project_id = $postData['projectId'] ?? 0;
$row->created_at = $postData['createdAt'] ?? $this->time;
if( $row->save()) return $row->id;
throw new Exception(config('msg.domains.7001'),7001);
}
throw new Exception(config('msg.domains.7002'),7002);
}
/**
* 验证域名重复性
* @return bool
* @date 2020/10/18
* @author live
*/
public static function getVerityRepeatDomains($id,$name)
{
$verity = DomainsModel::when($id > 0, function ($query) use ($id) {
return $query->where('id', '!=',$id);
})->where('name',$name)->select('id')->first();
if($verity) return false;
return true;
}
/**
* 域名列表
* @return array
* @date 2020/10/18
* @author live
*/
public function getDomainsList($postData)
{
$array = ['totalNum'=>0,'totalPage'=>0,'data'=>[]];
$name = $postData['name']??'';
$registrant = $postData['registrant']??'';
$registrar = $postData['registrar']??0;
$hoster = $postData['hoster']??0;
$projectId = $postData['projectId']??0;
$pagePerNum = $postData['pageSize']??20;
$currentPage = $postData['page']??1;
$domains = DomainsModel::with(['getRelationRegistrar:id,item_value','getRelationHoster:id,item_value','getRelationProject:id,cn_name,en_name'])->when($name != '', function ($query) use ($name) {
return $query->where('name', 'like',$name.'%');
})->when($registrant != '', function ($query) use ($registrant) {
return $query->where('registrant', 'like',$registrant.'%');
})->when($registrar > 0, function ($query) use ($registrar) {
return $query->where('registrar',$registrar);
})->when($hoster > 0, function ($query) use ($hoster) {
return $query->where('hoster',$hoster);
})->when($projectId > 0, function ($query) use ($projectId) {
return $query->where('project_id',$projectId);
})->select('id','name','registrant','registrant_email','registrar','expire_date','beian_info','hoster','project_id','created_at')->orderBy('expire_date','ASC')->paginate($pagePerNum, ['*'], 'currentPage',$currentPage);
$array['totalNum'] = $domains->total();
$array['totalPage'] = $domains->lastPage();
$ids = [];
$domainArray = [];
foreach($domains as $domain){
$tem['id'] = $domain->id;
$tem['name'] = $domain->name;
$tem['registrant'] = $domain->registrant;
$tem['registrant_email'] = $domain->registrant_email;
$tem['registrarId'] = $domain->registrar;
$tem['registrar'] = $domain->getRelationRegistrar->item_value ?? '';
$tem['expireDate'] = $domain->expire_date;
$tem['beianInfo'] = $domain->beian_info;
$tem['hosterId'] = $domain->hoster;
$tem['hoster'] = $domain->getRelationHoster->item_value ?? '';
$tem['projecId'] = $domain->project_id;
$tem['projecCnName'] = $domain->getRelationProject->cn_name ?? '';
$tem['projecEnName'] = $domain->getRelationProject->en_name ?? '';
$tem['created_at'] = Carbon::parse($domain->created_at)->format('Y-m-d H:i:s');
$tem['childrens'] = [];
$domainArray[$domain->id] = $tem;
$ids[] = $domain->id;
}
$records = RecordsService::getDomainRecords($ids);
foreach($domainArray as $key=>$val){
$val['childrens'] = $records[$key] ?? [];
$array['data'][] = $val;
}
unset($cdns,$cdn,$tem,$ids,$records,$domainArray,$val);
return $array;
}
/**
* 域名编辑
* @return int
* @date 2020/10/18
* @author live
*/
public function getDomainsEdit($postData)
{
$verity = self::getVerityRepeatDomains($postData['id'],$postData['name']);
if(!$verity) throw new Exception(config('msg.domains.7002'),7002);
$domain = DomainsModel::find($postData['id']);
if(!$domain) throw new Exception(config('msg.domains.7003'),7003);
$domain->name = $postData['name'] ?? '';
$domain->registrant = $postData['registrant'] ?? '';
$domain->registrant_email = $postData['registrantEmail'] ?? '';
$domain->registrar = $postData['registrar'] ?? '';
$domain->expire_date = $postData['expireDate'] ?? '';
$domain->beian_info = $postData['beianInfo'] ?? '';
$domain->hoster = $postData['hoster'] ?? '';
$domain->project_id = $postData['projectId'] ?? 0;
$domain->created_at = $postData['createdAt'];
if($domain->save()) return $domain->id;
throw new Exception(config('msg.domains.7004'),7004);
}
/**
* 删除域名
* @return bool
* @date 2020/10/18
* @author live
*/
public function getDomainsDel($postData)
{
$domain = DomainsModel::where('id',$postData['id'])->where('name',$postData['name'])->first();
if(!$domain) throw new Exception(config('msg.domains.7003'),7003);
$verity = DomainRecordsModel::where('domain_id',$postData['id'])->select('id')->first();
if($verity) throw new Exception(config('msg.domains.7006'),7006);
if($domain->delete()) return true;
throw new Exception(config('msg.domains.7005'),7005);
}
/**
* 域名下拉列表
* @return array
* @date 2020/10/18
* @author live
*/
public function getDomainsSelectList()
{
$domains = DomainsModel::select('id','name')->orderBy('id','DESC')->get()->toArray();
return $domains;
}
}
<?php
namespace App\Services\Domains;
interface IDomainsService
{
public function getDomainsAdd($postData);//域名添加
public function getDomainsList($postData);//域名列表
public function getDomainsEdit($postData);//域名编辑
public function getDomainsDel($postData);//域名删除
public function getDomainsSelectList();//域名下拉列表
}
<?php
namespace App\Services\Options;
interface IOptionsService
{
public function getOptionsAdd($postData);//选项卡添加
public function getOptionsList($postData);//选项卡列表
public function geOptionsEdit($postData);//选项卡编辑
public function getOptionsDel($postData);//选项卡删除
public function getOptionsSelectList($postData);//选项卡下拉
}
<?php
namespace App\Services\Options;
use App\Models\OptionsModel;
use App\Services\Options\IOptionsService;
use Carbon\Carbon;
use Exception;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Cache;
class OptionsService implements IOptionsService
{
private $time;
public function __construct()
{
$this->time = Carbon::now()->format('Y-m-d H:i:s');
}
/**
* 新增选项卡
* @return array
* @date 2020/11/18
* @author live
*/
public function getOptionsAdd($postData)
{
$verity = self::getVerityRepeatOptions(0,$postData['itemKey'],$postData['itemValue']);
if($verity){
$row = new OptionsModel();
$row->item_key = $postData['itemKey'] ?? '';
$row->item_value = $postData['itemValue'] ?? '';
$row->item_tag = $postData['itemTag'] ?? '';
if( $row->save()) return $row->id;
throw new Exception(config('msg.options.6001'),6001);
}
throw new Exception(config('msg.options.6002'),6002);
}
/**
* 验证选项卡重复性
* @return array
* @date 2020/10/18
* @author live
*/
public static function getVerityRepeatOptions($id,$itemKey,$itemValue)
{
$verity = OptionsModel::when($id > 0, function ($query) use ($id) {
return $query->where('id', '!=',$id);
})->where('item_key',$itemKey)->where('item_value',$itemValue)->select('id')->first();
if($verity) return false;
return true;
}
/**
* 选项卡列表
* @return array
* @date 2020/10/18
* @author live
*/
public function getOptionsList($postData)
{
$array = [];
$itemTag = $postData['itemTag']??'';
$options = OptionsModel::when($itemTag != '', function ($query) use ($itemTag) {
return $query->where('item_tag', 'like',$itemTag.'%');
})->select('id','item_key','item_value','item_tag','created_at')->orderBy('id','DESC')->get();
foreach($options as $option){
$tem['id'] = $option->id;
$tem['itemKey'] = $option->item_key;
$tem['itemValue'] = $option->item_value;
$tem['created_at'] = Carbon::parse($option->created_at)->format('Y-m-d H:i:s');
$array[$option->item_tag]['tag'] = $option->item_tag;
$array[$option->item_tag]['content'][] = $tem;
}
$array = array_values($array);
unset($options,$option,$tem);
return $array;
}
/**
* 选项卡编辑
* @return int
* @date 2020/10/18
* @author live
*/
public function geOptionsEdit($postData)
{
$option = OptionsModel::find($postData['id']);
if(!$option) throw new Exception(config('msg.options.6003'),6003);
$option->item_key = $postData['itemKey'] ?? '';
$option->item_value = $postData['itemValue'] ?? '';
$option->item_tag = $postData['itemTag'] ?? '';
if($option->save()) return $option->id;
throw new Exception(config('msg.options.6004'),6004);
}
/**
* 删除选项卡
* @return bool
* @date 2020/10/18
* @author live
*/
public function getOptionsDel($postData)
{
$option = OptionsModel::where('id',$postData['id'])->where('item_key',$postData['itemKey'])->where('item_value',$postData['itemValue'])->first();
if(!$option) throw new Exception(config('msg.options.6003'),6003);
if($option->delete()) return true;
throw new Exception(config('msg.options.6005'),6005);
}
/**
* 选项卡下拉
* @return bool
* @date 2020/10/18
* @author live
*/
public function getOptionsSelectList($postData){
$itemTags = explode('#',$postData['itemTag']);
$options = OptionsModel::whereIn('item_tag',$itemTags)->select('id','item_key','item_value','item_tag')->get();
foreach($options as $option){
$tem['id'] = $option->id;
$tem['itemKey'] = $option->item_key;
$tem['itemValue'] = $option->item_value;
$array[$option->item_tag][] = $tem;
}
unset($options,$option,$tem);
return $array;
}
}
<?php
namespace App\Services\Project;
interface IProjectService
{
public function getProjectAdd($postData);//项目添加
public function getProjectList($postData);//项目列表
public function getProjectEdit($postData);//编辑项目
public function getProjectDel($postData);//删除项目
public function getProjectSelectList();//下拉框列表
}
<?php
namespace App\Services\Project;
use App\Services\Project\IProjectService;
use Carbon\Carbon;
use Exception;
use Illuminate\Support\Facades\DB;
use App\Models\ProjectModel;
use Illuminate\Support\Facades\Cache;
class ProjectService implements IProjectService
{
private $time;
public function __construct()
{
$this->time = Carbon::now()->format('Y-m-d H:i:s');
}
/**
* 新增项目
* @return array
* @date 2020/11/17
* @author live
*/
public function getProjectAdd($postData)
{
$verity = self::getVerityRepeatProject(0,$postData['cnName'],$postData['enName']);
if($verity){
$row = new ProjectModel();
$row->cn_name = $postData['cnName'] ?? '';
$row->en_name = $postData['enName'] ?? '';
$row->main_master = $postData['mainMaster'] ?? '';
$row->dev_master = $postData['devMaster'] ?? '';
$row->email =$postData['email'];
$row->phone = $postData['phone'];
$row->created_at = $postData['createdAt'] ?? $this->time;
if( $row->save()) return $row->id;
throw new Exception(config('msg.project.3002'),3002);
}
throw new Exception(config('msg.project.3001'),3001);
}
/**
* 检验项目重复性
* @return bool
* @date 2020/10/17
* @author live
*/
public static function getVerityRepeatProject($id,$cnName,$enName)
{
$verity = ProjectModel::when($id > 0, function ($query) use ($id) {
return $query->where('id', '!=',$id);
})->where(function ($query) use ($cnName,$enName) {
return $query->where('cn_name', $cnName)->orWhere('en_name',$enName);
})->select('id')->first();
if($verity) return false;
return true;
}
/**
* 项目列表
* @return array
* @date 2020/10/17
* @author live
*/
public function getProjectList($postData)
{
$array = ['totalNum'=>0,'totalPage'=>0,'data'=>[]];
$key = $postData['key']??'';
$pagePerNum = $postData['pageSize']??20;
$currentPage = $postData['page']??1;
$projects = ProjectModel::when($key != '', function ($query) use ($key) {
return $query->where('cn_name', 'like',$key.'%')->orWhere('en_name', 'like',$key.'%')->orWhere('main_master', 'like',$key.'%')->orWhere('dev_master', 'like',$key.'%')->orWhere('email', 'like',$key.'%');
})->select('id','cn_name','en_name','main_master','dev_master','email','phone','created_at')->orderBy('id','DESC')->paginate($pagePerNum, ['*'], 'currentPage',$currentPage);
$array['totalNum'] = $projects->total();
$array['totalPage'] = $projects->lastPage();
foreach($projects as $pro){
$tem['id'] = $pro->id;
$tem['cnName'] = $pro->cn_name;
$tem['enName'] = $pro->en_name;
$tem['mainMaster'] = $pro->main_master;
$tem['devMaster'] = $pro->dev_master;
$tem['email'] = $pro->email;
$tem['phone'] = $pro->phone;
$tem['created_at'] = Carbon::parse($pro->created_at)->format('Y-m-d H:i:s');
$array['data'][] = $tem;
}
unset($projects,$pro,$tem);
return $array;
}
/**
* 项目编辑
* @return int
* @date 2020/10/17
* @author live
*/
public function getProjectEdit($postData)
{
$verity = self::getVerityRepeatProject($postData['id'],$postData['cnName'],$postData['enName']);
if($verity){
$project = ProjectModel::find($postData['id']);
if(!$project) throw new Exception(config('msg.project.3003'),3003);
$project->cn_name = $postData['cnName'];
$project->en_name = $postData['enName'];
$project->main_master = $postData['mainMaster'];
$project->dev_master = $postData['devMaster'];
$project->email = $postData['email'];
$project->phone = $postData['phone'];
$project->created_at = $postData['createdAt'];
if($project->save()) return $project->id;
throw new Exception(config('msg.user.3004'),3004);
}
throw new Exception(config('msg.project.3001'),3001);
}
/**
* 删除项目
* @return bool
* @date 2020/10/17
* @author live
*/
public function getProjectDel($postData)
{
$project = ProjectModel::where('id',$postData['id'])->where('en_name',$postData['enName'])->first();
if(!$project) throw new Exception(config('msg.project.3003'),3003);
if($project->delete()) return true;
throw new Exception(config('msg.project.3005'),3005);
}
/**
* 下拉框列表
* @return array
* @date 2020/10/17
* @author live
*/
public function getProjectSelectList()
{
$projects = ProjectModel::select('id','cn_name as cnName','en_name as enName')->orderBy('id','DESC')->get()->toArray();
return $projects;
}
}
<?php
namespace App\Services\Rdb;
interface IRdbService
{
public function getRdbList($postData);//rdb列表
public function getRdbDel($postData);//删除rdb
public function getRdbAdd($postData);//新增rdb
public function getRdbEdit($postData);//编辑rdb
}
<?php
namespace App\Services\Rdb;
use App\Models\RdbModel;
use App\Services\Rdb\IRdbService;
use Carbon\Carbon;
use Exception;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Cache;
class RdbService implements IRdbService
{
private $time;
public function __construct()
{
$this->time = Carbon::now()->format('Y-m-d H:i:s');
}
/**
* rdb列表
* @return array
* @date 2020/10/18
* @author live
*/
public function getRdbList($postData)
{
$array = ['totalNum'=>0,'totalPage'=>0,'data'=>[]];
$instanceName = $postData['instanceName']??'';
$cloudId = $postData['cloudId']??0;
$payType = $postData['payType']??'';
$networkType = $postData['networkType']??'';
$projectId = $postData['projectId']??0;
$pagePerNum = $postData['pageSize']??20;
$currentPage = $postData['page']??1;
$rdbs = RdbModel::with(['getRelationProject:id,cn_name,en_name','getCloudProject:id,cloud_name,account_name','getRelationPayType:id,item_value','getRelationNetworkType:id,item_value'])->when($instanceName != '', function ($query) use ($instanceName) {
return $query->where('instance_name', 'like',$instanceName.'%');
})->when($payType > 0, function ($query) use ($payType) {
return $query->where('pay_type',$payType);
})->when($networkType > 0, function ($query) use ($networkType) {
return $query->where('network_type',$networkType);
})->when($cloudId > 0, function ($query) use ($cloudId) {
return $query->where('cloud_id',$cloudId);
})->when($projectId > 0, function ($query) use ($projectId) {
return $query->where('project_id',$projectId);
})->select('id','instance_name','instance_id','type','mysql_type','capacity','pay_type','network_type','region','expire_time','cloud_id','project_id','created_at')->orderBy('id','DESC')->paginate($pagePerNum, ['*'], 'currentPage',$currentPage);
$array['totalNum'] = $rdbs->total();
$array['totalPage'] = $rdbs->lastPage();
foreach($rdbs as $rdb){
$tem['id'] = $rdb->id;
$tem['instanceName'] = $rdb->instance_name;
$tem['instanceId'] = $rdb->instance_id;
$tem['type'] = $rdb->type;
$tem['mysqlType'] = $rdb->mysql_type;
$tem['capacity'] = $rdb->capacity;
$tem['payTypeId'] = $rdb->pay_type;
$tem['payTypeName'] = $rdb->getRelationPayType->item_value ?? '';
$tem['networkTypeId'] = $rdb->network_type;
$tem['networkTypeName'] = $rdb->getRelationNetworkType->item_value ?? '';
$tem['region'] = $rdb->region;
$tem['expire_time'] = $rdb->expire_time;
$tem['projectId'] = $rdb->project_id;
$tem['projecCnName'] = $rdb->getRelationProject->cn_name ?? '';
$tem['projecEnName'] = $rdb->getRelationProject->en_name ?? '';
$tem['cloudId'] = $rdb->cloud_id;
$tem['cloudName'] = $rdb->getCloudProject->cloud_name ?? '';
$tem['cloudAccount'] = $rdb->getCloudProject->account_name ?? '';
$tem['created_at'] = Carbon::parse($rdb->created_at)->format('Y-m-d H:i:s');
$array['data'][] = $tem;
}
unset($rdbs,$rdb,$tem);
return $array;
}
/**
* 删除rdb
* @return bool
* @date 2020/10/18
* @author live
*/
public function getRdbDel($postData)
{
$rdb = RdbModel::where('id',$postData['id'])->where('instance_id',$postData['instanceId'])->first();
if(!$rdb) throw new Exception(config('msg.rdb.1103'),1103);
if($rdb->delete()) return true;
throw new Exception(config('msg.rdb.1105'),1105);
}
/**
* 新增rdb
* @return array
* @date 2020/11/23
* @author live
*/
public function getRdbAdd($postData)
{
$verity = self::getVerityRepeatRdb(0,$postData['instanceName'],$postData['instanceId']);
if(!$verity) throw new Exception(config('msg.rdb.1102'), 1102);
$row = new RdbModel();
$row->instance_name = $postData['instanceName'] ?? '';
$row->instance_id = $postData['instanceId'] ?? '';
$row->type = $postData['type'] ?? '';
$row->mysql_type = $postData['mysqlType'] ?? '';
$row->capacity = $postData['capacity'] ?? '';
$row->pay_type = $postData['payType'] ?? 0;
$row->network_type = $postData['networkType'] ?? 0;
$row->region = $postData['region'] ?? '';
$row->expire_time = $postData['expireTime'] ?? 0;
$row->cloud_id = $postData['cloudId'] ?? 0;
$row->project_id = $postData['projectId'] ?? 0;
$row->created_at = $postData['createdAt'] ?? $this->time;
if ($row->save()) return $row->id;
throw new Exception(config('msg.rdb.1101'), 1101);
}
/**
* 验证rdb重复性
* @return bool
* @date 2020/10/23
* @author live
*/
public static function getVerityRepeatRdb($id,$instanceName,$instanceId)
{
$verity = RdbModel::when($id > 0, function ($query) use ($id) {
return $query->where('id', '!=',$id);
})->where(function ($query) use ($instanceName,$instanceId) {
return $query->where('instance_name', $instanceName)->orWhere('instance_id',$instanceId);
})->select('id')->first();
if($verity) return false;
return true;
}
/**
* 编辑rdb
* @return array
* @date 2020/11/23
* @author live
*/
public function getRdbEdit($postData)
{
$verity = self::getVerityRepeatRdb($postData['id'],$postData['instanceName'],$postData['instanceId']);
if(!$verity) throw new Exception(config('msg.rdb.1102'), 1102);
$rdb = RdbModel::find($postData['id']);
if(!$rdb) throw new Exception(config('msg.rdb.1103'),1103);
$rdb->instance_name = $postData['instanceName'] ?? '';
$rdb->instance_id = $postData['instanceId'] ?? '';
$rdb->type = $postData['type'] ?? '';
$rdb->mysql_type = $postData['mysqlType'] ?? '';
$rdb->capacity = $postData['capacity'] ?? '';
$rdb->pay_type = $postData['payType'] ?? 0;
$rdb->network_type = $postData['networkType'] ?? 0;
$rdb->region = $postData['region'] ?? '';
$rdb->expire_time = $postData['expireTime'] ?? 0;
$rdb->cloud_id = $postData['cloudId'];
$rdb->project_id = $postData['projectId'];
$rdb->created_at = $postData['createdAt'];
if($rdb->save()) return $rdb->id;
throw new Exception(config('msg.rdb.1104'),1104);
}
}
<?php
namespace App\Services\Records;
interface IRecordsService
{
public function getRecordsAdd($postData);//记录添加
public function getRecordsList($postData);//记录列表
public function getRecordsEdit($postData);//记录编辑
public function getRecordsDel($postData);//记录删除
}
<?php
namespace App\Services\Records;
use App\Models\DomainRecordsModel;
use App\Services\Records\IRecordsService;
use Carbon\Carbon;
use Exception;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Cache;
class RecordsService implements IRecordsService
{
private $time;
public function __construct()
{
$this->time = Carbon::now()->format('Y-m-d H:i:s');
}
/**
* 批量获取域名下的记录
* @return array
* @date 2020/11/24
* @author live
*/
public static function getDomainRecords($ids)
{
$array = [];
if(empty($ids)) return $array;
$records = DomainRecordsModel::with(['getRelationRecordType:id,item_value','getRelationIspLine:id,item_value'])->whereIn('domain_id',$ids)->select('id','record','record_type','isp_line','record_value','remark','domain_id','created_at')->get();
foreach($records as $rec){
$tem['id'] = $rec->id;
$tem['record'] = $rec->record;
$tem['recordTypeId'] = $rec->record_type;
$tem['recordTypeName'] = $rec->getRelationRecordType->item_value ?? '';
$tem['ispLineId'] = $rec->isp_line;
$tem['ispLineName'] = $rec->getRelationIspLine->item_value ?? '';
$tem['recordValue'] = $rec->record_value;
$tem['remark'] = $rec->remark;
$tem['created_at'] = Carbon::parse($rec->created_at)->format('Y-m-d H:i:s');
$array[$rec->domain_id][] = $tem;
}
unset($records,$rec,$tem);
return $array;
}
/**
* 新增记录
* @return array
* @date 2020/11/18
* @author live
*/
public function getRecordsAdd($postData)
{
$row = new DomainRecordsModel();
$row->record = $postData['record'] ?? '';
$row->record_type = $postData['recordType'] ?? '';
$row->isp_line = $postData['ispLine'] ?? '';
$row->record_value = $postData['recordValue'] ?? '';
$row->remark = $postData['remark'] ?? '';
$row->domain_id = $postData['domainId'] ?? 0;
$row->created_at = $postData['createdAt'] ?? $this->time;
if ($row->save()) return $row->id;
throw new Exception(config('msg.records.8001'), 8001);
}
/**
* 记录列表
* @return array
* @date 2020/10/18
* @author live
*/
public function getRecordsList($postData)
{
$array = ['totalNum'=>0,'totalPage'=>0,'data'=>[]];
$record = $postData['record']??'';
$recordType = $postData['recordType']??0;
$ispLine = $postData['ispLine']??0;
$domainId = $postData['domainId']??0;
$pagePerNum = $postData['pageSize']??20;
$currentPage = $postData['page']??1;
$records = DomainRecordsModel::with(['getRelationRecordType:id,item_value','getRelationIspLine:id,item_value','getRelationDomain:id,name'])->when($record != '', function ($query) use ($record) {
return $query->where('record', 'like',$record.'%');
})->when($recordType > 0, function ($query) use ($recordType) {
return $query->where('record_type',$recordType);
})->when($ispLine > 0, function ($query) use ($ispLine) {
return $query->where('isp_line',$ispLine);
})->when($domainId > 0, function ($query) use ($domainId) {
return $query->where('domain_id',$domainId);
})->select('id','record','record_type','isp_line','record_value','remark','domain_id','created_at')->orderBy('domain_id','DESC')->paginate($pagePerNum, ['*'], 'currentPage',$currentPage);
$array['totalNum'] = $records->total();
$array['totalPage'] = $records->lastPage();
foreach($records as $rec){
$tem['id'] = $rec->id;
$tem['record'] = $rec->record;
$tem['recordTypeId'] = $rec->record_type;
$tem['recordTypeName'] = $rec->getRelationRecordType->item_value ?? '';
$tem['ispLineId'] = $rec->isp_line;
$tem['ispLineName'] = $rec->getRelationIspLine->item_value ?? '';
$tem['recordValue'] = $rec->record_value;
$tem['remark'] = $rec->remark;
$tem['domainId'] = $rec->domain_id;
$tem['domainName'] = $rec->getRelationDomain->name ?? '';
$tem['created_at'] = Carbon::parse($rec->created_at)->format('Y-m-d H:i:s');
$array['data'][] = $tem;
}
unset($cdns,$cdn,$tem);
return $array;
}
/**
* 记录编辑
* @return int
* @date 2020/10/18
* @author live
*/
public function getRecordsEdit($postData)
{
$record = DomainRecordsModel::find($postData['id']);
if(!$record) throw new Exception(config('msg.records.8003'),8003);
$record->record = $postData['record'] ?? '';
$record->record_type = $postData['recordType'] ?? '';
$record->isp_line = $postData['ispLine'] ?? '';
$record->record_value = $postData['recordValue'] ?? '';
$record->remark = $postData['remark'] ?? '';
$record->domain_id = $postData['domainId'] ?? '';
$record->created_at = $postData['createdAt'];
if($record->save()) return $record->id;
throw new Exception(config('msg.records.8004'),8004);
}
/**
* 删除记录
* @return bool
* @date 2020/10/18
* @author live
*/
public function getRecordsDel($postData)
{
$record = DomainRecordsModel::where('id',$postData['id'])->where('record',$postData['record'])->first();
if(!$record) throw new Exception(config('msg.records.8003'),8003);
if($record->delete()) return true;
throw new Exception(config('msg.records.8005'),8005);
}
}
<?php
namespace App\Services\Redis;
interface IRedisService
{
public function getRedisList($postData);//redis列表
public function getRedisDel($postData);//删除redis
public function getRedisAdd($postData);//新增redis
public function getRedisEdit($postData);//编辑redis
}
<?php
namespace App\Services\Redis;
use App\Models\RedisModel;
use App\Services\Redis\IRedisService;
use Carbon\Carbon;
use Exception;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Cache;
class RedisService implements IRedisService
{
private $time;
public function __construct()
{
$this->time = Carbon::now()->format('Y-m-d H:i:s');
}
/**
* cvm列表
* @return array
* @date 2020/10/18
* @author live
*/
public function getRedisList($postData)
{
$array = ['totalNum'=>0,'totalPage'=>0,'data'=>[]];
$instanceName = $postData['instanceName']??'';
$payType = $postData['payType']??'';
$networkType = $postData['networkType']??'';
$cloudId = $postData['cloudId']??0;
$projectId = $postData['projectId']??0;
$pagePerNum = $postData['pageSize']??20;
$currentPage = $postData['page']??1;
$Redis = RedisModel::with(['getRelationProject:id,cn_name,en_name','getCloudProject:id,cloud_name,account_name','getRelationPayType:id,item_value','getRelationNetworkType:id,item_value'])->when($instanceName != '', function ($query) use ($instanceName) {
return $query->where('instance_name', 'like',$instanceName.'%');
})->when($payType > 0, function ($query) use ($payType) {
return $query->where('pay_type',$payType);
})->when($networkType > 0, function ($query) use ($networkType) {
return $query->where('network_type',$networkType);
})->when($cloudId > 0, function ($query) use ($cloudId) {
return $query->where('cloud_id',$cloudId);
})->when($projectId > 0, function ($query) use ($projectId) {
return $query->where('project_id',$projectId);
})->select('id','instance_name','instance_id','capacity','quota','edition','norms','pay_type','network_type','region','expire_time','cloud_id','project_id','created_at')->orderBy('expire_time','ASC')->paginate($pagePerNum, ['*'], 'currentPage',$currentPage);
$array['totalNum'] = $Redis->total();
$array['totalPage'] = $Redis->lastPage();
foreach($Redis as $Red){
$tem['id'] = $Red->id;
$tem['instanceName'] = $Red->instance_name;
$tem['instanceId'] = $Red->instance_id;
$tem['capacity'] = $Red->capacity;
$tem['quota'] = $Red->capacity;
$tem['edition'] = $Red->edition;
$tem['norms'] = $Red->norms;
$tem['payTypeId'] = $Red->pay_type;
$tem['payTypeName'] = $Red->getRelationPayType->item_value ?? '';
$tem['networkTypeId'] = $Red->network_type;
$tem['networkTypeName'] = $Red->getRelationNetworkType->item_value ?? '';
$tem['region'] = $Red->region;
$tem['expire_time'] = $Red->expire_time;
$tem['projectId'] = $Red->project_id;
$tem['projecCnName'] = $Red->getRelationProject->cn_name ?? '';
$tem['projecEnName'] = $Red->getRelationProject->en_name ?? '';
$tem['cloudId'] = $Red->cloud_id;
$tem['cloudName'] = $Red->getCloudProject->cloud_name ?? '';
$tem['cloudAccount'] = $Red->getCloudProject->account_name ?? '';
$tem['created_at'] = Carbon::parse($Red->created_at)->format('Y-m-d H:i:s');
$array['data'][] = $tem;
}
unset($slbs,$slb,$tem);
return $array;
}
/**
* 删除redis
* @return bool
* @date 2020/10/18
* @author live
*/
public function getRedisDel($postData)
{
$redis = RedisModel::where('id',$postData['id'])->where('instance_id',$postData['instanceId'])->first();
if(!$redis) throw new Exception(config('msg.redis.1203'),1203);
if($redis->delete()) return true;
throw new Exception(config('msg.redis.1205'),1205);
}
/**
* 新增redis
* @return array
* @date 2020/11/23
* @author live
*/
public function getRedisAdd($postData)
{
$verity = self::getVerityRepeatRedis(0,$postData['instanceName'],$postData['instanceId']);
if(!$verity) throw new Exception(config('msg.redis.1202'), 1202);
$row = new RedisModel();
$row->instance_name = $postData['instanceName'] ?? '';
$row->instance_id = $postData['instanceId'] ?? '';
$row->capacity = $postData['capacity'] ?? '';
$row->quota = $postData['quota'] ?? '';
$row->edition = $postData['edition'] ?? '';
$row->norms = $postData['norms'] ?? '';
$row->pay_type = $postData['payType'] ?? 0;
$row->network_type = $postData['networkType'] ?? 0;
$row->region = $postData['region'] ?? '';
$row->expire_time = $postData['expireTime'] ?? '';
$row->cloud_id = $postData['cloudId'] ?? 0;
$row->project_id = $postData['projectId'] ?? 0;
$row->created_at = $postData['createdAt'] ?? $this->time;
if ($row->save()) return $row->id;
throw new Exception(config('msg.redis.1201'), 1201);
}
/**
* 验证redis重复性
* @return bool
* @date 2020/10/23
* @author live
*/
public static function getVerityRepeatRedis($id,$instanceName,$instanceId)
{
$verity = RedisModel::when($id > 0, function ($query) use ($id) {
return $query->where('id', '!=',$id);
})->where(function ($query) use ($instanceName,$instanceId) {
return $query->where('instance_name', $instanceName)->orWhere('instance_id',$instanceId);
})->select('id')->first();
if($verity) return false;
return true;
}
/**
* 编辑redis
* @return bool
* @date 2020/10/23
* @author live
*/
public function getRedisEdit($postData)
{
$verity = self::getVerityRepeatRedis($postData['id'],$postData['instanceName'],$postData['instanceId']);
if(!$verity) throw new Exception(config('msg.redis.1202'), 1202);
$redis = RedisModel::find($postData['id']);
if(!$redis) throw new Exception(config('msg.redis.1203'),1203);
$redis->instance_name = $postData['instanceName'] ?? '';
$redis->instance_id = $postData['instanceId'] ?? '';
$redis->capacity = $postData['capacity'] ?? '';
$redis->quota = $postData['quota'] ?? '';
$redis->edition = $postData['edition'] ?? '';
$redis->norms = $postData['norms'] ?? '';
$redis->pay_type = $postData['payType'] ?? 0;
$redis->network_type = $postData['networkType'] ?? 0;
$redis->region = $postData['region'] ?? '';
$redis->expire_time = $postData['expireTime'] ?? '';
$redis->cloud_id = $postData['cloudId'];
$redis->project_id = $postData['projectId'];
$redis->created_at = $postData['createdAt'];
if($redis->save()) return $redis->id;
throw new Exception(config('msg.redis.1204'),1204);
}
}
\ No newline at end of file
<?php
namespace App\Services\Slb;
interface ISlbService
{
public function getSlbList($postData);//slb列表
public function getSlbDel($postData);//删除slbl
public function getSlbAdd($postData);//新增slb
public function getSlbEdit($postData);//编辑slb
}
<?php
namespace App\Services\Slb;
use App\Models\SlbModel;
use App\Services\Slb\ISlbService;
use Carbon\Carbon;
use Exception;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Cache;
class SlbService implements ISlbService
{
private $time;
public function __construct()
{
$this->time = Carbon::now()->format('Y-m-d H:i:s');
}
/**
* slb列表
* @return array
* @date 2020/10/18
* @author live
*/
public function getSlbList($postData)
{
$array = ['totalNum'=>0,'totalPage'=>0,'data'=>[]];
$instanceName = $postData['instanceName']??'';
$cloudId = $postData['cloudId']??0;
$projectId = $postData['projectId']??0;
$pagePerNum = $postData['pageSize']??20;
$currentPage = $postData['page']??1;
$slbs = SlbModel::with(['getRelationProject:id,cn_name,en_name','getCloudProject:id,cloud_name,account_name'])->when($instanceName != '', function ($query) use ($instanceName) {
return $query->where('instance_name', 'like',$instanceName.'%');
})->when($cloudId > 0, function ($query) use ($cloudId) {
return $query->where('cloud_id',$cloudId);
})->when($projectId > 0, function ($query) use ($projectId) {
return $query->where('project_id',$projectId);
})->select('id','instance_name','instance_id','outer_ip','backend_ip_list','cloud_id','project_id','created_at')->orderBy('id','DESC')->paginate($pagePerNum, ['*'], 'currentPage',$currentPage);
$array['totalNum'] = $slbs->total();
$array['totalPage'] = $slbs->lastPage();
foreach($slbs as $slb){
$tem['id'] = $slb->id;
$tem['instanceName'] = $slb->instance_name;
$tem['instanceId'] = $slb->instance_id;
$tem['outerIp'] = $slb->outer_ip;
$tem['backendIpList'] = $slb->backend_ip_list;
$tem['projectId'] = $slb->project_id;
$tem['projecCnName'] = $slb->getRelationProject->cn_name ?? '';
$tem['projecEnName'] = $slb->getRelationProject->en_name ?? '';
$tem['cloudId'] = $slb->cloud_id;
$tem['cloudName'] = $slb->getCloudProject->cloud_name ?? '';
$tem['cloudAccount'] = $slb->getCloudProject->account_name ?? '';
$tem['created_at'] = Carbon::parse($slb->created_at)->format('Y-m-d H:i:s');
$array['data'][] = $tem;
}
unset($slbs,$slb,$tem);
return $array;
}
/**
* 删除slb
* @return bool
* @date 2020/10/18
* @author live
*/
public function getSlbDel($postData)
{
$slb = SlbModel::where('id',$postData['id'])->where('instance_id',$postData['instanceId'])->first();
if(!$slb) throw new Exception(config('msg.slb.9003'),9003);
if($slb->delete()) return true;
throw new Exception(config('msg.slb.9005'),9005);
}
/**
* 新增slb
* @return array
* @date 2020/11/23
* @author live
*/
public function getSlbAdd($postData)
{
$verity = self::getVerityRepeatSlb(0,$postData['instanceName'],$postData['instanceId']);
if(!$verity) throw new Exception(config('msg.slb.9002'), 9002);
$row = new SlbModel();
$row->instance_name = $postData['instanceName'] ?? '';
$row->instance_id = $postData['instanceId'] ?? '';
$row->outer_ip = $postData['outerIp'] ?? '';
$row->backend_ip_list = $postData['backendIpList'] ?? '';
$row->cloud_id = $postData['cloudId'] ?? 0;
$row->project_id = $postData['projectId'] ?? 0;
$row->created_at = $postData['createdAt'] ?? $this->time;
if ($row->save()) return $row->id;
throw new Exception(config('msg.slb.9001'), 9001);
}
/**
* 验证slb重复性
* @return bool
* @date 2020/10/23
* @author live
*/
public static function getVerityRepeatSlb($id,$instanceName,$instanceId)
{
$verity = SlbModel::when($id > 0, function ($query) use ($id) {
return $query->where('id', '!=',$id);
})->where(function ($query) use ($instanceName,$instanceId) {
return $query->where('instance_name', $instanceName)->orWhere('instance_id',$instanceId);
})->select('id')->first();
if($verity) return false;
return true;
}
/**
* 编辑slb
* @return bool
* @date 2020/10/23
* @author live
*/
public function getSlbEdit($postData)
{
$verity = self::getVerityRepeatSlb($postData['id'],$postData['instanceName'],$postData['instanceId']);
if(!$verity) throw new Exception(config('msg.slb.9002'), 9002);
$slb = SlbModel::find($postData['id']);
if(!$slb) throw new Exception(config('msg.slb.9003'),9003);
$slb->instance_name = $postData['instanceName'];
$slb->instance_id = $postData['instanceId'];
$slb->outer_ip = $postData['outerIp'];
$slb->backend_ip_list = $postData['backendIpList'];
$slb->cloud_id = $postData['cloudId'];
$slb->project_id = $postData['projectId'];
$slb->created_at = $postData['createdAt'];
if($slb->save()) return $slb->id;
throw new Exception(config('msg.slb.9004'),9004);
}
}
\ No newline at end of file
<?php
namespace App\Services\User;
interface IUserService
{
public function getUserAdd($postData); //新增用户
public function getUserList($postData);//用户列表
public function getLogin($postData);//用户登录
public function getLoginOut($token);//用户退出登录
public function getUserEdit($postData);//编辑用户
public function getUserDel($postData);//删除用户
public function getResetUserPwd($postData);//修改用户登录密码
}
<?php
namespace App\Services\User;
use App\Services\User\IUserService;
use Carbon\Carbon;
use Exception;
use Illuminate\Support\Facades\DB;
use App\Models\AdminModel;
use Illuminate\Support\Facades\Cache;
use Tymon\JWTAuth\Facades\JWTAuth;
class UserService implements IUserService{
private $time;
public function __construct()
{
$this->time = Carbon::now()->format('Y-m-d H:i:s');
}
/**
* 新增用户
* @return int
* @date 2020/10/17
* @author live
*/
public function getUserAdd($postData)
{
$verity = self::getVerityRepeatUser(0,$postData['name'],$postData['email']);
if($verity){
$row = new AdminModel();
$row->name = $postData['name'] ?? '';
$row->real_name = $postData['realName'] ?? '';
$row->email = $postData['email'] ?? '';
$row->phone = $postData['phone'] ?? '';
$row->password = bcrypt($postData['pwd']);
$row->option_id = $postData['user']['id'];
if( $row->save()) return $row->id;
throw new Exception(config('msg.user.2002'),2002);
}
throw new Exception(config('msg.user.2001'),2001);
}
/**
* 检验用户重复性
* @return bool
* @date 2020/10/17
* @author live
*/
public static function getVerityRepeatUser($id = 0,$name,$email){
$verity = AdminModel::when($id > 0, function ($query) use ($id) {
return $query->where('id', '!=',$id);
})->where(function ($query) use ($name,$email) {
return $query->where('name', $name)->orWhere('email',$email);
})->select('id')->first();
if($verity) return false;
return true;
}
/**
* 用户列表
* @return araay
* @date 2020/10/17
* @author live
*/
public function getUserList($postData)
{
$key = $postData['key']??'';
$pagePerNum = $postData['pageSize']??20;
$currentPage = $postData['page']??1;
$users = AdminModel::with(['optionUser:id,name'])->when($key != '', function ($query) use ($key) {
return $query->where('name', 'like',$key.'%')->orWhere('real_name', 'like',$key.'%')->orWhere('email', 'like',$key.'%')->orWhere('phone', 'like',$key.'%');
})->select('id','name','real_name','email','phone','option_id','created_at')->orderBy('id','DESC')->paginate($pagePerNum, ['*'], 'currentPage',$currentPage);
$array['totalNum'] = $users->total();
$array['totalPage'] = $users->lastPage();
foreach($users as $user){
$tem['id'] = $user->id;
$tem['name'] = $user->name;
$tem['realName'] = $user->real_name;
$tem['email'] = $user->email;
$tem['phone'] = $user->phone;
$tem['optionName'] = $user->optionUser->name ?? '';
$tem['created_at'] = Carbon::parse($user->created_at)->format('Y-m-d H:i:s');
$array['data'][] = $tem;
}
unset($users,$user,$user);
return $array;
}
/**
* 用户登录
* @return araay
* @date 2020/10/17
* @author live
*/
public function getLogin($postData){
$array['token'] = '';
$credentials = ['name'=>$postData['name'], 'password'=>$postData['pwd']];
if (! $token = JWTAuth::attempt($credentials)){
throw new Exception(config('msg.user.2003'),2003);
}
$user = AdminModel::where('name',$postData['name'])->select('id','token')->first();
$userToken = MD5($token);
$user->token = $userToken;
$user->save();
Cache::put('login_'.$userToken,1,60);
$array['token'] = $token;
unset($user,$userToken);
return $array;
}
/**
* 退出登录
* @return araay
* @date 2020/10/17
* @author live
*/
public function getLoginOut($token)
{
$userToken = MD5($token);
if(Cache::has('login_'.$userToken)) Cache::forget('login_'.$userToken);
$user = AdminModel::where('token',$userToken)->select('id','token')->first();
$user->token = '';
$user->save();
return true;
}
/**
* 编辑用户
* @return araay
* @date 2020/10/17
* @author live
*/
public function getUserEdit($postData)
{
$verity = self::getVerityRepeatUser($postData['id'],'',$postData['email']);
if($verity){
$user = AdminModel::find($postData['id']);
if(!$user) throw new Exception(config('msg.user.2004'),2004);
$user->real_name = $postData['realName'];
$user->email = $postData['email'];
$user->phone = $postData['phone'];
if($user->save()) return $user->id;
throw new Exception(config('msg.user.2005'),2005);
}
throw new Exception(config('msg.user.2001'),2001);
}
/**
* 删除用户
* @return araay
* @date 2020/10/17
* @author live
*/
public function getUserDel($postData)
{
$user = AdminModel::where('id',$postData['id'])->where('name',$postData['name'])->first();
if(!$user) throw new Exception(config('msg.user.2004'),2004);
if($user->delete()) return true;
throw new Exception(config('msg.user.2006'),2006);
}
/**
* 修改用户登录密码
* @return araay
* @date 2020/10/17
* @author live
*/
public function getResetUserPwd($postData)
{
$user = AdminModel::where('id',$postData['id'])->where('name',$postData['name'])->first();
if(!$user) throw new Exception(config('msg.user.2004'),2004);
$userToken = $user->token;
$user->password = bcrypt($postData['pwd']);
$user->token = '';
if($user->save()){
if(Cache::has('login_'.$userToken)) Cache::forget('login_'.$userToken);
return true;
}
throw new Exception(config('msg.user.2007'),2007);
}
}
\ No newline at end of file
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
}
#!/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);
<?php
/*
|--------------------------------------------------------------------------
| Create The Application
|--------------------------------------------------------------------------
|
| The first thing we will do is create a new Laravel application instance
| which serves as the "glue" for all the components of Laravel, and is
| the IoC container for the system binding all of the various parts.
|
*/
$app = new Illuminate\Foundation\Application(
realpath(__DIR__.'/../')
);
/*
|--------------------------------------------------------------------------
| Bind Important Interfaces
|--------------------------------------------------------------------------
|
| Next, we need to bind some important interfaces into the container so
| we will be able to resolve them when needed. The kernels serve the
| incoming requests to this application from both the web and CLI.
|
*/
$app->singleton(
Illuminate\Contracts\Http\Kernel::class,
App\Http\Kernel::class
);
$app->singleton(
Illuminate\Contracts\Console\Kernel::class,
App\Console\Kernel::class
);
$app->singleton(
Illuminate\Contracts\Debug\ExceptionHandler::class,
App\Exceptions\Handler::class
);
/*
|--------------------------------------------------------------------------
| Return The Application
|--------------------------------------------------------------------------
|
| This script returns the application instance. The instance is given to
| the calling script so we can separate the building of the instances
| from the actual running of the application and sending responses.
|
*/
return $app;
{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"type": "project",
"require": {
"php": "^7.1.3",
"fideloper/proxy": "^4.0",
"laravel/framework": "5.6.*",
"laravel/tinker": "^1.0",
"predis/predis": "1.1",
"tymon/jwt-auth": "1.*@rc"
},
"require-dev": {
"filp/whoops": "^2.0",
"fzaninotto/faker": "^1.4",
"mockery/mockery": "^1.0",
"nunomaduro/collision": "^2.0",
"phpunit/phpunit": "^7.0"
},
"autoload": {
"classmap": [
"database/seeds",
"database/factories"
],
"psr-4": {
"App\\": "app/"
},
"files": [
"app/Common/Common.php"
]
},
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
}
},
"extra": {
"laravel": {
"dont-discover": [
]
}
},
"scripts": {
"post-root-package-install": [
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"@php artisan key:generate"
],
"post-autoload-dump": [
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
"@php artisan package:discover"
]
},
"config": {
"preferred-install": "dist",
"sort-packages": true,
"optimize-autoloader": true
},
"minimum-stability": "dev",
"prefer-stable": true
}
This source diff could not be displayed because it is too large. You can view the blob instead.
<?php
return [
/*
|--------------------------------------------------------------------------
| Application Name
|--------------------------------------------------------------------------
|
| This value is the name of your application. This value is used when the
| framework needs to place the application's name in a notification or
| any other location as required by the application or its packages.
|
*/
'name' => env('APP_NAME', 'Laravel'),
/*
|--------------------------------------------------------------------------
| Application Environment
|--------------------------------------------------------------------------
|
| This value determines the "environment" your application is currently
| running in. This may determine how you prefer to configure various
| services your application utilizes. Set this in your ".env" file.
|
*/
'env' => env('APP_ENV', 'production'),
/*
|--------------------------------------------------------------------------
| Application Debug Mode
|--------------------------------------------------------------------------
|
| When your application is in debug mode, detailed error messages with
| stack traces will be shown on every error that occurs within your
| application. If disabled, a simple generic error page is shown.
|
*/
'debug' => env('APP_DEBUG', false),
/*
|--------------------------------------------------------------------------
| Application URL
|--------------------------------------------------------------------------
|
| This URL is used by the console to properly generate URLs when using
| the Artisan command line tool. You should set this to the root of
| your application so that it is used when running Artisan tasks.
|
*/
'url' => env('APP_URL', 'http://localhost'),
/*
|--------------------------------------------------------------------------
| Application Timezone
|--------------------------------------------------------------------------
|
| Here you may specify the default timezone for your application, which
| will be used by the PHP date and date-time functions. We have gone
| ahead and set this to a sensible default for you out of the box.
|
*/
'timezone' => 'Asia/Shanghai',
/*
|--------------------------------------------------------------------------
| Application Locale Configuration
|--------------------------------------------------------------------------
|
| The application locale determines the default locale that will be used
| by the translation service provider. You are free to set this value
| to any of the locales which will be supported by the application.
|
*/
'locale' => 'en',
/*
|--------------------------------------------------------------------------
| Application Fallback Locale
|--------------------------------------------------------------------------
|
| The fallback locale determines the locale to use when the current one
| is not available. You may change the value to correspond to any of
| the language folders that are provided through your application.
|
*/
'fallback_locale' => 'en',
/*
|--------------------------------------------------------------------------
| Encryption Key
|--------------------------------------------------------------------------
|
| This key is used by the Illuminate encrypter service and should be set
| to a random, 32 character string, otherwise these encrypted strings
| will not be safe. Please do this before deploying an application!
|
*/
'key' => env('APP_KEY'),
'cipher' => 'AES-256-CBC',
/*
|--------------------------------------------------------------------------
| Autoloaded Service Providers
|--------------------------------------------------------------------------
|
| The service providers listed here will be automatically loaded on the
| request to your application. Feel free to add your own services to
| this array to grant expanded functionality to your applications.
|
*/
'providers' => [
/*
* Laravel Framework Service Providers...
*/
Illuminate\Auth\AuthServiceProvider::class,
Illuminate\Broadcasting\BroadcastServiceProvider::class,
Illuminate\Bus\BusServiceProvider::class,
Illuminate\Cache\CacheServiceProvider::class,
Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class,
Illuminate\Cookie\CookieServiceProvider::class,
Illuminate\Database\DatabaseServiceProvider::class,
Illuminate\Encryption\EncryptionServiceProvider::class,
Illuminate\Filesystem\FilesystemServiceProvider::class,
Illuminate\Foundation\Providers\FoundationServiceProvider::class,
Illuminate\Hashing\HashServiceProvider::class,
Illuminate\Mail\MailServiceProvider::class,
Illuminate\Notifications\NotificationServiceProvider::class,
Illuminate\Pagination\PaginationServiceProvider::class,
Illuminate\Pipeline\PipelineServiceProvider::class,
Illuminate\Queue\QueueServiceProvider::class,
Illuminate\Redis\RedisServiceProvider::class,
Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
Illuminate\Session\SessionServiceProvider::class,
Illuminate\Translation\TranslationServiceProvider::class,
Illuminate\Validation\ValidationServiceProvider::class,
Illuminate\View\ViewServiceProvider::class,
/*
* Package Service Providers...
*/
/*
* Application Service Providers...
*/
App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
// App\Providers\BroadcastServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
],
/*
|--------------------------------------------------------------------------
| Class Aliases
|--------------------------------------------------------------------------
|
| This array of class aliases will be registered when this application
| is started. However, feel free to register as many as you wish as
| the aliases are "lazy" loaded so they don't hinder performance.
|
*/
'aliases' => [
'App' => Illuminate\Support\Facades\App::class,
'Artisan' => Illuminate\Support\Facades\Artisan::class,
'Auth' => Illuminate\Support\Facades\Auth::class,
'Blade' => Illuminate\Support\Facades\Blade::class,
'Broadcast' => Illuminate\Support\Facades\Broadcast::class,
'Bus' => Illuminate\Support\Facades\Bus::class,
'Cache' => Illuminate\Support\Facades\Cache::class,
'Config' => Illuminate\Support\Facades\Config::class,
'Cookie' => Illuminate\Support\Facades\Cookie::class,
'Crypt' => Illuminate\Support\Facades\Crypt::class,
'DB' => Illuminate\Support\Facades\DB::class,
'Eloquent' => Illuminate\Database\Eloquent\Model::class,
'Event' => Illuminate\Support\Facades\Event::class,
'File' => Illuminate\Support\Facades\File::class,
'Gate' => Illuminate\Support\Facades\Gate::class,
'Hash' => Illuminate\Support\Facades\Hash::class,
'Lang' => Illuminate\Support\Facades\Lang::class,
'Log' => Illuminate\Support\Facades\Log::class,
'Mail' => Illuminate\Support\Facades\Mail::class,
'Notification' => Illuminate\Support\Facades\Notification::class,
'Password' => Illuminate\Support\Facades\Password::class,
'Queue' => Illuminate\Support\Facades\Queue::class,
'Redirect' => Illuminate\Support\Facades\Redirect::class,
'Redis' => Illuminate\Support\Facades\Redis::class,
'Request' => Illuminate\Support\Facades\Request::class,
'Response' => Illuminate\Support\Facades\Response::class,
'Route' => Illuminate\Support\Facades\Route::class,
'Schema' => Illuminate\Support\Facades\Schema::class,
'Session' => Illuminate\Support\Facades\Session::class,
'Storage' => Illuminate\Support\Facades\Storage::class,
'URL' => Illuminate\Support\Facades\URL::class,
'Validator' => Illuminate\Support\Facades\Validator::class,
'View' => Illuminate\Support\Facades\View::class,
'JWTAuth' => Tymon\JWTAuth\Facades\JWTAuth::class,
'JWTFactory' => Tymon\JWTAuth\Facades\JWTFactory::class,
],
];
<?php
return [
/*
|--------------------------------------------------------------------------
| Authentication Defaults
|--------------------------------------------------------------------------
|
| This option controls the default authentication "guard" and password
| reset options for your application. You may change these defaults
| as required, but they're a perfect start for most applications.
|
*/
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
/*
|--------------------------------------------------------------------------
| Authentication Guards
|--------------------------------------------------------------------------
|
| Next, you may define every authentication guard for your application.
| Of course, a great default configuration has been defined for you
| here which uses session storage and the Eloquent user provider.
|
| All authentication drivers have a user provider. This defines how the
| users are actually retrieved out of your database or other storage
| mechanisms used by this application to persist your user's data.
|
| Supported: "session", "token"
|
*/
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'jwt',
'provider' => 'users',
],
],
/*
|--------------------------------------------------------------------------
| User Providers
|--------------------------------------------------------------------------
|
| All authentication drivers have a user provider. This defines how the
| users are actually retrieved out of your database or other storage
| mechanisms used by this application to persist your user's data.
|
| If you have multiple user tables or models you may configure multiple
| sources which represent each model / table. These sources may then
| be assigned to any extra authentication guards you have defined.
|
| Supported: "database", "eloquent"
|
*/
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Models\AdminModel::class,
],
// 'users' => [
// 'driver' => 'database',
// 'table' => 'users',
// ],
],
/*
|--------------------------------------------------------------------------
| Resetting Passwords
|--------------------------------------------------------------------------
|
| You may specify multiple password reset configurations if you have more
| than one user table or model in the application and you want to have
| separate password reset settings based on the specific user types.
|
| The expire time is the number of minutes that the reset token should be
| considered valid. This security feature keeps tokens short-lived so
| they have less time to be guessed. You may change this as needed.
|
*/
'passwords' => [
'users' => [
'provider' => 'users',
'table' => 'password_resets',
'expire' => 60,
],
],
];
<?php
return [
/*
|--------------------------------------------------------------------------
| Default Broadcaster
|--------------------------------------------------------------------------
|
| This option controls the default broadcaster that will be used by the
| framework when an event needs to be broadcast. You may set this to
| any of the connections defined in the "connections" array below.
|
| Supported: "pusher", "redis", "log", "null"
|
*/
'default' => env('BROADCAST_DRIVER', 'null'),
/*
|--------------------------------------------------------------------------
| Broadcast Connections
|--------------------------------------------------------------------------
|
| Here you may define all of the broadcast connections that will be used
| to broadcast events to other systems or over websockets. Samples of
| each available type of connection are provided inside this array.
|
*/
'connections' => [
'pusher' => [
'driver' => 'pusher',
'key' => env('PUSHER_APP_KEY'),
'secret' => env('PUSHER_APP_SECRET'),
'app_id' => env('PUSHER_APP_ID'),
'options' => [
'cluster' => env('PUSHER_APP_CLUSTER'),
'encrypted' => true,
],
],
'redis' => [
'driver' => 'redis',
'connection' => 'default',
],
'log' => [
'driver' => 'log',
],
'null' => [
'driver' => 'null',
],
],
];
<?php
return [
/*
|--------------------------------------------------------------------------
| Default Cache Store
|--------------------------------------------------------------------------
|
| This option controls the default cache connection that gets used while
| using this caching library. This connection is used when another is
| not explicitly specified when executing a given caching function.
|
| Supported: "apc", "array", "database", "file", "memcached", "redis"
|
*/
'default' => env('CACHE_DRIVER', 'file'),
/*
|--------------------------------------------------------------------------
| Cache Stores
|--------------------------------------------------------------------------
|
| Here you may define all of the cache "stores" for your application as
| well as their drivers. You may even define multiple stores for the
| same cache driver to group types of items stored in your caches.
|
*/
'stores' => [
'apc' => [
'driver' => 'apc',
],
'array' => [
'driver' => 'array',
],
'database' => [
'driver' => 'database',
'table' => 'cache',
'connection' => null,
],
'file' => [
'driver' => 'file',
'path' => storage_path('framework/cache/data'),
],
'memcached' => [
'driver' => 'memcached',
'persistent_id' => env('MEMCACHED_PERSISTENT_ID'),
'sasl' => [
env('MEMCACHED_USERNAME'),
env('MEMCACHED_PASSWORD'),
],
'options' => [
// Memcached::OPT_CONNECT_TIMEOUT => 2000,
],
'servers' => [
[
'host' => env('MEMCACHED_HOST', '127.0.0.1'),
'port' => env('MEMCACHED_PORT', 11211),
'weight' => 100,
],
],
],
'redis' => [
'driver' => 'redis',
'connection' => 'default',
],
],
/*
|--------------------------------------------------------------------------
| Cache Key Prefix
|--------------------------------------------------------------------------
|
| When utilizing a RAM based store such as APC or Memcached, there might
| be other applications utilizing the same cache. So, we'll specify a
| value to get prefixed to all our keys so we can avoid collisions.
|
*/
'prefix' => env(
'CACHE_PREFIX',
str_slug(env('APP_NAME', 'laravel'), '_').'_cache'
),
];
<?php
return [
/*
|--------------------------------------------------------------------------
| Default Database Connection Name
|--------------------------------------------------------------------------
|
| Here you may specify which of the database connections below you wish
| to use as your default connection for all database work. Of course
| you may use many connections at once using the Database library.
|
*/
'default' => env('DB_CONNECTION', 'mysql'),
/*
|--------------------------------------------------------------------------
| Database Connections
|--------------------------------------------------------------------------
|
| Here are each of the database connections setup for your application.
| Of course, examples of configuring each database platform that is
| supported by Laravel is shown below to make development simple.
|
|
| All database work in Laravel is done through the PHP PDO facilities
| so make sure you have the driver for your particular database of
| choice installed on your machine before you begin development.
|
*/
'connections' => [
'sqlite' => [
'driver' => 'sqlite',
'database' => env('DB_DATABASE', database_path('database.sqlite')),
'prefix' => '',
],
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
'pgsql' => [
'driver' => 'pgsql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '5432'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'prefix' => '',
'schema' => 'public',
'sslmode' => 'prefer',
],
'sqlsrv' => [
'driver' => 'sqlsrv',
'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', '1433'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'prefix' => '',
],
],
/*
|--------------------------------------------------------------------------
| Migration Repository Table
|--------------------------------------------------------------------------
|
| This table keeps track of all the migrations that have already run for
| your application. Using this information, we can determine which of
| the migrations on disk haven't actually been run in the database.
|
*/
'migrations' => 'migrations',
/*
|--------------------------------------------------------------------------
| Redis Databases
|--------------------------------------------------------------------------
|
| Redis is an open source, fast, and advanced key-value store that also
| provides a richer set of commands than a typical key-value systems
| such as APC or Memcached. Laravel makes it easy to dig right in.
|
*/
'redis' => [
'client' => 'predis',
'default' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
],
],
];
<?php
return [
/*
|--------------------------------------------------------------------------
| Default Filesystem Disk
|--------------------------------------------------------------------------
|
| Here you may specify the default filesystem disk that should be used
| by the framework. The "local" disk, as well as a variety of cloud
| based disks are available to your application. Just store away!
|
*/
'default' => env('FILESYSTEM_DRIVER', 'local'),
/*
|--------------------------------------------------------------------------
| Default Cloud Filesystem Disk
|--------------------------------------------------------------------------
|
| Many applications store files both locally and in the cloud. For this
| reason, you may specify a default "cloud" driver here. This driver
| will be bound as the Cloud disk implementation in the container.
|
*/
'cloud' => env('FILESYSTEM_CLOUD', 's3'),
/*
|--------------------------------------------------------------------------
| Filesystem Disks
|--------------------------------------------------------------------------
|
| Here you may configure as many filesystem "disks" as you wish, and you
| may even configure multiple disks of the same driver. Defaults have
| been setup for each driver as an example of the required options.
|
| Supported Drivers: "local", "ftp", "sftp", "s3", "rackspace"
|
*/
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path('app'),
],
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],
's3' => [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET'),
'url' => env('AWS_URL'),
],
],
];
<?php
return [
/*
|--------------------------------------------------------------------------
| Default Hash Driver
|--------------------------------------------------------------------------
|
| This option controls the default hash driver that will be used to hash
| passwords for your application. By default, the bcrypt algorithm is
| used; however, you remain free to modify this option if you wish.
|
| Supported: "bcrypt", "argon"
|
*/
'driver' => 'bcrypt',
/*
|--------------------------------------------------------------------------
| Bcrypt Options
|--------------------------------------------------------------------------
|
| Here you may specify the configuration options that should be used when
| passwords are hashed using the Bcrypt algorithm. This will allow you
| to control the amount of time it takes to hash the given password.
|
*/
'bcrypt' => [
'rounds' => env('BCRYPT_ROUNDS', 10),
],
/*
|--------------------------------------------------------------------------
| Argon Options
|--------------------------------------------------------------------------
|
| Here you may specify the configuration options that should be used when
| passwords are hashed using the Argon algorithm. These will allow you
| to control the amount of time it takes to hash the given password.
|
*/
'argon' => [
'memory' => 1024,
'threads' => 2,
'time' => 2,
],
];
<?php
/*
* This file is part of jwt-auth.
*
* (c) Sean Tymon <tymon148@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
return [
/*
|--------------------------------------------------------------------------
| JWT Authentication Secret
|--------------------------------------------------------------------------
|
| Don't forget to set this in your .env file, as it will be used to sign
| your tokens. A helper command is provided for this:
| `php artisan jwt:secret`
|
| Note: This will be used for Symmetric algorithms only (HMAC),
| since RSA and ECDSA use a private/public key combo (See below).
|
*/
'secret' => env('JWT_SECRET'),
/*
|--------------------------------------------------------------------------
| JWT Authentication Keys
|--------------------------------------------------------------------------
|
| The algorithm you are using, will determine whether your tokens are
| signed with a random string (defined in `JWT_SECRET`) or using the
| following public & private keys.
|
| Symmetric Algorithms:
| HS256, HS384 & HS512 will use `JWT_SECRET`.
|
| Asymmetric Algorithms:
| RS256, RS384 & RS512 / ES256, ES384 & ES512 will use the keys below.
|
*/
'keys' => [
/*
|--------------------------------------------------------------------------
| Public Key
|--------------------------------------------------------------------------
|
| A path or resource to your public key.
|
| E.g. 'file://path/to/public/key'
|
*/
'public' => env('JWT_PUBLIC_KEY'),
/*
|--------------------------------------------------------------------------
| Private Key
|--------------------------------------------------------------------------
|
| A path or resource to your private key.
|
| E.g. 'file://path/to/private/key'
|
*/
'private' => env('JWT_PRIVATE_KEY'),
/*
|--------------------------------------------------------------------------
| Passphrase
|--------------------------------------------------------------------------
|
| The passphrase for your private key. Can be null if none set.
|
*/
'passphrase' => env('JWT_PASSPHRASE'),
],
/*
|--------------------------------------------------------------------------
| JWT time to live
|--------------------------------------------------------------------------
|
| Specify the length of time (in minutes) that the token will be valid for.
| Defaults to 1 hour.
|
| You can also set this to null, to yield a never expiring token.
| Some people may want this behaviour for e.g. a mobile app.
| This is not particularly recommended, so make sure you have appropriate
| systems in place to revoke the token if necessary.
| Notice: If you set this to null you should remove 'exp' element from 'required_claims' list.
|
*/
'ttl' => env('JWT_TTL', 120),
/*
|--------------------------------------------------------------------------
| Refresh time to live
|--------------------------------------------------------------------------
|
| Specify the length of time (in minutes) that the token can be refreshed
| within. I.E. The user can refresh their token within a 2 week window of
| the original token being created until they must re-authenticate.
| Defaults to 2 weeks.
|
| You can also set this to null, to yield an infinite refresh time.
| Some may want this instead of never expiring tokens for e.g. a mobile app.
| This is not particularly recommended, so make sure you have appropriate
| systems in place to revoke the token if necessary.
|
*/
'refresh_ttl' => env('JWT_REFRESH_TTL', 20160),
/*
|--------------------------------------------------------------------------
| JWT hashing algorithm
|--------------------------------------------------------------------------
|
| Specify the hashing algorithm that will be used to sign the token.
|
| See here: https://github.com/namshi/jose/tree/master/src/Namshi/JOSE/Signer/OpenSSL
| for possible values.
|
*/
'algo' => env('JWT_ALGO', 'HS256'),
/*
|--------------------------------------------------------------------------
| Required Claims
|--------------------------------------------------------------------------
|
| Specify the required claims that must exist in any token.
| A TokenInvalidException will be thrown if any of these claims are not
| present in the payload.
|
*/
'required_claims' => [
'iss',
'iat',
'exp',
'nbf',
'sub',
'jti',
],
/*
|--------------------------------------------------------------------------
| Persistent Claims
|--------------------------------------------------------------------------
|
| Specify the claim keys to be persisted when refreshing a token.
| `sub` and `iat` will automatically be persisted, in
| addition to the these claims.
|
| Note: If a claim does not exist then it will be ignored.
|
*/
'persistent_claims' => [
// 'foo',
// 'bar',
],
/*
|--------------------------------------------------------------------------
| Lock Subject
|--------------------------------------------------------------------------
|
| This will determine whether a `prv` claim is automatically added to
| the token. The purpose of this is to ensure that if you have multiple
| authentication models e.g. `App\User` & `App\OtherPerson`, then we
| should prevent one authentication request from impersonating another,
| if 2 tokens happen to have the same id across the 2 different models.
|
| Under specific circumstances, you may want to disable this behaviour
| e.g. if you only have one authentication model, then you would save
| a little on token size.
|
*/
'lock_subject' => true,
/*
|--------------------------------------------------------------------------
| Leeway
|--------------------------------------------------------------------------
|
| This property gives the jwt timestamp claims some "leeway".
| Meaning that if you have any unavoidable slight clock skew on
| any of your servers then this will afford you some level of cushioning.
|
| This applies to the claims `iat`, `nbf` and `exp`.
|
| Specify in seconds - only if you know you need it.
|
*/
'leeway' => env('JWT_LEEWAY', 0),
/*
|--------------------------------------------------------------------------
| Blacklist Enabled
|--------------------------------------------------------------------------
|
| In order to invalidate tokens, you must have the blacklist enabled.
| If you do not want or need this functionality, then set this to false.
|
*/
'blacklist_enabled' => env('JWT_BLACKLIST_ENABLED', true),
/*
| -------------------------------------------------------------------------
| Blacklist Grace Period
| -------------------------------------------------------------------------
|
| When multiple concurrent requests are made with the same JWT,
| it is possible that some of them fail, due to token regeneration
| on every request.
|
| Set grace period in seconds to prevent parallel request failure.
|
*/
'blacklist_grace_period' => env('JWT_BLACKLIST_GRACE_PERIOD', 0),
/*
|--------------------------------------------------------------------------
| Cookies encryption
|--------------------------------------------------------------------------
|
| By default Laravel encrypt cookies for security reason.
| If you decide to not decrypt cookies, you will have to configure Laravel
| to not encrypt your cookie token by adding its name into the $except
| array available in the middleware "EncryptCookies" provided by Laravel.
| see https://laravel.com/docs/master/responses#cookies-and-encryption
| for details.
|
| Set it to true if you want to decrypt cookies.
|
*/
'decrypt_cookies' => false,
/*
|--------------------------------------------------------------------------
| Providers
|--------------------------------------------------------------------------
|
| Specify the various providers used throughout the package.
|
*/
'providers' => [
/*
|--------------------------------------------------------------------------
| JWT Provider
|--------------------------------------------------------------------------
|
| Specify the provider that is used to create and decode the tokens.
|
*/
'jwt' => Tymon\JWTAuth\Providers\JWT\Lcobucci::class,
/*
|--------------------------------------------------------------------------
| Authentication Provider
|--------------------------------------------------------------------------
|
| Specify the provider that is used to authenticate users.
|
*/
'auth' => Tymon\JWTAuth\Providers\Auth\Illuminate::class,
/*
|--------------------------------------------------------------------------
| Storage Provider
|--------------------------------------------------------------------------
|
| Specify the provider that is used to store tokens in the blacklist.
|
*/
'storage' => Tymon\JWTAuth\Providers\Storage\Illuminate::class,
],
];
<?php
use Monolog\Handler\StreamHandler;
return [
/*
|--------------------------------------------------------------------------
| Default Log Channel
|--------------------------------------------------------------------------
|
| This option defines the default log channel that gets used when writing
| messages to the logs. The name specified in this option should match
| one of the channels defined in the "channels" configuration array.
|
*/
'default' => env('LOG_CHANNEL', 'stack'),
/*
|--------------------------------------------------------------------------
| Log Channels
|--------------------------------------------------------------------------
|
| Here you may configure the log channels for your application. Out of
| the box, Laravel uses the Monolog PHP logging library. This gives
| you a variety of powerful log handlers / formatters to utilize.
|
| Available Drivers: "single", "daily", "slack", "syslog",
| "errorlog", "monolog",
| "custom", "stack"
|
*/
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['single'],
],
'single' => [
'driver' => 'single',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
],
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
'days' => 7,
],
'slack' => [
'driver' => 'slack',
'url' => env('LOG_SLACK_WEBHOOK_URL'),
'username' => 'Laravel Log',
'emoji' => ':boom:',
'level' => 'critical',
],
'stderr' => [
'driver' => 'monolog',
'handler' => StreamHandler::class,
'with' => [
'stream' => 'php://stderr',
],
],
'syslog' => [
'driver' => 'syslog',
'level' => 'debug',
],
'errorlog' => [
'driver' => 'errorlog',
'level' => 'debug',
],
],
];
<?php
return [
/*
|--------------------------------------------------------------------------
| Mail Driver
|--------------------------------------------------------------------------
|
| Laravel supports both SMTP and PHP's "mail" function as drivers for the
| sending of e-mail. You may specify which one you're using throughout
| your application here. By default, Laravel is setup for SMTP mail.
|
| Supported: "smtp", "sendmail", "mailgun", "mandrill", "ses",
| "sparkpost", "log", "array"
|
*/
'driver' => env('MAIL_DRIVER', 'smtp'),
/*
|--------------------------------------------------------------------------
| SMTP Host Address
|--------------------------------------------------------------------------
|
| Here you may provide the host address of the SMTP server used by your
| applications. A default option is provided that is compatible with
| the Mailgun mail service which will provide reliable deliveries.
|
*/
'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
/*
|--------------------------------------------------------------------------
| SMTP Host Port
|--------------------------------------------------------------------------
|
| This is the SMTP port used by your application to deliver e-mails to
| users of the application. Like the host we have set this value to
| stay compatible with the Mailgun e-mail application by default.
|
*/
'port' => env('MAIL_PORT', 587),
/*
|--------------------------------------------------------------------------
| Global "From" Address
|--------------------------------------------------------------------------
|
| You may wish for all e-mails sent by your application to be sent from
| the same address. Here, you may specify a name and address that is
| used globally for all e-mails that are sent by your application.
|
*/
'from' => [
'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
'name' => env('MAIL_FROM_NAME', 'Example'),
],
/*
|--------------------------------------------------------------------------
| E-Mail Encryption Protocol
|--------------------------------------------------------------------------
|
| Here you may specify the encryption protocol that should be used when
| the application send e-mail messages. A sensible default using the
| transport layer security protocol should provide great security.
|
*/
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
/*
|--------------------------------------------------------------------------
| SMTP Server Username
|--------------------------------------------------------------------------
|
| If your SMTP server requires a username for authentication, you should
| set it here. This will get used to authenticate with your server on
| connection. You may also set the "password" value below this one.
|
*/
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
/*
|--------------------------------------------------------------------------
| Sendmail System Path
|--------------------------------------------------------------------------
|
| When using the "sendmail" driver to send e-mails, we will need to know
| the path to where Sendmail lives on this server. A default path has
| been provided here, which will work well on most of your systems.
|
*/
'sendmail' => '/usr/sbin/sendmail -bs',
/*
|--------------------------------------------------------------------------
| Markdown Mail Settings
|--------------------------------------------------------------------------
|
| If you are using Markdown based email rendering, you may configure your
| theme and component paths here, allowing you to customize the design
| of the emails. Or, you may simply stick with the Laravel defaults!
|
*/
'markdown' => [
'theme' => 'default',
'paths' => [
resource_path('views/vendor/mail'),
],
],
];
<?php
// 定义错误码
return [
/*
* 共通错误提示模块10xx
*/
'common' => [
'401' => '未登录或者登录失效',
'1001' => '参数或者参数格式有误',
],
'user' => [
'2001' => '登录名或者邮箱已存在',
'2002' => '添加用户失败',
'2003' => '登录名或者登录密码错误',
'2004' => '用户异常',
'2005' => '修改用户失败',
'2006' => '删除用户失败',
'2007' => '修改用户登录密码失败',
],
'project' => [
'3001' => '项目名称已存在',
'3002' => '添加项目失败',
'3003' => '项目数据异常',
'3004' => '修改项目失败',
'3005' => '删除项目失败',
],
'cloud' => [
'4001' => '平台账号已存在',
'4002' => '添加平台账号失败',
'4003' => '平台账号数据异常',
'4004' => '修改平台账号失败',
'4005' => '删除平台账号失败',
],
'cdn' => [
'5001' => '添加cdn失败',
'5002' => 'cdn数据异常',
'5003' => '修改cdn失败',
'5004' => '删除cdn失败',
],
'options' => [
'6001' => '添加选项卡失败',
'6002' => '选项卡重复',
'6003' => '选项卡数据异常',
'6004' => '编辑选项卡失败',
'6005' => '删除选项卡失败',
],
'domains' => [
'7001' => '添加域名失败',
'7002' => '域名重复',
'7003' => '域名数据异常',
'7004' => '编辑域名失败',
'7005' => '删除域名失败',
'7006' => '无法删除域名,请先删除域名下面的记录',
],
'records' => [
'8001' => '添加记录失败',
'8002' => '记录重复',
'8003' => '记录数据异常',
'8004' => '编辑记录失败',
'8005' => '删除记录失败',
],
'slb' => [
'9001' => '添加slb失败',
'9002' => 'slb重复',
'9003' => 'slb数据异常',
'9004' => '编辑slb失败',
'9005' => '删除slb失败',
],
'rdb' => [
'1101' => '添加rdb失败',
'1102' => 'rdb重复',
'1103' => 'rdb数据异常',
'1104' => '编辑rdb失败',
'1105' => '删除rdb失败',
],
'redis' => [
'1201' => '添加redis失败',
'1202' => 'redis重复',
'1203' => 'redis数据异常',
'1204' => '编辑redis失败',
'1205' => '删除redis失败',
],
'cvm' => [
'1301' => '添加cvm失败',
'1302' => 'cvm重复',
'1303' => 'cvm数据异常',
'1304' => '编辑cvm失败',
'1305' => '删除cvm失败',
],
];
\ No newline at end of file
<?php
return [
/*
|--------------------------------------------------------------------------
| Default Queue Connection Name
|--------------------------------------------------------------------------
|
| Laravel's queue API supports an assortment of back-ends via a single
| API, giving you convenient access to each back-end using the same
| syntax for every one. Here you may define a default connection.
|
*/
'default' => env('QUEUE_DRIVER', 'sync'),
/*
|--------------------------------------------------------------------------
| Queue Connections
|--------------------------------------------------------------------------
|
| Here you may configure the connection information for each server that
| is used by your application. A default configuration has been added
| for each back-end shipped with Laravel. You are free to add more.
|
| Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null"
|
*/
'connections' => [
'sync' => [
'driver' => 'sync',
],
'database' => [
'driver' => 'database',
'table' => 'jobs',
'queue' => 'default',
'retry_after' => 90,
],
'beanstalkd' => [
'driver' => 'beanstalkd',
'host' => 'localhost',
'queue' => 'default',
'retry_after' => 90,
],
'sqs' => [
'driver' => 'sqs',
'key' => env('SQS_KEY', 'your-public-key'),
'secret' => env('SQS_SECRET', 'your-secret-key'),
'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'),
'queue' => env('SQS_QUEUE', 'your-queue-name'),
'region' => env('SQS_REGION', 'us-east-1'),
],
'redis' => [
'driver' => 'redis',
'connection' => 'default',
'queue' => 'default',
'retry_after' => 90,
'block_for' => null,
],
],
/*
|--------------------------------------------------------------------------
| Failed Queue Jobs
|--------------------------------------------------------------------------
|
| These options configure the behavior of failed queue job logging so you
| can control which database and table are used to store the jobs that
| have failed. You may change them to any database / table you wish.
|
*/
'failed' => [
'database' => env('DB_CONNECTION', 'mysql'),
'table' => 'failed_jobs',
],
];
<?php
return [
/*
|--------------------------------------------------------------------------
| Third Party Services
|--------------------------------------------------------------------------
|
| This file is for storing the credentials for third party services such
| as Stripe, Mailgun, SparkPost and others. This file provides a sane
| default location for this type of information, allowing packages
| to have a conventional place to find your various credentials.
|
*/
'mailgun' => [
'domain' => env('MAILGUN_DOMAIN'),
'secret' => env('MAILGUN_SECRET'),
],
'ses' => [
'key' => env('SES_KEY'),
'secret' => env('SES_SECRET'),
'region' => env('SES_REGION', 'us-east-1'),
],
'sparkpost' => [
'secret' => env('SPARKPOST_SECRET'),
],
'stripe' => [
'model' => App\User::class,
'key' => env('STRIPE_KEY'),
'secret' => env('STRIPE_SECRET'),
],
];
<?php
return [
/*
|--------------------------------------------------------------------------
| Default Session Driver
|--------------------------------------------------------------------------
|
| This option controls the default session "driver" that will be used on
| requests. By default, we will use the lightweight native driver but
| you may specify any of the other wonderful drivers provided here.
|
| Supported: "file", "cookie", "database", "apc",
| "memcached", "redis", "array"
|
*/
'driver' => env('SESSION_DRIVER', 'file'),
/*
|--------------------------------------------------------------------------
| Session Lifetime
|--------------------------------------------------------------------------
|
| Here you may specify the number of minutes that you wish the session
| to be allowed to remain idle before it expires. If you want them
| to immediately expire on the browser closing, set that option.
|
*/
'lifetime' => env('SESSION_LIFETIME', 120),
'expire_on_close' => false,
/*
|--------------------------------------------------------------------------
| Session Encryption
|--------------------------------------------------------------------------
|
| This option allows you to easily specify that all of your session data
| should be encrypted before it is stored. All encryption will be run
| automatically by Laravel and you can use the Session like normal.
|
*/
'encrypt' => false,
/*
|--------------------------------------------------------------------------
| Session File Location
|--------------------------------------------------------------------------
|
| When using the native session driver, we need a location where session
| files may be stored. A default has been set for you but a different
| location may be specified. This is only needed for file sessions.
|
*/
'files' => storage_path('framework/sessions'),
/*
|--------------------------------------------------------------------------
| Session Database Connection
|--------------------------------------------------------------------------
|
| When using the "database" or "redis" session drivers, you may specify a
| connection that should be used to manage these sessions. This should
| correspond to a connection in your database configuration options.
|
*/
'connection' => null,
/*
|--------------------------------------------------------------------------
| Session Database Table
|--------------------------------------------------------------------------
|
| When using the "database" session driver, you may specify the table we
| should use to manage the sessions. Of course, a sensible default is
| provided for you; however, you are free to change this as needed.
|
*/
'table' => 'sessions',
/*
|--------------------------------------------------------------------------
| Session Cache Store
|--------------------------------------------------------------------------
|
| When using the "apc" or "memcached" session drivers, you may specify a
| cache store that should be used for these sessions. This value must
| correspond with one of the application's configured cache stores.
|
*/
'store' => null,
/*
|--------------------------------------------------------------------------
| Session Sweeping Lottery
|--------------------------------------------------------------------------
|
| Some session drivers must manually sweep their storage location to get
| rid of old sessions from storage. Here are the chances that it will
| happen on a given request. By default, the odds are 2 out of 100.
|
*/
'lottery' => [2, 100],
/*
|--------------------------------------------------------------------------
| Session Cookie Name
|--------------------------------------------------------------------------
|
| Here you may change the name of the cookie used to identify a session
| instance by ID. The name specified here will get used every time a
| new session cookie is created by the framework for every driver.
|
*/
'cookie' => env(
'SESSION_COOKIE',
str_slug(env('APP_NAME', 'laravel'), '_').'_session'
),
/*
|--------------------------------------------------------------------------
| Session Cookie Path
|--------------------------------------------------------------------------
|
| The session cookie path determines the path for which the cookie will
| be regarded as available. Typically, this will be the root path of
| your application but you are free to change this when necessary.
|
*/
'path' => '/',
/*
|--------------------------------------------------------------------------
| Session Cookie Domain
|--------------------------------------------------------------------------
|
| Here you may change the domain of the cookie used to identify a session
| in your application. This will determine which domains the cookie is
| available to in your application. A sensible default has been set.
|
*/
'domain' => env('SESSION_DOMAIN', null),
/*
|--------------------------------------------------------------------------
| HTTPS Only Cookies
|--------------------------------------------------------------------------
|
| By setting this option to true, session cookies will only be sent back
| to the server if the browser has a HTTPS connection. This will keep
| the cookie from being sent to you if it can not be done securely.
|
*/
'secure' => env('SESSION_SECURE_COOKIE', false),
/*
|--------------------------------------------------------------------------
| HTTP Access Only
|--------------------------------------------------------------------------
|
| Setting this value to true will prevent JavaScript from accessing the
| value of the cookie and the cookie will only be accessible through
| the HTTP protocol. You are free to modify this option if needed.
|
*/
'http_only' => true,
/*
|--------------------------------------------------------------------------
| Same-Site Cookies
|--------------------------------------------------------------------------
|
| This option determines how your cookies behave when cross-site requests
| take place, and can be used to mitigate CSRF attacks. By default, we
| do not enable this as other CSRF protection services are in place.
|
| Supported: "lax", "strict"
|
*/
'same_site' => null,
];
<?php
return [
/*
|--------------------------------------------------------------------------
| View Storage Paths
|--------------------------------------------------------------------------
|
| Most templating systems load templates from disk. Here you may specify
| an array of paths that should be checked for your views. Of course
| the usual Laravel view path has already been registered for you.
|
*/
'paths' => [
resource_path('views'),
],
/*
|--------------------------------------------------------------------------
| Compiled View Path
|--------------------------------------------------------------------------
|
| This option determines where all the compiled Blade templates will be
| stored for your application. Typically, this is within the storage
| directory. However, as usual, you are free to change this value.
|
*/
'compiled' => realpath(storage_path('framework/views')),
];
<?php
use Faker\Generator as Faker;
/*
|--------------------------------------------------------------------------
| Model Factories
|--------------------------------------------------------------------------
|
| This directory should contain each of the model factory definitions for
| your application. Factories provide a convenient way to generate new
| model instances for testing / seeding your application's database.
|
*/
$factory->define(App\User::class, function (Faker $faker) {
return [
'name' => $faker->name,
'email' => $faker->unique()->safeEmail,
'password' => '$2y$10$TKh8H1.PfQx37YgCzwiKb.KjNyWgaHb9cbcoQgdIVFlYg7B77UdFm', // secret
'remember_token' => str_random(10),
];
});
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateCcAdminTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('cc_admin', function (Blueprint $table) {
$table->increments('id')->comment('自增ID');
$table->string('name',32)->default('')->unique()->comment('登录名');
$table->string('real_name',32)->default('')->nullable()->comment('真实名称');
$table->string('email',64)->default('')->unique()->comment('邮箱');
$table->string('phone',16)->default('')->comment('手机号');
$table->string('password',128)->default('')->comment('登录密码');
$table->string('token',64)->default('')->comment('登录token');
$table->integer('option_id')->default(0)->comment('操作人ID');
$table->timestamps();
$table->unique('name', 'email');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('cc_admin');
}
}
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateCcCdnTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('cc_cdn', function (Blueprint $table) {
$table->increments('id')->comment('自增ID');
$table->string('origin_site',64)->default('')->comment('源站地址');
$table->string('use_domain',64)->default('')->comment('使用域名');
$table->string('remark',128)->default('')->comment('业务说明');
$table->string('cdn_domain',64)->default('')->comment('cdn生成的域名');
$table->integer('cloud_id')->default(0)->comment('云账号ID');
$table->integer('project_id')->default(0)->comment('项目ID');
$table->timestamps();
$table->index('cloud_id');
$table->index('project_id');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('cc_cdn');
}
}
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateCcCloudProvidersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('cc_cloud_providers', function (Blueprint $table) {
$table->increments('id')->comment('自增ID');
$table->string('cloud_name',64)->default('')->comment('云平台');
$table->string('account_name',64)->default('')->comment('账号');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('cc_cloud_providers');
}
}
\ No newline at end of file
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateCcDomainRecordsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('cc_domain_records', function (Blueprint $table) {
$table->increments('id')->comment('自增ID');
$table->string('record',64)->default('')->comment('主机记录');
$table->integer('record_type')->default(0)->comment('记录类型');
$table->integer('isp_line')->default(0)->comment('线路类型');
$table->string('record_value',64)->default('')->comment('记录值');
$table->string('remark',256)->default('')->comment('备注');
$table->integer('domain_id')->default(0)->comment('域名ID');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('cc_domain_records');
}
}
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateCcDomainsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('cc_domains', function (Blueprint $table) {
$table->increments('id')->comment('自增ID');
$table->string('name',128)->default('')->comment('域名');
$table->string('registrant',32)->default('')->comment('注册人');
$table->string('registrant_email',64)->default('')->comment('注册人邮箱');
$table->integer('registrar')->default(0)->comment('注册商');
$table->date('expire_date')->comment('到期时间');
$table->string('beian_info',256)->default('')->comment('备案信息');
$table->integer('hoster')->default(0)->comment('托管商');
$table->integer('project_id')->default(0)->comment('项目ID');
$table->timestamps();
$table->index('project_id');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('cc_domains');
}
}
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateCcProjectsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('cc_projects', function (Blueprint $table) {
$table->increments('id')->comment('自增ID');
$table->string('cn_name',32)->default('')->comment('中文名');
$table->string('en_name',32)->default('')->comment('英文名');
$table->string('main_master',32)->default('')->comment('主要负责人');
$table->string('dev_master',32)->default('')->comment('开发负责人');
$table->string('email',32)->default('')->comment('邮箱');
$table->string('phone',16)->default('')->comment('电话');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('cc_projects');
}
}
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateCcSlbTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('cc_slb', function (Blueprint $table) {
$table->increments('id')->comment('自增ID');
$table->string('instance_name',32)->default('')->comment('实例名称备注');
$table->string('instance_id',64)->default('')->comment('实例ID');
$table->string('outer_ip',32)->default('')->comment('服务地址');
$table->string('backend_ip_list',128)->default('')->comment('后端IP列表');
$table->integer('cloud_id')->default(0)->comment('云账号ID');
$table->integer('project_id')->default(0)->comment('项目ID');
$table->timestamps();
$table->index('cloud_id');
$table->index('project_id');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('cc_slb');
}
}
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateCcCvmTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('cc_cvm', function (Blueprint $table) {
$table->increments('id')->comment('自增ID');
$table->string('instance_id',64)->default('')->comment('实例ID');
$table->string('instance_name',64)->default('')->comment('实例名称');
$table->string('system',32)->default('')->comment('系统类型');
$table->string('public_id',32)->default('')->comment('公网IP');
$table->string('intranet_id',32)->default('')->comment('内网IP');
$table->string('capacity',32)->default('')->comment('容量');
$table->integer('pay_type')->default(0)->comment('付费方式');
$table->integer('network_type')->default(0)->comment('网络类型');
$table->string('region',128)->default('')->comment('地区');
$table->string('config',256)->default('')->comment('配置');
$table->dateTime('expire_time')->comment('到期时间');
$table->integer('cloud_id')->default(0)->comment('云账号ID');
$table->integer('project_id')->default(0)->comment('项目ID');
$table->timestamps();
$table->index('cloud_id');
$table->index('project_id');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('cc_cvm');
}
}
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateCcRdbTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('cc_rdb', function (Blueprint $table) {
$table->increments('id')->comment('自增ID');
$table->string('instance_id',64)->default('')->comment('实例ID');
$table->string('instance_name',64)->default('')->comment('实例名称');
$table->string('type',32)->default('')->comment('实例类型');
$table->string('mysql_type',32)->default('')->comment('数据库类型');
$table->string('capacity',32)->default('')->comment('容量');
$table->integer('pay_type')->default(0)->comment('付费方式');
$table->integer('network_type')->default(0)->comment('网络类型');
$table->string('region',128)->default('')->comment('地区');
$table->dateTime('expire_time')->comment('到期时间');
$table->integer('cloud_id')->default(0)->comment('云账号ID');
$table->integer('project_id')->default(0)->comment('项目ID');
$table->timestamps();
$table->index('cloud_id');
$table->index('project_id');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('cc_rdb');
}
}
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateCcRedisTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('cc_redis', function (Blueprint $table) {
$table->increments('id')->comment('自增ID');
$table->string('instance_id',64)->default('')->comment('实例ID');
$table->string('instance_name',64)->default('')->comment('实例名称');
$table->string('capacity',16)->default('')->comment('容量');
$table->string('quota',16)->default('')->comment('配额');
$table->string('edition',32)->default('')->comment('版本');
$table->string('norms',32)->default('')->comment('实例规格');
$table->integer('pay_type')->default(0)->comment('付费方式');
$table->integer('network_type')->default(0)->comment('网络类型');
$table->string('region',128)->default('')->comment('地区');
$table->dateTime('expire_time')->comment('到期时间');
$table->integer('cloud_id')->default(0)->comment('云账号ID');
$table->integer('project_id')->default(0)->comment('项目ID');
$table->timestamps();
$table->index('cloud_id');
$table->index('project_id');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('cc_redis');
}
}
<?php
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{
// $this->call(UsersTableSeeder::class);
}
}
{
"private": true,
"scripts": {
"dev": "npm run development",
"development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"watch": "npm run development -- --watch",
"watch-poll": "npm run watch -- --watch-poll",
"hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
"prod": "npm run production",
"production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
},
"devDependencies": {
"axios": "^0.18",
"bootstrap": "^4.0.0",
"popper.js": "^1.12",
"cross-env": "^5.1",
"jquery": "^3.2",
"laravel-mix": "^2.0",
"lodash": "^4.17.4",
"vue": "^2.5.7"
}
}
<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
backupStaticAttributes="false"
bootstrap="vendor/autoload.php"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false">
<testsuites>
<testsuite name="Unit">
<directory suffix="Test.php">./tests/Unit</directory>
</testsuite>
<testsuite name="Feature">
<directory suffix="Test.php">./tests/Feature</directory>
</testsuite>
</testsuites>
<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">./app</directory>
</whitelist>
</filter>
<php>
<env name="APP_ENV" value="testing"/>
<env name="BCRYPT_ROUNDS" value="4"/>
<env name="CACHE_DRIVER" value="array"/>
<env name="SESSION_DRIVER" value="array"/>
<env name="QUEUE_DRIVER" value="sync"/>
<env name="MAIL_DRIVER" value="array"/>
</php>
</phpunit>
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
This source diff could not be displayed because it is too large. You can view the blob instead.
<?php
/**
* Laravel - A PHP Framework For Web Artisans
*
* @package Laravel
* @author Taylor Otwell <taylor@laravel.com>
*/
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 simply require it
| into the script here so that we don't have to worry about manual
| loading any of our classes later on. It feels great to relax.
|
*/
require __DIR__.'/../vendor/autoload.php';
/*
|--------------------------------------------------------------------------
| Turn On The Lights
|--------------------------------------------------------------------------
|
| We need to illuminate PHP development, so let us turn on the lights.
| This bootstraps the framework and gets it ready for use, then it
| will load up this application so that we can run it and send
| the responses back to the browser and delight our users.
|
*/
$app = require_once __DIR__.'/../bootstrap/app.php';
/*
|--------------------------------------------------------------------------
| Run The Application
|--------------------------------------------------------------------------
|
| Once we have the application, we can handle the incoming request
| through the kernel, and send the associated response back to
| the client's browser allowing them to enjoy the creative
| and wonderful application we have prepared for them.
|
*/
$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
$response = $kernel->handle(
$request = Illuminate\Http\Request::capture()
);
$response->send();
$kernel->terminate($request, $response);
This source diff could not be displayed because it is too large. You can view the blob instead.
User-agent: *
Disallow:
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Imported Rule 1" stopProcessing="true">
<match url="^(.*)/$" ignoreCase="false" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
</conditions>
<action type="Redirect" redirectType="Permanent" url="/{R:1}" />
</rule>
<rule name="Imported Rule 2" stopProcessing="true">
<match url="^" ignoreCase="false" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
</conditions>
<action type="Rewrite" url="index.php" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
/**
* First we will load all of this project's JavaScript dependencies which
* includes Vue and other libraries. It is a great starting point when
* building robust, powerful web applications using Vue and Laravel.
*/
require('./bootstrap');
window.Vue = require('vue');
/**
* Next, we will create a fresh Vue application instance and attach it to
* the page. Then, you may begin adding components to this application
* or customize the JavaScript scaffolding to fit your unique needs.
*/
Vue.component('example-component', require('./components/ExampleComponent.vue'));
const app = new Vue({
el: '#app'
});
window._ = require('lodash');
window.Popper = require('popper.js').default;
/**
* We'll load jQuery and the Bootstrap jQuery plugin which provides support
* for JavaScript based Bootstrap features such as modals and tabs. This
* code may be modified to fit the specific needs of your application.
*/
try {
window.$ = window.jQuery = require('jquery');
require('bootstrap');
} catch (e) {}
/**
* We'll load the axios HTTP library which allows us to easily issue requests
* to our Laravel back-end. This library automatically handles sending the
* CSRF token as a header based on the value of the "XSRF" token cookie.
*/
window.axios = require('axios');
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
/**
* Next we will register the CSRF Token as a common header with Axios so that
* all outgoing HTTP requests automatically have it attached. This is just
* a simple convenience so we don't have to attach every token manually.
*/
let token = document.head.querySelector('meta[name="csrf-token"]');
if (token) {
window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;
} else {
console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token');
}
/**
* Echo exposes an expressive API for subscribing to channels and listening
* for events that are broadcast by Laravel. Echo and event broadcasting
* allows your team to easily build robust real-time web applications.
*/
// import Echo from 'laravel-echo'
// window.Pusher = require('pusher-js');
// window.Echo = new Echo({
// broadcaster: 'pusher',
// key: process.env.MIX_PUSHER_APP_KEY,
// cluster: process.env.MIX_PUSHER_APP_CLUSTER,
// encrypted: true
// });
<template>
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card card-default">
<div class="card-header">Example Component</div>
<div class="card-body">
I'm an example component.
</div>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
mounted() {
console.log('Component mounted.')
}
}
</script>
// Body
$body-bg: #f8fafc;
// Typography
$font-family-sans-serif: "Nunito", sans-serif;
$font-size-base: 0.9rem;
$line-height-base: 1.6;
// Colors
$blue: #3490dc;
$indigo: #6574cd;
$purple: #9561e2;
$pink: #f66D9b;
$red: #e3342f;
$orange: #f6993f;
$yellow: #ffed4a;
$green: #38c172;
$teal: #4dc0b5;
$cyan: #6cb2eb;
// Fonts
@import url('https://fonts.googleapis.com/css?family=Nunito');
// Variables
@import 'variables';
// Bootstrap
@import '~bootstrap/scss/bootstrap';
.navbar-laravel {
background-color: #fff;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.04);
}
<?php
return [
/*
|--------------------------------------------------------------------------
| Authentication Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used during authentication for various
| messages that we need to display to the user. You are free to modify
| these language lines according to your application's requirements.
|
*/
'failed' => 'These credentials do not match our records.',
'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
];
<?php
return [
/*
|--------------------------------------------------------------------------
| Pagination Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used by the paginator library to build
| the simple pagination links. You are free to change them to anything
| you want to customize your views to better match your application.
|
*/
'previous' => '&laquo; Previous',
'next' => 'Next &raquo;',
];
<?php
return [
/*
|--------------------------------------------------------------------------
| Password Reset Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are the default lines which match reasons
| that are given by the password broker for a password update attempt
| has failed, such as for an invalid token or invalid new password.
|
*/
'password' => 'Passwords must be at least six characters and match the confirmation.',
'reset' => 'Your password has been reset!',
'sent' => 'We have e-mailed your password reset link!',
'token' => 'This password reset token is invalid.',
'user' => "We can't find a user with that e-mail address.",
];
<?php
return [
/*
|--------------------------------------------------------------------------
| Validation Language Lines
|--------------------------------------------------------------------------
|
| The following language lines contain the default error messages used by
| the validator class. Some of these rules have multiple versions such
| as the size rules. Feel free to tweak each of these messages here.
|
*/
'accepted' => 'The :attribute must be accepted.',
'active_url' => 'The :attribute is not a valid URL.',
'after' => 'The :attribute must be a date after :date.',
'after_or_equal' => 'The :attribute must be a date after or equal to :date.',
'alpha' => 'The :attribute may only contain letters.',
'alpha_dash' => 'The :attribute may only contain letters, numbers, dashes and underscores.',
'alpha_num' => 'The :attribute may only contain letters and numbers.',
'array' => 'The :attribute must be an array.',
'before' => 'The :attribute must be a date before :date.',
'before_or_equal' => 'The :attribute must be a date before or equal to :date.',
'between' => [
'numeric' => 'The :attribute must be between :min and :max.',
'file' => 'The :attribute must be between :min and :max kilobytes.',
'string' => 'The :attribute must be between :min and :max characters.',
'array' => 'The :attribute must have between :min and :max items.',
],
'boolean' => 'The :attribute field must be true or false.',
'confirmed' => 'The :attribute confirmation does not match.',
'date' => 'The :attribute is not a valid date.',
'date_format' => 'The :attribute does not match the format :format.',
'different' => 'The :attribute and :other must be different.',
'digits' => 'The :attribute must be :digits digits.',
'digits_between' => 'The :attribute must be between :min and :max digits.',
'dimensions' => 'The :attribute has invalid image dimensions.',
'distinct' => 'The :attribute field has a duplicate value.',
'email' => 'The :attribute must be a valid email address.',
'exists' => 'The selected :attribute is invalid.',
'file' => 'The :attribute must be a file.',
'filled' => 'The :attribute field must have a value.',
'gt' => [
'numeric' => 'The :attribute must be greater than :value.',
'file' => 'The :attribute must be greater than :value kilobytes.',
'string' => 'The :attribute must be greater than :value characters.',
'array' => 'The :attribute must have more than :value items.',
],
'gte' => [
'numeric' => 'The :attribute must be greater than or equal :value.',
'file' => 'The :attribute must be greater than or equal :value kilobytes.',
'string' => 'The :attribute must be greater than or equal :value characters.',
'array' => 'The :attribute must have :value items or more.',
],
'image' => 'The :attribute must be an image.',
'in' => 'The selected :attribute is invalid.',
'in_array' => 'The :attribute field does not exist in :other.',
'integer' => 'The :attribute must be an integer.',
'ip' => 'The :attribute must be a valid IP address.',
'ipv4' => 'The :attribute must be a valid IPv4 address.',
'ipv6' => 'The :attribute must be a valid IPv6 address.',
'json' => 'The :attribute must be a valid JSON string.',
'lt' => [
'numeric' => 'The :attribute must be less than :value.',
'file' => 'The :attribute must be less than :value kilobytes.',
'string' => 'The :attribute must be less than :value characters.',
'array' => 'The :attribute must have less than :value items.',
],
'lte' => [
'numeric' => 'The :attribute must be less than or equal :value.',
'file' => 'The :attribute must be less than or equal :value kilobytes.',
'string' => 'The :attribute must be less than or equal :value characters.',
'array' => 'The :attribute must not have more than :value items.',
],
'max' => [
'numeric' => 'The :attribute may not be greater than :max.',
'file' => 'The :attribute may not be greater than :max kilobytes.',
'string' => 'The :attribute may not be greater than :max characters.',
'array' => 'The :attribute may not have more than :max items.',
],
'mimes' => 'The :attribute must be a file of type: :values.',
'mimetypes' => 'The :attribute must be a file of type: :values.',
'min' => [
'numeric' => 'The :attribute must be at least :min.',
'file' => 'The :attribute must be at least :min kilobytes.',
'string' => 'The :attribute must be at least :min characters.',
'array' => 'The :attribute must have at least :min items.',
],
'not_in' => 'The selected :attribute is invalid.',
'not_regex' => 'The :attribute format is invalid.',
'numeric' => 'The :attribute must be a number.',
'present' => 'The :attribute field must be present.',
'regex' => 'The :attribute format is invalid.',
'required' => 'The :attribute field is required.',
'required_if' => 'The :attribute field is required when :other is :value.',
'required_unless' => 'The :attribute field is required unless :other is in :values.',
'required_with' => 'The :attribute field is required when :values is present.',
'required_with_all' => 'The :attribute field is required when :values is present.',
'required_without' => 'The :attribute field is required when :values is not present.',
'required_without_all' => 'The :attribute field is required when none of :values are present.',
'same' => 'The :attribute and :other must match.',
'size' => [
'numeric' => 'The :attribute must be :size.',
'file' => 'The :attribute must be :size kilobytes.',
'string' => 'The :attribute must be :size characters.',
'array' => 'The :attribute must contain :size items.',
],
'string' => 'The :attribute must be a string.',
'timezone' => 'The :attribute must be a valid zone.',
'unique' => 'The :attribute has already been taken.',
'uploaded' => 'The :attribute failed to upload.',
'url' => 'The :attribute format is invalid.',
/*
|--------------------------------------------------------------------------
| Custom Validation Language Lines
|--------------------------------------------------------------------------
|
| Here you may specify custom validation messages for attributes using the
| convention "attribute.rule" to name the lines. This makes it quick to
| specify a specific custom language line for a given attribute rule.
|
*/
'custom' => [
'attribute-name' => [
'rule-name' => 'custom-message',
],
],
/*
|--------------------------------------------------------------------------
| Custom Validation Attributes
|--------------------------------------------------------------------------
|
| The following language lines are used to swap attribute place-holders
| with something more reader friendly such as E-Mail Address instead
| of "email". This simply helps us make messages a little cleaner.
|
*/
'attributes' => [],
];
<!doctype html>
<html lang="{{ app()->getLocale() }}">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Laravel</title>
<!-- Fonts -->
<link href="https://fonts.googleapis.com/css?family=Raleway:100,600" rel="stylesheet" type="text/css">
<!-- Styles -->
<style>
html, body {
background-color: #fff;
color: #636b6f;
font-family: 'Raleway', sans-serif;
font-weight: 100;
height: 100vh;
margin: 0;
}
.full-height {
height: 100vh;
}
.flex-center {
align-items: center;
display: flex;
justify-content: center;
}
.position-ref {
position: relative;
}
.top-right {
position: absolute;
right: 10px;
top: 18px;
}
.content {
text-align: center;
}
.title {
font-size: 84px;
}
.links > a {
color: #636b6f;
padding: 0 25px;
font-size: 12px;
font-weight: 600;
letter-spacing: .1rem;
text-decoration: none;
text-transform: uppercase;
}
.m-b-md {
margin-bottom: 30px;
}
</style>
</head>
<body>
<div class="flex-center position-ref full-height">
@if (Route::has('login'))
<div class="top-right links">
@auth
<a href="{{ url('/home') }}">Home</a>
@else
<a href="{{ route('login') }}">Login</a>
<a href="{{ route('register') }}">Register</a>
@endauth
</div>
@endif
<div class="content">
<div class="title m-b-md">
Laravel
</div>
<div class="links">
<a href="https://laravel.com/docs">Documentation</a>
<a href="https://laracasts.com">Laracasts</a>
<a href="https://laravel-news.com">News</a>
<a href="https://forge.laravel.com">Forge</a>
<a href="https://github.com/laravel/laravel">GitHub</a>
</div>
</div>
</div>
</body>
</html>
<?php
use Illuminate\Http\Request;
/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/
Route::group(['namespace' => 'Api'],function() {
Route::post('/login','UserController@getUserLogin');//用户登录
Route::post('/logout','UserController@getUserLogout');//用户登出
});
Route::group(['prefix' => 'user','namespace' => 'Api'],function() {
Route::post('/list','UserController@getUserList');//用户列表
Route::post('/add','UserController@getUserAdd');//新增用户
Route::post('/edit','UserController@getUserEdit');//编辑用户
Route::post('/del','UserController@getUserDel');//删除用户
Route::post('/reset/pwd','UserController@getResetUserPwd');//重置用户登录密码
});
Route::group(['prefix' => 'project','namespace' => 'Api'],function() {
Route::post('/list','ProjectController@getProjectList');//项目列表
Route::post('/add','ProjectController@getProjectAdd');//新增项目
Route::post('/edit','ProjectController@getProjectEdit');//编辑项目
Route::post('/del','ProjectController@getProjectDel');//删除项目
Route::post('/select/list','ProjectController@getProjectSelectList');//下拉框列表
});
Route::group(['prefix' => 'cloud','namespace' => 'Api'],function() {
Route::post('/list','CloudController@getCloudList');//云账号列表
Route::post('/add','CloudController@getCloudAdd');//新增云账号
Route::post('/edit','CloudController@getCloudEdit');//编辑云账号
Route::post('/del','CloudController@getCloudDel');//删除云账号
Route::post('/select/list','CloudController@getCloudSelectList');//云账号下拉列表
});
Route::group(['prefix' => 'cdn','namespace' => 'Api'],function() {
Route::post('/list','CdnController@getCdnList');//cdn列表
Route::post('/add','CdnController@getCdnAdd');//新增cdn
Route::post('/edit','CdnController@getCdnEdit');//编辑cdn
Route::post('/del','CdnController@getCdnDel');//删除cdn
});
Route::group(['prefix' => 'options','namespace' => 'Api'],function() {
Route::post('/list','OptionsController@getOptionsList');//选项卡列表
Route::post('/add','OptionsController@getOptionsAdd');//新增选项卡
Route::post('/edit','OptionsController@getOptionsEdit');//编辑选项卡
Route::post('/del','OptionsController@getOptionsDel');//删除选项卡
Route::post('/select/list','OptionsController@getOptionsSelectList');//获取选项卡下拉
});
Route::group(['prefix' => 'domains','namespace' => 'Api'],function() {
Route::post('/list','DomainsController@getDomainsList');//域名列表
Route::post('/add','DomainsController@getDomainsAdd');//新增域名
Route::post('/edit','DomainsController@getDomainsEdit');//编辑域名
Route::post('/del','DomainsController@getDomainsDel');//删除域名
Route::post('/select/list','DomainsController@getDomainsSelectList');//域名下拉列表
});
Route::group(['prefix' => 'domains/records','namespace' => 'Api'],function() {
Route::post('/list','DomainRecordsController@getRecordsList');//记录列表
Route::post('/add','DomainRecordsController@getRecordsAdd');//新增记录
Route::post('/edit','DomainRecordsController@geRecordsEdit');//编辑记录
Route::post('/del','DomainRecordsController@getRecordsDel');//删除记录
});
Route::group(['prefix' => 'slb','namespace' => 'Api'],function() {
Route::post('/list','SlbController@getSlbList');//slb列表
Route::post('/del','SlbController@getSlbDel');//删除slb
Route::post('/add','SlbController@getSlbAdd');//新增slb
Route::post('/edit','SlbController@getSlbEdit');//编辑slb
});
Route::group(['prefix' => 'rdb','namespace' => 'Api'],function() {
Route::post('/list','RdbController@getRdbList');//Rdb列表
Route::post('/del','RdbController@getRdbDel');//删除rdb
Route::post('/add','RdbController@getRdbAdd');//新增rdb
Route::post('/edit','RdbController@getRdbEdit');//编辑rdb
});
Route::group(['prefix' => 'redis','namespace' => 'Api'],function() {
Route::post('/list','RedisController@getRedisList');//redis列表
Route::post('/del','RedisController@getRedisDel');//删除redis
Route::post('/add','RedisController@getRedisAdd');//新增redis
Route::post('/edit','RedisController@getRedisEdit');//编辑redis
});
Route::group(['prefix' => 'cvm','namespace' => 'Api'],function() {
Route::post('/list','CvmController@getCvmList');//cvm列表
Route::post('/del','CvmController@getCvmDel');//删除cvm
Route::post('/add','CvmController@getCvmAdd');//新增cvm
Route::post('/edit','CvmController@getCvmEdit');//编辑cvm
});
<?php
/*
|--------------------------------------------------------------------------
| Broadcast Channels
|--------------------------------------------------------------------------
|
| Here you may register all of the event broadcasting channels that your
| application supports. The given channel authorization callbacks are
| used to check if an authenticated user can listen to the channel.
|
*/
Broadcast::channel('App.User.{id}', function ($user, $id) {
return (int) $user->id === (int) $id;
});
<?php
use Illuminate\Foundation\Inspiring;
/*
|--------------------------------------------------------------------------
| Console Routes
|--------------------------------------------------------------------------
|
| This file is where you may define all of your Closure based console
| commands. Each Closure is bound to a command instance allowing a
| simple approach to interacting with each command's IO methods.
|
*/
Artisan::command('inspire', function () {
$this->comment(Inspiring::quote());
})->describe('Display an inspiring quote');
<?php
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/', function () {
return '';
});
<?php
/**
* Laravel - A PHP Framework For Web Artisans
*
* @package Laravel
* @author Taylor Otwell <taylor@laravel.com>
*/
$uri = urldecode(
parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)
);
// This file allows us to emulate Apache's "mod_rewrite" functionality from the
// built-in PHP web server. This provides a convenient way to test a Laravel
// application without having installed a "real" web server software here.
if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) {
return false;
}
require_once __DIR__.'/public/index.php';
<?php
namespace Tests;
use Illuminate\Contracts\Console\Kernel;
trait CreatesApplication
{
/**
* Creates the application.
*
* @return \Illuminate\Foundation\Application
*/
public function createApplication()
{
$app = require __DIR__.'/../bootstrap/app.php';
$app->make(Kernel::class)->bootstrap();
return $app;
}
}
<?php
namespace Tests\Feature;
use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;
class ExampleTest extends TestCase
{
/**
* A basic test example.
*
* @return void
*/
public function testBasicTest()
{
$response = $this->get('/');
$response->assertStatus(200);
}
}
<?php
namespace Tests;
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
abstract class TestCase extends BaseTestCase
{
use CreatesApplication;
}
<?php
namespace Tests\Unit;
use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;
class ExampleTest extends TestCase
{
/**
* A basic test example.
*
* @return void
*/
public function testBasicTest()
{
$this->assertTrue(true);
}
}
let mix = require('laravel-mix');
/*
|--------------------------------------------------------------------------
| Mix Asset Management
|--------------------------------------------------------------------------
|
| Mix provides a clean, fluent API for defining some Webpack build steps
| for your Laravel application. By default, we are compiling the Sass
| file for the application as well as bundling up all the JS files.
|
*/
mix.js('resources/assets/js/app.js', 'public/js')
.sass('resources/assets/sass/app.scss', 'public/css');
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment