diff --git a/src/webapp/package-lock.json b/src/webapp/package-lock.json
index 8dfad98..fe4e6ff 100644
--- a/src/webapp/package-lock.json
+++ b/src/webapp/package-lock.json
@@ -9,6 +9,7 @@
"version": "0.1.0",
"dependencies": {
"core-js": "^3.8.3",
+ "pinia": "^2.0.34",
"vue": "^3.2.13",
"vue-router": "^4.0.3"
},
@@ -7120,6 +7121,56 @@
"node": ">=8.6"
}
},
+ "node_modules/pinia": {
+ "version": "2.0.34",
+ "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.0.34.tgz",
+ "integrity": "sha512-cgOoGUiyqX0SSgX8XelK9+Ri4XA2/YyNtgjogwfzIx1g7iZTaZPxm7/bZYMCLU2qHRiHhxG7SuQO0eBacFNc2Q==",
+ "dependencies": {
+ "@vue/devtools-api": "^6.5.0",
+ "vue-demi": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/posva"
+ },
+ "peerDependencies": {
+ "@vue/composition-api": "^1.4.0",
+ "typescript": ">=4.4.4",
+ "vue": "^2.6.14 || ^3.2.0"
+ },
+ "peerDependenciesMeta": {
+ "@vue/composition-api": {
+ "optional": true
+ },
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/pinia/node_modules/vue-demi": {
+ "version": "0.13.11",
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.11.tgz",
+ "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==",
+ "hasInstallScript": true,
+ "bin": {
+ "vue-demi-fix": "bin/vue-demi-fix.js",
+ "vue-demi-switch": "bin/vue-demi-switch.js"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ },
+ "peerDependencies": {
+ "@vue/composition-api": "^1.0.0-rc.1",
+ "vue": "^3.0.0-0 || ^2.6.0"
+ },
+ "peerDependenciesMeta": {
+ "@vue/composition-api": {
+ "optional": true
+ }
+ }
+ },
"node_modules/pkg-dir": {
"version": "4.2.0",
"resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-4.2.0.tgz",
@@ -11575,7 +11626,8 @@
"version": "5.0.8",
"resolved": "https://registry.npmmirror.com/@vue/cli-plugin-vuex/-/cli-plugin-vuex-5.0.8.tgz",
"integrity": "sha512-HSYWPqrunRE5ZZs8kVwiY6oWcn95qf/OQabwLfprhdpFWAGtLStShjsGED2aDpSSeGAskQETrtR/5h7VqgIlBA==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"@vue/cli-service": {
"version": "5.0.8",
@@ -12101,7 +12153,8 @@
"version": "1.8.0",
"resolved": "https://registry.npmmirror.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz",
"integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"acorn-walk": {
"version": "8.2.0",
@@ -12160,7 +12213,8 @@
"version": "3.5.2",
"resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"ansi-escapes": {
"version": "3.2.0",
@@ -12930,7 +12984,8 @@
"version": "6.4.0",
"resolved": "https://registry.npmmirror.com/css-declaration-sorter/-/css-declaration-sorter-6.4.0.tgz",
"integrity": "sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"css-loader": {
"version": "6.7.3",
@@ -13116,7 +13171,8 @@
"version": "3.1.0",
"resolved": "https://registry.npmmirror.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz",
"integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"csso": {
"version": "4.2.0",
@@ -14132,7 +14188,8 @@
"version": "5.1.0",
"resolved": "https://registry.npmmirror.com/icss-utils/-/icss-utils-5.1.0.tgz",
"integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"ieee754": {
"version": "1.2.1",
@@ -15357,6 +15414,23 @@
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true
},
+ "pinia": {
+ "version": "2.0.34",
+ "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.0.34.tgz",
+ "integrity": "sha512-cgOoGUiyqX0SSgX8XelK9+Ri4XA2/YyNtgjogwfzIx1g7iZTaZPxm7/bZYMCLU2qHRiHhxG7SuQO0eBacFNc2Q==",
+ "requires": {
+ "@vue/devtools-api": "^6.5.0",
+ "vue-demi": "*"
+ },
+ "dependencies": {
+ "vue-demi": {
+ "version": "0.13.11",
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.11.tgz",
+ "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==",
+ "requires": {}
+ }
+ }
+ },
"pkg-dir": {
"version": "4.2.0",
"resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-4.2.0.tgz",
@@ -15434,25 +15508,29 @@
"version": "5.1.2",
"resolved": "https://registry.npmmirror.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz",
"integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"postcss-discard-duplicates": {
"version": "5.1.0",
"resolved": "https://registry.npmmirror.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz",
"integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"postcss-discard-empty": {
"version": "5.1.1",
"resolved": "https://registry.npmmirror.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz",
"integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"postcss-discard-overridden": {
"version": "5.1.0",
"resolved": "https://registry.npmmirror.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz",
"integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"postcss-loader": {
"version": "6.2.1",
@@ -15557,7 +15635,8 @@
"version": "3.0.0",
"resolved": "https://registry.npmmirror.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz",
"integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"postcss-modules-local-by-default": {
"version": "4.0.0",
@@ -15592,7 +15671,8 @@
"version": "5.1.0",
"resolved": "https://registry.npmmirror.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz",
"integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"postcss-normalize-display-values": {
"version": "5.1.0",
@@ -17217,7 +17297,8 @@
"version": "8.13.0",
"resolved": "https://registry.npmmirror.com/ws/-/ws-8.13.0.tgz",
"integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==",
- "dev": true
+ "dev": true,
+ "requires": {}
}
}
},
@@ -17338,7 +17419,8 @@
"version": "7.5.9",
"resolved": "https://registry.npmmirror.com/ws/-/ws-7.5.9.tgz",
"integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"y18n": {
"version": "5.0.8",
diff --git a/src/webapp/package.json b/src/webapp/package.json
index 0838206..eee77fa 100644
--- a/src/webapp/package.json
+++ b/src/webapp/package.json
@@ -8,6 +8,7 @@
},
"dependencies": {
"core-js": "^3.8.3",
+ "pinia": "^2.0.34",
"vue": "^3.2.13",
"vue-router": "^4.0.3"
},
diff --git a/src/webapp/src/main.js b/src/webapp/src/main.js
index 3a8deba..a00d261 100644
--- a/src/webapp/src/main.js
+++ b/src/webapp/src/main.js
@@ -1,5 +1,29 @@
import { createApp } from 'vue';
import App from './App.vue';
import router from './router';
+import { createPinia } from 'pinia';
+import { useUserStore } from '@/stores/userStore';
-createApp( App ).use( router ).mount('#app');
+let app = createApp( App );
+
+app.use( createPinia() );
+
+let userStore = useUserStore();
+
+let prod = false;
+
+if ( prod ) {
+ fetch( '/api/getAuth' ).then( res => {
+ res.json().then( data => {
+ userStore.setUserAuth( data.user );
+ userStore.setAdminAuth( data.admin );
+
+ app.use( router );
+ app.mount( '#app' );
+ } );
+ } );
+} else {
+ userStore.setUserAuth( true );
+ app.use( router );
+ app.mount( '#app' );
+}
diff --git a/src/webapp/src/router/index.js b/src/webapp/src/router/index.js
index 0d56f5e..85005e3 100644
--- a/src/webapp/src/router/index.js
+++ b/src/webapp/src/router/index.js
@@ -1,5 +1,6 @@
import { createRouter, createWebHistory } from 'vue-router'
import HomeView from '../views/HomeView.vue'
+import { useUserStore } from '@/stores/userStore';
/*
This is the Vue.js router file. Here, all valid routes are defined.
@@ -42,7 +43,8 @@ const routes = [
name: 'admin',
component: () => import( '../views/admin/AdminView.vue' ),
meta: {
- title: 'Admin - myevent'
+ title: 'Admin - myevent',
+ adminAuthRequired: true,
},
children: [
{
@@ -50,7 +52,8 @@ const routes = [
name: 'adminMain',
component: () => import( '../views/admin/HomeView.vue' ),
meta: {
- title: 'Home :: Admin - myevent'
+ title: 'Home :: Admin - myevent',
+ adminAuthRequired: true,
}
},
{
@@ -58,7 +61,8 @@ const routes = [
name: 'adminAccounts',
component: () => import( '../views/AdminLoginView.vue' ),
meta: {
- title: 'Accounts :: Admin - myevent'
+ title: 'Accounts :: Admin - myevent',
+ adminAuthRequired: true,
}
},
{
@@ -66,7 +70,8 @@ const routes = [
name: 'adminPages',
component: () => import( '../views/AdminLoginView.vue' ),
meta: {
- title: 'Pages :: Admin - myevent'
+ title: 'Pages :: Admin - myevent',
+ adminAuthRequired: true,
}
},
{
@@ -74,7 +79,8 @@ const routes = [
name: 'adminEvents',
component: () => import( '../views/AdminLoginView.vue' ),
meta: {
- title: 'Events :: Admin - myevent'
+ title: 'Events :: Admin - myevent',
+ adminAuthRequired: true,
}
},
{
@@ -82,7 +88,8 @@ const routes = [
name: 'adminPlugins',
component: () => import( '../views/AdminLoginView.vue' ),
meta: {
- title: 'Plugins :: Admin - myevent'
+ title: 'Plugins :: Admin - myevent',
+ adminAuthRequired: true,
}
},
{
@@ -90,7 +97,8 @@ const routes = [
name: 'adminSettings',
component: () => import( '../views/AdminLoginView.vue' ),
meta: {
- title: 'Admin - myevent'
+ title: 'Admin - myevent',
+ adminAuthRequired: true,
}
},
]
@@ -126,9 +134,18 @@ const routes = [
name: 'purchase',
component: () => import( '@/views/PurchaseView.vue' ),
meta: {
- title: 'Purchase - myevent',
+ title: 'Pay - myevent',
transition: 'scale'
}
+ },
+ {
+ path: '/pay',
+ name: 'pay',
+ component: () => import( '@/views/PaymentView.vue' ),
+ meta: {
+ title: 'Pay - myevent',
+ transition: 'scale',
+ }
}
]
@@ -147,16 +164,24 @@ router.afterEach( ( to, from ) => {
*/
let AdminPages = [ 'admin', 'adminMain' ];
-let isAdminAuthenticated = true;
let UserAccountPages = [ 'account' ];
-let isUserAuthenticated = true;
+
+let authRequired = false;
router.beforeEach( ( to, from ) => {
- if ( AdminPages.includes( to.name ) && !isAdminAuthenticated ) {
+ let userStore = useUserStore();
+ let isUserAuthenticated = userStore.getUserAuthenticated;
+ let isAdminAuthenticated = userStore.getAdminAuthenticated;
+
+ if ( to.meta.adminAuthRequired && !isAdminAuthenticated ) {
return { name: 'adminLogin' };
} else if ( UserAccountPages.includes( to.name ) && !isUserAuthenticated ) {
return { name: 'login' };
+ } else if ( !isUserAuthenticated && to.name === 'purchase' && authRequired ) {
+ return { name: 'login' };
+ } else if ( !isUserAuthenticated && to.name === 'pay' ) {
+ return { name: 'purchase' };
}
} );
diff --git a/src/webapp/src/stores/userStore.js b/src/webapp/src/stores/userStore.js
new file mode 100644
index 0000000..aa18158
--- /dev/null
+++ b/src/webapp/src/stores/userStore.js
@@ -0,0 +1,17 @@
+import { defineStore } from "pinia";
+
+export const useUserStore = defineStore ( 'user', {
+ state: () => ( { 'isUserAuth': false, 'isAdminAuth': false } ),
+ getters: {
+ getUserAuthenticated: ( state ) => state.isUserAuth,
+ getAdminAuthenticated: ( state ) => state.isAdminAuth,
+ },
+ actions: {
+ setUserAuth ( auth ) {
+ this.isUserAuth = auth;
+ },
+ setAdminAuth ( auth ) {
+ this.isAdminAuth = auth;
+ }
+ }
+} );
\ No newline at end of file
diff --git a/src/webapp/src/views/CartView.vue b/src/webapp/src/views/CartView.vue
index f3e47f3..25f0caa 100644
--- a/src/webapp/src/views/CartView.vue
+++ b/src/webapp/src/views/CartView.vue
@@ -14,17 +14,22 @@
diff --git a/src/webapp/src/views/PurchaseView.vue b/src/webapp/src/views/PurchaseView.vue
index 4b48395..97c9cd8 100644
--- a/src/webapp/src/views/PurchaseView.vue
+++ b/src/webapp/src/views/PurchaseView.vue
@@ -1,12 +1,21 @@
-
+
Purchase
-
Please choose a payment option
+
Personal information
+
+
+
+