tenants: add tests
Signed-off-by: Jens Langhammer <jens.langhammer@beryju.org>
This commit is contained in:
parent
e3578eb7ae
commit
8427fb87f6
|
@ -42,6 +42,7 @@ class TenantSerializer(ModelSerializer):
|
||||||
class CurrentTenantSerializer(PassiveSerializer):
|
class CurrentTenantSerializer(PassiveSerializer):
|
||||||
"""Partial tenant information for styling"""
|
"""Partial tenant information for styling"""
|
||||||
|
|
||||||
|
matched_domain = CharField(source="domain")
|
||||||
branding_title = CharField()
|
branding_title = CharField()
|
||||||
branding_logo = CharField()
|
branding_logo = CharField()
|
||||||
ui_footer_links = ListField(
|
ui_footer_links = ListField(
|
||||||
|
|
36
authentik/tenants/tests.py
Normal file
36
authentik/tenants/tests.py
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
"""Test tenants"""
|
||||||
|
from django.test import TestCase
|
||||||
|
from django.urls import reverse
|
||||||
|
from django.utils.encoding import force_str
|
||||||
|
|
||||||
|
from authentik.lib.config import CONFIG
|
||||||
|
from authentik.tenants.models import Tenant
|
||||||
|
|
||||||
|
|
||||||
|
class TestTenants(TestCase):
|
||||||
|
"""Test tenants"""
|
||||||
|
|
||||||
|
def test_current_tenant(self):
|
||||||
|
"""Test Current tenant API"""
|
||||||
|
self.assertJSONEqual(
|
||||||
|
force_str(self.client.get(reverse("authentik_api:tenant-current")).content),
|
||||||
|
{
|
||||||
|
"branding_logo": "/static/dist/assets/icons/icon_left_brand.svg",
|
||||||
|
"branding_title": "authentik",
|
||||||
|
"matched_domain": "authentik-default",
|
||||||
|
"ui_footer_links": CONFIG.y("authentik.footer_links"),
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_fallback(self):
|
||||||
|
"""Test fallback tenant"""
|
||||||
|
Tenant.objects.all().delete()
|
||||||
|
self.assertJSONEqual(
|
||||||
|
force_str(self.client.get(reverse("authentik_api:tenant-current")).content),
|
||||||
|
{
|
||||||
|
"branding_logo": "/static/dist/assets/icons/icon_left_brand.svg",
|
||||||
|
"branding_title": "authentik",
|
||||||
|
"matched_domain": "fallback",
|
||||||
|
"ui_footer_links": CONFIG.y("authentik.footer_links"),
|
||||||
|
},
|
||||||
|
)
|
|
@ -17,7 +17,7 @@ def get_tenant_for_request(request: HttpRequest) -> Tenant:
|
||||||
Q(domain__iendswith=request.get_host()) | _q_default
|
Q(domain__iendswith=request.get_host()) | _q_default
|
||||||
)
|
)
|
||||||
if not db_tenants.exists():
|
if not db_tenants.exists():
|
||||||
return Tenant()
|
return Tenant(domain="fallback")
|
||||||
return db_tenants.first()
|
return db_tenants.first()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -16514,6 +16514,8 @@ components:
|
||||||
type: object
|
type: object
|
||||||
description: Partial tenant information for styling
|
description: Partial tenant information for styling
|
||||||
properties:
|
properties:
|
||||||
|
matched_domain:
|
||||||
|
type: string
|
||||||
branding_title:
|
branding_title:
|
||||||
type: string
|
type: string
|
||||||
branding_logo:
|
branding_logo:
|
||||||
|
@ -16533,6 +16535,7 @@ components:
|
||||||
required:
|
required:
|
||||||
- branding_logo
|
- branding_logo
|
||||||
- branding_title
|
- branding_title
|
||||||
|
- matched_domain
|
||||||
- ui_footer_links
|
- ui_footer_links
|
||||||
DenyStage:
|
DenyStage:
|
||||||
type: object
|
type: object
|
||||||
|
|
|
@ -6,7 +6,9 @@ import { MessageMiddleware } from "../elements/messages/Middleware";
|
||||||
export class LoggingMiddleware implements Middleware {
|
export class LoggingMiddleware implements Middleware {
|
||||||
|
|
||||||
post(context: ResponseContext): Promise<Response | void> {
|
post(context: ResponseContext): Promise<Response | void> {
|
||||||
console.debug(`authentik/api: ${context.response.status} ${context.init.method} ${context.url}`);
|
tenant().then(tenant => {
|
||||||
|
console.debug(`authentik/api[${tenant.matchedDomain}]: ${context.response.status} ${context.init.method} ${context.url}`);
|
||||||
|
});
|
||||||
return Promise.resolve(context.response);
|
return Promise.resolve(context.response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,7 @@ export const DefaultTenant: CurrentTenant = {
|
||||||
brandingLogo: " /static/dist/assets/icons/icon_left_brand.svg",
|
brandingLogo: " /static/dist/assets/icons/icon_left_brand.svg",
|
||||||
brandingTitle: "authentik",
|
brandingTitle: "authentik",
|
||||||
uiFooterLinks: [],
|
uiFooterLinks: [],
|
||||||
|
matchedDomain: "",
|
||||||
};
|
};
|
||||||
|
|
||||||
@customElement("ak-sidebar-brand")
|
@customElement("ak-sidebar-brand")
|
||||||
|
|
|
@ -92,7 +92,7 @@ export class TenantForm extends ModelForm<Tenant, string> {
|
||||||
designation: FlowsInstancesListDesignationEnum.Authentication,
|
designation: FlowsInstancesListDesignationEnum.Authentication,
|
||||||
}).then(flows => {
|
}).then(flows => {
|
||||||
return flows.results.map(flow => {
|
return flows.results.map(flow => {
|
||||||
let selected = this.instance?.flowAuthentication === flow.pk;
|
const selected = this.instance?.flowAuthentication === flow.pk;
|
||||||
return html`<option value=${flow.pk} ?selected=${selected}>${flow.name} (${flow.slug})</option>`;
|
return html`<option value=${flow.pk} ?selected=${selected}>${flow.name} (${flow.slug})</option>`;
|
||||||
});
|
});
|
||||||
}), html`<option>${t`Loading...`}</option>`)}
|
}), html`<option>${t`Loading...`}</option>`)}
|
||||||
|
@ -109,7 +109,7 @@ export class TenantForm extends ModelForm<Tenant, string> {
|
||||||
designation: FlowsInstancesListDesignationEnum.Invalidation,
|
designation: FlowsInstancesListDesignationEnum.Invalidation,
|
||||||
}).then(flows => {
|
}).then(flows => {
|
||||||
return flows.results.map(flow => {
|
return flows.results.map(flow => {
|
||||||
let selected = this.instance?.flowInvalidation === flow.pk;
|
const selected = this.instance?.flowInvalidation === flow.pk;
|
||||||
return html`<option value=${flow.pk} ?selected=${selected}>${flow.name} (${flow.slug})</option>`;
|
return html`<option value=${flow.pk} ?selected=${selected}>${flow.name} (${flow.slug})</option>`;
|
||||||
});
|
});
|
||||||
}), html`<option>${t`Loading...`}</option>`)}
|
}), html`<option>${t`Loading...`}</option>`)}
|
||||||
|
@ -126,7 +126,7 @@ export class TenantForm extends ModelForm<Tenant, string> {
|
||||||
designation: FlowsInstancesListDesignationEnum.Recovery,
|
designation: FlowsInstancesListDesignationEnum.Recovery,
|
||||||
}).then(flows => {
|
}).then(flows => {
|
||||||
return flows.results.map(flow => {
|
return flows.results.map(flow => {
|
||||||
let selected = this.instance?.flowRecovery === flow.pk;
|
const selected = this.instance?.flowRecovery === flow.pk;
|
||||||
return html`<option value=${flow.pk} ?selected=${selected}>${flow.name} (${flow.slug})</option>`;
|
return html`<option value=${flow.pk} ?selected=${selected}>${flow.name} (${flow.slug})</option>`;
|
||||||
});
|
});
|
||||||
}), html`<option>${t`Loading...`}</option>`)}
|
}), html`<option>${t`Loading...`}</option>`)}
|
||||||
|
@ -143,7 +143,7 @@ export class TenantForm extends ModelForm<Tenant, string> {
|
||||||
designation: FlowsInstancesListDesignationEnum.Recovery,
|
designation: FlowsInstancesListDesignationEnum.Recovery,
|
||||||
}).then(flows => {
|
}).then(flows => {
|
||||||
return flows.results.map(flow => {
|
return flows.results.map(flow => {
|
||||||
let selected = this.instance?.flowUnenrollment === flow.pk;
|
const selected = this.instance?.flowUnenrollment === flow.pk;
|
||||||
return html`<option value=${flow.pk} ?selected=${selected}>${flow.name} (${flow.slug})</option>`;
|
return html`<option value=${flow.pk} ?selected=${selected}>${flow.name} (${flow.slug})</option>`;
|
||||||
});
|
});
|
||||||
}), html`<option>${t`Loading...`}</option>`)}
|
}), html`<option>${t`Loading...`}</option>`)}
|
||||||
|
|
|
@ -8,7 +8,6 @@ import PFForm from "@patternfly/patternfly/components/Form/form.css";
|
||||||
import PFFormControl from "@patternfly/patternfly/components/FormControl/form-control.css";
|
import PFFormControl from "@patternfly/patternfly/components/FormControl/form-control.css";
|
||||||
import { CoreApi, User } from "authentik-api";
|
import { CoreApi, User } from "authentik-api";
|
||||||
import { me } from "../../api/Users";
|
import { me } from "../../api/Users";
|
||||||
import { FlowURLManager } from "../../api/legacy";
|
|
||||||
import { ifDefined } from "lit-html/directives/if-defined";
|
import { ifDefined } from "lit-html/directives/if-defined";
|
||||||
import { DEFAULT_CONFIG, tenant } from "../../api/Config";
|
import { DEFAULT_CONFIG, tenant } from "../../api/Config";
|
||||||
import "../../elements/forms/FormElement";
|
import "../../elements/forms/FormElement";
|
||||||
|
|
Reference in a new issue