diff options
| author | Zephyrrus <[email protected]> | 2020-07-10 01:13:51 +0300 |
|---|---|---|
| committer | Zephyrrus <[email protected]> | 2020-07-10 01:13:51 +0300 |
| commit | 0f66d807035d3e32a66c7dc9bf55fb3be99aedac (patch) | |
| tree | 93ff9fd13a0434d91fb1ae7ca0da48d6929c4d00 /src/site/pages/dashboard/admin | |
| parent | fix: stop leaking user passwords to admins AGAIN (diff) | |
| download | host.fuwn.me-0f66d807035d3e32a66c7dc9bf55fb3be99aedac.tar.xz host.fuwn.me-0f66d807035d3e32a66c7dc9bf55fb3be99aedac.zip | |
refactor: finish refactoring all the components to use vuex
Diffstat (limited to 'src/site/pages/dashboard/admin')
| -rw-r--r-- | src/site/pages/dashboard/admin/file/_id.vue | 85 | ||||
| -rw-r--r-- | src/site/pages/dashboard/admin/settings.vue | 50 |
2 files changed, 58 insertions, 77 deletions
diff --git a/src/site/pages/dashboard/admin/file/_id.vue b/src/site/pages/dashboard/admin/file/_id.vue index 34fcd01..89afa47 100644 --- a/src/site/pages/dashboard/admin/file/_id.vue +++ b/src/site/pages/dashboard/admin/file/_id.vue @@ -19,99 +19,101 @@ <b-field label="ID" horizontal> - <span>{{ file.id }}</span> + <span>{{ admin.file.id }}</span> </b-field> <b-field label="Name" horizontal> - <span>{{ file.name }}</span> + <span>{{ admin.file.name }}</span> </b-field> <b-field label="Original Name" horizontal> - <span>{{ file.original }}</span> + <span>{{ admin.file.original }}</span> </b-field> <b-field label="IP" horizontal> - <span class="underline">{{ file.ip }}</span> + <span class="underline">{{ admin.file.ip }}</span> </b-field> <b-field label="Link" horizontal> <a - :href="file.url" - target="_blank">{{ file.url }}</a> + :href="admin.file.url" + target="_blank">{{ admin.file.url }}</a> </b-field> <b-field label="Size" horizontal> - <span>{{ formatBytes(file.size) }}</span> + <span>{{ formatBytes(admin.file.size) }}</span> </b-field> <b-field label="Hash" horizontal> - <span>{{ file.hash }}</span> + <span>{{ admin.file.hash }}</span> </b-field> <b-field label="Uploaded" horizontal> - <span><timeago :since="file.createdAt" /></span> + <span><timeago :since="admin.file.createdAt" /></span> </b-field> </div> <div class="column is-6"> <b-field label="User Id" horizontal> - <span>{{ user.id }}</span> + <span>{{ admin.user.id }}</span> </b-field> <b-field label="Username" horizontal> - <span>{{ user.username }}</span> + <span>{{ admin.user.username }}</span> </b-field> <b-field label="Enabled" horizontal> - <span>{{ user.enabled }}</span> + <span>{{ admin.user.enabled }}</span> </b-field> <b-field label="Registered" horizontal> - <span><timeago :since="user.createdAt" /></span> + <span><timeago :since="admin.user.createdAt" /></span> </b-field> <b-field label="Files" horizontal> <span> - <nuxt-link :to="`/dashboard/admin/user/${user.id}`">{{ user.fileCount }}</nuxt-link> + <nuxt-link :to="`/dashboard/admin/user/${admin.user.id}`">{{ admin.user.fileCount }}</nuxt-link> </span> </b-field> </div> </div> <div class="mb2 mt2 text-center"> - <button - class="button is-danger" + <b-button + v-if="admin.user.id !== auth.user.id" + type="is-danger" @click="promptBanIP"> Ban IP - </button> - <button - class="button is-danger" + </b-button> + <b-button + v-if="admin.user.id !== auth.user.id" + type="is-danger" @click="promptDisableUser"> Disable user - </button> + </b-button> </div> </div> </div> @@ -120,35 +122,22 @@ </template> <script> +import { mapState } from 'vuex'; import Sidebar from '~/components/sidebar/Sidebar.vue'; export default { components: { Sidebar, }, - middleware: ['auth', 'admin'], - data() { - return { - options: {}, - file: null, - user: null, - }; - }, - async asyncData({ $axios, route }) { + middleware: ['auth', 'admin', ({ route, store }) => { try { - const response = await $axios.$get(`file/${route.params.id}`); - return { - file: response.file ? response.file : null, - user: response.user ? response.user : null, - }; - } catch (error) { - console.error(error); - return { - file: null, - user: null, - }; + store.dispatch('admin/fetchFile', route.params.id); + } catch (e) { + // eslint-disable-next-line no-console + console.error(e); } - }, + }], + computed: mapState(['admin', 'auth']), methods: { promptDisableUser() { this.$buefy.dialog.confirm({ @@ -157,11 +146,8 @@ export default { onConfirm: () => this.disableUser(), }); }, - async disableUser() { - const response = await this.$axios.$post('admin/users/disable', { - id: this.user.id, - }); - this.$buefy.toast.open(response.message); + disableUser() { + this.$handler.executeAction('admin/disableUser', this.user.id); }, promptBanIP() { this.$buefy.dialog.confirm({ @@ -170,11 +156,8 @@ export default { onConfirm: () => this.banIP(), }); }, - async banIP() { - const response = await this.$axios.$post('admin/ban/ip', { - ip: this.file.ip, - }); - this.$buefy.toast.open(response.message); + banIP() { + this.$handler.executeAction('admin/banIP', this.file.ip); }, formatBytes(bytes, decimals = 2) { if (bytes === 0) return '0 Bytes'; diff --git a/src/site/pages/dashboard/admin/settings.vue b/src/site/pages/dashboard/admin/settings.vue index 9e63a7c..7f6a0fe 100644 --- a/src/site/pages/dashboard/admin/settings.vue +++ b/src/site/pages/dashboard/admin/settings.vue @@ -16,7 +16,7 @@ message="Please enter the name which this service is gonna be identified as" horizontal> <b-input - v-model="options.serviceName" + v-model="settings.serviceName" expanded /> </b-field> @@ -25,7 +25,7 @@ message="Where to store the files relative to the working directory" horizontal> <b-input - v-model="options.uploadFolder" + v-model="settings.uploadFolder" expanded /> </b-field> @@ -34,7 +34,7 @@ message="Maximum links allowed per album" horizontal> <b-input - v-model="options.linksPerAlbum" + v-model="settings.linksPerAlbum" type="number" expanded /> </b-field> @@ -44,7 +44,7 @@ message="Maximum allowed file size in MB" horizontal> <b-input - v-model="options.maxUploadSize" + v-model="settings.maxUploadSize" expanded /> </b-field> @@ -53,7 +53,7 @@ message="How many characters long should the generated filenames be" horizontal> <b-input - v-model="options.filenameLength" + v-model="settings.filenameLength" expanded /> </b-field> @@ -62,7 +62,7 @@ message="How many characters a link for an album should have" horizontal> <b-input - v-model="options.albumLinkLength" + v-model="settings.albumLinkLength" expanded /> </b-field> @@ -71,7 +71,7 @@ message="Generate thumbnails when uploading a file if possible" horizontal> <b-switch - v-model="options.generateThumbnails" + v-model="settings.generateThumbnails" :true-value="true" :false-value="false" /> </b-field> @@ -81,7 +81,7 @@ message="Allow generating zips to download entire albums" horizontal> <b-switch - v-model="options.generateZips" + v-model="settings.generateZips" :true-value="true" :false-value="false" /> </b-field> @@ -91,7 +91,7 @@ message="Enable anonymous uploades" horizontal> <b-switch - v-model="options.publicMode" + v-model="settings.publicMode" :true-value="true" :false-value="false" /> </b-field> @@ -101,7 +101,7 @@ message="Enable creating new accounts in the platform" horizontal> <b-switch - v-model="options.enableAccounts" + v-model="settings.enableAccounts" :true-value="true" :false-value="false" /> </b-field> @@ -120,38 +120,36 @@ </template> <script> +import { mapState } from 'vuex'; import Sidebar from '~/components/sidebar/Sidebar.vue'; export default { components: { Sidebar, }, - middleware: ['auth', 'admin'], - data() { - return { - options: {}, - }; - }, + middleware: ['auth', 'admin', ({ store }) => { + try { + store.dispatch('admin/fetchSettings'); + } catch (e) { + // eslint-disable-next-line no-console + console.error(e); + } + }], metaInfo() { return { title: 'Settings' }; }, - mounted() { - this.getSettings(); - }, + computed: mapState({ + settings: (state) => state.admin.settings, + }), methods: { - async getSettings() { - const response = await this.$axios.$get('service/config'); - this.options = response.config; - }, promptRestartService() { this.$buefy.dialog.confirm({ message: 'Keep in mind that restarting only works if you have PM2 or something similar set up. Continue?', onConfirm: () => this.restartService(), }); }, - async restartService() { - const response = await this.$axios.$post('service/restart'); - this.$buefy.toast.open(response.message); + restartService() { + this.$handler.executeAction('admin/restartService'); }, }, }; |