diff --git a/client/components/admin.vue b/client/components/admin.vue
index b198170b..8149722f 100644
--- a/client/components/admin.vue
+++ b/client/components/admin.vue
@@ -83,8 +83,8 @@
v-list-tile(to='/system', v-if='hasPermission(`manage:system`)')
v-list-tile-avatar: v-icon tune
v-list-tile-title {{ $t('admin:system.title') }}
- v-list-tile(to='/utilities', v-if='hasPermission(`manage:system`)', disabled)
- v-list-tile-avatar: v-icon(color='grey lighten-2') build
+ v-list-tile(to='/utilities', v-if='hasPermission(`manage:system`)')
+ v-list-tile-avatar: v-icon build
v-list-tile-title {{ $t('admin:utilities.title') }}
v-list-tile(to='/webhooks', v-if='hasPermission(`manage:system`)', disabled)
v-list-tile-avatar: v-icon(color='grey lighten-2') ac_unit
diff --git a/client/components/admin/admin-utilities-auth.vue b/client/components/admin/admin-utilities-auth.vue
new file mode 100644
index 00000000..e697fb8b
--- /dev/null
+++ b/client/components/admin/admin-utilities-auth.vue
@@ -0,0 +1,93 @@
+
+ v-card
+ v-toolbar(flat, color='primary', dark, dense)
+ .subheading {{ $t('admin:utilities.authTitle') }}
+ v-card-text
+ v-subheader.pl-0 Generate New Authentication Public / Private Key Certificates
+ .body-1 This will invalidate all current session tokens and cause all users to be logged out.
+ .body-1.red--text You will need to log back in after the operation.
+ v-btn(outline, color='primary', @click='regenCerts', :disabled='loading').ml-0.mt-3
+ v-icon(left) build
+ span Proceed
+ v-divider.my-3
+ v-subheader.pl-0 Reset Guest User
+ .body-1 This will reset the guest user to its default parameters and permissions.
+ v-btn(outline, color='primary', @click='resetGuest', :disabled='loading').ml-0.mt-3
+ v-icon(left) build
+ span Proceed
+
+
+
+
+
diff --git a/client/components/admin/admin-utilities-cache.vue b/client/components/admin/admin-utilities-cache.vue
new file mode 100644
index 00000000..c9424780
--- /dev/null
+++ b/client/components/admin/admin-utilities-cache.vue
@@ -0,0 +1,32 @@
+
+ v-card
+ v-toolbar(flat, color='primary', dark, dense)
+ .subheading {{ $t('admin:utilities.cacheTitle') }}
+ v-card-text
+ v-subheader.pl-0 Flush Pages Cache
+ .body-1 Pages are cached to disk for better performance. You can flush the cache to force all content to be fetched from the DB again.
+ v-btn(outline, color='primary').ml-0.mt-3
+ v-icon(left) build
+ span Proceed
+ v-divider.my-3
+ v-subheader.pl-0 Flush Assets Cache
+ .body-1 Assets such as images and other files are cached to disk for better performance. You can flush the cache to force all assets to be fetched from the DB again.
+ v-btn(outline, color='primary').ml-0.mt-3
+ v-icon(left) build
+ span Proceed
+ v-divider.my-3
+ v-subheader.pl-0 Flush Temporary Uploads
+ .body-1 New uploads are temporarily saved to disk while they are being processed. They are automatically deleted after processing, but you can force an immediate cleanup using this tool.
+ v-btn(outline, color='primary').ml-0.mt-3
+ v-icon(left) build
+ span Proceed
+
+
+
+
+
diff --git a/client/components/admin/admin-utilities-importv1.vue b/client/components/admin/admin-utilities-importv1.vue
new file mode 100644
index 00000000..b7ac5a61
--- /dev/null
+++ b/client/components/admin/admin-utilities-importv1.vue
@@ -0,0 +1,77 @@
+
+ v-card.wiki-form
+ v-toolbar(flat, color='primary', dark, dense)
+ .subheading {{ $t('admin:utilities.importv1Title') }}
+ v-card-text
+ .text-xs-center
+ img.animated.fadeInUp.wait-p1s(src='/svg/icon-software.svg')
+ .body-2 Import from Wiki.js 1.x
+ v-divider.my-4
+ .body-1 Data from a Wiki.js 1.x installation can be imported easily using this tool. What do you want to import?
+ v-checkbox(
+ label='Content'
+ value='content'
+ color='deep-orange darken-2'
+ v-model='importFilters'
+ hide-details
+ )
+ v-checkbox(
+ label='Uploads'
+ value='uploads'
+ color='deep-orange darken-2'
+ v-model='importFilters'
+ hide-details
+ )
+ v-checkbox(
+ label='Users'
+ value='users'
+ color='deep-orange darken-2'
+ v-model='importFilters'
+ hide-details
+ )
+ v-divider.my-3
+ v-text-field.mt-3(
+ outline
+ label='MongoDB Connection String'
+ hint='The connection string to connect to the Wiki.js 1.x MongoDB database.'
+ persistent-hint
+ v-model='dbConnStr'
+ v-if='needDB'
+ )
+ v-text-field.mt-3(
+ outline
+ label='Content Repo Path'
+ hint='The full path to where the Wiki.js 1.x content is stored on disk.'
+ persistent-hint
+ v-model='contentPath'
+ v-if='needDisk'
+ )
+ v-card-chin
+ v-btn(depressed, color='deep-orange darken-2', :disabled='!needDB && !needDisk').ml-0
+ v-icon(left, color='white') label_important
+ span.white--text Start Import
+
+
+
+
+
diff --git a/client/components/admin/admin-utilities-telemetry.vue b/client/components/admin/admin-utilities-telemetry.vue
new file mode 100644
index 00000000..853f356b
--- /dev/null
+++ b/client/components/admin/admin-utilities-telemetry.vue
@@ -0,0 +1,80 @@
+
+ v-card
+ v-toolbar(flat, color='primary', dark, dense)
+ .subheading {{ $t('admin:utilities.telemetryTitle') }}
+ v-form
+ v-card-text
+ v-subheader What is telemetry?
+ .body-1.pl-3 Telemetry allows the developers of Wiki.js to improve the software by collecting basic anonymized data about its usage and the host info. #[br] This is entirely optional and #[strong absolutely no] private data (such as content or personal data) is collected.
+ .body-1.pt-3.pl-3 For maximum privacy, a random client ID is generated during setup. This ID is used to group requests together while keeping complete anonymity. You can reset and generate a new one below at any time.
+ v-divider.my-3
+ v-subheader What is collected?
+ .body-1.pl-3 When telemetry is enabled, only the following data is transmitted:
+ v-list
+ v-list-tile
+ v-list-tile-avatar: v-icon info_outline
+ v-list-tile-content
+ v-list-tile-title.body-1 Version of Wiki.js installed
+ v-list-tile-subtitle.caption: em e.g. v2.0.123
+ v-list-tile
+ v-list-tile-avatar: v-icon info_outline
+ v-list-tile-content
+ v-list-tile-title.body-1 Basic OS information
+ v-list-tile-subtitle.caption: em Platform (Linux, macOS or Windows), Total CPU cores and DB type (PostgreSQL, MySQL, MariaDB, SQLite or SQL Server)
+ v-list-tile
+ v-list-tile-avatar: v-icon info_outline
+ v-list-tile-content
+ v-list-tile-title.body-1 Crash debug data
+ v-list-tile-subtitle.caption: em Stack trace of the error
+ v-list-tile
+ v-list-tile-avatar: v-icon info_outline
+ v-list-tile-content
+ v-list-tile-title.body-1 Setup analytics
+ v-list-tile-subtitle.caption: em Installation checkpoint reached
+ .body-1.pl-3 Note that any data collected is stored for a maximum of 180 days, after which it is permanently deleted.
+ v-divider.my-3
+ v-subheader What is it used for?
+ .body-1.pl-3 Telemetry is used by developers to improve Wiki.js, mostly for the following reasons:
+ v-list(dense)
+ v-list-tile
+ v-list-tile-avatar: v-icon info_outline
+ v-list-tile-content: v-list-tile-title.body-1 Identify critical bugs more easily and fix them in a timely manner.
+ v-list-tile
+ v-list-tile-avatar: v-icon info_outline
+ v-list-tile-content: v-list-tile-title.body-1 Understand the upgrade rate of current installations.
+ v-list-tile
+ v-list-tile-avatar: v-icon info_outline
+ v-list-tile-content: v-list-tile-title.body-1 Optimize performance and testing scenarios based on most popular environments.
+ .body-1.pl-3 Only authorized developers have access to the data. It is not shared to any 3rd party nor is it used for any other application than improving Wiki.js.
+ v-divider.my-3
+ v-subheader Settings
+ .pl-3
+ v-switch.mt-0(
+ v-model='telemetry',
+ label='Enable Telemetry',
+ :value='true',
+ color='primary',
+ hint='Allow Wiki.js to transmit telemetry data.',
+ persistent-hint
+ )
+ .subheading.mt-3.grey--text.text--darken-1 Client ID
+ .body-1 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ v-card-chin
+ v-btn(depressed, color='success', @click='updateTelemetry')
+ v-icon(left) chevron_right
+ | Save Changes
+ v-spacer
+ v-btn(outline, color='grey', @click='resetClientId')
+ v-icon(left) autorenew
+ span Reset Client ID
+
+
+
+
+
+
diff --git a/client/components/admin/admin-utilities.vue b/client/components/admin/admin-utilities.vue
index ae64b14a..a97fc8c2 100644
--- a/client/components/admin/admin-utilities.vue
+++ b/client/components/admin/admin-utilities.vue
@@ -5,196 +5,75 @@
.admin-header
img(src='/svg/icon-maintenance.svg', alt='Utilities', style='width: 80px;')
.admin-header-title
- .headline.primary--text Utilities
- .subheading.grey--text Maintenance and troubleshooting tools
+ .headline.primary--text {{$t('admin:utilities.title')}}
+ .subheading.grey--text {{$t('admin:utilities.subtitle')}}
- v-card.mt-3
- v-tabs(color='grey darken-2', fixed-tabs, slider-color='white', show-arrows, dark)
- v-tab(key='tools') Tools
- v-tab(key='cache') Cache
- v-tab(key='telemetry') Telemetry
- v-tab(key='support') Support
+ v-flex(lg3, xs12)
+ v-card.animated.fadeInUp
+ v-toolbar(flat, color='primary', dark, dense)
+ .subheading {{$t('admin:utilities.tools')}}
+ v-list(two-line, dense).py-0
+ template(v-for='(tool, idx) in tools')
+ v-list-tile(:key='tool.key', @click='selectedTool = tool.key', :disabled='!tool.isAvailable')
+ v-list-tile-avatar
+ v-icon(:color='!tool.isAvailable ? `grey lighten-1` : (selectedTool === tool.key ? `blue ` : `grey darken-1`)') {{ tool.icon }}
+ v-list-tile-content
+ v-list-tile-title.body-2(:class='!tool.isAvailable ? `grey--text` : (selectedTool === tool.key ? `primary--text` : ``)') {{ $t('admin:utilities.' + tool.i18nKey + 'Title') }}
+ v-list-tile-sub-title.caption(:class='!tool.isAvailable ? `grey--text text--lighten-1` : (selectedTool === tool.key ? `blue--text ` : ``)') {{ $t('admin:utilities.' + tool.i18nKey + 'Subtitle') }}
+ v-list-tile-avatar(v-if='selectedTool === tool.key')
+ v-icon.animated.fadeInLeft(color='primary') arrow_forward_ios
+ v-divider(v-if='idx < tools.length - 1')
- v-tab-item(key='tools', :transition='false', :reverse-transition='false')
- v-container.pa-2(fluid, grid-list-sm, :class='$vuetify.dark ? "" : "grey lighten-5"')
- v-layout(row, wrap)
- v-flex(xs12, sm6)
- v-card
- v-toolbar(:color='$vuetify.dark ? "" : "grey darken-3"', dark, dense, flat)
- v-toolbar-title
- .subheading Authentication
- v-spacer
- v-chip(label, color='white', small).grey--text.text--darken-2 coming soon
- v-subheader Flush User Sessions
- v-card-text.pt-0.pl-4
- .body-1 This will cause all users to be logged out. You will need to log back in after the operation.
- v-btn(depressed).ml-0
- v-icon(left, color='grey') build
- span Proceed
- v-divider.my-0
- v-subheader Reset Guest User
- v-card-text.pt-0.pl-4
- .body-1 This will reset the guest user to its default parameters and permissions.
- v-btn(depressed).ml-0
- v-icon(left, color='grey') build
- span Proceed
- v-card.mt-3
- v-toolbar(:color='$vuetify.dark ? "" : "grey darken-3"', dark, dense, flat)
- v-toolbar-title
- .subheading Modules
- v-spacer
- v-chip(label, color='white', small).grey--text.text--darken-2 coming soon
- v-subheader Rescan Modules
- v-card-text.pt-0.pl-4
- .body-1 Look for new modules on disk. Existing configurations will be merged.
- v-select.mt-3(
- v-model='rescanModuleType'
- :items='moduleTypes'
- label='Modules Type'
- outline
- background-color='grey lighten-1'
- hide-details
- dense
- )
- v-btn.ml-0(color='primary', depressed, dark)
- v-icon(left) chevron_right
- span Rescan
- v-flex(xs12, sm6)
- v-card
- v-toolbar(:color='$vuetify.dark ? "" : "grey darken-3"', dark, dense, flat)
- v-toolbar-title
- .subheading Maintenance Mode
- v-spacer
- v-chip(label, color='white', small).grey--text.text--darken-2 coming soon
- v-card-text
- .body-1 Maintenance mode restrict access to the site to administrators only, regarless of current permissions.
- v-btn.mt-3.ml-0(color='orange darken-2', depressed, dark)
- icon-home-alert.mr-2(fillColor='#FFFFFF')
- | Turn On Maintenance Mode
- v-card.mt-3
- v-toolbar(:color='$vuetify.dark ? "" : "grey darken-3"', dark, dense, flat)
- v-toolbar-title
- .subheading Graph Endpoint
- v-spacer
- v-chip(label, color='white', small).grey--text.text--darken-2 coming soon
- v-card-text
- .body-1 The Graph API Endpoint from which remote resources like locales, themes and plugins are fetched.
- .caption.red--text Do not change unless you know what you're doing!
- v-text-field.my-2(outline, hide-details, background-color='grey lighten-1', label='Graph Endpoint', value='https://graph.requarks.io')
- v-btn.ml-0(color='primary', depressed, dark)
- v-icon(left) chevron_right
- span Save
-
- v-tab-item(key='cache', :transition='false', :reverse-transition='false')
- v-card
- v-card-text Coming soon
-
- v-tab-item(key='telemetry', :transition='false', :reverse-transition='false')
- v-card
- v-form
- v-card-text
- v-subheader What is telemetry?
- .body-1.pl-3 Telemetry allows the developers of Wiki.js to improve the software by collecting basic anonymized data about its usage and the host info. #[br] This is entirely optional and #[strong absolutely no] private data (such as content or personal data) is collected.
- .body-1.pt-3.pl-3 For maximum privacy, a random client ID is generated during setup. This ID is used to group requests together while keeping complete anonymity. You can reset and generate a new one below at any time.
- v-divider.my-3
- v-subheader What is collected?
- .body-1.pl-3 When telemetry is enabled, only the following data is transmitted:
- v-list(dense)
- v-list-tile
- v-list-tile-avatar: v-icon info_outline
- v-list-tile-content: v-list-tile-title.caption Version of Wiki.js installed
- v-list-tile
- v-list-tile-avatar: v-icon info_outline
- v-list-tile-content: v-list-tile-title.caption Basic OS information (platform, CPU cores count, DB type)
- v-list-tile
- v-list-tile-avatar: v-icon info_outline
- v-list-tile-content: v-list-tile-title.caption Crash debug data
- v-list-tile
- v-list-tile-avatar: v-icon info_outline
- v-list-tile-content: v-list-tile-title.caption Setup analytics (installation checkpoint reached)
- .body-2.pl-3
- v-divider.my-3
- v-subheader Settings
- .pl-3
- v-switch.mt-0(
- v-model='telemetry',
- label='Enable Telemetry',
- :value='true',
- color='primary',
- hint='Allow Wiki.js to transmit telemetry data.',
- persistent-hint
- )
- .subheading.mt-3.grey--text.text--darken-1 Client ID
- .body-1 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- v-card-chin
- v-btn(color='primary', @click='updateTelemetry')
- v-icon(left) chevron_right
- | Save Changes
- v-spacer
- v-btn(outline, color='grey', @click='resetClientId')
- v-icon(left) autorenew
- span Reset Client ID
-
- v-tab-item(key='support', :transition='false', :reverse-transition='false')
- v-card.pa-3
- v-subheader Report a bug
- .body-1.pl-3 Bugs can be reported using GitHub issues on the project repository page.
- v-btn.ml-3.mt-3(depressed, dark, color='grey darken-2', href='https://github.com/Requarks/wiki/issues', target='_blank')
- icon-github-circle.mr-3(fillColor='#FFFFFF')
- span Submit an issue
- v-divider.my-3
- v-subheader Suggest a New Feature / Enhancement
- .body-1.pl-3 Have an idea for a new feature or something that could be improved?
- v-btn.ml-3.mt-3(depressed, dark, color='indigo', href='https://requests.requarks.io/wiki', target='_blank')
- v-icon(left) lightbulb_outline
- span Submit an idea
- v-divider.my-3
- v-subheader Questions / Comments
- .body-1.pl-3 Join our gitter channel. We are very active and friendly!
- v-btn.ml-3.mt-3(depressed, dark, color='pink', href='https://gitter.im/Requarks/wiki', target='_blank')
- v-icon(left) chat
- span Launch Gitter
+ v-flex.animated.fadeInUp.wait-p2s(xs12, lg9)
+ transition(name='admin-router')
+ component(:is='selectedTool')