authentik.endpoints.connectors.agent.migrations.0001_initial
1# Generated by Django 5.2.8 on 2025-11-20 20:14 2 3import authentik.core.models 4import authentik.lib.generators 5import authentik.lib.utils.time 6import django.db.models.deletion 7import uuid 8from django.db import migrations, models 9 10 11class Migration(migrations.Migration): 12 13 initial = True 14 15 dependencies = [ 16 ("authentik_crypto", "0004_alter_certificatekeypair_name"), 17 ("authentik_endpoints", "0001_initial"), 18 ("authentik_flows", "0028_flowtoken_revoke_on_execution"), 19 ] 20 21 operations = [ 22 migrations.CreateModel( 23 name="AgentDeviceConnection", 24 fields=[ 25 ( 26 "deviceconnection_ptr", 27 models.OneToOneField( 28 auto_created=True, 29 on_delete=django.db.models.deletion.CASCADE, 30 parent_link=True, 31 primary_key=True, 32 serialize=False, 33 to="authentik_endpoints.deviceconnection", 34 ), 35 ), 36 ("apple_signing_key", models.TextField()), 37 ("apple_encryption_key", models.TextField()), 38 ("apple_key_exchange_key", models.TextField()), 39 ("apple_sign_key_id", models.TextField()), 40 ("apple_enc_key_id", models.TextField()), 41 ], 42 options={ 43 "abstract": False, 44 }, 45 bases=("authentik_endpoints.deviceconnection",), 46 ), 47 migrations.CreateModel( 48 name="AgentDeviceUserBinding", 49 fields=[ 50 ( 51 "deviceuserbinding_ptr", 52 models.OneToOneField( 53 auto_created=True, 54 on_delete=django.db.models.deletion.CASCADE, 55 parent_link=True, 56 primary_key=True, 57 serialize=False, 58 to="authentik_endpoints.deviceuserbinding", 59 ), 60 ), 61 ("apple_secure_enclave_key", models.TextField()), 62 ("apple_enclave_key_id", models.TextField()), 63 ], 64 options={ 65 "abstract": False, 66 }, 67 bases=("authentik_endpoints.deviceuserbinding",), 68 ), 69 migrations.CreateModel( 70 name="AgentConnector", 71 fields=[ 72 ( 73 "connector_ptr", 74 models.OneToOneField( 75 auto_created=True, 76 on_delete=django.db.models.deletion.CASCADE, 77 parent_link=True, 78 primary_key=True, 79 serialize=False, 80 to="authentik_endpoints.connector", 81 ), 82 ), 83 ("nss_uid_offset", models.PositiveIntegerField(default=1000)), 84 ("nss_gid_offset", models.PositiveIntegerField(default=1000)), 85 ("auth_terminate_session_on_expiry", models.BooleanField(default=False)), 86 ( 87 "refresh_interval", 88 models.TextField( 89 default="minutes=30", 90 validators=[authentik.lib.utils.time.timedelta_string_validator], 91 ), 92 ), 93 ( 94 "authentication_flow", 95 models.ForeignKey( 96 default=None, 97 null=True, 98 on_delete=django.db.models.deletion.SET_DEFAULT, 99 to="authentik_flows.flow", 100 ), 101 ), 102 ( 103 "challenge_key", 104 models.ForeignKey( 105 null=True, 106 on_delete=django.db.models.deletion.CASCADE, 107 to="authentik_crypto.certificatekeypair", 108 ), 109 ), 110 ], 111 options={ 112 "verbose_name": "Agent Connector", 113 "verbose_name_plural": "Agent Connectors", 114 }, 115 bases=("authentik_endpoints.connector",), 116 ), 117 migrations.CreateModel( 118 name="DeviceToken", 119 fields=[ 120 ("expires", models.DateTimeField(default=None, null=True)), 121 ("expiring", models.BooleanField(default=True)), 122 ( 123 "token_uuid", 124 models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False), 125 ), 126 ("key", models.TextField(default=authentik.lib.generators.generate_key)), 127 ( 128 "device", 129 models.ForeignKey( 130 on_delete=django.db.models.deletion.CASCADE, 131 to="authentik_endpoints_connectors_agent.agentdeviceconnection", 132 ), 133 ), 134 ], 135 options={ 136 "abstract": False, 137 "indexes": [ 138 models.Index(fields=["expires"], name="authentik_e_expires_675725_idx"), 139 models.Index(fields=["expiring"], name="authentik_e_expirin_8eb6d1_idx"), 140 models.Index( 141 fields=["expiring", "expires"], name="authentik_e_expirin_bd42e6_idx" 142 ), 143 ], 144 }, 145 ), 146 migrations.CreateModel( 147 name="EnrollmentToken", 148 fields=[ 149 ("expires", models.DateTimeField(default=None, null=True)), 150 ("expiring", models.BooleanField(default=True)), 151 ( 152 "token_uuid", 153 models.UUIDField( 154 default=uuid.uuid4, editable=False, primary_key=True, serialize=False 155 ), 156 ), 157 ("name", models.TextField()), 158 ("key", models.TextField(default=authentik.core.models.default_token_key)), 159 ( 160 "connector", 161 models.ForeignKey( 162 on_delete=django.db.models.deletion.CASCADE, 163 to="authentik_endpoints_connectors_agent.agentconnector", 164 ), 165 ), 166 ( 167 "device_group", 168 models.ForeignKey( 169 default=None, 170 null=True, 171 on_delete=django.db.models.deletion.SET_DEFAULT, 172 to="authentik_endpoints.devicegroup", 173 ), 174 ), 175 ], 176 options={ 177 "verbose_name": "Enrollment Token", 178 "verbose_name_plural": "Enrollment Tokens", 179 "permissions": [("view_enrollment_token_key", "View token's key")], 180 "indexes": [ 181 models.Index(fields=["expires"], name="authentik_e_expires_98b99c_idx"), 182 models.Index(fields=["expiring"], name="authentik_e_expirin_9a17f7_idx"), 183 models.Index( 184 fields=["expiring", "expires"], name="authentik_e_expirin_7ad82a_idx" 185 ), 186 models.Index(fields=["key"], name="authentik_e_key_8dafaf_idx"), 187 ], 188 }, 189 ), 190 ]
class
Migration(django.db.migrations.migration.Migration):
12class Migration(migrations.Migration): 13 14 initial = True 15 16 dependencies = [ 17 ("authentik_crypto", "0004_alter_certificatekeypair_name"), 18 ("authentik_endpoints", "0001_initial"), 19 ("authentik_flows", "0028_flowtoken_revoke_on_execution"), 20 ] 21 22 operations = [ 23 migrations.CreateModel( 24 name="AgentDeviceConnection", 25 fields=[ 26 ( 27 "deviceconnection_ptr", 28 models.OneToOneField( 29 auto_created=True, 30 on_delete=django.db.models.deletion.CASCADE, 31 parent_link=True, 32 primary_key=True, 33 serialize=False, 34 to="authentik_endpoints.deviceconnection", 35 ), 36 ), 37 ("apple_signing_key", models.TextField()), 38 ("apple_encryption_key", models.TextField()), 39 ("apple_key_exchange_key", models.TextField()), 40 ("apple_sign_key_id", models.TextField()), 41 ("apple_enc_key_id", models.TextField()), 42 ], 43 options={ 44 "abstract": False, 45 }, 46 bases=("authentik_endpoints.deviceconnection",), 47 ), 48 migrations.CreateModel( 49 name="AgentDeviceUserBinding", 50 fields=[ 51 ( 52 "deviceuserbinding_ptr", 53 models.OneToOneField( 54 auto_created=True, 55 on_delete=django.db.models.deletion.CASCADE, 56 parent_link=True, 57 primary_key=True, 58 serialize=False, 59 to="authentik_endpoints.deviceuserbinding", 60 ), 61 ), 62 ("apple_secure_enclave_key", models.TextField()), 63 ("apple_enclave_key_id", models.TextField()), 64 ], 65 options={ 66 "abstract": False, 67 }, 68 bases=("authentik_endpoints.deviceuserbinding",), 69 ), 70 migrations.CreateModel( 71 name="AgentConnector", 72 fields=[ 73 ( 74 "connector_ptr", 75 models.OneToOneField( 76 auto_created=True, 77 on_delete=django.db.models.deletion.CASCADE, 78 parent_link=True, 79 primary_key=True, 80 serialize=False, 81 to="authentik_endpoints.connector", 82 ), 83 ), 84 ("nss_uid_offset", models.PositiveIntegerField(default=1000)), 85 ("nss_gid_offset", models.PositiveIntegerField(default=1000)), 86 ("auth_terminate_session_on_expiry", models.BooleanField(default=False)), 87 ( 88 "refresh_interval", 89 models.TextField( 90 default="minutes=30", 91 validators=[authentik.lib.utils.time.timedelta_string_validator], 92 ), 93 ), 94 ( 95 "authentication_flow", 96 models.ForeignKey( 97 default=None, 98 null=True, 99 on_delete=django.db.models.deletion.SET_DEFAULT, 100 to="authentik_flows.flow", 101 ), 102 ), 103 ( 104 "challenge_key", 105 models.ForeignKey( 106 null=True, 107 on_delete=django.db.models.deletion.CASCADE, 108 to="authentik_crypto.certificatekeypair", 109 ), 110 ), 111 ], 112 options={ 113 "verbose_name": "Agent Connector", 114 "verbose_name_plural": "Agent Connectors", 115 }, 116 bases=("authentik_endpoints.connector",), 117 ), 118 migrations.CreateModel( 119 name="DeviceToken", 120 fields=[ 121 ("expires", models.DateTimeField(default=None, null=True)), 122 ("expiring", models.BooleanField(default=True)), 123 ( 124 "token_uuid", 125 models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False), 126 ), 127 ("key", models.TextField(default=authentik.lib.generators.generate_key)), 128 ( 129 "device", 130 models.ForeignKey( 131 on_delete=django.db.models.deletion.CASCADE, 132 to="authentik_endpoints_connectors_agent.agentdeviceconnection", 133 ), 134 ), 135 ], 136 options={ 137 "abstract": False, 138 "indexes": [ 139 models.Index(fields=["expires"], name="authentik_e_expires_675725_idx"), 140 models.Index(fields=["expiring"], name="authentik_e_expirin_8eb6d1_idx"), 141 models.Index( 142 fields=["expiring", "expires"], name="authentik_e_expirin_bd42e6_idx" 143 ), 144 ], 145 }, 146 ), 147 migrations.CreateModel( 148 name="EnrollmentToken", 149 fields=[ 150 ("expires", models.DateTimeField(default=None, null=True)), 151 ("expiring", models.BooleanField(default=True)), 152 ( 153 "token_uuid", 154 models.UUIDField( 155 default=uuid.uuid4, editable=False, primary_key=True, serialize=False 156 ), 157 ), 158 ("name", models.TextField()), 159 ("key", models.TextField(default=authentik.core.models.default_token_key)), 160 ( 161 "connector", 162 models.ForeignKey( 163 on_delete=django.db.models.deletion.CASCADE, 164 to="authentik_endpoints_connectors_agent.agentconnector", 165 ), 166 ), 167 ( 168 "device_group", 169 models.ForeignKey( 170 default=None, 171 null=True, 172 on_delete=django.db.models.deletion.SET_DEFAULT, 173 to="authentik_endpoints.devicegroup", 174 ), 175 ), 176 ], 177 options={ 178 "verbose_name": "Enrollment Token", 179 "verbose_name_plural": "Enrollment Tokens", 180 "permissions": [("view_enrollment_token_key", "View token's key")], 181 "indexes": [ 182 models.Index(fields=["expires"], name="authentik_e_expires_98b99c_idx"), 183 models.Index(fields=["expiring"], name="authentik_e_expirin_9a17f7_idx"), 184 models.Index( 185 fields=["expiring", "expires"], name="authentik_e_expirin_7ad82a_idx" 186 ), 187 models.Index(fields=["key"], name="authentik_e_key_8dafaf_idx"), 188 ], 189 }, 190 ), 191 ]
The base class for all migrations.
Migration files will import this from django.db.migrations.Migration and subclass it as a class called Migration. It will have one or more of the following attributes:
- operations: A list of Operation instances, probably from django.db.migrations.operations
- dependencies: A list of tuples of (app_path, migration_name)
- run_before: A list of tuples of (app_path, migration_name)
- replaces: A list of migration_names
Note that all migrations come out of migrations and into the Loader or Graph as instances, having been initialized with their app label and name.
dependencies =
[('authentik_crypto', '0004_alter_certificatekeypair_name'), ('authentik_endpoints', '0001_initial'), ('authentik_flows', '0028_flowtoken_revoke_on_execution')]
operations =
[<CreateModel name='AgentDeviceConnection', fields=[('deviceconnection_ptr', <django.db.models.fields.related.OneToOneField>), ('apple_signing_key', <django.db.models.fields.TextField>), ('apple_encryption_key', <django.db.models.fields.TextField>), ('apple_key_exchange_key', <django.db.models.fields.TextField>), ('apple_sign_key_id', <django.db.models.fields.TextField>), ('apple_enc_key_id', <django.db.models.fields.TextField>)], options={'abstract': False}, bases=('authentik_endpoints.deviceconnection',)>, <CreateModel name='AgentDeviceUserBinding', fields=[('deviceuserbinding_ptr', <django.db.models.fields.related.OneToOneField>), ('apple_secure_enclave_key', <django.db.models.fields.TextField>), ('apple_enclave_key_id', <django.db.models.fields.TextField>)], options={'abstract': False}, bases=('authentik_endpoints.deviceuserbinding',)>, <CreateModel name='AgentConnector', fields=[('connector_ptr', <django.db.models.fields.related.OneToOneField>), ('nss_uid_offset', <django.db.models.fields.PositiveIntegerField>), ('nss_gid_offset', <django.db.models.fields.PositiveIntegerField>), ('auth_terminate_session_on_expiry', <django.db.models.fields.BooleanField>), ('refresh_interval', <django.db.models.fields.TextField>), ('authentication_flow', <django.db.models.fields.related.ForeignKey>), ('challenge_key', <django.db.models.fields.related.ForeignKey>)], options={'verbose_name': 'Agent Connector', 'verbose_name_plural': 'Agent Connectors'}, bases=('authentik_endpoints.connector',)>, <CreateModel name='DeviceToken', fields=[('expires', <django.db.models.fields.DateTimeField>), ('expiring', <django.db.models.fields.BooleanField>), ('token_uuid', <django.db.models.fields.UUIDField>), ('key', <django.db.models.fields.TextField>), ('device', <django.db.models.fields.related.ForeignKey>)], options={'abstract': False, 'indexes': [<Index: fields=['expires'] name='authentik_e_expires_675725_idx'>, <Index: fields=['expiring'] name='authentik_e_expirin_8eb6d1_idx'>, <Index: fields=['expiring', 'expires'] name='authentik_e_expirin_bd42e6_idx'>]}>, <CreateModel name='EnrollmentToken', fields=[('expires', <django.db.models.fields.DateTimeField>), ('expiring', <django.db.models.fields.BooleanField>), ('token_uuid', <django.db.models.fields.UUIDField>), ('name', <django.db.models.fields.TextField>), ('key', <django.db.models.fields.TextField>), ('connector', <django.db.models.fields.related.ForeignKey>), ('device_group', <django.db.models.fields.related.ForeignKey>)], options={'verbose_name': 'Enrollment Token', 'verbose_name_plural': 'Enrollment Tokens', 'permissions': [('view_enrollment_token_key', "View token's key")], 'indexes': [<Index: fields=['expires'] name='authentik_e_expires_98b99c_idx'>, <Index: fields=['expiring'] name='authentik_e_expirin_9a17f7_idx'>, <Index: fields=['expiring', 'expires'] name='authentik_e_expirin_7ad82a_idx'>, <Index: fields=['key'] name='authentik_e_key_8dafaf_idx'>]}>]