Skip to content

Commit e28c59a

Browse files
authored
Merge pull request #13 from cloudgraphdev/feature/CG-1123-tencent-cam-user
feat(camUser): add camUser service
2 parents 8098b0b + feb5add commit e28c59a

9 files changed

Lines changed: 129 additions & 0 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ CloudGraph Tencent Provider will ask you what regions you would like to crawl an
5757
| Service | Relations |
5858
| ------------------- | ------------------- |
5959
| camPolicy | |
60+
| camUser | |
6061
| ccn | ccnAttachment |
6162
| ccnAttachment | ccn |
6263
| customerGateway | vpnConnection |

src/enums/schemasMap.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import services from './services'
55
*/
66
export default {
77
[services.camPolicy]: 'tencentCamPolicy',
8+
[services.camUser]: 'tencentCamUser',
89
[services.ccn]: 'tencentCcn',
910
[services.ccnAttachment]: 'tencentCcnAttachment',
1011
[services.customerGateway]: 'tencentCustomerGateway',

src/enums/serviceMap.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import TencentVpnGateway from '../services/vpnGateway'
1212
import TencentCamPolicy from '../services/camPolicy'
1313
import TencentVpnGatewayRoute from '../services/vpnGatewayRoute'
1414
import TencentCustomerGateway from '../services/customerGateway'
15+
import TencentCamUser from '../services/camUser'
1516
import TencentVpnConnection from '../services/vpnConnection'
1617

1718
/**
@@ -20,6 +21,7 @@ import TencentVpnConnection from '../services/vpnConnection'
2021
*/
2122
export default {
2223
[services.camPolicy]: TencentCamPolicy,
24+
[services.camUser]: TencentCamUser,
2325
[services.ccn]: TencentCcn,
2426
[services.ccnAttachment]: TencentCcnAttachment,
2527
[services.customerGateway]: TencentCustomerGateway,

src/enums/services.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
export default {
22
camPolicy: 'camPolicy',
3+
camUser: 'camUser',
34
ccn: 'ccn',
45
ccnAttachment: 'ccnAttachment',
56
customerGateway: 'customerGateway',

src/services/camUser/data.ts

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

src/services/camUser/format.ts

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

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+
}
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
@@ -35,6 +35,18 @@ export type TencentCamPolicy = TencentBaseService & {
3535
updateTime?: Maybe<Scalars['String']>;
3636
};
3737

38+
export type TencentCamUser = TencentBaseService & {
39+
consoleLogin?: Maybe<Scalars['Int']>;
40+
countryCode?: Maybe<Scalars['String']>;
41+
createTime?: Maybe<Scalars['String']>;
42+
email?: Maybe<Scalars['String']>;
43+
name?: Maybe<Scalars['String']>;
44+
nickName?: Maybe<Scalars['String']>;
45+
phoneNum?: Maybe<Scalars['String']>;
46+
remark?: Maybe<Scalars['String']>;
47+
uin?: Maybe<Scalars['String']>;
48+
};
49+
3850
export type TencentCcn = TencentBaseService & {
3951
bandwidthLimitType?: Maybe<Scalars['String']>;
4052
ccnAttachments?: Maybe<Array<Maybe<TencentCcnAttachment>>>;

0 commit comments

Comments
 (0)