diff --git a/admin/src/main.js b/admin/src/main.js index aa4cc3e03..529f78605 100644 --- a/admin/src/main.js +++ b/admin/src/main.js @@ -25,7 +25,6 @@ import moment from 'vue-moment' const httpLink = new HttpLink({ uri: CONFIG.GRAPHQL_URI }) const authLink = new ApolloLink((operation, forward) => { - const token = store.state.token operation.setContext({ diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index 1fd441935..3f53d5538 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -224,6 +224,39 @@ export class UserResolver { } */ + @Authorized() + @Query(() => User) + @UseMiddleware(klicktippNewsletterStateMiddleware) + async verifyLogin(@Ctx() context: any): Promise { + // TODO refactor and do not have duplicate code with login(see below) + const userRepository = getCustomRepository(UserRepository) + const userEntity = await userRepository.findByPubkeyHex(context.pubKey) + const loginUserRepository = getCustomRepository(LoginUserRepository) + const loginUser = await loginUserRepository.findByEmail(userEntity.email) + const user = new User() + user.email = userEntity.email + user.firstName = userEntity.firstName + user.lastName = userEntity.lastName + user.username = userEntity.username + user.description = loginUser.description + user.pubkey = userEntity.pubkey.toString('hex') + user.language = loginUser.language + + // Elopage Status & Stored PublisherId + user.hasElopage = await this.hasElopage(context) + + // coinAnimation + const userSettingRepository = getCustomRepository(UserSettingRepository) + const coinanimation = await userSettingRepository + .readBoolean(userEntity.id, Setting.COIN_ANIMATION) + .catch((error) => { + throw new Error(error) + }) + user.coinanimation = coinanimation + user.isAdmin = true // TODO implement + return user + } + @Query(() => User) @UseMiddleware(klicktippNewsletterStateMiddleware) async login( @@ -295,7 +328,7 @@ export class UserResolver { throw new Error(error) }) user.coinanimation = coinanimation - user.isAdmin = true // TODO implement + user.isAdmin = true // TODO implement context.setHeaders.push({ key: 'token', diff --git a/frontend/src/graphql/queries.js b/frontend/src/graphql/queries.js index 9cd364ed7..8b55f4098 100644 --- a/frontend/src/graphql/queries.js +++ b/frontend/src/graphql/queries.js @@ -20,6 +20,26 @@ export const login = gql` } ` +export const verifyLogin = gql` + query { + verifyLogin { + email + username + firstName + lastName + language + description + coinanimation + klickTipp { + newsletterState + } + hasElopage + publisherId + isAdmin + } + } +` + export const logout = gql` query { logout diff --git a/frontend/src/main.js b/frontend/src/main.js index fd06bf9c0..1aa945608 100755 --- a/frontend/src/main.js +++ b/frontend/src/main.js @@ -51,7 +51,7 @@ Vue.config.productionTip = false loadAllRules(i18n) -addNavigationGuards(router, store) +addNavigationGuards(router, store, apolloProvider.defaultClient) /* eslint-disable no-new */ new Vue({ diff --git a/frontend/src/routes/guards.js b/frontend/src/routes/guards.js index 005ed720f..dc8df4f13 100644 --- a/frontend/src/routes/guards.js +++ b/frontend/src/routes/guards.js @@ -1,4 +1,6 @@ -const addNavigationGuards = (router, store) => { +import { verifyLogin } from '../graphql/queries' + +const addNavigationGuards = (router, store, apollo) => { // handle publisherId router.beforeEach((to, from, next) => { const publisherId = to.query.pid @@ -10,10 +12,15 @@ const addNavigationGuards = (router, store) => { }) // store token on authenticate - router.beforeEach((to, from, next) => { + router.beforeEach(async (to, from, next) => { if (to.path === '/authenticate' && to.query.token) { // TODO verify user in order to get user data store.commit('token', to.query.token) + const result = await apollo.query({ + query: verifyLogin, + fetchPolicy: 'network-only', + }) + store.dispatch('login', result.data.verifyLogin) next({ path: '/overview' }) } else { next()