This commit is contained in:
Dennis
2020-11-19 14:27:37 +01:00
parent 6f3b588f3d
commit 7378b82adf
6 changed files with 2411 additions and 2190 deletions

View File

@@ -2,6 +2,8 @@
namespace App\Http\Controllers;
use App\Http\Requests\SiteDnsRequest;
use App\Models\Site;
use App\Models\UserProvider;
use App\Services\Cloudflare;
use Illuminate\Http\Request;
@@ -19,9 +21,18 @@ class SiteDnsController extends Controller
]);
}
public function store(Request $request)
public function store(SiteDnsRequest $request, $id)
{
//
$site = auth()->user()->sites()->findOrFail($id);
$dns = $this->getDnsInstance($site);
$dns->addRecord(
$request->input('name'),
$request->input('address'),
);
return redirect()->route('sites.dns.index', $id)->with('success', __('DNS record has been created'));
}
public function update(Request $request, $id)
@@ -33,16 +44,29 @@ class SiteDnsController extends Controller
{
$site = auth()->user()->sites()->findOrFail($id);
$dns = $this->getDnsInstance($site);
return $dns->listRecords();
}
public function destroy($id, $recordId)
{
$site = auth()->user()->sites()->findOrFail($id);
$dns = $this->getDnsInstance($site);
$dns->deleteRecord($recordId);
return redirect()->route('sites.dns.index', $id)->with('success', __('DNS record has been removed'));
}
private function getDnsInstance(Site $site)
{
$provider = auth()->user()->providers()->where('type', UserProvider::TYPE_CLOUDFLARE)->first();
$cloudflare = new Cloudflare(decrypt(Arr::get($provider->meta, 'cloudflare_email')), decrypt($provider->token));
$cloudflare->zone(decrypt($site->dns_id));
return $cloudflare->listRecords();
}
public function destroy($id)
{
//
return $cloudflare;
}
}

View File

@@ -0,0 +1,37 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class SiteDnsRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return auth()->check();
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'name' => [
'required',
'string',
],
'address' => [
'required',
'ipv4'
]
];
}
}

2215
public/js/22.js vendored

File diff suppressed because it is too large Load Diff

2242
public/js/23.js vendored

File diff suppressed because it is too large Load Diff

10
public/js/app.js vendored
View File

@@ -43,7 +43,7 @@
/******/
/******/ // script path function
/******/ function jsonpScriptSrc(chunkId) {
/******/ return __webpack_require__.p + "js/" + ({}[chunkId]||chunkId) + ".js?id=" + {"0":"3dbe90f2fa7234938b8a","1":"18f1ae2f88194471b106","2":"d2a49802291d427ca7c8","3":"a0f4c2f49863abbfe7f1","4":"27416beeac7dd90b6c9f","5":"fbfbcf45610d060d921e","6":"73fc0264b5cc06f5bd55","7":"140acb8c38018bb7c822","8":"800cf8f4ae1573afb58b","9":"f2a85fd7ca99129bd7e2","10":"7109ac26050896c7632e","11":"b437d61d4ead3c781e22","12":"2ab18ae0943746b63751","13":"8151f0644b451f415e6b","14":"5ba34553a8dbd80de385","15":"b93e030809beddfff7dd","16":"69a7e01207316350a34f","17":"ea0aec4ceaa4ad16e409","18":"a78784e6912f39855841","19":"3e9afbeccb1d723825fa","20":"8178c05e74f8dc56d521","21":"2e3d9865257073c0128d","22":"d271ef0cc9a676b4f7f1","23":"fac8ac1d55e8cf70b389","24":"51a97128e8cc7d66a3b3","25":"bc5e40e1b6cfd0537a4d","26":"5a634e68c8cc325d9922","27":"d58caa4cb46cc5b4cbaa","28":"5cc778b6ea55b53927ef","29":"445a0a9c6adf3789263e","30":"1cc10db0519a76d1075c","31":"6638dad0b402da0da7db","32":"d31ee3d6e9fff25d60ea","33":"69bb6380ec04934fc761","34":"f73b7b586dcb628a0238","35":"cec6a59e621fba676a19","36":"fb27e3667d6023b4ef5e","37":"eaa34e9061d5589c20e6","38":"dc75a1421954e93e234e","39":"59d66d0467b61aa63589","40":"34e859f47a24902b8974","41":"9a65f0ac4faaf9458b46","42":"79185517ca7a7e8dfb9f","43":"9d9feb9848ad4a682a8c","44":"77a603dda0065501cc1d","45":"ce3a1b4b271e88791404","46":"329f2114dad302cf80ad","47":"17486d24f96188a73ed0","48":"f91e910285fd011b4768","49":"3f61e69cba8d6eb69d67","50":"c6e9a549054c78d13552","51":"b08b0726b49c658a6044","52":"54464297c88e8dce1fac","53":"23f79ec7082c146de011","54":"ebba4351fdc7dda59e24","55":"bf6ab8f12a17bdf42483","56":"0fc8a9c045226d81b59e","57":"0ddd60a5a000ec936c82","58":"4823f0b7a0e80fffa181","59":"98a2df4abb8fb3b2f1fb","60":"f2d7dc654b1afd2e4b4f","61":"0ebeddd5589c5c9e13b6","62":"17a5e584de3773f5b06a","63":"0255b720b4cdfaca9756","64":"810d46956098ec36a48a","65":"125441dbdaa3532d11fc","66":"d5ad8ef84fd9ddb78adb","67":"9c262f860fec60d5c9a3","68":"c47e440c910511761cda","69":"b7557e5ab81de2135c1a","70":"cd5835759472d8269c28","71":"3eec5e21b2f354f2b393","72":"43c7fe3c117790caf04e","73":"fb1ecfdaad6d94aa2b97","74":"56a45ed3ec988a6a0727","75":"4204d942d58177e4ff05","76":"c4637ed6669c6bdc2403","77":"1a8473c482f95d7a24bc","78":"33fa2982cb9096943e57","79":"2ed6cea6a8854c1f99c1","80":"8626b00a72d693a0d8f3","81":"fe27c84269b86e706406","82":"622552d73f13d2e0bc05","83":"2a1d212abf660186917d","84":"a11845294f4975c939f5","85":"d70fb3d3ff6aadc9472d"}[chunkId] + ""
/******/ return __webpack_require__.p + "js/" + ({}[chunkId]||chunkId) + ".js?id=" + {"0":"3dbe90f2fa7234938b8a","1":"18f1ae2f88194471b106","2":"d2a49802291d427ca7c8","3":"a0f4c2f49863abbfe7f1","4":"27416beeac7dd90b6c9f","5":"fbfbcf45610d060d921e","6":"73fc0264b5cc06f5bd55","7":"140acb8c38018bb7c822","8":"800cf8f4ae1573afb58b","9":"f2a85fd7ca99129bd7e2","10":"7109ac26050896c7632e","11":"b437d61d4ead3c781e22","12":"2ab18ae0943746b63751","13":"8151f0644b451f415e6b","14":"5ba34553a8dbd80de385","15":"b93e030809beddfff7dd","16":"69a7e01207316350a34f","17":"ea0aec4ceaa4ad16e409","18":"a78784e6912f39855841","19":"3e9afbeccb1d723825fa","20":"8178c05e74f8dc56d521","21":"2e3d9865257073c0128d","22":"4a8fb1a6991d10b1d4bb","23":"cc61640c634d51240485","24":"51a97128e8cc7d66a3b3","25":"bc5e40e1b6cfd0537a4d","26":"5a634e68c8cc325d9922","27":"d58caa4cb46cc5b4cbaa","28":"5cc778b6ea55b53927ef","29":"445a0a9c6adf3789263e","30":"1cc10db0519a76d1075c","31":"6638dad0b402da0da7db","32":"d31ee3d6e9fff25d60ea","33":"69bb6380ec04934fc761","34":"f73b7b586dcb628a0238","35":"cec6a59e621fba676a19","36":"fb27e3667d6023b4ef5e","37":"eaa34e9061d5589c20e6","38":"dc75a1421954e93e234e","39":"59d66d0467b61aa63589","40":"34e859f47a24902b8974","41":"9a65f0ac4faaf9458b46","42":"79185517ca7a7e8dfb9f","43":"9d9feb9848ad4a682a8c","44":"77a603dda0065501cc1d","45":"ce3a1b4b271e88791404","46":"329f2114dad302cf80ad","47":"17486d24f96188a73ed0","48":"f91e910285fd011b4768","49":"3f61e69cba8d6eb69d67","50":"c6e9a549054c78d13552","51":"b08b0726b49c658a6044","52":"54464297c88e8dce1fac","53":"23f79ec7082c146de011","54":"ebba4351fdc7dda59e24","55":"bf6ab8f12a17bdf42483","56":"0fc8a9c045226d81b59e","57":"0ddd60a5a000ec936c82","58":"4823f0b7a0e80fffa181","59":"98a2df4abb8fb3b2f1fb","60":"f2d7dc654b1afd2e4b4f","61":"0ebeddd5589c5c9e13b6","62":"17a5e584de3773f5b06a","63":"0255b720b4cdfaca9756","64":"810d46956098ec36a48a","65":"125441dbdaa3532d11fc","66":"d5ad8ef84fd9ddb78adb","67":"9c262f860fec60d5c9a3","68":"c47e440c910511761cda","69":"b7557e5ab81de2135c1a","70":"cd5835759472d8269c28","71":"3eec5e21b2f354f2b393","72":"43c7fe3c117790caf04e","73":"fb1ecfdaad6d94aa2b97","74":"56a45ed3ec988a6a0727","75":"4204d942d58177e4ff05","76":"c4637ed6669c6bdc2403","77":"1a8473c482f95d7a24bc","78":"33fa2982cb9096943e57","79":"2ed6cea6a8854c1f99c1","80":"8626b00a72d693a0d8f3","81":"fe27c84269b86e706406","82":"622552d73f13d2e0bc05","83":"2a1d212abf660186917d","84":"a11845294f4975c939f5","85":"d70fb3d3ff6aadc9472d"}[chunkId] + ""
/******/ }
/******/
/******/ // The require function
@@ -20804,14 +20804,14 @@ var map = {
0,
1,
2,
22
23
],
"./Admin/Packages/Edit.vue": [
"./resources/js/Pages/Admin/Packages/Edit.vue",
0,
1,
2,
22
23
],
"./Admin/Packages/Index": [
"./resources/js/Pages/Admin/Packages/Index.vue",
@@ -21503,7 +21503,7 @@ var map = {
1,
2,
3,
23
22
],
"./Sites/Dns.vue": [
"./resources/js/Pages/Sites/Dns.vue",
@@ -21511,7 +21511,7 @@ var map = {
1,
2,
3,
23
22
],
"./Sites/Index": [
"./resources/js/Pages/Sites/Index.vue",

View File

@@ -23,7 +23,8 @@
</template>
<template #form>
<form class="space-y-4" @submit.prevent="submit">
<FormInput :label="__('A')" :errors="$page.props.errors.a" v-model="form.a"/>
<FormInput :disabled="sending" :label="__('Name')" :errors="$page.props.errors.name" v-model="form.name"/>
<FormInput :disabled="sending" :label="__('IPv4 address')" :errors="$page.props.errors.address" v-model="form.address"/>
<FormActions>
<Button>{{ __('Save changes') }}</Button>
@@ -32,7 +33,7 @@
</template>
</SettingsSegment>
<EmptyImage v-if="!records.length" />
<EmptyImage v-if="!records.length && !loading" />
<SettingsSegment v-if="records.length">
<template #title>{{ __('Records') }}</template>
@@ -51,7 +52,7 @@
<TableData>{{ record.name }}</TableData>
<TableData>{{ record.display_content }}</TableData>
<TableData>
<Button variant="danger" size="sm">Delete</Button>
<Button @click="confirmDelete(record)" variant="danger" size="sm">Delete</Button>
</TableData>
</TableRow>
</TableBody>
@@ -88,6 +89,7 @@
import Form from '@/components/Form'
import Pagination from '@/components/Pagination'
import FormActions from '@/components/FormActions'
import {useConfirmDelete} from '@/hooks/confirm-delete'
import {useNotification} from '@/hooks/notification'
import Tabs from './Tabs'
import Table from '@/components/Table'
@@ -139,11 +141,13 @@
data() {
return {
sending: false,
loading: true,
records: [],
form: {
a: null,
name: null,
address: null,
},
breadcrumbs: [
@@ -178,9 +182,52 @@
methods: {
useNotification,
submit() {
this.$inertia.post(this.route('sites.dns.store', this.site.id), this.form, {
onStart: () => this.sending = true,
onFinish: () => {
this.sending = false;
this.getRecords();
this.form = {
name: null,
address: null,
};
}
})
},
getRecords() {
this.loading = true;
axios.get(this.route('sites.dns.records', this.site.id))
.then(response => this.records = response.data);
.then(response => {
this.loading = false;
this.records = response.data
})
.catch(error => {
this.loading = false;
})
},
confirmDelete(record) {
useConfirmDelete({
title: this.__('Are you sure?'),
message: this.__('Your DNS will be completely removed.'),
onConfirm: () => this.delete(record),
})
},
delete(record) {
this.$inertia.delete(this.route('sites.dns.delete', [this.site.id, record.id]), {
preserveScroll: true
}, {
onStart: () => this.loading = true,
onFinish: () => {
}
})
}
},
}