Compare commits
	
		
			3 Commits
		
	
	
		
			safari-adm
			...
			enterprise
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| ab42a62916 | |||
| ef8d2bdd40 | |||
| 32f4e08eac | 
| @ -9,7 +9,7 @@ class AuthentikEnterpriseAuditConfig(EnterpriseConfig): | ||||
|     """Enterprise app config""" | ||||
|  | ||||
|     name = "authentik.enterprise.audit" | ||||
|     label = "authentik_enterprise_audit" | ||||
|     label = "authentik_audit" | ||||
|     verbose_name = "authentik Enterprise.Audit" | ||||
|     default = True | ||||
|  | ||||
|  | ||||
							
								
								
									
										107
									
								
								authentik/enterprise/audit/models.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								authentik/enterprise/audit/models.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,107 @@ | ||||
| from django.contrib.contenttypes.models import ContentType | ||||
| from django.contrib.contenttypes.fields import GenericForeignKey | ||||
| from authentik.lib.models import SerializerModel | ||||
| from django.db import models | ||||
| from uuid import uuid4 | ||||
| from authentik.core.models import Group, User | ||||
|  | ||||
|  | ||||
| # # Names | ||||
| # Lifecycle | ||||
| # Access reviews | ||||
| # Access lifecycle | ||||
| # Governance | ||||
| # Audit | ||||
| # Compliance | ||||
|  | ||||
| # Lifecycle | ||||
| # Lifecycle review | ||||
| # Review | ||||
| # Access review | ||||
| # Compliance review | ||||
| # X Scheduled review | ||||
|  | ||||
|  | ||||
| # Only some objects supported? | ||||
| # | ||||
| # For disabling support: | ||||
| # Application | ||||
| # Provider | ||||
| # Outpost (simply setting the list of providers to empty in the outpost itself) | ||||
| # Flow | ||||
| # Users | ||||
| # Groups <- will get tricky | ||||
| # Roles | ||||
| # Sources | ||||
| # Tokens (api, app_pass) | ||||
| # Brands | ||||
| # Outpost integrations | ||||
| # | ||||
| # w/o disabling support | ||||
| # System Settings | ||||
| # everything else | ||||
| #   would need to show in an audit dashboard cause not all have pages to get details | ||||
|  | ||||
| # "default" policy for objects, by default, everlasting | ||||
|  | ||||
|  | ||||
| class AuditPolicyFailAction(models.TextChoices): | ||||
|     # For preview | ||||
|     NOTHING = "nothing" | ||||
|     # Disable the thing failing, HOW | ||||
|     DISABLE = "disable" | ||||
|     # Emit events | ||||
|     WARN = "warn" | ||||
|  | ||||
|  | ||||
| class LifecycleRule(SerializerModel): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| class ReviewRule(SerializerModel): | ||||
|     id = models.UUIDField(primary_key=True, editable=False, default=uuid4) | ||||
|  | ||||
|     # Check every 6 months, allow for daily/weekly/first of month, etc. | ||||
|     interval = models.TextField()  # timedelta | ||||
|     # Preventive notification | ||||
|     reminder_interval = models.TextField()  # timedelta | ||||
|  | ||||
|     # Must be checked by these | ||||
|     groups = models.ManyToManyField(Group) | ||||
|     users = models.ManyToManyField(User) | ||||
|  | ||||
|     # How many of the above must approve | ||||
|     required_approvals = models.IntegerField(default=1) | ||||
|  | ||||
|     # How long to wait before executing fail action | ||||
|     grace_period = models.TextField()  # timedelta | ||||
|  | ||||
|     # What to do if not reviewed in time | ||||
|     fail_action = models.CharField(choices=AuditPolicyFailAction) | ||||
|  | ||||
|  | ||||
| class AuditPolicyBinding(SerializerModel): | ||||
|     id = models.UUIDField(primary_key=True, editable=False, default=uuid4) | ||||
|  | ||||
|     # Many to many ? Bind users/groups here instead of on the policy ? | ||||
|     policy = models.ForeignKey(AuditPolicy, on_delete=models.PROTECT) | ||||
|  | ||||
|     content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) | ||||
|     object_id = models.TextField(blank=True)  # optional to apply on all objects of specific type | ||||
|     content_object = GenericForeignKey("content_type", "object_id") | ||||
|  | ||||
|     # valid -> waiting review -> valid | ||||
|     # valid -> waiting review -> review overdue -> valid | ||||
|     # valid -> waiting review -> review overdue -> failed -> valid | ||||
|     # look at django-fsm or django-viewflow | ||||
|     status = models.TextField() | ||||
|  | ||||
|     class Meta: | ||||
|         indexes = ( | ||||
|             models.Index(fields=["content_type"]), | ||||
|             models.Index(fields=["content_type", "object_id"]), | ||||
|         ) | ||||
|  | ||||
|  | ||||
| class AuditHistory: | ||||
|     pass | ||||
		Reference in New Issue
	
	Block a user
	