Members: Bulk Deactivate
Members: Bulk Deactivate
This script deactivates and deletes all users found, using a single parameter that can be configured in the script as a wildcard.
Refer to the Sigma REST API Recipes QuickStart for step-by-step instructions.
Example script
Node
1 // This script identifies users in Sigma matching a specified name pattern, retrieves their status, and deactivates (soft-deletes) them. 2 3 // Load environment variables from a specific .env file for configuration 4 require('dotenv').config({ path: 'sigma-api-recipes/.env' }); 5 6 // Import the function to obtain a bearer token from the authenticate-bearer module 7 const getBearerToken = require('../get-access-token'); 8 9 // Import Axios for making HTTP requests 10 const axios = require('axios'); 11 12 // Load use-case specific variables from environment variables 13 const baseURL = process.env.baseURL; // Base URL for the Sigma API 14 const userNamePattern = new RegExp(process.env.USER_NAME_PATTERN, 'i'); // Regex pattern for user names (case-insensitive) 15 const deactivateOnly = process.env.DEACTIVATE_ONLY === 'true'; // Boolean flag for deactivate-only mode 16 17 // Function to fetch the isInactive status of a user by memberId 18 async function fetchIsInactiveStatus(memberId, accessToken) { 19 const url = `${baseURL}/members/${memberId}`; // API endpoint to get member details 20 console.log(`Fetching isInactive status for memberId: ${memberId} at URL: ${url}`); 21 try { 22 const response = await axios.get(url, { 23 headers: { 24 Authorization: `Bearer ${accessToken}`, 25 }, 26 }); 27 return response.data.isInactive || false; // Return isInactive status or false if not set 28 } catch (error) { 29 console.error(`Error fetching isInactive status for memberId: ${memberId}`, error.response ? error.response.data : error); 30 return false; // Default to false if an error occurs 31 } 32 } 33 34 // Function to list all members and filter by name using the regex pattern 35 async function listUsers(accessToken) { 36 const url = `${baseURL}/members?includeInactive=true`; // Include inactive users in the list 37 console.log(`Listing users from: ${url}`); 38 try { 39 const response = await axios.get(url, { 40 headers: { 41 Authorization: `Bearer ${accessToken}`, 42 }, 43 }); 44 45 // Filter users by name (firstName + lastName) using regex pattern 46 const filteredUsers = response.data.entries.filter(user => 47 userNamePattern.test(`${user.firstName} ${user.lastName}`) 48 ); 49 50 // Fetch isInactive status for each filtered user 51 const usersWithStatus = []; 52 for (const user of filteredUsers) { 53 const isInactive = await fetchIsInactiveStatus(user.memberId, accessToken); 54 if (!isInactive) { 55 usersWithStatus.push({ ...user, isInactive }); 56 } 57 } 58 59 console.log('Filtered Users with isInactive Status:', usersWithStatus); 60 return usersWithStatus; 61 } catch (error) { 62 console.error(`Error fetching users: ${error}`); 63 return []; 64 } 65 } 66 67 // Function to "soft-delete" (deactivate) a member 68 async function deleteUser(user, accessToken) { 69 try { 70 const url = `${baseURL}/members/${user.memberId}`; 71 const response = await axios.delete(url, { 72 headers: { 73 Authorization: `Bearer ${accessToken}`, 74 Accept: 'application/json', 75 }, 76 }); 77 console.log(`Deactivated (deleted) user: ${user.firstName} ${user.lastName} (ID: ${user.memberId})`); 78 console.log('Response:', response.data); 79 } catch (error) { 80 console.error(`Error deactivating (deleting) user ${user.firstName} ${user.lastName}:`, error.response ? error.response.data : error); 81 } 82 } 83 84 // Main function to manage the overall workflow 85 async function main() { 86 const accessToken = await getBearerToken(); 87 if (!accessToken) { 88 console.error('Failed to obtain Bearer token.'); 89 return; 90 } 91 92 const users = await listUsers(accessToken); 93 if (users.length > 0) { 94 console.log(`Found ${users.length} active user(s) matching the pattern.`); 95 for (const user of users) { 96 await deleteUser(user, accessToken); // Deactivate the user 97 if (!deactivateOnly) { 98 console.warn('Delete functionality is disabled in the current implementation.'); 99 } 100 } 101 } else { 102 console.log('No active users matched the specified pattern.'); 103 } 104 } 105 106 // Execute the main function 107 main();
Response Example
1 {"success":true}
Endpoints used
- Get authentication token:
GET BearerTokenfunction - List all users:
GET /v2/members - Deactivate a user:
PATCH /v2/members/{memberId}

