diff --git a/webapp/packages/authentication/src/AuthInfoService.ts b/webapp/packages/authentication/src/AuthInfoService.ts index 71cbd25861..dce30763ea 100644 --- a/webapp/packages/authentication/src/AuthInfoService.ts +++ b/webapp/packages/authentication/src/AuthInfoService.ts @@ -12,6 +12,8 @@ import { injectable } from '@dbeaver/core/di'; import { NotificationService } from '@dbeaver/core/eventsLog'; import { GraphQLService, UserAuthInfo } from '@dbeaver/core/sdk'; +import { AuthProviderService } from './AuthProviderService'; + @injectable() export class AuthInfoService { @observable private user: UserAuthInfo | null = null; @@ -19,6 +21,7 @@ export class AuthInfoService { constructor( private graphQLService: GraphQLService, private notificationService: NotificationService, + private authProviderService: AuthProviderService, ) { } get userInfo() { @@ -29,8 +32,12 @@ export class AuthInfoService { if (this.user) { throw new Error('User already logged in'); } + const processedCredentials = this.authProviderService.processCredentials(provider, credentials); - const { user } = await this.graphQLService.gql.authLogin({ provider, credentials }); + const { user } = await this.graphQLService.gql.authLogin({ + provider, + credentials: processedCredentials, + }); this.user = user; return this.user; diff --git a/webapp/packages/authentication/src/AuthProviderService.ts b/webapp/packages/authentication/src/AuthProviderService.ts index 163b6d420e..9d9bd18ff7 100644 --- a/webapp/packages/authentication/src/AuthProviderService.ts +++ b/webapp/packages/authentication/src/AuthProviderService.ts @@ -6,6 +6,8 @@ * you may not use this file except in compliance with the License. */ +import { createHash } from 'crypto'; + import { injectable } from '@dbeaver/core/di'; import { GraphQLService, CachedResource, AuthProviderInfo @@ -21,6 +23,27 @@ export class AuthProviderService { private graphQLService: GraphQLService, ) { } + processCredentials(providerId: string, credentials: any) { + const provider = this.providers.data.find(provider => provider.id === providerId); + + if (!provider) { + return credentials; + } + + const credentialsProcessed = { ...credentials }; + for (const parameter of provider.credentialParameters) { + if (parameter.encryption === 'hash' && parameter.id in credentialsProcessed) { + const md5Hash = createHash('md5') + .update(credentialsProcessed[parameter.id]) + .digest('hex') + .toUpperCase(); + credentialsProcessed[parameter.id] = md5Hash; + } + } + + return credentialsProcessed; + } + private async refreshAsync(data: AuthProvider[]): Promise { const { providers } = await this.graphQLService.gql.getAuthProviders(); diff --git a/webapp/packages/core/src/queries/Authentication/getAuthProviders.gql b/webapp/packages/core/src/queries/Authentication/getAuthProviders.gql index 035dc77814..5ed5dd5976 100644 --- a/webapp/packages/core/src/queries/Authentication/getAuthProviders.gql +++ b/webapp/packages/core/src/queries/Authentication/getAuthProviders.gql @@ -22,8 +22,6 @@ query getAuthProviders { id displayName description - editable - identifying admin user possibleValues diff --git a/webapp/packages/core/src/sdk/sdk.ts b/webapp/packages/core/src/sdk/sdk.ts index 9248b093ac..73bdb859fa 100644 --- a/webapp/packages/core/src/sdk/sdk.ts +++ b/webapp/packages/core/src/sdk/sdk.ts @@ -41,8 +41,6 @@ export type AuthCredentialInfo = { id: Scalars["ID"]; displayName: Scalars["String"]; description?: Maybe; - editable?: Maybe; - identifying?: Maybe; /** This field must be shown in admin panel */ admin?: Maybe; /** This field must be shown in login form */ @@ -57,7 +55,6 @@ export type AuthProviderInfo = { icon?: Maybe; description?: Maybe; isDefault?: Maybe; - configurationParameters: Array>; credentialParameters: Array>; }; @@ -940,8 +937,6 @@ export type GetAuthProvidersQuery = { | "id" | "displayName" | "description" - | "editable" - | "identifying" | "admin" | "user" | "possibleValues" @@ -1653,8 +1648,6 @@ export const GetAuthProvidersDocument = gql` id displayName description - editable - identifying admin user possibleValues