aboutsummaryrefslogtreecommitdiff
path: root/src/site/pages/dashboard/admin
diff options
context:
space:
mode:
authorZephyrrus <[email protected]>2020-07-10 01:13:51 +0300
committerZephyrrus <[email protected]>2020-07-10 01:13:51 +0300
commit0f66d807035d3e32a66c7dc9bf55fb3be99aedac (patch)
tree93ff9fd13a0434d91fb1ae7ca0da48d6929c4d00 /src/site/pages/dashboard/admin
parentfix: stop leaking user passwords to admins AGAIN (diff)
downloadhost.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.vue85
-rw-r--r--src/site/pages/dashboard/admin/settings.vue50
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');
},
},
};