This commit is contained in:
Dennis
2020-11-24 14:48:02 +01:00
parent 9ae1c145b6
commit e5c8a62b32
8 changed files with 1433 additions and 2526 deletions

View File

@@ -11,7 +11,17 @@ class ProfileIntegrationController extends Controller
{
public function index()
{
return inertia('Profile/Integrations');
$providers = auth()->user()->providers()->latest()->get()->map(function($provider){
return [
'id' => $provider->id,
'type' => $provider->type,
'created_at' => $provider->created_at->format('Y-m-d H:i:s')
];
});
return inertia('Profile/Integrations', [
'providers' => $providers,
]);
}
public function store(ProfileIntegrationRequest $request)
@@ -28,4 +38,11 @@ class ProfileIntegrationController extends Controller
return redirect()->route('profile.integrations.index');
}
public function destroy($providerId)
{
auth()->user()->providers()->findOrFail($providerId)->delete();
return redirect()->route('profile.integrations.index');
}
}

4
public/js/29.js vendored
View File

@@ -684,7 +684,7 @@ var render = function() {
"div",
{
staticClass:
"bg-success text-on-primary p-4",
"bg-success text-on-primary p-4 rounded",
attrs: { role: "alert" }
},
[
@@ -762,7 +762,7 @@ var render = function() {
],
null,
false,
2570827382
2238243349
)
})
: _vm._e(),

21
public/js/52.js vendored
View File

@@ -55,6 +55,10 @@ __webpack_require__.r(__webpack_exports__);
//
//
//
//
//
//
//
@@ -105,7 +109,9 @@ __webpack_require__.r(__webpack_exports__);
FormSelect: _components_forms_FormSelect__WEBPACK_IMPORTED_MODULE_19__["default"],
FormActions: _components_FormActions__WEBPACK_IMPORTED_MODULE_20__["default"]
},
props: {},
props: {
providers: Object
},
data: function data() {
return {
form: {
@@ -133,7 +139,14 @@ __webpack_require__.r(__webpack_exports__);
return _this.sending = true;
},
onFinish: function onFinish() {
return _this.sending = false;
_this.sending = false;
if (!Object.keys(_this.$page.props.errors).length) {
_this.form = {
provider: null,
meta: {}
};
}
}
});
}
@@ -415,7 +428,9 @@ var render = function() {
],
1
)
])
]),
_vm._v(" "),
_c("PageBody", [_vm._v("\n test\n ")])
],
1
)

3673
public/js/86.js vendored

File diff suppressed because one or more lines are too long

8
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":"41e9402c08fa96b01178","23":"cc61640c634d51240485","24":"51a97128e8cc7d66a3b3","25":"bc5e40e1b6cfd0537a4d","26":"5a634e68c8cc325d9922","27":"d58caa4cb46cc5b4cbaa","28":"5cc778b6ea55b53927ef","29":"a359504fd9c17c5c453f","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":"88b0075bcc9250c72809","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":"41e9402c08fa96b01178","23":"cc61640c634d51240485","24":"51a97128e8cc7d66a3b3","25":"bc5e40e1b6cfd0537a4d","26":"5a634e68c8cc325d9922","27":"d58caa4cb46cc5b4cbaa","28":"5cc778b6ea55b53927ef","29":"90a55a48473e7dc9dcd1","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","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","86":"dd36a7c2d9891787ce80"}[chunkId] + ""
/******/ }
/******/
/******/ // The require function
@@ -21304,16 +21304,18 @@ var map = {
0,
1,
2,
3,
4,
52
86
],
"./Profile/Integrations.vue": [
"./resources/js/Pages/Profile/Integrations.vue",
0,
1,
2,
3,
4,
52
86
],
"./Profile/Security": [
"./resources/js/Pages/Profile/Security.vue",

View File

@@ -6,115 +6,176 @@
<Container>
<PageBody>
<form class="space-y-4" @submit.prevent="submit">
<FormSelect :label="__('Select provider')" :errors="$page.props.errors.provider" v-model="form.provider">
<FormSelect :label="__('Select provider')" :errors="$page.props.errors.provider"
v-model="form.provider">
<option value="cloudflare">{{ __('Cloudflare') }}</option>
</FormSelect>
<FormInput v-if="form.provider === 'cloudflare'" :label="__('API key')" :errors="$page.props.errors['meta.api_key']" v-model="form.meta.api_key" />
<FormInput v-if="form.provider === 'cloudflare'" :label="__('Cloudflare email')" :errors="$page.props.errors['meta.cloudflare_email']" v-model="form.meta.cloudflare_email" />
<FormInput v-if="form.provider === 'cloudflare'" :label="__('API key')"
:errors="$page.props.errors['meta.api_key']" v-model="form.meta.api_key"/>
<FormInput v-if="form.provider === 'cloudflare'" :label="__('Cloudflare email')"
:errors="$page.props.errors['meta.cloudflare_email']"
v-model="form.meta.cloudflare_email"/>
<FormActions>
<Button>{{ __('Save changes') }}</Button>
</FormActions>
</form>
</PageBody>
<PageBody v-if="providers.length">
<Table caption="Provider list overview">
<TableHead>
<TableRow>
<TableHeader>{{ __('Provider') }}</TableHeader>
<TableHeader>{{ __('Date') }}</TableHeader>
</TableRow>
</TableHead>
<TableBody>
<TableRow v-for="provider in providers" :key="provider.id">
<TableData>{{ provider.type }}</TableData>
<TableData>{{ provider.created_at }}</TableData>
<TableData>
<Button variant="danger" size="sm"
@click="confirmDelete(provider)">
{{ __('Delete') }}
</Button>
</TableData>
</TableRow>
</TableBody>
</Table>
</PageBody>
</Container>
</Content>
</Page>
</template>
<script>
import TopBar from './components/TopBar'
import Container from '@/components/Container'
import Content from '@/components/Content'
import Page from '@/components/Page'
import PageHeader from '@/components/PageHeader'
import PageHeaderTitle from '@/components/PageHeaderTitle'
import PageBody from '@/components/PageBody'
import Button from '@/components/Button'
import List from '@/components/List'
import ListItem from '@/components/ListItem'
import StatusBubble from '@/components/StatusBubble'
import NotificationBadge from '@/components/NotificationBadge'
import MainLayout from '@/Layouts/MainLayout'
import IconBox from '@/components/icons/IconBox'
import IconGlobe from '@/components/icons/IconGlobe'
import IconStorage from '@/components/icons/IconStorage'
import Modal from '@/components/Modal'
import ModalContainer from '@/components/ModalContainer'
import FormInput from '@/components/forms/FormInput'
import FormSelect from '@/components/forms/FormSelect'
import FormActions from '@/components/FormActions'
import TopBar from './components/TopBar'
import Container from '@/components/Container'
import Content from '@/components/Content'
import Page from '@/components/Page'
import PageHeader from '@/components/PageHeader'
import PageHeaderTitle from '@/components/PageHeaderTitle'
import PageBody from '@/components/PageBody'
import Button from '@/components/Button'
import List from '@/components/List'
import ListItem from '@/components/ListItem'
import StatusBubble from '@/components/StatusBubble'
import NotificationBadge from '@/components/NotificationBadge'
import MainLayout from '@/Layouts/MainLayout'
import IconBox from '@/components/icons/IconBox'
import IconGlobe from '@/components/icons/IconGlobe'
import IconStorage from '@/components/icons/IconStorage'
import Modal from '@/components/Modal'
import ModalContainer from '@/components/ModalContainer'
import FormInput from '@/components/forms/FormInput'
import FormSelect from '@/components/forms/FormSelect'
import FormActions from '@/components/FormActions'
import Table from '@/components/Table'
import TableHead from '@/components/TableHead'
import TableHeader from '@/components/TableHeader'
import TableRow from '@/components/TableRow'
import TableBody from '@/components/TableBody'
import TableData from '@/components/TableData'
import {useConfirmDelete} from '@/hooks/confirm-delete'
export default {
metaInfo() {
return {
title: `${this.__('Integrations')}`,
}
},
export default {
metaInfo() {
return {
title: `${this.__('Integrations')}`,
}
},
layout: MainLayout,
layout: MainLayout,
components: {
TopBar,
Container,
Content,
Page,
PageHeader,
PageHeaderTitle,
PageBody,
Button,
List,
ListItem,
StatusBubble,
NotificationBadge,
IconBox,
IconGlobe,
IconStorage,
Modal,
ModalContainer,
FormInput,
FormSelect,
FormActions
},
components: {
TopBar,
Container,
Content,
Page,
PageHeader,
PageHeaderTitle,
PageBody,
Button,
List,
ListItem,
StatusBubble,
NotificationBadge,
IconBox,
IconGlobe,
IconStorage,
Modal,
ModalContainer,
FormInput,
FormSelect,
FormActions,
Table,
TableHead,
TableHeader,
TableRow,
TableBody,
TableData,
},
props: {
props: {
providers: Array,
},
},
data() {
return {
form: {
provider: null,
meta: {}
},
data() {
return {
form: {
provider: null,
meta: {
}
breadcrumbs: [
{
title: this.$page.props.settings.name,
to: '/',
},
{
title: this.__('Profile'),
to: this.route('profile.index'),
},
{
title: this.__('Integrations'),
to: this.route('profile.integrations.index'),
},
],
}
},
breadcrumbs: [
{
title: this.$page.props.settings.name,
to: '/',
},
{
title: this.__('Profile'),
to: this.route('profile.index'),
},
{
title: this.__('Integrations'),
to: this.route('profile.integrations.index'),
},
],
}
methods: {
submit() {
this.$inertia.post(this.route('profile.integrations.store'), this.form, {
onStart: () => this.sending = true,
onFinish: () => {
this.sending = false;
if (!Object.keys(this.$page.props.errors).length) {
this.form = {
provider: null,
meta: {}
}
}
}
});
},
methods: {
submit() {
this.$inertia.post(this.route('profile.integrations.store'), this.form, {
onStart: () => this.sending = true,
onFinish: () => this.sending = false,
});
}
confirmDelete(provider) {
useConfirmDelete({
title: this.__('Are you sure?'),
message: this.__('Your provider integration will be deleted permanently, this cannot be undone.'),
onConfirm: () => this.delete(provider),
})
},
}
delete(provider) {
this.$inertia.delete(this.route('profile.integrations.destroy', provider.id), {
preserveScroll: true
})
}
},
}
</script>

View File

@@ -57,7 +57,7 @@
<SettingsSegment v-if="$page.props.auth.integrations.cloudflare">
<template #title>{{ __('DNS settings') }}</template>
<template #content>
<div class="bg-success text-on-primary p-4" role="alert">
<div class="bg-success text-on-primary p-4 rounded" role="alert">
<p>{{ __('Cloudflare is attached to this domain') }}</p>
</div>
</template>

View File

@@ -107,6 +107,7 @@ Route::group(['middleware' => ['auth', 'auth.blocked']], function () {
Route::group(['prefix' => 'integrations', 'as' => 'integrations.'], function () {
Route::get('/', 'ProfileIntegrationController@index')->name('index');
Route::post('/', 'ProfileIntegrationController@store')->name('store');
Route::delete('{provider}', 'ProfileIntegrationController@destroy')->name('destroy');
});
if (config('cashier.key') && config('cashier.secret')) {