refactor: project cleanup + onboarding page
This commit is contained in:
65
server/views/admin/_layout.pug
Normal file
65
server/views/admin/_layout.pug
Normal file
@@ -0,0 +1,65 @@
|
||||
extends ../../layout.pug
|
||||
|
||||
block rootNavCenter
|
||||
h2.nav-item= t('nav.settings')
|
||||
|
||||
block rootNavRight
|
||||
loading-spinner
|
||||
.nav-item
|
||||
a.button.btn-edit-discard(href='/')
|
||||
i.nc-icon-outline.ui-1_home-minimal
|
||||
span= t('nav.root')
|
||||
|
||||
block content
|
||||
|
||||
#page-type-account
|
||||
.container.is-fluid
|
||||
.columns.is-gapless
|
||||
|
||||
.column.is-narrow.is-hidden-touch.sidebar
|
||||
|
||||
aside
|
||||
.sidebar-label
|
||||
span= t('sidebar.navigation')
|
||||
ul.sidebar-menu
|
||||
li
|
||||
a(href='/')
|
||||
i.nc-icon-outline.ui-1_home-minimal
|
||||
span= t('nav.root')
|
||||
|
||||
aside
|
||||
.sidebar-label
|
||||
span= t('nav.account')
|
||||
ul.sidebar-menu
|
||||
li
|
||||
a(href='/admin/profile')
|
||||
i.nc-icon-outline.business_business-contact-86
|
||||
span= t('nav.myprofile')
|
||||
li
|
||||
a(href='/admin/stats')
|
||||
i.nc-icon-outline.ui-3_chart-bars
|
||||
span= t('nav.stats')
|
||||
if rights.manage
|
||||
li
|
||||
a(href='/admin/users')
|
||||
i.nc-icon-outline.users_multiple-19
|
||||
span= t('nav.users')
|
||||
li
|
||||
a(href='/admin/theme')
|
||||
i.nc-icon-outline.ui-1_drop
|
||||
span= t('nav.theme')
|
||||
//-li
|
||||
a(href='/admin/settings')
|
||||
i.nc-icon-outline.ui-1_settings-gear-63
|
||||
span= t('nav.syssettings')
|
||||
li
|
||||
a(href='/admin/system')
|
||||
i.nc-icon-outline.objects_planet
|
||||
span= t('nav.sysinfo')
|
||||
li
|
||||
a(href='/logout')
|
||||
i.nc-icon-outline.arrows-1_log-out
|
||||
span= t('nav.logout')
|
||||
|
||||
.column
|
||||
block adminContent
|
62
server/views/admin/profile.pug
Normal file
62
server/views/admin/profile.pug
Normal file
@@ -0,0 +1,62 @@
|
||||
extends ./_layout.pug
|
||||
|
||||
block adminContent
|
||||
.hero
|
||||
h1.title#title= t('nav.myprofile')
|
||||
h2.subtitle= t('admin:profile.subtitle')
|
||||
i.pageicon.nc-icon-outline.business_business-contact-86
|
||||
.form-sections
|
||||
.columns.is-gapless
|
||||
.column.is-two-thirds
|
||||
admin-profile(inline-template, email=user.email, name=user.name, provider=user.provider)
|
||||
div
|
||||
section
|
||||
label.label= t('admin:profile.email')
|
||||
p.control.is-fullwidth
|
||||
input.input(type='text', placeholder=t('admin:profile.email'), value=user.email, disabled)
|
||||
if user.provider === 'local'
|
||||
section
|
||||
label.label= t('admin:profile.password')
|
||||
p.control.is-fullwidth
|
||||
input.input(type='password', placeholder=t('admin:profile.password'), value='********', v-model='password')
|
||||
section
|
||||
label.label= t('admin:profile.passwordverify')
|
||||
p.control.is-fullwidth
|
||||
input.input(type='password', placeholder=t('admin:profile.password'), value='********', v-model='passwordVerify')
|
||||
section
|
||||
label.label= t('admin:profile.displayname')
|
||||
p.control.is-fullwidth
|
||||
input.input(type='text', placeholder=t('admin:profile.displaynameexample'), v-model='name')
|
||||
//-section
|
||||
label.label #{t('admin:profile.tfa')}: #[strong.is-red(v-cloak) {{ tfaStatus }}]
|
||||
button.button.is-blue(@click='$store.dispatch("modalProfile2fa/open")', :disabled='tfaIsActive')
|
||||
i.nc-icon-outline.ui-1_circle-add
|
||||
span= t('admin:profile.tfaenable')
|
||||
button.button.is-blue(@click='saveUser', :disabled='!tfaIsActive')
|
||||
i.nc-icon-outline.ui-1_circle-delete
|
||||
span= t('admin:profile.tfadisable')
|
||||
section
|
||||
button.button.is-green(@click='saveUser')
|
||||
i.nc-icon-outline.ui-1_check
|
||||
span= t('admin:profile.savechanges')
|
||||
.column
|
||||
.panel-aside
|
||||
label.label= t('admin:profile.provider')
|
||||
p.control.account-profile-provider
|
||||
case user.provider
|
||||
when 'local': i.nc-icon-outline.ui-1_database
|
||||
when 'windowslive': i.icon-windows2.is-blue
|
||||
when 'azure': i.icon-windows2.is-blue
|
||||
when 'google': i.icon-google.is-blue
|
||||
when 'facebook': i.icon-facebook.is-indigo
|
||||
when 'github': i.icon-github.is-grey
|
||||
when 'slack': i.icon-slack.is-purple
|
||||
when 'ldap': i.icon-arrow-repeat-outline
|
||||
default: i.icon-warning
|
||||
= t('auth:providers.' + user.provider)
|
||||
label.label= t('admin:profile.membersince')
|
||||
p.control= moment(user.createdAt).format('LL')
|
||||
label.label= t('admin:profile.lastprofileupdate')
|
||||
p.control= moment(user.updatedAt).format('LL')
|
||||
|
||||
//-modal-profile-2fa
|
9
server/views/admin/settings.pug
Normal file
9
server/views/admin/settings.pug
Normal file
@@ -0,0 +1,9 @@
|
||||
extends ./_layout.pug
|
||||
|
||||
block adminContent
|
||||
.hero
|
||||
h1.title#title= t('nav.syssettings')
|
||||
h2.subtitle= t('admin:settings.subtitle')
|
||||
i.pageicon.nc-icon-outline.ui-1_settings-gear-63
|
||||
.form-sections
|
||||
section Coming soon
|
15
server/views/admin/stats.pug
Normal file
15
server/views/admin/stats.pug
Normal file
@@ -0,0 +1,15 @@
|
||||
extends ./_layout.pug
|
||||
|
||||
block adminContent
|
||||
.hero
|
||||
h1.title#title= t('nav.stats')
|
||||
h2.subtitle= t('admin:stats.subtitle')
|
||||
i.pageicon.nc-icon-outline.ui-3_chart-bars
|
||||
.form-sections
|
||||
section
|
||||
label.label= t('admin:stats.entries')
|
||||
p.control= totalEntries
|
||||
label.label= t('admin:stats.uploads')
|
||||
p.control= totalUploads
|
||||
label.label= t('admin:stats.users')
|
||||
p.control= totalUsers
|
47
server/views/admin/system.pug
Normal file
47
server/views/admin/system.pug
Normal file
@@ -0,0 +1,47 @@
|
||||
extends ./_layout.pug
|
||||
|
||||
block adminContent
|
||||
.hero
|
||||
h1.title#title= t('nav.sysinfo')
|
||||
h2.subtitle= t('admin:system.subtitle')
|
||||
i.pageicon.nc-icon-outline.objects_planet
|
||||
admin-settings(inline-template)
|
||||
.form-sections
|
||||
section
|
||||
img(src='/images/logo.png', style={width:'200px', float:'right'})
|
||||
label.label= t('admin:system.systemversion')
|
||||
.section-block
|
||||
p #{t('admin:system.currentversion')}: #[strong= sysversion.current]
|
||||
if sysversion.latest
|
||||
p #{t('admin:system.latestversion')}: #[strong= sysversion.latest] #[em (Published #{moment(sysversion.latestPublishedAt).fromNow()})]
|
||||
p
|
||||
if sysversion.current !== sysversion.latest
|
||||
button.button.is-deep-orange(@click='$store.dispatch("modalUpgradeSystem/open", { mode: "upgrade"})')= t('admin:system.upgrade')
|
||||
else
|
||||
button.button.is-disabled= t('admin:system.upgrade')
|
||||
button.button.is-deep-orange.is-outlined(@click='$store.dispatch("modalUpgradeSystem/open", { mode: "reinstall"})')= t('admin:system.reinstall')
|
||||
else
|
||||
p: em= t('admin:system.versioncheckfailed')
|
||||
section
|
||||
label.label= t('admin:system.hostinfo')
|
||||
.section-block
|
||||
p #{t('admin:system.os')}: #[strong= hostInfo.os]
|
||||
p #{t('admin:system.nodeversion')}: #[strong= hostInfo.nodeversion]
|
||||
p #{t('admin:system.hostname')}: #[strong= hostInfo.hostname]
|
||||
p #{t('admin:system.cores')}: #[strong= hostInfo.cpus.length]
|
||||
p #{t('admin:system.totalmem')}: #[strong= hostInfo.totalmem]
|
||||
p #{t('admin:system.cwd')}: #[strong= hostInfo.cwd]
|
||||
section
|
||||
label.label= t('admin:system.administrativetools')
|
||||
.section-block
|
||||
h6 #{t('admin:system.flushcache')}:
|
||||
p.is-small= t('admin:system.flushcachetext')
|
||||
p: button.button.is-teal.is-outlined(v-on:click='flushcache')= t('admin:system.flushcachebtn')
|
||||
h6 #{t('admin:system.resetaccounts')}:
|
||||
p.is-small= t('admin:system.resetaccountstext')
|
||||
p: button.button.is-teal.is-outlined(v-on:click='resetaccounts')= t('admin:system.resetaccountsbtn')
|
||||
h6 #{t('admin:system.flushsessions')}:
|
||||
p.is-small= t('admin:system.flushsessionstext')
|
||||
p: button.button.is-teal.is-outlined(v-on:click='flushsessions')= t('admin:system.flushsessionsbtn')
|
||||
|
||||
modal-upgrade-system
|
32
server/views/admin/theme.pug
Normal file
32
server/views/admin/theme.pug
Normal file
@@ -0,0 +1,32 @@
|
||||
extends ./_layout.pug
|
||||
|
||||
block adminContent
|
||||
.hero
|
||||
h1.title#title= t('nav.theme')
|
||||
h2.subtitle= t('admin:theme.subtitle')
|
||||
i.pageicon.nc-icon-outline.ui-1_drop
|
||||
admin-theme(inline-template, themedata=JSON.stringify(appconfig.theme))
|
||||
.form-sections
|
||||
section
|
||||
label.label= t('admin:theme.primarycolor')
|
||||
color-picker(v-model='primary')
|
||||
span.desc= t('admin:theme.primarycolordesc')
|
||||
section
|
||||
label.label= t('admin:theme.altcolor')
|
||||
color-picker(v-model='alt')
|
||||
span.desc= t('admin:theme.altcolordesc')
|
||||
section
|
||||
label.label= t('admin:theme.footercolor')
|
||||
color-picker(v-model='footer')
|
||||
span.desc= t('admin:theme.footercolordesc')
|
||||
section
|
||||
label.label= t('admin:theme.codeblock.title')
|
||||
toggle(v-model='codedark', desc=t('admin:theme.codeblock.dark'))
|
||||
toggle(v-model='codecolorize', desc=t('admin:theme.codeblock.colorize'))
|
||||
section
|
||||
button.button.is-grey(@click='resetTheme')
|
||||
i.nc-icon-outline.design_paint-37
|
||||
span= t('admin:theme.reset')
|
||||
button.button.is-green(@click='saveTheme')
|
||||
i.nc-icon-outline.ui-1_check
|
||||
span= t('admin:theme.savechanges')
|
122
server/views/admin/users-edit.pug
Normal file
122
server/views/admin/users-edit.pug
Normal file
@@ -0,0 +1,122 @@
|
||||
extends ./_layout.pug
|
||||
|
||||
block rootNavRight
|
||||
loading-spinner
|
||||
.nav-item
|
||||
a.button(href='/admin/users')
|
||||
i.nc-icon-outline.arrows-2_corner-left-round
|
||||
span= t('admin:users.returntousers')
|
||||
|
||||
block adminContent
|
||||
admin-edit-user(inline-template, usrdata=JSON.stringify(usr))
|
||||
div
|
||||
.hero
|
||||
h1.title= t('admin:users.edituser')
|
||||
h2.subtitle= usr.email
|
||||
i.pageicon.nc-icon-outline.users_single-05
|
||||
table.table
|
||||
thead
|
||||
tr
|
||||
th= t('admin:users.uniqueid')
|
||||
th= t('admin:users.provider')
|
||||
th= t('admin:users.createdon')
|
||||
th= t('admin:users.updatedon')
|
||||
tbody
|
||||
tr
|
||||
td.is-centered= usr._id
|
||||
td.is-centered.has-icons
|
||||
case usr.provider
|
||||
when 'local': i.nc-icon-outline.ui-1_database
|
||||
when 'windowslive': i.icon-windows2.is-blue
|
||||
when 'azure': i.icon-windows2.is-blue
|
||||
when 'google': i.icon-google.is-blue
|
||||
when 'facebook': i.icon-facebook.is-indigo
|
||||
when 'github': i.icon-github.is-grey
|
||||
when 'slack': i.icon-slack.is-purple
|
||||
when 'ldap': i.icon-arrow-repeat-outline
|
||||
default: i.icon-warning
|
||||
= t('auth:providers.' + usr.provider)
|
||||
td.is-centered= moment(usr.createdAt).format('lll')
|
||||
td.is-centered= moment(usr.updatedAt).format('lll')
|
||||
.form-sections
|
||||
section
|
||||
label.label= t('admin:profile.email')
|
||||
p.control.is-fullwidth
|
||||
input.input(type='text', placeholder='john.smith@example.com', v-model='email', disabled=!usrOpts.canChangeEmail)
|
||||
section
|
||||
label.label= t('admin:profile.displayname')
|
||||
p.control.is-fullwidth
|
||||
input.input(type='text', placeholder=t('admin:profile.displaynameexample'), v-model='name', disabled=!usrOpts.canChangeName)
|
||||
if usrOpts.canChangePassword
|
||||
section
|
||||
label.label= t('admin:profile.password')
|
||||
p.control.is-fullwidth
|
||||
input.input(type='password', placeholder=t('admin:profile.password'), v-model='password', value='********')
|
||||
section
|
||||
label.label Access Rights
|
||||
table.table
|
||||
thead.is-teal
|
||||
tr
|
||||
th
|
||||
th(style={width: '200px'}) Permission(s)
|
||||
th Path
|
||||
th(style={width: '150px'}) Access
|
||||
th(style={width: '50px'})
|
||||
tbody
|
||||
tr(v-for='(right, idx) in rights', v-cloak)
|
||||
td.is-icon
|
||||
i.nc-icon-outline.ui-2_square-add-08.is-green(v-if='right.deny === false || right.deny === "false"')
|
||||
i.nc-icon-outline.ui-2_square-delete-10.is-red(v-if='right.deny === true || right.deny === "true"')
|
||||
td
|
||||
p.control.is-fullwidth
|
||||
select(v-model='right.role')
|
||||
option(value='write') Read and Write
|
||||
option(value='read') Read Only
|
||||
td
|
||||
.columns
|
||||
.column.is-narrow
|
||||
p.control
|
||||
select(v-model='right.exact')
|
||||
option(value='false') Path starts with:
|
||||
option(value='true') Path match exactly:
|
||||
.column
|
||||
p.control.is-fullwidth
|
||||
input.input(type='text', placeholder='/', v-model='right.path')
|
||||
td
|
||||
p.control.is-fullwidth
|
||||
select(v-model='right.deny')
|
||||
option(value='false') Allow
|
||||
option(value='true') Deny
|
||||
td.is-centered.has-action-icons
|
||||
i.icon-delete.is-red(v-on:click='removeRightsRow(idx)')
|
||||
tr(v-if='rights.length < 1', v-cloak)
|
||||
td.is-icon
|
||||
td.is-centered(colspan='3'): em No additional access rights
|
||||
td.is-centered.has-action-icons
|
||||
.table-actions
|
||||
button.button.is-blue(v-on:click='addRightsRow')
|
||||
i.nc-icon-outline.ui-1_simple-add
|
||||
span Add New Row
|
||||
section
|
||||
label.label Role Override
|
||||
p.control.is-fullwidth
|
||||
select(v-model='roleoverride', disabled=!usrOpts.canChangeRole)
|
||||
option(value='none') None
|
||||
option(value='admin') Global Administrator
|
||||
.columns.is-gapless
|
||||
.column
|
||||
section
|
||||
button.button.is-green(v-on:click='saveUser')
|
||||
i.nc-icon-outline.ui-1_check
|
||||
span Save Changes
|
||||
a.button.button.is-grey.is-outlined(href='/admin/users')
|
||||
i.nc-icon-outline.ui-1_simple-remove
|
||||
span Discard
|
||||
.column.is-narrow
|
||||
section
|
||||
if usrOpts.canBeDeleted
|
||||
button.button.is-red(v-on:click='$store.dispatch("modalDeleteUser/open")')
|
||||
i.nc-icon-outline.ui-1_trash
|
||||
span Delete Account
|
||||
|
||||
modal-delete-user(current-user=usr._id)
|
47
server/views/admin/users.pug
Normal file
47
server/views/admin/users.pug
Normal file
@@ -0,0 +1,47 @@
|
||||
extends ./_layout.pug
|
||||
|
||||
block rootNavRight
|
||||
loading-spinner
|
||||
.nav-item
|
||||
a.button(v-on:click='$store.dispatch("modalCreateUser/open")')
|
||||
i.nc-icon-outline.ui-1_simple-add
|
||||
span= t('admin:users.createauthorize')
|
||||
|
||||
block adminContent
|
||||
.hero
|
||||
h1.title#title= t('nav.users')
|
||||
h2.subtitle= t('admin:users.subtitle')
|
||||
i.pageicon.nc-icon-outline.users_multiple-19
|
||||
table.table
|
||||
thead
|
||||
tr
|
||||
th
|
||||
th= t('admin:users.name')
|
||||
th= t('admin:users.email')
|
||||
th= t('admin:users.provider')
|
||||
th= t('admin:users.createdon')
|
||||
th= t('admin:users.updatedon')
|
||||
tbody
|
||||
each usr in usrs
|
||||
tr
|
||||
td.is-icon
|
||||
i.nc-icon-outline.users_single-05.is-grey
|
||||
td
|
||||
a(href='/admin/users/' + usr._id)= usr.name
|
||||
td= usr.email
|
||||
td.is-centered.has-icons
|
||||
case usr.provider
|
||||
when 'local': i.nc-icon-outline.ui-1_database
|
||||
when 'windowslive': i.icon-windows2.is-blue
|
||||
when 'azure': i.icon-windows2.is-blue
|
||||
when 'google': i.icon-google.is-blue
|
||||
when 'facebook': i.icon-facebook.is-indigo
|
||||
when 'github': i.icon-github.is-grey
|
||||
when 'slack': i.icon-slack.is-purple
|
||||
when 'ldap': i.icon-arrow-repeat-outline
|
||||
default: i.icon-warning
|
||||
= t('auth:providers.' + usr.provider)
|
||||
td.is-centered= moment(usr.createdAt).format('lll')
|
||||
td.is-centered= moment(usr.updatedAt).format('lll')
|
||||
|
||||
modal-create-user
|
Reference in New Issue
Block a user