#!/usr/bin/env python3 """ Script to manage Sigma team membership Supports adding/removing users to/from teams using comma-separated email lists """ import sys import argparse from sigma_api_client import SigmaAPIClient from team_management import TeamManager from config import ConfigManager def add_users_to_team(team_name: str, user_emails_str: str): """ Add comma-separated list of users to a team Args: team_name: Name of the team user_emails_str: Comma-separated string of user emails """ try: # Load configuration config_manager = ConfigManager() sigma_config = config_manager.get_sigma_config() # Initialize API client and manager api_client = SigmaAPIClient(sigma_config) team_manager = TeamManager(api_client) # Parse email list user_emails = [email.strip() for email in user_emails_str.split(',') if email.strip()] print(f"Adding users to team: {team_name}") print(f"Users to add: {', '.join(user_emails)}") print("=" * 60) # Find the team team = team_manager.get_team_by_name(team_name) if not team: print(f"āŒ Team '{team_name}' not found") return False team_id = team['teamId'] print(f"Found team: {team['name']} (ID: {team_id})") # Add users to team results = team_manager.add_users_to_team(team_id, user_emails) # Display results print(f"\nšŸ“Š Results Summary:") print(f"Total requested: {len(results['requested_users'])}") print(f"Successfully added: {len(results['successful_additions'])}") print(f"Already members: {len(results['already_members'])}") print(f"Failed additions: {len(results['failed_additions'])}") print(f"Users not found: {len(results['users_not_found'])}") # Show successful additions if results['successful_additions']: print(f"\nāœ… Successfully added to team:") for email in results['successful_additions']: print(f" - {email}") # Show already members if results['already_members']: print(f"\nšŸ”„ Already team members:") for email in results['already_members']: print(f" - {email}") # Show failed additions if results['failed_additions']: print(f"\nāŒ Failed to add:") for failure in results['failed_additions']: email = failure.get('email', 'Unknown') error = failure.get('error', 'Unknown error') print(f" - {email}: {error}") # Show users not found if results['users_not_found']: print(f"\nāš ļø Users not found in Sigma:") for email in results['users_not_found']: print(f" - {email}") # Determine overall success success = len(results['successful_additions']) > 0 if success: print(f"\nšŸŽ‰ Added {len(results['successful_additions'])} users to team successfully!") elif len(results['already_members']) == len(user_emails): print(f"\nāœ… All users are already members of the team!") success = True else: print(f"\nšŸ’„ No users were added to the team") return success except Exception as e: print(f"āŒ Error: {e}") return False def remove_users_from_team(team_name: str, user_emails_str: str): """ Remove comma-separated list of users from a team Args: team_name: Name of the team user_emails_str: Comma-separated string of user emails """ try: config_manager = ConfigManager() sigma_config = config_manager.get_sigma_config() api_client = SigmaAPIClient(sigma_config) team_manager = TeamManager(api_client) # Parse email list user_emails = [email.strip() for email in user_emails_str.split(',') if email.strip()] print(f"Removing users from team: {team_name}") print(f"Users to remove: {', '.join(user_emails)}") print("=" * 60) # Find the team team = team_manager.get_team_by_name(team_name) if not team: print(f"āŒ Team '{team_name}' not found") return False team_id = team['teamId'] print(f"Found team: {team['name']} (ID: {team_id})") # Remove users from team results = team_manager.remove_users_from_team(team_id, user_emails) # Display results print(f"\nšŸ“Š Results Summary:") print(f"Total requested: {len(results['requested_users'])}") print(f"Successfully removed: {len(results['successful_removals'])}") print(f"Not members: {len(results['not_members'])}") print(f"Failed removals: {len(results['failed_removals'])}") print(f"Users not found: {len(results['users_not_found'])}") # Show successful removals if results['successful_removals']: print(f"\nāœ… Successfully removed from team:") for email in results['successful_removals']: print(f" - {email}") # Show not members if results['not_members']: print(f"\nšŸ”„ Not team members:") for email in results['not_members']: print(f" - {email}") # Show failed removals if results['failed_removals']: print(f"\nāŒ Failed to remove:") for failure in results['failed_removals']: email = failure.get('email', 'Unknown') error = failure.get('error', 'Unknown error') print(f" - {email}: {error}") # Show users not found if results['users_not_found']: print(f"\nāš ļø Users not found in Sigma:") for email in results['users_not_found']: print(f" - {email}") success = len(results['successful_removals']) > 0 if success: print(f"\nšŸŽ‰ Removed {len(results['successful_removals'])} users from team successfully!") else: print(f"\nšŸ’„ No users were removed from the team") return success except Exception as e: print(f"āŒ Error: {e}") return False def list_teams(): """ List all teams in the organization """ try: config_manager = ConfigManager() sigma_config = config_manager.get_sigma_config() api_client = SigmaAPIClient(sigma_config) team_manager = TeamManager(api_client) print("šŸ“‹ Sigma Teams:") print("=" * 40) teams = team_manager.list_teams() if not teams: print("No teams found") return True for i, team in enumerate(teams, 1): team_id = team.get('teamId', 'N/A') team_name = team.get('name', 'Unknown') created_at = team.get('createdAt', 'Unknown') print(f"{i}. {team_name}") print(f" ID: {team_id}") print(f" Created: {created_at}") print() print(f"Total teams: {len(teams)}") return True except Exception as e: print(f"āŒ Error: {e}") return False def show_team_details(team_name: str): """ Show detailed information about a team including members Args: team_name: Name of the team """ try: config_manager = ConfigManager() sigma_config = config_manager.get_sigma_config() api_client = SigmaAPIClient(sigma_config) team_manager = TeamManager(api_client) print(f"šŸ‘„ Team Details: {team_name}") print("=" * 50) summary = team_manager.get_team_summary(team_name) if 'error' in summary: print(f"āŒ {summary['error']}") return False team = summary['team'] members = summary['members'] print(f"Team Name: {team.get('name', 'Unknown')}") print(f"Team ID: {team.get('teamId', 'Unknown')}") print(f"Created: {team.get('createdAt', 'Unknown')}") print(f"Member Count: {summary['member_count']}") if members: print(f"\nšŸ‘¤ Team Members:") for i, member in enumerate(members, 1): status = "āœ… Active" if member['is_active'] else "āš ļø Inactive" print(f"{i}. {member['email']}") print(f" Name: {member['name']}") print(f" Account Type: {member['account_type']}") print(f" Status: {status}") print() else: print("\nšŸ‘¤ Team Members: None") return True except Exception as e: print(f"āŒ Error: {e}") return False def main(): parser = argparse.ArgumentParser( description="Manage Sigma team membership", formatter_class=argparse.RawDescriptionHelpFormatter, epilog=""" Examples: # Add users to a team python manage_team_members.py add "Data Analytics Team" "user1@company.com,user2@company.com,user3@company.com" # Remove users from a team python manage_team_members.py remove "Data Analytics Team" "user1@company.com,user2@company.com" # List all teams python manage_team_members.py list # Show team details and members python manage_team_members.py show "Data Analytics Team" """ ) parser.add_argument("action", choices=["add", "remove", "list", "show"], help="Action to perform") parser.add_argument("team_name", nargs="?", help="Name of the team (required for add/remove/show)") parser.add_argument("user_emails", nargs="?", help="Comma-separated list of user emails (required for add/remove)") args = parser.parse_args() # Validate arguments if args.action in ["add", "remove", "show"] and not args.team_name: print(f"āŒ Error: Team name is required for {args.action} action") sys.exit(1) if args.action in ["add", "remove"] and not args.user_emails: print(f"āŒ Error: User emails are required for {args.action} action") sys.exit(1) # Execute based on action success = False if args.action == "add": success = add_users_to_team(args.team_name, args.user_emails) elif args.action == "remove": success = remove_users_from_team(args.team_name, args.user_emails) elif args.action == "list": success = list_teams() elif args.action == "show": success = show_team_details(args.team_name) if success: print("\nšŸŽ‰ Operation completed successfully!") sys.exit(0) else: print("\nšŸ’„ Operation failed") sys.exit(1) if __name__ == "__main__": main()