| 3791 | return user_report_parser |
| 3792 | |
| 3793 | def execute(self, params, **kwargs): |
| 3794 | self.nodes.clear() |
| 3795 | if 'nodes' in params.enterprise: |
| 3796 | for node in params.enterprise['nodes']: |
| 3797 | self.nodes[node['node_id']] = { |
| 3798 | 'parent_id': node.get('parent_id') or 0, |
| 3799 | 'name': node['data'].get('displayname') or '' |
| 3800 | } |
| 3801 | |
| 3802 | self.roles.clear() |
| 3803 | if 'roles' in params.enterprise: |
| 3804 | for role in params.enterprise['roles']: |
| 3805 | if 'data' in role: |
| 3806 | self.roles[role['role_id']] = role['data'].get('displayname') or '' |
| 3807 | |
| 3808 | self.teams.clear() |
| 3809 | if 'teams' in params.enterprise: |
| 3810 | for team in params.enterprise['teams']: |
| 3811 | self.teams[team['team_uid']] = team['name'] |
| 3812 | |
| 3813 | self.users.clear() |
| 3814 | kw_euid = 'enterprise_user_id' |
| 3815 | ei_cmd = EnterpriseInfoCommand() |
| 3816 | cmd_output = ei_cmd.execute(params, users=True, columns='roles,teams', format='json', quiet=True) |
| 3817 | enterprise_users = json.loads(cmd_output) |
| 3818 | |
| 3819 | def get_user_info(user): |
| 3820 | u = { |
| 3821 | 'enterprise_user_id': user.get('enterprise_user_id'), |
| 3822 | 'node_id': user.get('node_id'), |
| 3823 | 'username': user.get('username'), |
| 3824 | 'name': user.get('data', {}).get('displayname') or '', |
| 3825 | 'status': user.get('status'), |
| 3826 | 'lock': user.get('lock') |
| 3827 | } |
| 3828 | if 'account_share_expiration' in user: |
| 3829 | u['account_share_expiration'] = user['account_share_expiration'] |
| 3830 | return u |
| 3831 | |
| 3832 | self.user_teams = {u.get('user_id'): u.get('teams') for u in enterprise_users} |
| 3833 | self.user_roles = {u.get('user_id'): u.get('roles') for u in enterprise_users} |
| 3834 | euids = list(self.user_roles.keys()) |
| 3835 | users_cache_filtered = {u.get(kw_euid): u for u in params.enterprise.get('users', []) if u.get(kw_euid) in euids} |
| 3836 | self.users = {k: get_user_info(u) for k, u in users_cache_filtered.items()} |
| 3837 | |
| 3838 | limit = API_EVENT_SUMMARY_ROW_LIMIT |
| 3839 | look_back_days = kwargs.get('days', 365) |
| 3840 | report_filter = {'audit_event_type': ['login', 'login_console', 'chat_login', 'accept_invitation']} |
| 3841 | if isinstance(look_back_days, int) and look_back_days > 0: |
| 3842 | logging.info(f'Querying latest login for the last {look_back_days} days') |
| 3843 | from_date = datetime.datetime.now(tz=datetime.timezone.utc) - datetime.timedelta(days=look_back_days) |
| 3844 | from_ts = int(from_date.timestamp()) |
| 3845 | report_filter['created'] = {'min': from_ts} |
| 3846 | |
| 3847 | last_login = {} |
| 3848 | active = [x['username'].lower() for x in self.users.values() if x['status'] == 'active'] |
| 3849 | rq = { |
| 3850 | "command": "get_audit_event_reports", |