Skip to content

Commit caaaaa7

Browse files
feat(camUser): add camUser service
1 parent b4a985a commit caaaaa7

File tree

8 files changed

+130
-0
lines changed

8 files changed

+130
-0
lines changed

src/enums/schemasMap.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import services from './services'
44
* schemasMap is an object that contains schemas name by resource
55
*/
66
export default {
7+
[services.camUser]: 'tencentCamUser',
78
[services.customerGateway]: 'tencentCustomerGateway',
89
[services.routeTable]: 'tencentRouteTable',
910
[services.securityGroup]: 'tencentSecurityGroup',

src/enums/serviceMap.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,14 @@ import TencentTag from '../services/tag'
99
import TencentRouteTable from '../services/routeTable'
1010
import TencentVpnGateway from '../services/vpnGateway'
1111
import TencentCustomerGateway from '../services/customerGateway'
12+
import TencentCamUser from '../services/camUser'
1213

1314
/**
1415
* serviceMap is an object that contains all currently supported services
1516
* serviceMap is used by the serviceFactory to produce instances of service classes
1617
*/
1718
export default {
19+
[services.camUser]: TencentCamUser,
1820
[services.customerGateway]: TencentCustomerGateway,
1921
[services.routeTable]: TencentRouteTable,
2022
[services.securityGroup]: TencentSecurityGroup,

src/enums/services.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
export default {
2+
camUser: 'camUser',
23
customerGateway: 'customerGateway',
34
routeTable: 'routeTable',
45
securityGroup: 'securityGroup',

src/services/camUser/data.ts

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import * as tencentcloud from 'tencentcloud-sdk-nodejs'
2+
import { ClientConfig } from 'tencentcloud-sdk-nodejs/tencentcloud/common/interface'
3+
import CloudGraph from '@cloudgraph/sdk'
4+
import groupBy from 'lodash/groupBy'
5+
import isEmpty from 'lodash/isEmpty'
6+
import { SubAccountInfo } from 'tencentcloud-sdk-nodejs/tencentcloud/services/cam/v20190116/cam_models'
7+
import loggerText from '../../properties/logger'
8+
import { TencentServiceInput } from '../../types'
9+
import { initTestEndpoint, generateTencentErrorLog } from '../../utils'
10+
11+
const lt = { ...loggerText }
12+
const { logger } = CloudGraph
13+
export const serviceName = 'CamUser'
14+
const apiEndpoint = initTestEndpoint(serviceName)
15+
16+
export interface RawTencentCamUser extends SubAccountInfo {
17+
id: string
18+
region: string
19+
}
20+
21+
export default async ({
22+
regions,
23+
config,
24+
}: TencentServiceInput): Promise<{
25+
[region: string]: RawTencentCamUser[]
26+
}> =>
27+
new Promise(async resolve => {
28+
const camUserList: RawTencentCamUser[] = []
29+
30+
for (const region of regions.split(',')) {
31+
try {
32+
const CamClient = tencentcloud.cam.v20190116.Client
33+
const clientConfig: ClientConfig = { credential: config, region, profile: { httpProfile: { endpoint: apiEndpoint } } }
34+
const cam = new CamClient(clientConfig)
35+
36+
const response = await cam.ListUsers(null)
37+
38+
if (response && !isEmpty(response.Data)) {
39+
for (const instance of response.Data) {
40+
camUserList.push({
41+
id: `${region}-${instance.Uid}`,
42+
...instance,
43+
region,
44+
})
45+
}
46+
}
47+
} catch (error) {
48+
generateTencentErrorLog(serviceName, 'cam:ListUsers', error)
49+
}
50+
}
51+
logger.debug(lt.foundResources(serviceName, camUserList.length))
52+
resolve(groupBy(camUserList, 'region'))
53+
})

src/services/camUser/format.ts

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import { TencentCamUser } from '../../types/generated'
2+
import { RawTencentCamUser } from './data'
3+
4+
export default ({
5+
service,
6+
region,
7+
}: {
8+
service: RawTencentCamUser
9+
region: string
10+
}): TencentCamUser=> {
11+
const {
12+
id,
13+
Uin: uin,
14+
Name: name,
15+
NickName: nickName,
16+
Remark: remark,
17+
ConsoleLogin: consoleLogin,
18+
PhoneNum: phoneNum,
19+
CountryCode: countryCode,
20+
Email: email,
21+
CreateTime: createTime,
22+
} = service
23+
24+
return {
25+
id,
26+
region,
27+
uin: uin.toString(),
28+
name,
29+
nickName,
30+
remark,
31+
consoleLogin,
32+
phoneNum,
33+
countryCode,
34+
email,
35+
createTime,
36+
}
37+
}

src/services/camUser/index.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { Service } from '@cloudgraph/sdk'
2+
import BaseService from '../base'
3+
import format from './format'
4+
import getData, { serviceName } from './data'
5+
import { getMutation } from '../../utils'
6+
7+
export default class TencentCamUser extends BaseService implements Service {
8+
format = format.bind(this)
9+
10+
getData = getData.bind(this)
11+
12+
mutation = getMutation(serviceName)
13+
}

src/services/camUser/schema.graphql

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
type tencentCamUser implements tencentBaseService @key(fields: "id") {
2+
uin: String @search(by: [hash, regexp])
3+
name: String @search(by: [hash, regexp])
4+
remark: String @search(by: [hash, regexp])
5+
consoleLogin: Int @search
6+
phoneNum: String @search(by: [hash, regexp])
7+
countryCode: String @search(by: [hash, regexp])
8+
email: String @search(by: [hash, regexp])
9+
createTime: String @search(by: [hash, regexp])
10+
nickName: String @search(by: [hash, regexp])
11+
}

src/types/generated.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,18 @@ export type TencentBaseService = {
1717
region?: Maybe<Scalars['String']>;
1818
};
1919

20+
export type TencentCamUser = TencentBaseService & {
21+
consoleLogin?: Maybe<Scalars['Int']>;
22+
countryCode?: Maybe<Scalars['String']>;
23+
createTime?: Maybe<Scalars['String']>;
24+
email?: Maybe<Scalars['String']>;
25+
name?: Maybe<Scalars['String']>;
26+
nickName?: Maybe<Scalars['String']>;
27+
phoneNum?: Maybe<Scalars['String']>;
28+
remark?: Maybe<Scalars['String']>;
29+
uin?: Maybe<Scalars['String']>;
30+
};
31+
2032
export type TencentCcn = TencentBaseService & {
2133
bandwidthLimitType?: Maybe<Scalars['String']>;
2234
ccnAttachments?: Maybe<Array<Maybe<TencentCcnAttachment>>>;

0 commit comments

Comments
 (0)