|
1 | | -import json |
| 1 | +from typing import Dict, Any |
| 2 | +from dataclasses import dataclass, asdict, field |
| 3 | +import os |
2 | 4 |
|
3 | | -def get_msdefender_user_json(authenticated_user_details, request_headers, conversation_id, application_name): |
4 | | - auth_provider = authenticated_user_details.get('auth_provider') |
| 5 | + |
| 6 | +@dataclass |
| 7 | +class UserSecurityContext: |
| 8 | + application_name: str = field(default=None) |
| 9 | + end_user_id: str = field(default=None) |
| 10 | + end_user_tenant_id: str = field(default=None) |
| 11 | + source_ip: str = field(default=None) |
| 12 | + def to_dict(self) -> Dict[str, Any]: |
| 13 | + return {k: v for k, v in asdict(self).items() if v is not None} |
| 14 | + |
| 15 | + |
| 16 | +def get_msdefender_user_json(authenticated_user_details, request_headers, application_name) -> UserSecurityContext: |
5 | 17 | source_ip = request_headers.get('Remote-Addr', '') |
6 | | - header_names = ['User-Agent', 'X-Forwarded-For', 'Forwarded', 'X-Real-IP', 'True-Client-IP', 'CF-Connecting-IP'] |
7 | | - user_args = { |
8 | | - "EndUserId": authenticated_user_details.get('user_principal_id'), |
9 | | - "EndUserIdType": "EntraId" if auth_provider == "aad" else auth_provider, |
10 | | - "SourceIp": source_ip.split(':')[0], #remove port |
11 | | - "SourceRequestHeaders": {header: request_headers[header] for header in header_names if header in request_headers}, |
12 | | - "ConversationId": conversation_id, |
13 | | - "ApplicationName": application_name, |
14 | | - } |
15 | | - return json.dumps(user_args) |
| 18 | + end_user_id = authenticated_user_details.get('user_principal_id') |
| 19 | + source_ip= source_ip.split(':')[0] |
| 20 | + return UserSecurityContext(end_user_id=end_user_id, source_ip=source_ip, application_name=application_name, end_user_tenant_id=None) |
| 21 | + |
0 commit comments