wip
This commit is contained in:
@@ -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
4
public/js/29.js
vendored
@@ -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
21
public/js/52.js
vendored
@@ -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
3673
public/js/86.js
vendored
File diff suppressed because one or more lines are too long
8
public/js/app.js
vendored
8
public/js/app.js
vendored
@@ -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",
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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')) {
|
||||
|
||||
Reference in New Issue
Block a user