diff --git a/package-lock.json b/package-lock.json index 397cd62b97aab5d3cff0e92fffb4576a9a040822..548b5ab25a66f107e3a4397df95d3523f888d942 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11202,6 +11202,11 @@ } } }, + "vue-crontab": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vue-crontab/-/vue-crontab-0.0.4.tgz", + "integrity": "sha512-p9hPSLW145ubMSqLbkFTOlAgkjLHQlyipaFO14aSZgnzpar+p3RpQ0g/E/ZjImnzuvVz8Niykopy5+NfKk1LFQ==" + }, "vue-eslint-parser": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.1.0.tgz", diff --git a/package.json b/package.json index 901deca1328d23d51868b045cb54d1cc693075ba..0f1a024dbaff968fc930b7ce72e2cd85c4a42345 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "vee-validate": "^2.2.15", "vue": "^2.6.11", "vue-axios-cors": "^1.0.1", + "vue-crontab": "0.0.4", "vue-router": "^3.4.3", "vuex": "^3.5.1", "vuex-persistedstate": "^3.1.0" diff --git a/src/components/Home.vue b/src/components/Home.vue index a066f001709c11027db71c9613491095bcde65e8..596fc2fdcd9c38081354767485a283b557fde889 100644 --- a/src/components/Home.vue +++ b/src/components/Home.vue @@ -13,15 +13,50 @@ export default { components: { Courses }, + + created() { + //setInterval(() => this.isExpired(), 1000); + //this.isExpired(); + }, + methods:{ + isExpired(){ + var d = new Date(); + var n = d.valueOf(); + const user = JSON.parse(localStorage.getItem('user')); + + if (n > user.expiresIn){ + this.$router.push('/login'); + this.$parent.logout(); + } +/* + this.$store.dispatch('auth/isExpired', user).then( + (data) => { + //console.log("1:"+ data); + //console.log("2: "+this.$store.state.auth.status.isExpired); + /* + if (data === 0){ + this.$router.push('/login'); + } else { + + } + }, + error => { + console.log("error:\n"); + console.log(error); + } + ); +*/ + }, + logOut: function() { this.$store.dispatch('auth/logout'); this.$router.push('/login'); } + } - } } </script> diff --git a/src/components/LogIn.vue b/src/components/LogIn.vue index 4a1f3b8340ea9b9f6ad2fec982ffcb4c33ab4ca5..d1cbb97cd1ace8c4ce98ee7b808adc2e8f90696d 100644 --- a/src/components/LogIn.vue +++ b/src/components/LogIn.vue @@ -72,10 +72,7 @@ export default { reg: /^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$/, password: "", passwordFieldType: 'password', - passwordToggleStyle: "password_toggle_img", - - loading: false, - message: '' + passwordToggleStyle: "password_toggle_img" } }, @@ -97,10 +94,8 @@ export default { validate(){ if (this.reg.test(this.username)) { - console.log("login") this.login() } else { - console.log("wrong") this.wrongEmail() } }, @@ -112,7 +107,6 @@ export default { login() { this.$validator.validateAll().then(isValid => { if (!isValid) { - this.loading = false; return; } @@ -121,13 +115,6 @@ export default { () => { this.$router.push('/home'); this.$parent.update(); - }, - error => { - this.loading = false; - this.message = - (error.response && error.response.data) || - error.message || - error.toString(); } ); } diff --git a/src/components/SideMenu.vue b/src/components/SideMenu.vue index 08f43f75f7fda6a8b04359079b40b86507d786ed..3e2d2b21fd7f0e3a2c9bdc7298aff07962a17562 100644 --- a/src/components/SideMenu.vue +++ b/src/components/SideMenu.vue @@ -37,9 +37,15 @@ export default { methods: { logOut: function() { - this.$store.dispatch('auth/logout'); - this.$router.push('/login'); - this.$parent.update(); + this.$store.dispatch('auth/logout').then( + () => { + this.$router.push('/login'); + this.$parent.update(); + }, + error => { + this.message = (error.response && error.response.data) || error.message || error.toString(); + } + ); } } } diff --git a/src/components/Teachers.vue b/src/components/Teachers.vue index a149235e7cd7134cb8554efbcedca4d7c66362dd..2a325c6f2c0cccf22dd16999370151f9675a3ace 100644 --- a/src/components/Teachers.vue +++ b/src/components/Teachers.vue @@ -1,12 +1,34 @@ <template> <div class="content col-md-12"> - Teachers + <h1>{{data}}</h1> </div> </template> <script> export default { - name: "Teachers" + name: "Teachers", + data(){ + return{ + data: "Hello World" + } + }, + + created() { + this.get(); + }, + + methods:{ + get(){ + this.$store.dispatch('user/getHello').then( + () => { + this.data = this.$store.state.user.response; + }, + error => { + this.message = (error.response && error.response.data) || error.message || error.toString(); + } + ); + } + } } </script> diff --git a/src/services/auth-header.js b/src/services/auth-header.js index 8641414928ebcf315ad9aefbfff2c0d525cb0c98..1d15951b4ad3d7f8472bbb84faab4fdc426ae005 100644 --- a/src/services/auth-header.js +++ b/src/services/auth-header.js @@ -1,9 +1,10 @@ export default function authHeader() { let user = JSON.parse(localStorage.getItem('user')); - if (user && user.accessToken) { - return { Authorization: 'Bearer ' + user.accessToken }; + if (user && user.idToken) { + return { Authorization: 'Bearer ' + user.idToken }; } else { - return {}; + console.log("Header fialure"); + return {} } } \ No newline at end of file diff --git a/src/services/auth.service.js b/src/services/auth.service.js index 3112058e3df7d47b68eda0309010544c8ba9ea34..a67d93d73415612ba8b62569bfcaa8dfdac3cdfe 100644 --- a/src/services/auth.service.js +++ b/src/services/auth.service.js @@ -12,9 +12,9 @@ class AuthService { password: user.password }) .then(response => { - if (response.data.idToken) { localStorage.setItem('user', JSON.stringify(response.data)); + localStorage.setItem('cronJob', 0); } return response.data; @@ -32,6 +32,12 @@ class AuthService { password: user.password },{ headers: authHeader() }); } + + isExpired(user) { + return axios.post(API_URL + 'isExpired', { + expiresIn: user.expiresIn + }); + } } export default new AuthService(); diff --git a/src/services/user.service.js b/src/services/user.service.js index 3c4a17dcb8d1edc4b18b84aa2aa514bb3a548a1f..34ffbd9ea1340bcd92f3ad68f7d740bc1b9a9499 100644 --- a/src/services/user.service.js +++ b/src/services/user.service.js @@ -1,25 +1,18 @@ import axios from 'axios'; -import authHeader from './auth-header'; +import authHeader from "@/services/auth-header"; const API_URL = 'http://localhost:9192/'; class UserService { - getPublicContent() { - return axios.get(API_URL + 'hello'); - } - - getUserBoard() { - return axios.get(API_URL + 'user', { headers: authHeader() }); - } - - getModeratorBoard() { - return axios.get(API_URL + 'mod', { headers: authHeader() }); - } - - getAdminBoard() { - return "Hello"; //axios.get(API_URL + 'admin', { headers: authHeader() }); + getContent() { + return axios + .get(API_URL + 'hello', {headers: authHeader() }) + .then(response => { + return response.data; + }); } } + export default new UserService(); \ No newline at end of file diff --git a/src/store/auth.module.js b/src/store/auth.module.js index 6ba7445ceb3db943c5ccf8c0ddbdb8ff81e090bd..620a483e339b09d7a3116a3e00b656640b272727 100644 --- a/src/store/auth.module.js +++ b/src/store/auth.module.js @@ -2,9 +2,18 @@ import AuthService from '../services/auth.service'; import User from "@/models/user"; const user = JSON.parse(localStorage.getItem('user')); -const initialState = user - ? { status: { loggedIn: true }, user } - : { status: { loggedIn: false }, user: new User("", "", "") }; +const initialState = + user ? { + status: { + loggedIn: true + }, + user + } : { + status: { + loggedIn: false + }, + user: new User("", "", "") + }; export const auth = { namespaced: true, @@ -40,6 +49,19 @@ export const auth = { return Promise.reject(error); } ); + }, + + isExpired({ commit }, user) { + return AuthService.isExpired(user).then( + response => { + commit('isExpiredSuccess', response); + return Promise.resolve(response); + }, + error => { + commit('isExpiredFailure'); + return Promise.reject(error); + } + ); } }, @@ -61,6 +83,13 @@ export const auth = { }, registerFailure(state) { state.status.loggedIn = false; + }, + isExpiredSuccess(state, isExpired) { + state.status.isExpired = isExpired; + }, + isExpiredFailure(state, isExpired) { + console.log("error state") + state.status.isExpired = isExpired; } } }; \ No newline at end of file diff --git a/src/store/index.js b/src/store/index.js index adbb163c9f3a9bb1bbe78b75865aae324564d89e..1ee6edf3338487f53338a847e9ea9471cb71d867 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -2,11 +2,13 @@ import Vue from 'vue'; import Vuex from 'vuex'; import { auth } from './auth.module'; +import { user } from './user.module'; Vue.use(Vuex); export default new Vuex.Store({ modules: { - auth + auth, + user } }); \ No newline at end of file diff --git a/src/store/user.module.js b/src/store/user.module.js new file mode 100644 index 0000000000000000000000000000000000000000..a1287ea30086cd0a17bc10f19019b367f52c3533 --- /dev/null +++ b/src/store/user.module.js @@ -0,0 +1,29 @@ +import UserService from '../services/user.service'; + +const initialState = null; + +export const user = { + namespaced: true, + state: initialState, + actions: { + + getHello({ commit }) { + return UserService.getContent().then( + response => { + commit('getSuccess', response); + return Promise.resolve(response); + }, + error => { + commit('loginFailure'); + return Promise.reject(error); + } + ); + } + }, + + mutations: { + getSuccess(state, response) { + state.response = response; + } + } +}; \ No newline at end of file