From bf784616af9622d6d2bd2ce33a67272cc964f294 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Thu, 2 May 2024 16:05:15 +0200 Subject: [PATCH] update frontend logic for humhub link --- backend/src/apis/humhub/HumHubClient.ts | 22 +++++++++++++++++--- backend/src/apis/humhub/model/Account.ts | 1 + backend/src/graphql/resolver/UserResolver.ts | 6 +++++- frontend/src/pages/Circles.vue | 11 +++++----- 4 files changed, 30 insertions(+), 10 deletions(-) diff --git a/backend/src/apis/humhub/HumHubClient.ts b/backend/src/apis/humhub/HumHubClient.ts index 596d74597..a78a0915e 100644 --- a/backend/src/apis/humhub/HumHubClient.ts +++ b/backend/src/apis/humhub/HumHubClient.ts @@ -1,3 +1,4 @@ +import { User } from '@entity/User' import { SignJWT } from 'jose' import { IRequestOptions, RestClient } from 'typed-rest-client' @@ -8,7 +9,6 @@ import { backendLogger as logger } from '@/server/logger' import { GetUser } from './model/GetUser' import { PostUser } from './model/PostUser' import { UsersResponse } from './model/UsersResponse' -import { User } from '@entity/User' /** * HumHubClient as singleton class @@ -59,7 +59,7 @@ export class HumHubClient { return token } - public static async createAutoLoginUrl(user: User) { + public async createAutoLoginUrl(user: User) { const secret = new TextEncoder().encode(CONFIG.HUMHUB_JWT_KEY) const username = user.alias ?? user.gradidoID logger.info(`user ${username} as username for humhub auto-login`) @@ -68,7 +68,8 @@ export class HumHubClient { .setIssuedAt() .setExpirationTime('2m') .sign(secret) - return `${CONFIG.HUMHUB_API_URL}user/auth/login?jwt=${token}` + + return `${CONFIG.HUMHUB_API_URL}user/auth/external?authclient=jwt&jwt=${token}` } /** @@ -103,6 +104,21 @@ export class HumHubClient { return response.result } + /** + * get user by username + * https://marketplace.humhub.com/module/rest/docs/html/user.html#tag/User/paths/~1user~1get-by-username/get + * @param username for user search + * @returns user object if found + */ + public async userByUsername(username: string): Promise { + const options = await this.createRequestOptions({ username }) + const response = await this.restClient.get('/api/v1/user/get-by-username', options) + if (response.statusCode === 404) { + return null + } + return response.result + } + /** * create user * https://marketplace.humhub.com/module/rest/docs/html/user.html#tag/User/paths/~1user/post diff --git a/backend/src/apis/humhub/model/Account.ts b/backend/src/apis/humhub/model/Account.ts index 0926af2c2..1133ababb 100644 --- a/backend/src/apis/humhub/model/Account.ts +++ b/backend/src/apis/humhub/model/Account.ts @@ -1,3 +1,4 @@ +/* eslint-disable camelcase */ import { User } from '@entity/User' import { convertGradidoLanguageToHumhub } from '@/apis/humhub/convertLanguage' diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index 2c18876a1..69cd741dc 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -709,7 +709,11 @@ export class UserResolver { async authenticateCirclesAutoLogin(@Ctx() context: Context): Promise { logger.info(`authenticateCirclesAutoLogin()...`) const dbUser = getUser(context) - return await HumHubClient.createAutoLoginUrl(dbUser) + const humhubClient = HumHubClient.getInstance() + if (!humhubClient) { + throw new LogError('cannot create humhub client') + } + return await humhubClient.createAutoLoginUrl(dbUser) } @Authorized([RIGHTS.SEARCH_ADMIN_USERS]) diff --git a/frontend/src/pages/Circles.vue b/frontend/src/pages/Circles.vue index aa7e810d9..ef6652652 100644 --- a/frontend/src/pages/Circles.vue +++ b/frontend/src/pages/Circles.vue @@ -14,7 +14,7 @@ {{ $t('circles.button') }} @@ -36,7 +36,7 @@ export default { name: 'Circles', data() { return { - humhubUri: 'not initialized', + humhubUri: null, } }, computed: { @@ -46,20 +46,19 @@ export default { }, methods: { async authenticateCirclesAutoLogin() { + this.humhubUri = null this.$apollo .query({ query: authenticateCirclesAutoLogin, + fetchPolicy: 'network-only', }) .then(async (result) => { - this.humhubUri = result.data.authenticateCirclesAutoLogin + window.open(result.data.authenticateCirclesAutoLogin, '_blank') }) .catch(() => { this.toastError('authenticateCirclesAutoLogin failed!') }) }, }, - created() { - this.authenticateCirclesAutoLogin() - }, }