wip
This commit is contained in:
@@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
namespace App\Http\Controllers;
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use App\Http\Requests\SiteDnsRequest;
|
||||||
|
use App\Models\Site;
|
||||||
use App\Models\UserProvider;
|
use App\Models\UserProvider;
|
||||||
use App\Services\Cloudflare;
|
use App\Services\Cloudflare;
|
||||||
use Illuminate\Http\Request;
|
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)
|
public function update(Request $request, $id)
|
||||||
@@ -33,16 +44,29 @@ class SiteDnsController extends Controller
|
|||||||
{
|
{
|
||||||
$site = auth()->user()->sites()->findOrFail($id);
|
$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();
|
$provider = auth()->user()->providers()->where('type', UserProvider::TYPE_CLOUDFLARE)->first();
|
||||||
|
|
||||||
$cloudflare = new Cloudflare(decrypt(Arr::get($provider->meta, 'cloudflare_email')), decrypt($provider->token));
|
$cloudflare = new Cloudflare(decrypt(Arr::get($provider->meta, 'cloudflare_email')), decrypt($provider->token));
|
||||||
$cloudflare->zone(decrypt($site->dns_id));
|
$cloudflare->zone(decrypt($site->dns_id));
|
||||||
|
|
||||||
return $cloudflare->listRecords();
|
return $cloudflare;
|
||||||
}
|
|
||||||
|
|
||||||
public function destroy($id)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
37
app/Http/Requests/SiteDnsRequest.php
Normal file
37
app/Http/Requests/SiteDnsRequest.php
Normal 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
2215
public/js/22.js
vendored
File diff suppressed because it is too large
Load Diff
2242
public/js/23.js
vendored
2242
public/js/23.js
vendored
File diff suppressed because it is too large
Load Diff
10
public/js/app.js
vendored
10
public/js/app.js
vendored
@@ -43,7 +43,7 @@
|
|||||||
/******/
|
/******/
|
||||||
/******/ // script path function
|
/******/ // script path function
|
||||||
/******/ function jsonpScriptSrc(chunkId) {
|
/******/ 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
|
/******/ // The require function
|
||||||
@@ -20804,14 +20804,14 @@ var map = {
|
|||||||
0,
|
0,
|
||||||
1,
|
1,
|
||||||
2,
|
2,
|
||||||
22
|
23
|
||||||
],
|
],
|
||||||
"./Admin/Packages/Edit.vue": [
|
"./Admin/Packages/Edit.vue": [
|
||||||
"./resources/js/Pages/Admin/Packages/Edit.vue",
|
"./resources/js/Pages/Admin/Packages/Edit.vue",
|
||||||
0,
|
0,
|
||||||
1,
|
1,
|
||||||
2,
|
2,
|
||||||
22
|
23
|
||||||
],
|
],
|
||||||
"./Admin/Packages/Index": [
|
"./Admin/Packages/Index": [
|
||||||
"./resources/js/Pages/Admin/Packages/Index.vue",
|
"./resources/js/Pages/Admin/Packages/Index.vue",
|
||||||
@@ -21503,7 +21503,7 @@ var map = {
|
|||||||
1,
|
1,
|
||||||
2,
|
2,
|
||||||
3,
|
3,
|
||||||
23
|
22
|
||||||
],
|
],
|
||||||
"./Sites/Dns.vue": [
|
"./Sites/Dns.vue": [
|
||||||
"./resources/js/Pages/Sites/Dns.vue",
|
"./resources/js/Pages/Sites/Dns.vue",
|
||||||
@@ -21511,7 +21511,7 @@ var map = {
|
|||||||
1,
|
1,
|
||||||
2,
|
2,
|
||||||
3,
|
3,
|
||||||
23
|
22
|
||||||
],
|
],
|
||||||
"./Sites/Index": [
|
"./Sites/Index": [
|
||||||
"./resources/js/Pages/Sites/Index.vue",
|
"./resources/js/Pages/Sites/Index.vue",
|
||||||
|
|||||||
@@ -23,7 +23,8 @@
|
|||||||
</template>
|
</template>
|
||||||
<template #form>
|
<template #form>
|
||||||
<form class="space-y-4" @submit.prevent="submit">
|
<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>
|
<FormActions>
|
||||||
<Button>{{ __('Save changes') }}</Button>
|
<Button>{{ __('Save changes') }}</Button>
|
||||||
@@ -32,7 +33,7 @@
|
|||||||
</template>
|
</template>
|
||||||
</SettingsSegment>
|
</SettingsSegment>
|
||||||
|
|
||||||
<EmptyImage v-if="!records.length" />
|
<EmptyImage v-if="!records.length && !loading" />
|
||||||
|
|
||||||
<SettingsSegment v-if="records.length">
|
<SettingsSegment v-if="records.length">
|
||||||
<template #title>{{ __('Records') }}</template>
|
<template #title>{{ __('Records') }}</template>
|
||||||
@@ -51,7 +52,7 @@
|
|||||||
<TableData>{{ record.name }}</TableData>
|
<TableData>{{ record.name }}</TableData>
|
||||||
<TableData>{{ record.display_content }}</TableData>
|
<TableData>{{ record.display_content }}</TableData>
|
||||||
<TableData>
|
<TableData>
|
||||||
<Button variant="danger" size="sm">Delete</Button>
|
<Button @click="confirmDelete(record)" variant="danger" size="sm">Delete</Button>
|
||||||
</TableData>
|
</TableData>
|
||||||
</TableRow>
|
</TableRow>
|
||||||
</TableBody>
|
</TableBody>
|
||||||
@@ -88,6 +89,7 @@
|
|||||||
import Form from '@/components/Form'
|
import Form from '@/components/Form'
|
||||||
import Pagination from '@/components/Pagination'
|
import Pagination from '@/components/Pagination'
|
||||||
import FormActions from '@/components/FormActions'
|
import FormActions from '@/components/FormActions'
|
||||||
|
import {useConfirmDelete} from '@/hooks/confirm-delete'
|
||||||
import {useNotification} from '@/hooks/notification'
|
import {useNotification} from '@/hooks/notification'
|
||||||
import Tabs from './Tabs'
|
import Tabs from './Tabs'
|
||||||
import Table from '@/components/Table'
|
import Table from '@/components/Table'
|
||||||
@@ -139,11 +141,13 @@
|
|||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
sending: false,
|
sending: false,
|
||||||
|
loading: true,
|
||||||
|
|
||||||
records: [],
|
records: [],
|
||||||
|
|
||||||
form: {
|
form: {
|
||||||
a: null,
|
name: null,
|
||||||
|
address: null,
|
||||||
},
|
},
|
||||||
|
|
||||||
breadcrumbs: [
|
breadcrumbs: [
|
||||||
@@ -178,9 +182,52 @@
|
|||||||
methods: {
|
methods: {
|
||||||
useNotification,
|
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() {
|
getRecords() {
|
||||||
|
this.loading = true;
|
||||||
|
|
||||||
axios.get(this.route('sites.dns.records', this.site.id))
|
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: () => {
|
||||||
|
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user