feat: add query infra-configs
This commit is contained in:
@@ -27,7 +27,8 @@ import { InfraConfig } from 'src/infra-config/infra-config.model';
|
|||||||
import { InfraConfigService } from 'src/infra-config/infra-config.service';
|
import { InfraConfigService } from 'src/infra-config/infra-config.service';
|
||||||
import { InfraConfigArgs } from 'src/infra-config/input-args';
|
import { InfraConfigArgs } from 'src/infra-config/input-args';
|
||||||
import { AuthProvider } from 'src/auth/helper';
|
import { AuthProvider } from 'src/auth/helper';
|
||||||
import { Status } from 'src/infra-config/helper';
|
import { AuthProviderStatus } from 'src/infra-config/helper';
|
||||||
|
import { InfraConfigEnumForClient } from 'src/types/InfraConfig';
|
||||||
|
|
||||||
@UseGuards(GqlThrottlerGuard)
|
@UseGuards(GqlThrottlerGuard)
|
||||||
@Resolver(() => Infra)
|
@Resolver(() => Infra)
|
||||||
@@ -238,6 +239,24 @@ export class InfraResolver {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Query(() => [InfraConfig], {
|
||||||
|
description: 'Fetch infra configs',
|
||||||
|
})
|
||||||
|
@UseGuards(GqlAuthGuard, GqlAdminGuard)
|
||||||
|
async infraConfigs(
|
||||||
|
@Args({
|
||||||
|
name: 'names',
|
||||||
|
type: () => [InfraConfigEnumForClient],
|
||||||
|
description: 'Names of the InfraConfigs',
|
||||||
|
})
|
||||||
|
names: InfraConfigEnumForClient[],
|
||||||
|
) {
|
||||||
|
console.log(names);
|
||||||
|
const infraConfigs = await this.infraConfigService.getMany(names);
|
||||||
|
if (E.isLeft(infraConfigs)) throwErr(infraConfigs.left);
|
||||||
|
return infraConfigs.right;
|
||||||
|
}
|
||||||
|
|
||||||
@Query(() => [String], {
|
@Query(() => [String], {
|
||||||
description: 'Allowed Auth Provider list',
|
description: 'Allowed Auth Provider list',
|
||||||
})
|
})
|
||||||
@@ -288,10 +307,10 @@ export class InfraResolver {
|
|||||||
provider: AuthProvider,
|
provider: AuthProvider,
|
||||||
@Args({
|
@Args({
|
||||||
name: 'status',
|
name: 'status',
|
||||||
type: () => Status,
|
type: () => AuthProviderStatus,
|
||||||
description: 'Status to enable or disable',
|
description: 'Status to enable or disable',
|
||||||
})
|
})
|
||||||
status: Status,
|
status: AuthProviderStatus,
|
||||||
) {
|
) {
|
||||||
const isUpdated = await this.infraConfigService.enableAndDisableSSO(
|
const isUpdated = await this.infraConfigService.enableAndDisableSSO(
|
||||||
provider,
|
provider,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { PrismaService } from 'src/prisma/prisma.service';
|
import { PrismaService } from 'src/prisma/prisma.service';
|
||||||
|
|
||||||
export enum Status {
|
export enum AuthProviderStatus {
|
||||||
ENABLE = 'ENABLE',
|
ENABLE = 'ENABLE',
|
||||||
DISABLE = 'DISABLE',
|
DISABLE = 'DISABLE',
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { Field, ObjectType, registerEnumType } from '@nestjs/graphql';
|
import { Field, ObjectType, registerEnumType } from '@nestjs/graphql';
|
||||||
import { AuthProvider } from 'src/auth/helper';
|
import { AuthProvider } from 'src/auth/helper';
|
||||||
import { InfraConfigEnumForClient } from 'src/types/InfraConfig';
|
import { InfraConfigEnumForClient } from 'src/types/InfraConfig';
|
||||||
import { Status } from './helper';
|
import { AuthProviderStatus } from './helper';
|
||||||
|
|
||||||
@ObjectType()
|
@ObjectType()
|
||||||
export class InfraConfig {
|
export class InfraConfig {
|
||||||
@@ -24,6 +24,6 @@ registerEnumType(AuthProvider, {
|
|||||||
name: 'AuthProvider',
|
name: 'AuthProvider',
|
||||||
});
|
});
|
||||||
|
|
||||||
registerEnumType(Status, {
|
registerEnumType(AuthProviderStatus, {
|
||||||
name: 'Status',
|
name: 'AuthProviderStatus',
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -3,7 +3,10 @@ import { InfraConfig } from './infra-config.model';
|
|||||||
import { PrismaService } from 'src/prisma/prisma.service';
|
import { PrismaService } from 'src/prisma/prisma.service';
|
||||||
import { InfraConfig as DBInfraConfig } from '@prisma/client';
|
import { InfraConfig as DBInfraConfig } from '@prisma/client';
|
||||||
import * as E from 'fp-ts/Either';
|
import * as E from 'fp-ts/Either';
|
||||||
import { InfraConfigEnum } from 'src/types/InfraConfig';
|
import {
|
||||||
|
InfraConfigEnum,
|
||||||
|
InfraConfigEnumForClient,
|
||||||
|
} from 'src/types/InfraConfig';
|
||||||
import {
|
import {
|
||||||
DATABASE_TABLE_NOT_EXIST,
|
DATABASE_TABLE_NOT_EXIST,
|
||||||
INFRA_CONFIG_NOT_FOUND,
|
INFRA_CONFIG_NOT_FOUND,
|
||||||
@@ -13,7 +16,7 @@ import {
|
|||||||
} from 'src/errors';
|
} from 'src/errors';
|
||||||
import { throwErr } from 'src/utils';
|
import { throwErr } from 'src/utils';
|
||||||
import { ConfigService } from '@nestjs/config';
|
import { ConfigService } from '@nestjs/config';
|
||||||
import { Status, stopApp } from './helper';
|
import { AuthProviderStatus, stopApp } from './helper';
|
||||||
import { InfraConfigArgs } from './input-args';
|
import { InfraConfigArgs } from './input-args';
|
||||||
import { AuthProvider } from 'src/auth/helper';
|
import { AuthProvider } from 'src/auth/helper';
|
||||||
|
|
||||||
@@ -180,16 +183,19 @@ export class InfraConfigService implements OnModuleInit {
|
|||||||
* @param status Status to enable or disable
|
* @param status Status to enable or disable
|
||||||
* @returns Either true or an error
|
* @returns Either true or an error
|
||||||
*/
|
*/
|
||||||
async enableAndDisableSSO(provider: AuthProvider, status: Status) {
|
async enableAndDisableSSO(
|
||||||
|
provider: AuthProvider,
|
||||||
|
status: AuthProviderStatus,
|
||||||
|
) {
|
||||||
const enabledAuthProviders = this.configService
|
const enabledAuthProviders = this.configService
|
||||||
.get('INFRA.VITE_ALLOWED_AUTH_PROVIDERS')
|
.get('INFRA.VITE_ALLOWED_AUTH_PROVIDERS')
|
||||||
.split(',');
|
.split(',');
|
||||||
const isProviderEnabled = enabledAuthProviders.includes(provider);
|
const isProviderEnabled = enabledAuthProviders.includes(provider);
|
||||||
|
|
||||||
let newEnabledAuthProviders = enabledAuthProviders;
|
let newEnabledAuthProviders = enabledAuthProviders;
|
||||||
if (status === Status.ENABLE && !isProviderEnabled) {
|
if (status === AuthProviderStatus.ENABLE && !isProviderEnabled) {
|
||||||
newEnabledAuthProviders = [...enabledAuthProviders, provider];
|
newEnabledAuthProviders = [...enabledAuthProviders, provider];
|
||||||
} else if (status === Status.DISABLE && isProviderEnabled) {
|
} else if (status === AuthProviderStatus.DISABLE && isProviderEnabled) {
|
||||||
newEnabledAuthProviders = enabledAuthProviders.filter(
|
newEnabledAuthProviders = enabledAuthProviders.filter(
|
||||||
(p) => p !== provider,
|
(p) => p !== provider,
|
||||||
);
|
);
|
||||||
@@ -209,7 +215,7 @@ export class InfraConfigService implements OnModuleInit {
|
|||||||
* @param name Name of the InfraConfig
|
* @param name Name of the InfraConfig
|
||||||
* @returns InfraConfig model
|
* @returns InfraConfig model
|
||||||
*/
|
*/
|
||||||
async get(name: InfraConfigEnum) {
|
async get(name: InfraConfigEnumForClient) {
|
||||||
try {
|
try {
|
||||||
const infraConfig = await this.prisma.infraConfig.findUniqueOrThrow({
|
const infraConfig = await this.prisma.infraConfig.findUniqueOrThrow({
|
||||||
where: { name },
|
where: { name },
|
||||||
@@ -221,6 +227,23 @@ export class InfraConfigService implements OnModuleInit {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get InfraConfigs by names
|
||||||
|
* @param names Names of the InfraConfigs
|
||||||
|
* @returns InfraConfig model
|
||||||
|
*/
|
||||||
|
async getMany(names: InfraConfigEnumForClient[]) {
|
||||||
|
try {
|
||||||
|
const infraConfigs = await this.prisma.infraConfig.findMany({
|
||||||
|
where: { name: { in: names } },
|
||||||
|
});
|
||||||
|
|
||||||
|
return E.right(infraConfigs.map((p) => this.cast(p)));
|
||||||
|
} catch (e) {
|
||||||
|
return E.left(INFRA_CONFIG_NOT_FOUND);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get allowed auth providers for login/signup
|
* Get allowed auth providers for login/signup
|
||||||
* @returns string[]
|
* @returns string[]
|
||||||
|
|||||||
Reference in New Issue
Block a user