feat(authentication): implement createUser

CB-109
This commit is contained in:
Wroud
2020-05-28 15:46:56 +03:00
parent 3148bf2dc1
commit fafdb89b08
6 changed files with 52 additions and 4 deletions
@@ -34,7 +34,7 @@ export const UsersTable = observer(function UsersTable({ users }: Props) {
return styled(useStyles(styles))(
<Table>
<TableHeader>
<TableColumnHeader>User login</TableColumnHeader>
<TableColumnHeader>User name</TableColumnHeader>
<TableColumnHeader></TableColumnHeader>
</TableHeader>
<TableBody>
@@ -9,14 +9,36 @@
import { injectable } from '@dbeaver/core/di';
import { CachedResource, GraphQLService, AdminUserInfo } from '@dbeaver/core/sdk';
import { AuthProviderService } from '../AuthProviderService';
@injectable()
export class UsersManagerService {
readonly users = new CachedResource([], this.refreshAsync.bind(this), data => !!data.length)
constructor(
private graphQLService: GraphQLService
private graphQLService: GraphQLService,
private authProviderService: AuthProviderService,
) {
}
async create(userId: string): Promise<AdminUserInfo> {
const { user } = await this.graphQLService.gql.createUser({ userId });
// TODO: maybe better to do refresh
this.users.data.push(user as AdminUserInfo);
return user as AdminUserInfo;
}
async updateCredentials(userId: string, credentials: Record<string, any>) {
const provider = 'local';
const processedCredentials = this.authProviderService.processCredentials(provider, credentials);
await this.graphQLService.gql.setUserCredentials({
providerId: provider,
userId,
credentials: processedCredentials,
});
}
private async refreshAsync(data: AdminUserInfo[]): Promise<AdminUserInfo[]> {
const { users } = await this.graphQLService.gql.getUsersList();
@@ -23,7 +23,7 @@ export class AuthProviderService {
private graphQLService: GraphQLService,
) { }
processCredentials(providerId: string, credentials: any) {
processCredentials(providerId: string, credentials: Record<string, any>) {
const provider = this.providers.data.find(provider => provider.id === providerId);
if (!provider) {
@@ -8,11 +8,11 @@
import { observable, computed } from 'mobx';
import { ErrorDetailsDialog } from '@dbeaver/core/app';
import { injectable, IInitializableController, IDestructibleController } from '@dbeaver/core/di';
import { CommonDialogService } from '@dbeaver/core/dialogs';
import { NotificationService } from '@dbeaver/core/eventsLog';
import { GQLErrorCatcher } from '@dbeaver/core/sdk';
import { ErrorDetailsDialog } from '@dbeaver/core/app';
import { AuthInfoService } from '../AuthInfoService';
import { AuthProviderService, AuthProvider } from '../AuthProviderService';
@@ -0,0 +1,9 @@
query createUser($userId: ID!) {
user: createUser(userId: $userId) {
userId
#metaParameters
#configurationParameters
#grantedRoles
}
}
+17
View File
@@ -821,6 +821,13 @@ export type ChangeSessionLanguageMutationVariables = {
export type ChangeSessionLanguageMutation = Pick<Mutation, 'changeSessionLanguage'>;
export type CreateUserQueryVariables = {
userId: Scalars['ID'];
};
export type CreateUserQuery = { user: Pick<AdminUserInfo, 'userId'> };
export type DeleteUserQueryVariables = {
userId: Scalars['ID'];
};
@@ -1337,6 +1344,13 @@ export const ChangeSessionLanguageDocument = `
changeSessionLanguage(locale: $locale)
}
`;
export const CreateUserDocument = `
query createUser($userId: ID!) {
user: createUser(userId: $userId) {
userId
}
}
`;
export const DeleteUserDocument = `
query deleteUser($userId: ID!) {
deleteUser(userId: $userId)
@@ -1835,6 +1849,9 @@ export function getSdk(client: GraphQLClient, withWrapper: SdkFunctionWrapper =
changeSessionLanguage(variables: ChangeSessionLanguageMutationVariables): Promise<ChangeSessionLanguageMutation> {
return withWrapper(() => client.request<ChangeSessionLanguageMutation>(ChangeSessionLanguageDocument, variables));
},
createUser(variables: CreateUserQueryVariables): Promise<CreateUserQuery> {
return withWrapper(() => client.request<CreateUserQuery>(CreateUserDocument, variables));
},
deleteUser(variables: DeleteUserQueryVariables): Promise<DeleteUserQuery> {
return withWrapper(() => client.request<DeleteUserQuery>(DeleteUserDocument, variables));
},