Skip to content

Commit 23f2198

Browse files
committed
admin userids being returned
1 parent 49a2957 commit 23f2198

1 file changed

Lines changed: 91 additions & 10 deletions

File tree

get-workspace-admins/get-team-workspaces.js

Lines changed: 91 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* Script to retrieve all Postman workspaces with visibility 'team'
2+
* Script to retrieve all Postman workspaces with visibility 'team' and their admin users
33
*
44
* Usage:
55
* 1. Set your Postman API key as an environment variable:
@@ -8,11 +8,19 @@
88
* node get-workspace-admins/get-team-workspaces.js [output-directory]
99
*
1010
* If output-directory is not specified, ../postman-export/workspaces will be used
11+
*
12+
* Output:
13+
* - team-workspaces.json: Contains all team workspaces metadata
14+
* - workspace-admins.json: Contains workspace IDs, names, types, and admin user IDs
1115
*/
1216

1317
const axios = require('axios');
1418
const fs = require('fs');
1519
const path = require('path');
20+
let curReportItem = {};
21+
let adminReport = [];
22+
let finalReport = {};
23+
1624

1725
// Process command line arguments
1826
const args = process.argv.slice(2);
@@ -68,14 +76,6 @@ async function getTeamWorkspaces() {
6876

6977
console.log(`Found ${workspaces.length} team workspaces.`);
7078

71-
// Save workspaces metadata
72-
fs.writeFileSync(
73-
path.join(outputDir, 'team-workspaces.json'),
74-
JSON.stringify(workspaces, null, 2)
75-
);
76-
77-
console.log(`Team workspaces data saved to: ${path.join(outputDir, 'team-workspaces.json')}`);
78-
7979
return workspaces;
8080
} catch (error) {
8181
console.error('Error fetching team workspaces:', error.message);
@@ -87,8 +87,89 @@ async function getTeamWorkspaces() {
8787
}
8888
}
8989

90+
/**
91+
* Get admin users for a specific workspace
92+
* @param {string} workspaceId - The ID of the workspace to get admins for
93+
* @returns {Array<string>} - Array of user IDs with Admin role
94+
*/
95+
async function getWorkspaceAdmins(workspaceId) {
96+
try {
97+
console.log(`Fetching admin users for workspace ID: ${workspaceId}...`);
98+
99+
const response = await axios.get(`${postmanApiUrl}/workspaces/${workspaceId}/roles`, {
100+
headers: {
101+
'X-API-Key': apiKey,
102+
},
103+
});
104+
105+
const roles = response.data.roles;
106+
107+
// Find the Admin role and extract user IDs
108+
const adminRole = roles.find(role => role.displayName === 'Admin');
109+
const adminUserIds = adminRole && adminRole.user ? adminRole.user : [];
110+
111+
console.log(`Found ${adminUserIds.length} admin users for workspace ID: ${workspaceId}`);
112+
113+
return adminUserIds;
114+
} catch (error) {
115+
console.error(`Error fetching admin users for workspace ID ${workspaceId}:`, error.message);
116+
if (error.response) {
117+
console.error('Response status:', error.response.status);
118+
console.error('Response data:', error.response.data);
119+
}
120+
return [];
121+
}
122+
}
123+
124+
/**
125+
* Main function to get all team workspaces and their admins
126+
*/
127+
async function main() {
128+
try {
129+
// Get all team workspaces
130+
const workspaces = await getTeamWorkspaces();
131+
132+
// Save workspaces to file
133+
const workspacesFilePath = path.join(outputDir, 'team-workspaces.json');
134+
fs.writeFileSync(workspacesFilePath, JSON.stringify(workspaces, null, 2));
135+
console.log(`Saved team workspaces to: ${workspacesFilePath}`);
136+
137+
// Get admin users for each workspace
138+
console.log('\nRetrieving admin users for each workspace...');
139+
const workspacesWithAdmins = [];
140+
141+
for (const workspace of workspaces) {
142+
curReportItem = {};
143+
curReportItem.workspace_id = workspace.id;
144+
curReportItem.workspace_name = workspace.name;
145+
curReportItem.workspace_type = workspace.type;
146+
curReportItem.workspace_visibility = workspace.visibility;
147+
curReportItem.admin_user_ids = [];
148+
curReportItem.admin_users = [];
149+
const adminUserIds = await getWorkspaceAdmins(workspace.id);
150+
curReportItem.admin_user_ids = adminUserIds;
151+
152+
/*workspacesWithAdmins.push({
153+
id: workspace.id,
154+
name: workspace.name,
155+
type: workspace.type,
156+
adminUserIds
157+
});*/
158+
159+
// Small delay to avoid rate limiting
160+
await new Promise(resolve => setTimeout(resolve, 100));
161+
}
162+
163+
164+
165+
} catch (error) {
166+
console.error('Error in main execution:', error);
167+
process.exit(1);
168+
}
169+
}
170+
90171
// Execute the main function
91-
getTeamWorkspaces().catch(error => {
172+
main().catch(error => {
92173
console.error('Unhandled error:', error);
93174
process.exit(1);
94175
});

0 commit comments

Comments
 (0)