Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space>
This commit is contained in:
Marc 'risson' Schmitt 2023-11-15 22:22:48 +01:00
parent a4fd37e429
commit 6676a81733
No known key found for this signature in database
GPG Key ID: 9C3FA22FABF1AA8D
11 changed files with 12 additions and 157 deletions

View File

@ -17,7 +17,6 @@ from authentik.api.authorization import SecretKeyFilter
from authentik.brands.models import Brand
from authentik.core.api.used_by import UsedByMixin
from authentik.core.api.utils import PassiveSerializer
from authentik.lib.config import CONFIG
from authentik.tenants.utils import get_current_tenant

View File

@ -1,119 +0,0 @@
# Generated by Django 4.2.7 on 2023-11-06 19:48
import uuid
import django.db.models.deletion
from django.db import migrations, models
import authentik.lib.utils.time
class Migration(migrations.Migration):
initial = True
operations = [
migrations.CreateModel(
name="Brand",
fields=[
(
"brand_uuid",
models.UUIDField(
default=uuid.uuid4, editable=False, primary_key=True, serialize=False
),
),
(
"domain",
models.TextField(
help_text="Domain that activates this brand. Can be a superset, i.e. `a.b` for `aa.b` and `ba.b`"
),
),
("default", models.BooleanField(default=False)),
("branding_title", models.TextField(default="authentik")),
(
"branding_logo",
models.TextField(default="/static/dist/assets/icons/icon_left_brand.svg"),
),
(
"branding_favicon",
models.TextField(default="/static/dist/assets/icons/icon.png"),
),
(
"event_retention",
models.TextField(
default="days=365",
help_text="Events will be deleted after this duration.(Format: weeks=3;days=2;hours=3,seconds=2).",
validators=[authentik.lib.utils.time.timedelta_string_validator],
),
),
("attributes", models.JSONField(blank=True, default=dict)),
(
"flow_authentication",
models.ForeignKey(
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="brand_authentication",
to="authentik_flows.flow",
),
),
(
"flow_device_code",
models.ForeignKey(
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="brand_device_code",
to="authentik_flows.flow",
),
),
(
"flow_invalidation",
models.ForeignKey(
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="brand_invalidation",
to="authentik_flows.flow",
),
),
(
"flow_recovery",
models.ForeignKey(
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="brand_recovery",
to="authentik_flows.flow",
),
),
(
"flow_unenrollment",
models.ForeignKey(
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="brand_unenrollment",
to="authentik_flows.flow",
),
),
(
"flow_user_settings",
models.ForeignKey(
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="brand_user_settings",
to="authentik_flows.flow",
),
),
(
"web_certificate",
models.ForeignKey(
default=None,
help_text="Web Certificate used by the authentik Core webserver.",
null=True,
on_delete=django.db.models.deletion.SET_DEFAULT,
to="authentik_crypto.certificatekeypair",
),
),
],
options={
"verbose_name": "Brand",
"verbose_name_plural": "Brands",
},
),
]

View File

@ -1,14 +0,0 @@
from django.db import migrations
class Migration(migrations.Migration):
"""
Noop migration to make sure that data has been migrated from the old tenant system to this before changing this table any further.
"""
dependencies = [
("authentik_brands", "0001_initial"),
("authentik_tenants", "0005_tenant_to_brand"),
]
operations = []

View File

@ -7,7 +7,6 @@ from authentik.brands.api import Themes
from authentik.brands.models import Brand
from authentik.core.tests.utils import create_test_admin_user, create_test_brand
from authentik.events.models import Event, EventAction
from authentik.lib.config import CONFIG
from authentik.lib.utils.time import timedelta_from_string

View File

@ -8,7 +8,6 @@ from sentry_sdk.hub import Hub
from authentik import get_full_version
from authentik.brands.models import Brand
from authentik.lib.config import CONFIG
from authentik.tenants.utils import get_current_tenant
_q_default = Q(default=True)

View File

@ -78,7 +78,6 @@ from authentik.flows.exceptions import FlowNonApplicableException
from authentik.flows.models import FlowToken
from authentik.flows.planner import PLAN_CONTEXT_PENDING_USER, FlowPlanner
from authentik.flows.views.executor import QS_KEY_TOKEN
from authentik.lib.config import CONFIG
from authentik.stages.email.models import EmailStage
from authentik.stages.email.tasks import send_mails
from authentik.stages.email.utils import TemplateEmailMessage

View File

@ -13,7 +13,6 @@ from authentik.events.tasks import event_notification_handler, gdpr_cleanup
from authentik.flows.models import Stage
from authentik.flows.planner import PLAN_CONTEXT_SOURCE, FlowPlan
from authentik.flows.views.executor import SESSION_KEY_PLAN
from authentik.lib.config import CONFIG
from authentik.stages.invitation.models import Invitation
from authentik.stages.invitation.signals import invitation_used
from authentik.stages.password.stage import PLAN_CONTEXT_METHOD, PLAN_CONTEXT_METHOD_ARGS

View File

@ -11,7 +11,7 @@ from lxml import etree # nosec
from lxml.etree import Element, SubElement # nosec
from requests.exceptions import RequestException
from authentik.lib.config import CONFIG, get_path_from_dict
from authentik.lib.config import get_path_from_dict
from authentik.lib.utils.http import get_http_session
from authentik.tenants.utils import get_current_tenant

View File

@ -1,7 +1,6 @@
from django.conf import settings
from django.core.exceptions import ValidationError
from django.db import connection, transaction
from django.db.utils import ProgrammingError
from django_tenants.utils import schema_exists
CLONE_SCHEMA_FUNCTION = r"""
@ -1225,7 +1224,7 @@ BEGIN
--Fix#65 add another left join to distinguish child tables by inheritance
-- Fix#86 add is_generated to column select
-- Fix#91 add tblowner to the select
-- Fix#105 need a different kinda distint to avoid retrieving a table twice in the case of a table with multiple USER-DEFINED datatypes using DISTINCT ON instead of just DISTINCT
-- Fix#105 need a different kinda distinct to avoid retrieving a table twice in the case of a table with multiple USER-DEFINED datatypes using DISTINCT ON instead of just DISTINCT
--SELECT DISTINCT c.relname, c.relpersistence, c.relispartition, c.relkind, co.data_type, co.udt_name, co.udt_schema, obj_description(c.oid), i.inhrelid,
-- COALESCE(co.is_generated, ''), pg_catalog.pg_get_userbyid(c.relowner) as "Owner", CASE WHEN reltablespace = 0 THEN 'pg_default' ELSE ts.spcname END as tablespace
-- fixed #108 by enclosing owner in double quotes to avoid errors for bad characters like #.@...
@ -1519,7 +1518,7 @@ BEGIN
IF data_type = 'USER-DEFINED' OR isGenerated = 'ALWAYS' THEN
-- RAISE WARNING 'Bypassing copying rows for table (%) with user-defined data types. You must copy them manually.', tblname;
-- wont work --> INSERT INTO clone1.address (id2, id3, addr) SELECT cast(id2 as clone1.udt_myint), cast(id3 as clone1.udt_myint), addr FROM sample.address;
-- won't work --> INSERT INTO clone1.address (id2, id3, addr) SELECT cast(id2 as clone1.udt_myint), cast(id3 as clone1.udt_myint), addr FROM sample.address;
-- Issue#101 --> INSERT INTO clone1.address2 (id2, id3, addr) SELECT id2::text::clone1.udt_myint, id3::text::clone1.udt_myint, addr FROM sample.address;
-- Issue#79 implementation follows
@ -1554,7 +1553,7 @@ BEGIN
IF NOT bRelispart AND NOT bChild THEN
-- Issue#75: Must defer population of tables until child tables have been added to parents
-- Issue#101 Offer alternative of copy to/from file. Although originally intended for tables with UDTs, it is now expanded to handle all cases for performance improvement perhaps for large tables.
-- Issue#106 buffer3 shouldnt be in the mix
-- Issue#106 buffer3 shouldn't be in the mix
-- revisited: buffer3 should be in play for PG versions that handle IDENTITIES
buffer2 := 'INSERT INTO ' || buffer || buffer3 || ' SELECT * FROM ' || quote_ident(source_schema) || '.' || quote_ident(tblname) || ';';
-- buffer2 := 'INSERT INTO ' || buffer || ' SELECT * FROM ' || quote_ident(source_schema) || '.' || quote_ident(tblname) || ';';
@ -1602,7 +1601,7 @@ BEGIN
--Fix#65 add another left join to distinguish child tables by inheritance
-- Fix#86 add is_generated to column select
-- Fix#91 add tblowner to the select
-- Fix#105 need a different kinda distint to avoid retrieving a table twice in the case of a table with multiple USER-DEFINED datatypes using DISTINCT ON instead of just DISTINCT
-- Fix#105 need a different kinda distinct to avoid retrieving a table twice in the case of a table with multiple USER-DEFINED datatypes using DISTINCT ON instead of just DISTINCT
-- Fixed Issue#108: double quote roles to avoid problems with special characters in OWNER TO statements
--SELECT DISTINCT c.relname, c.relpersistence, c.relispartition, c.relkind, co.data_type, co.udt_name, co.udt_schema, obj_description(c.oid), i.inhrelid,
-- COALESCE(co.is_generated, ''), pg_catalog.pg_get_userbyid(c.relowner) as "Owner", CASE WHEN reltablespace = 0 THEN 'pg_default' ELSE ts.spcname END as tablespace
@ -1884,7 +1883,7 @@ BEGIN
IF data_type = 'USER-DEFINED' OR isGenerated = 'ALWAYS' THEN
-- RAISE WARNING 'Bypassing copying rows for table (%) with user-defined data types. You must copy them manually.', tblname;
-- wont work --> INSERT INTO clone1.address (id2, id3, addr) SELECT cast(id2 as clone1.udt_myint), cast(id3 as clone1.udt_myint), addr FROM sample.address;
-- won't work --> INSERT INTO clone1.address (id2, id3, addr) SELECT cast(id2 as clone1.udt_myint), cast(id3 as clone1.udt_myint), addr FROM sample.address;
-- Issue#101 --> INSERT INTO clone1.address2 (id2, id3, addr) SELECT id2::text::clone1.udt_myint, id3::text::clone1.udt_myint, addr FROM sample.address;
-- Issue#79 implementation follows
@ -2655,7 +2654,7 @@ BEGIN
AND n.nspname = quote_ident(source_schema) COLLATE pg_catalog.default
AND pg_catalog.obj_description(t.oid, 'pg_type') IS NOT NULL and t.typtype = 'c'
UNION
-- FIX Isse#87 by adding double quotes around collation name
-- FIX Issue#87 by adding double quotes around collation name
SELECT 'COMMENT ON COLLATION ' || dest_schema || '."' || c.collname || '" IS ''' || pg_catalog.obj_description(c.oid, 'pg_collation') || ''';' as ddl
FROM pg_catalog.pg_collation c, pg_catalog.pg_namespace n
WHERE n.oid = c.collnamespace AND c.collencoding IN (-1, pg_catalog.pg_char_to_encoding(pg_catalog.getdatabaseencoding()))
@ -3193,7 +3192,7 @@ BEGIN
|| quote_ident(dest_schema) || '.') || ';'
FROM pg_constraint ct
JOIN pg_class rn ON rn.oid = ct.conrelid
-- Issue#103 needed to addd this left join
-- Issue#103 needed to add this left join
LEFT JOIN pg_inherits i ON (rn.oid = i.inhrelid)
WHERE connamespace = src_oid
AND rn.relkind = 'r'
@ -3263,7 +3262,7 @@ $BODY$
ALTER FUNCTION public.clone_schema(text, text, cloneparms[]) OWNER TO "{db_user}";
-- REVOKE ALL PRIVILEGES ON FUNCTION clone_schema(text, text, cloneparms[]) FROM public;
"""
""" # noqa
class CloneSchema:

View File

@ -2,18 +2,11 @@
from uuid import uuid4
from django.apps import apps
from django.conf import settings
from django.core.management import call_command
from django.db import connections, models
from django.db.models.base import ValidationError
from django.dispatch import receiver
from django.utils.translation import gettext_lazy as _
from django_tenants.models import (
DomainMixin,
TenantMixin,
post_schema_sync,
schema_needs_to_be_sync,
)
from django_tenants.models import DomainMixin, TenantMixin, post_schema_sync
from django_tenants.postgresql_backend.base import _check_schema_name
from django_tenants.utils import (
get_creation_fakes_migrations,
@ -56,7 +49,8 @@ class Tenant(TenantMixin, SerializerModel):
)
gdpr_compliance = models.BooleanField(
help_text=_(
"When enabled, all the events caused by a user will be deleted upon the user's deletion."
"When enabled, all the events caused by a user "
"will be deleted upon the user's deletion."
),
default=True,
)