aboutsummaryrefslogtreecommitdiff
path: root/src/site/pages/dashboard
diff options
context:
space:
mode:
authorZephyrrus <[email protected]>2020-07-08 04:00:12 +0300
committerZephyrrus <[email protected]>2020-07-08 04:00:12 +0300
commitad852de51a0d2dd5d29c08838d5a430c58849e74 (patch)
treea4ab9a720f66271c9eba10916061a9b06c43656e /src/site/pages/dashboard
parentrefactor: refactor grid to use vuex for every action (diff)
downloadhost.fuwn.me-ad852de51a0d2dd5d29c08838d5a430c58849e74.tar.xz
host.fuwn.me-ad852de51a0d2dd5d29c08838d5a430c58849e74.zip
chore: linter the entire project using the new rules
Diffstat (limited to 'src/site/pages/dashboard')
-rw-r--r--src/site/pages/dashboard/admin/file/_id.vue82
-rw-r--r--src/site/pages/dashboard/admin/settings.vue85
-rw-r--r--src/site/pages/dashboard/tags/index.vue43
3 files changed, 133 insertions, 77 deletions
diff --git a/src/site/pages/dashboard/admin/file/_id.vue b/src/site/pages/dashboard/admin/file/_id.vue
index 5853770..34fcd01 100644
--- a/src/site/pages/dashboard/admin/file/_id.vue
+++ b/src/site/pages/dashboard/admin/file/_id.vue
@@ -9,74 +9,90 @@
<Sidebar />
</div>
<div class="column">
- <h2 class="subtitle">File details</h2>
+ <h2 class="subtitle">
+ File details
+ </h2>
<hr>
<div class="columns">
<div class="column is-6">
- <b-field label="ID"
+ <b-field
+ label="ID"
horizontal>
<span>{{ file.id }}</span>
</b-field>
- <b-field label="Name"
+ <b-field
+ label="Name"
horizontal>
<span>{{ file.name }}</span>
</b-field>
- <b-field label="Original Name"
+ <b-field
+ label="Original Name"
horizontal>
<span>{{ file.original }}</span>
</b-field>
- <b-field label="IP"
+ <b-field
+ label="IP"
horizontal>
<span class="underline">{{ file.ip }}</span>
</b-field>
- <b-field label="Link"
+ <b-field
+ label="Link"
horizontal>
- <a :href="file.url"
+ <a
+ :href="file.url"
target="_blank">{{ file.url }}</a>
</b-field>
- <b-field label="Size"
+ <b-field
+ label="Size"
horizontal>
<span>{{ formatBytes(file.size) }}</span>
</b-field>
- <b-field label="Hash"
+ <b-field
+ label="Hash"
horizontal>
<span>{{ file.hash }}</span>
</b-field>
- <b-field label="Uploaded"
+ <b-field
+ label="Uploaded"
horizontal>
<span><timeago :since="file.createdAt" /></span>
</b-field>
</div>
<div class="column is-6">
- <b-field label="User Id"
+ <b-field
+ label="User Id"
horizontal>
<span>{{ user.id }}</span>
</b-field>
- <b-field label="Username"
+ <b-field
+ label="Username"
horizontal>
<span>{{ user.username }}</span>
</b-field>
- <b-field label="Enabled"
+ <b-field
+ label="Enabled"
horizontal>
<span>{{ user.enabled }}</span>
</b-field>
- <b-field label="Registered"
+ <b-field
+ label="Registered"
horizontal>
<span><timeago :since="user.createdAt" /></span>
</b-field>
- <b-field label="Files"
+ <b-field
+ label="Files"
horizontal>
<span>
<nuxt-link :to="`/dashboard/admin/user/${user.id}`">{{ user.fileCount }}</nuxt-link>
@@ -86,10 +102,16 @@
</div>
<div class="mb2 mt2 text-center">
- <button class="button is-danger"
- @click="promptBanIP">Ban IP</button>
- <button class="button is-danger"
- @click="promptDisableUser">Disable user</button>
+ <button
+ class="button is-danger"
+ @click="promptBanIP">
+ Ban IP
+ </button>
+ <button
+ class="button is-danger"
+ @click="promptDisableUser">
+ Disable user
+ </button>
</div>
</div>
</div>
@@ -102,14 +124,14 @@ import Sidebar from '~/components/sidebar/Sidebar.vue';
export default {
components: {
- Sidebar
+ Sidebar,
},
middleware: ['auth', 'admin'],
data() {
return {
options: {},
file: null,
- user: null
+ user: null,
};
},
async asyncData({ $axios, route }) {
@@ -117,13 +139,13 @@ export default {
const response = await $axios.$get(`file/${route.params.id}`);
return {
file: response.file ? response.file : null,
- user: response.user ? response.user : null
+ user: response.user ? response.user : null,
};
} catch (error) {
console.error(error);
return {
file: null,
- user: null
+ user: null,
};
}
},
@@ -132,12 +154,12 @@ export default {
this.$buefy.dialog.confirm({
type: 'is-danger',
message: 'Are you sure you want to disable the account of the user that uploaded this file?',
- onConfirm: () => this.disableUser()
+ onConfirm: () => this.disableUser(),
});
},
async disableUser() {
const response = await this.$axios.$post('admin/users/disable', {
- id: this.user.id
+ id: this.user.id,
});
this.$buefy.toast.open(response.message);
},
@@ -145,12 +167,12 @@ export default {
this.$buefy.dialog.confirm({
type: 'is-danger',
message: 'Are you sure you want to ban the IP this file was uploaded from?',
- onConfirm: () => this.banIP()
+ onConfirm: () => this.banIP(),
});
},
async banIP() {
const response = await this.$axios.$post('admin/ban/ip', {
- ip: this.file.ip
+ ip: this.file.ip,
});
this.$buefy.toast.open(response.message);
},
@@ -163,8 +185,8 @@ export default {
const i = Math.floor(Math.log(bytes) / Math.log(k));
- return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];
- }
- }
+ return `${parseFloat((bytes / k ** i).toFixed(dm))} ${sizes[i]}`;
+ },
+ },
};
</script>
diff --git a/src/site/pages/dashboard/admin/settings.vue b/src/site/pages/dashboard/admin/settings.vue
index 2d59fff..9e63a7c 100644
--- a/src/site/pages/dashboard/admin/settings.vue
+++ b/src/site/pages/dashboard/admin/settings.vue
@@ -6,87 +6,112 @@
<Sidebar />
</div>
<div class="column">
- <h2 class="subtitle">Service settings</h2>
+ <h2 class="subtitle">
+ Service settings
+ </h2>
<hr>
- <b-field label="Service name"
+ <b-field
+ label="Service name"
message="Please enter the name which this service is gonna be identified as"
horizontal>
- <b-input v-model="options.serviceName"
+ <b-input
+ v-model="options.serviceName"
expanded />
</b-field>
- <b-field label="Upload folder"
+ <b-field
+ label="Upload folder"
message="Where to store the files relative to the working directory"
horizontal>
- <b-input v-model="options.uploadFolder"
+ <b-input
+ v-model="options.uploadFolder"
expanded />
</b-field>
- <b-field label="Links per album"
+ <b-field
+ label="Links per album"
message="Maximum links allowed per album"
horizontal>
- <b-input v-model="options.linksPerAlbum"
+ <b-input
+ v-model="options.linksPerAlbum"
type="number"
expanded />
</b-field>
- <b-field label="Max upload size"
+ <b-field
+ label="Max upload size"
message="Maximum allowed file size in MB"
horizontal>
- <b-input v-model="options.maxUploadSize"
+ <b-input
+ v-model="options.maxUploadSize"
expanded />
</b-field>
- <b-field label="Filename length"
+ <b-field
+ label="Filename length"
message="How many characters long should the generated filenames be"
horizontal>
- <b-input v-model="options.filenameLength"
+ <b-input
+ v-model="options.filenameLength"
expanded />
</b-field>
- <b-field label="Album link length"
+ <b-field
+ label="Album link length"
message="How many characters a link for an album should have"
horizontal>
- <b-input v-model="options.albumLinkLength"
+ <b-input
+ v-model="options.albumLinkLength"
expanded />
</b-field>
- <b-field label="Generate thumbnails"
+ <b-field
+ label="Generate thumbnails"
message="Generate thumbnails when uploading a file if possible"
horizontal>
- <b-switch v-model="options.generateThumbnails"
+ <b-switch
+ v-model="options.generateThumbnails"
:true-value="true"
:false-value="false" />
</b-field>
- <b-field label="Generate zips"
+ <b-field
+ label="Generate zips"
message="Allow generating zips to download entire albums"
horizontal>
- <b-switch v-model="options.generateZips"
+ <b-switch
+ v-model="options.generateZips"
:true-value="true"
:false-value="false" />
</b-field>
- <b-field label="Public mode"
+ <b-field
+ label="Public mode"
message="Enable anonymous uploades"
horizontal>
- <b-switch v-model="options.publicMode"
+ <b-switch
+ v-model="options.publicMode"
:true-value="true"
:false-value="false" />
</b-field>
- <b-field label="Enable creating account"
+ <b-field
+ label="Enable creating account"
message="Enable creating new accounts in the platform"
horizontal>
- <b-switch v-model="options.enableAccounts"
+ <b-switch
+ v-model="options.enableAccounts"
:true-value="true"
:false-value="false" />
</b-field>
<div class="mb2 mt2 text-center">
- <button class="button is-primary"
- @click="promptRestartService">Save and restart service</button>
+ <button
+ class="button is-primary"
+ @click="promptRestartService">
+ Save and restart service
+ </button>
</div>
</div>
</div>
@@ -99,12 +124,12 @@ import Sidebar from '~/components/sidebar/Sidebar.vue';
export default {
components: {
- Sidebar
+ Sidebar,
},
middleware: ['auth', 'admin'],
data() {
return {
- options: {}
+ options: {},
};
},
metaInfo() {
@@ -115,19 +140,19 @@ export default {
},
methods: {
async getSettings() {
- const response = await this.$axios.$get(`service/config`);
+ 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()
+ onConfirm: () => this.restartService(),
});
},
async restartService() {
- const response = await this.$axios.$post(`service/restart`);
+ const response = await this.$axios.$post('service/restart');
this.$buefy.toast.open(response.message);
- }
- }
+ },
+ },
};
</script>
diff --git a/src/site/pages/dashboard/tags/index.vue b/src/site/pages/dashboard/tags/index.vue
index a9476da..10193a8 100644
--- a/src/site/pages/dashboard/tags/index.vue
+++ b/src/site/pages/dashboard/tags/index.vue
@@ -123,7 +123,6 @@
}
</style>
-
<template>
<section class="section is-fullheight dashboard">
<div class="container">
@@ -132,27 +131,35 @@
<Sidebar />
</div>
<div class="column">
- <h2 class="subtitle">Manage your tags</h2>
+ <h2 class="subtitle">
+ Manage your tags
+ </h2>
<hr>
<div class="search-container">
<b-field>
- <b-input v-model="newTagName"
+ <b-input
+ v-model="newTagName"
placeholder="Tag name..."
type="text"
@keyup.enter.native="createTag" />
<p class="control">
- <button class="button is-primary"
- @click="createTag">Create tags</button>
+ <button
+ class="button is-primary"
+ @click="createTag">
+ Create tags
+ </button>
</p>
</b-field>
</div>
<div class="view-container">
- <div v-for="tag in tags"
+ <div
+ v-for="tag in tags"
:key="tag.id"
class="album">
- <div class="arrow-container"
+ <div
+ class="arrow-container"
@click="promptDeleteTag">
<i class="icon-arrow" />
</div>
@@ -165,7 +172,9 @@
-->
<div class="info">
<h4>
- <router-link :to="`/dashboard/tags/${tag.id}`">{{ tag.name }}</router-link>
+ <router-link :to="`/dashboard/tags/${tag.id}`">
+ {{ tag.name }}
+ </router-link>
</h4>
<span>{{ tag.count || 0 }} files</span>
</div>
@@ -205,19 +214,19 @@ import Sidebar from '~/components/sidebar/Sidebar.vue';
export default {
components: {
- Sidebar
+ Sidebar,
},
middleware: 'auth',
data() {
return {
tags: [],
- newTagName: null
+ newTagName: null,
};
},
computed: {
config() {
return this.$store.state.config;
- }
+ },
},
metaInfo() {
return { title: 'Tags' };
@@ -230,7 +239,7 @@ export default {
this.$buefy.dialog.confirm({
type: 'is-danger',
message: 'Are you sure you want to delete this tag?',
- onConfirm: () => this.promptPurgeTag(id)
+ onConfirm: () => this.promptPurgeTag(id),
});
},
promptPurgeTag(id) {
@@ -240,7 +249,7 @@ export default {
cancelText: 'No',
confirmText: 'Yes',
onConfirm: () => this.deleteTag(id, true),
- onCancel: () => this.deleteTag(id, false)
+ onCancel: () => this.deleteTag(id, false),
});
},
async deleteTag(id, purge) {
@@ -250,19 +259,19 @@ export default {
},
async createTag() {
if (!this.newTagName || this.newTagName === '') return;
- const response = await this.$axios.$post(`tag/new`,
+ const response = await this.$axios.$post('tag/new',
{ name: this.newTagName });
this.newTagName = null;
this.$buefy.toast.open(response.message);
this.getTags();
},
async getTags() {
- const response = await this.$axios.$get(`tags`);
+ const response = await this.$axios.$get('tags');
for (const tag of response.tags) {
tag.isDetailsOpen = false;
}
this.tags = response.tags;
- }
- }
+ },
+ },
};
</script>