aboutsummaryrefslogtreecommitdiff
path: root/src/site/pages/dashboard/admin/settings.vue
blob: 71df2a66fb28ae2a7dfdcb03094cb9cf74abc8bb (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
<template>
	<section class="section is-fullheight dashboard">
		<div class="container">
			<div class="columns">
				<div class="column is-narrow">
					<Sidebar />
				</div>
				<div class="column">
					<h2 class="subtitle">
						Service settings
					</h2>
					<hr>

					<b-field
						label="Service name"
						message="Please enter the name which this service is gonna be identified as"
						horizontal>
						<b-input
							v-model="settings.serviceName"
							class="chibisafe-input"
							expanded />
					</b-field>

					<b-field
						label="Upload folder"
						message="Where to store the files relative to the working directory"
						horizontal>
						<b-input
							v-model="settings.uploadFolder"
							class="chibisafe-input"
							expanded />
					</b-field>

					<b-field
						label="Links per album"
						message="Maximum links allowed per album"
						horizontal>
						<b-input
							v-model="settings.linksPerAlbum"
							class="chibisafe-input"
							type="number"
							expanded />
					</b-field>

					<b-field
						label="Max upload size"
						message="Maximum allowed file size in MB"
						horizontal>
						<b-input
							v-model="settings.maxUploadSize"
							class="chibisafe-input"
							expanded />
					</b-field>

					<b-field
						label="Filename length"
						message="How many characters long should the generated filenames be"
						horizontal>
						<b-input
							v-model="settings.filenameLength"
							class="chibisafe-input"
							expanded />
					</b-field>

					<b-field
						label="Album link length"
						message="How many characters a link for an album should have"
						horizontal>
						<b-input
							v-model="settings.albumLinkLength"
							class="chibisafe-input"
							expanded />
					</b-field>

					<b-field
						label="Generate thumbnails"
						message="Generate thumbnails when uploading a file if possible"
						horizontal>
						<b-switch
							v-model="settings.generateThumbnails"
							:true-value="true"
							:false-value="false" />
					</b-field>

					<b-field
						label="Generate zips"
						message="Allow generating zips to download entire albums"
						horizontal>
						<b-switch
							v-model="settings.generateZips"
							:true-value="true"
							:false-value="false" />
					</b-field>

					<b-field
						label="Public mode"
						message="Enable anonymous uploades"
						horizontal>
						<b-switch
							v-model="settings.publicMode"
							:true-value="true"
							:false-value="false" />
					</b-field>

					<b-field
						label="Enable creating account"
						message="Enable creating new accounts in the platform"
						horizontal>
						<b-switch
							v-model="settings.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>
					</div>
				</div>
			</div>
		</div>
	</section>
</template>

<script>
import { mapState } from 'vuex';
import Sidebar from '~/components/sidebar/Sidebar.vue';

export default {
	components: {
		Sidebar
	},
	middleware: ['auth', 'admin', ({ store }) => {
		try {
			store.dispatch('admin/fetchSettings');
		} catch (e) {
			// eslint-disable-next-line no-console
			console.error(e);
		}
	}],
	metaInfo() {
		return { title: 'Settings' };
	},
	computed: mapState({
		settings: state => state.admin.settings
	}),
	methods: {
		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()
			});
		},
		restartService() {
			this.$handler.executeAction('admin/restartService');
		}
	}
};
</script>