Compare commits
	
		
			3 Commits
		
	
	
		
			dependabot
			...
			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