expressions: set exception as message field

This commit is contained in:
Jens Langhammer 2021-01-14 21:58:10 +01:00
parent 1c686e19b5
commit 7f5caf901d
6 changed files with 52 additions and 36 deletions

View File

@ -28,7 +28,7 @@ class PropertyMappingEvaluator(BaseEvaluator):
event = Event.new(
EventAction.PROPERTY_MAPPING_EXCEPTION,
expression=expression_source,
error=error_string,
message=error_string,
)
if "user" in self._context:
event.set_user(self._context["user"])

View File

@ -48,12 +48,13 @@ class PolicyProcess(Process):
if connection:
self.connection = connection
def create_event(self, action: str, **kwargs):
def create_event(self, action: str, message: str, **kwargs):
"""Create event with common values from `self.request` and `self.binding`."""
# Keep a reference to http_request even if its None, because cleanse_dict will remove it
http_request = self.request.http_request
event = Event.new(
action=action,
message=message,
policy_uuid=self.binding.policy.policy_uuid.hex,
binding=self.binding,
request=self.request,
@ -76,7 +77,11 @@ class PolicyProcess(Process):
try:
policy_result = self.binding.policy.passes(self.request)
if self.binding.policy.execution_logging:
self.create_event(EventAction.POLICY_EXECUTION, message="Policy Execution", result=policy_result)
self.create_event(
EventAction.POLICY_EXECUTION,
message="Policy Execution",
result=policy_result,
)
except PolicyException as exc:
# Create policy exception event
error_string = "".join(format_tb(exc.__traceback__)) + str(exc)

View File

@ -1,25 +1,24 @@
import { DefaultClient, QueryArguments, PBResponse } from "./Client";
import { Event } from "./Events";
export class Notification {
pk: string;
name: string;
mode: string;
mode_verbose: string;
webhook_url: string;
severity: string;
body: string;
created: string;
event?: Event;
seen: boolean;
constructor() {
throw Error();
}
static get(pk: string): Promise<Transport> {
return DefaultClient.fetch<Transport>(["events", "transports", pk]);
static get(pk: string): Promise<Notification> {
return DefaultClient.fetch<Notification>(["events", "notifications", pk]);
}
static list(filter?: QueryArguments): Promise<PBResponse<Transport>> {
return DefaultClient.fetch<PBResponse<Transport>>(["events", "transports"], filter);
static list(filter?: QueryArguments): Promise<PBResponse<Notification>> {
return DefaultClient.fetch<PBResponse<Notification>>(["events", "notifications"], filter);
}
static adminUrl(rest: string): string {
return `/administration/events/transports/${rest}`;
}
}

View File

@ -1,4 +1,4 @@
import { css, CSSResult, customElement, html, LitElement, TemplateResult } from "lit-element";
import { css, CSSResult, customElement, html, LitElement, property, TemplateResult } from "lit-element";
// @ts-ignore
import NavStyle from "@patternfly/patternfly/components/Nav/nav.css";
// @ts-ignore
@ -8,8 +8,11 @@ import AvatarStyle from "@patternfly/patternfly/components/Avatar/avatar.css";
import { User } from "../../api/Users";
import { until } from "lit-html/directives/until";
import "../notifications/NotificationTrigger";
@customElement("ak-sidebar-user")
export class SidebarUser extends LitElement {
static get styles(): CSSResult[] {
return [
fa,
@ -24,19 +27,8 @@ export class SidebarUser extends LitElement {
}
.pf-c-nav__link {
align-items: center;
}
.user-avatar {
display: flex;
flex-direction: row;
}
.user-avatar > span {
line-height: var(--pf-c-avatar--Height);
padding-left: var(--pf-global--spacer--sm);
font-size: var(--pf-global--FontSize--lg);
}
.user-logout {
flex-shrink: 3;
max-width: 75px;
justify-content: center;
}
`,
];
@ -46,10 +38,11 @@ export class SidebarUser extends LitElement {
return html`
<a href="#/-/user/" class="pf-c-nav__link user-avatar" id="user-settings">
${until(User.me().then(u => {
return html`<img class="pf-c-avatar" src="${u.avatar}" alt="" />
<span>${u.name}</span>`;
}), html``)}
return html`<img class="pf-c-avatar" src="${u.avatar}" alt="" />`;}), html``)}
</a>
<ak-notification-trigger class="pf-c-nav__link user-notifications">
<i class="fas fa-bell pf-c-dropdown__toggle-icon" aria-hidden="true"></i>
</ak-notification-trigger>
<a href="/flows/-/default/invalidation/" class="pf-c-nav__link user-logout" id="logout">
<i class="fas fa-sign-out-alt" aria-hidden="true"></i>
</a>

View File

@ -5,11 +5,15 @@ import { SidebarItem } from "../elements/sidebar/Sidebar";
import "../elements/router/RouterOutlet";
import "../elements/messages/MessageContainer";
import "../elements/sidebar/SidebarHamburger";
import "../elements/notifications/NotificationDrawer"
export abstract class Interface extends LitElement {
@property({type: Boolean})
sidebarOpen = true;
@property({type: Boolean})
notificationOpen = false;
abstract get sidebar(): SidebarItem[];
createRenderRoot(): ShadowRoot | Element {
@ -25,6 +29,9 @@ export abstract class Interface extends LitElement {
window.addEventListener("ak-sidebar-toggle", () => {
this.sidebarOpen = !this.sidebarOpen;
});
window.addEventListener("ak-notification-toggle", () => {
this.notificationOpen = !this.notificationOpen;
});
}
render(): TemplateResult {
@ -35,10 +42,22 @@ export abstract class Interface extends LitElement {
</ak-sidebar-hamburger>
<ak-sidebar class="pf-c-page__sidebar ${this.sidebarOpen ? "pf-m-expanded" : "pf-m-collapsed"}" .items=${this.sidebar}>
</ak-sidebar>
<div class="pf-c-page__drawer">
<div class="pf-c-drawer ${this.notificationOpen ? "pf-m-expanded" : "pf-m-collapsed"}">
<div class="pf-c-drawer__main">
<div class="pf-c-drawer__content">
<div class="pf-c-drawer__body">
<main class="pf-c-page__main">
<ak-router-outlet role="main" class="pf-c-page__main" tabindex="-1" id="main-content" defaultUrl="/library">
</ak-router-outlet>
</main>
</div>
</div>
<ak-notification-drawer class="pf-c-drawer__panel pf-m-width-33">
</ak-notification-drawer>
</div>
</div>
</div>
</div>`;
}

View File

@ -95,7 +95,7 @@ export class EventInfo extends LitElement {
return html`<div class="pf-l-flex">
<div class="pf-l-flex__item">
<h3>${gettext("Exception")}</h3>
<code>${this.event.context.error || this.event.context.message}</code>
<code>${this.event.context.message || this.event.context.error}</code>
</div>
<div class="pf-l-flex__item">
<h3>${gettext("Expression")}</h3>
@ -117,7 +117,7 @@ export class EventInfo extends LitElement {
</div>
<div class="pf-l-flex__item">
<h3>${gettext("Exception")}</h3>
<code>${this.event.context.error}</code>
<code>${this.event.context.message || this.event.context.error}</code>
</div>
</div>`;
case "policy_execution":