diff --git a/src/server/admin/routes.js b/src/server/admin/routes.js index 35556bd..245b255 100644 --- a/src/server/admin/routes.js +++ b/src/server/admin/routes.js @@ -20,7 +20,7 @@ module.exports = ( app, settings ) => { if ( settings.twoFA ) { response.send( '2fa' ); } else { - request.session.loggedIn = true; + request.session.loggedInAdmin = true; response.send( 'ok' ); } } else { @@ -28,13 +28,18 @@ module.exports = ( app, settings ) => { } } ); } ); + + app.get( '/test/login', ( request, response ) => { + request.session.loggedInAdmin = true; + response.send( 'Logged in' ); + } ); app.get( '/admin/logout', ( request, response ) => { - request.session.loggedIn = false; + request.session.loggedInAdmin = false; response.send( 'logged out' ); } ); - app.get( '/admin/getLoginStatus', ( request, response ) => { - response.send( request.session.loggedIn ); + app.get( '/api/getAuth', ( request, response ) => { + response.send( { 'admin': request.session.loggedInAdmin ? true : false, 'user': request.session.loggedInUser ? true : false } ); } ); }; \ No newline at end of file diff --git a/src/webapp/src/App.vue b/src/webapp/src/App.vue index fa7e203..d217c11 100644 --- a/src/webapp/src/App.vue +++ b/src/webapp/src/App.vue @@ -3,7 +3,8 @@ Home | Tickets | Cart | - Account + Account | + @@ -23,6 +24,7 @@ --accent-background-hover: #4380a8; --overlay-color: rgba(37, 37, 37, 0.575); --inactive-color: rgb(100, 100, 100); + --highlight-backdrop: rgb(143, 134, 192); } :root.dark { @@ -31,9 +33,10 @@ --secondary-color: black; --background-color: rgb(32, 32, 32); --accent-color: #42b983; - --hover-color: rgb(165, 165, 165); + --hover-color: rgb(83, 83, 83); --accent-background-hover: #4380a8; --inactive-color: rgb(190, 190, 190); + --highlight-backdrop: rgb(85, 63, 207); } @media ( prefers-color-scheme: dark ) { @@ -43,22 +46,38 @@ --secondary-color: black; --background-color: rgb(32, 32, 32); --accent-color: #42b983; - --hover-color: rgb(165, 165, 165); + --hover-color: rgb(83, 83, 83); --accent-background-hover: #4380a8; --inactive-color: rgb(190, 190, 190); + --highlight-backdrop: rgb(85, 63, 207); } } +::selection { + background-color: var( --highlight-backdrop ); +} + +#themeSelector { + background-color: rgba( 0, 0, 0, 0 ); + color: var( --primary-color ); + font-size: 130%; + padding: 0; + margin: 0; + border: none; + cursor: pointer; +} + html, body { width: 100%; height: 100%; margin: 0; padding: 0; - background-color: var( --background-color ); } #app { + transition: 0.5s; + background-color: var( --background-color ); font-family: Avenir, Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; @@ -111,3 +130,39 @@ nav a.router-link-exact-active { 'opsz' 48 } + + diff --git a/src/webapp/src/components/initial.vue b/src/webapp/src/components/initial.vue index a0bcfad..e5f731f 100644 --- a/src/webapp/src/components/initial.vue +++ b/src/webapp/src/components/initial.vue @@ -3,7 +3,7 @@ Vue logo

Welcome to myevent!

-

Let's start the setup by entering the setup key below! You may define a setup key in the config file of myevent. See here for more instructions

+

Let's start the setup by entering the setup key below! You may define a setup key in the config file of myevent. See here for more instructions


diff --git a/src/webapp/src/router/index.js b/src/webapp/src/router/index.js index 901f5ea..3f4d695 100644 --- a/src/webapp/src/router/index.js +++ b/src/webapp/src/router/index.js @@ -22,16 +22,6 @@ const router = createRouter( { router.afterEach( ( to, from ) => { document.title = to.meta.title ? to.meta.title : 'myevent'; } ); - -let doSetup = true; - -if ( doSetup ) { - import( '@/router/setupRoutes' ).then( data => { - router.addRoute( data.default ); - router.replace( window.location.pathname ); - } ); -} - let UserAccountPages = [ 'account' ]; let authRequired = false; @@ -58,4 +48,16 @@ router.beforeEach( ( to, from ) => { } } ); +let doSetup = true; + +if ( doSetup ) { + import( '@/router/setupRoutes' ).then( data => { + router.addRoute( data.default ); + setTimeout( function () { + router.replace( window.location.pathname ); + }, 300 ); + } ); +} + + export default router; diff --git a/src/webapp/src/stores/userStore.js b/src/webapp/src/stores/userStore.js index 9566a1b..16d1d2d 100644 --- a/src/webapp/src/stores/userStore.js +++ b/src/webapp/src/stores/userStore.js @@ -1,7 +1,7 @@ import { defineStore } from "pinia"; export const useUserStore = defineStore ( 'user', { - state: () => ( { 'isUserAuth': false, 'isAdminAuth': true, 'userPermissions': {} } ), + state: () => ( { 'isUserAuth': true, 'isAdminAuth': true, 'userPermissions': {} } ), getters: { getUserAuthenticated: ( state ) => state.isUserAuth, getAdminAuthenticated: ( state ) => state.isAdminAuth, diff --git a/src/webapp/src/views/CartView.vue b/src/webapp/src/views/CartView.vue index f20ff23..ee8a5b8 100644 --- a/src/webapp/src/views/CartView.vue +++ b/src/webapp/src/views/CartView.vue @@ -40,40 +40,6 @@ text-align: justify; } - .ticket { - display: flex; - align-items: center; - justify-content: center; - text-decoration: none; - color: var( --primary-color ); - border-color: var( --primary-color ); - border-width: 1px; - height: fit-content; - border-style: solid; - padding: 10px; - transition: 0.4s; - } - - .ticket:hover { - background-color: var( --hover-color ); - transition: 0.4s; - } - - .ticket-logo { - height: 20vh; - width: auto; - margin-left: auto; - } - - .ticket-name { - margin-right: auto; - } - - .ticket-info { - margin-left: auto; - margin-right: auto - } - .tool-wrapper { display: flex; width: 100%; diff --git a/src/webapp/src/views/GuestPurchaseView.vue b/src/webapp/src/views/GuestPurchaseView.vue new file mode 100644 index 0000000..e69de29 diff --git a/src/webapp/src/views/PurchaseView.vue b/src/webapp/src/views/PurchaseView.vue index 5755d96..9772914 100644 --- a/src/webapp/src/views/PurchaseView.vue +++ b/src/webapp/src/views/PurchaseView.vue @@ -1,66 +1,95 @@ @@ -69,10 +98,30 @@ export default { name: 'PurchaseView', data () { return { - settings: { 'accountRequired':true }, - isAuthenticated: false, - formData: {} + settings: { 'accountRequired': true }, + isAuthenticated: true, + tickets: {}, + backend: {}, + cartNotEmpty: false, } + }, + methods: { + loadData () { + this.cartNotEmpty = false; + let tickets = JSON.parse( sessionStorage.getItem( 'cart' ) ); + + for ( let event in tickets ) { + if ( Object.keys( tickets[ event ][ 'selectedSeats' ] ).length ) { + this.cartNotEmpty = true; + }; + } + + this.tickets = tickets; + this.backend = JSON.parse( sessionStorage.getItem( 'backend' ) ); + }, + }, + created () { + this.loadData(); } }; diff --git a/src/webapp/src/views/admin/AdminView.vue b/src/webapp/src/views/admin/AdminView.vue index af5b736..d1a8b51 100644 --- a/src/webapp/src/views/admin/AdminView.vue +++ b/src/webapp/src/views/admin/AdminView.vue @@ -10,7 +10,7 @@ Events Plugins Settings - Logout +
@@ -69,9 +69,14 @@ padding: 4% 0%; width: 100%; background-color: rgba( 0, 0, 0, 0 ); - color: white; + color: var( --secondary-color ); + cursor: pointer; + font-family: Avenir, Helvetica, Arial, sans-serif; + font-weight: bold; text-decoration: none; transition: 1s; + font-size: 100%; + border-style: none; } nav a.router-link-exact-active { @@ -106,7 +111,12 @@ }, methods: { logout () { - this.userStore.setAdminAuth( false ); + if ( confirm( 'Do you really want to log out?' ) ) { + fetch( '/admin/logout' ).then( _ => { + this.userStore.setAdminAuth( false ); + this.$router.push( '/admin/login' ); + } ); + } } } };