/// <summary> /// Start auditor service /// </summary> public bool Start() { this.Starting?.Invoke(this, EventArgs.Empty); this.m_safeToStop = false; ApplicationServiceContext.Current.Stopping += (o, e) => { this.m_safeToStop = true; this.Stop(); }; ApplicationServiceContext.Current.Started += (o, e) => { try { this.m_tracer.TraceInfo("Binding to service events..."); if (ApplicationServiceContext.Current.GetService <IIdentityProviderService>() != null) { ApplicationServiceContext.Current.GetService <IIdentityProviderService>().Authenticated += (so, se) => { AuditUtil.AuditLogin(se.Principal, se.UserName, so as IIdentityProviderService, se.Success); } } ; if (ApplicationServiceContext.Current.GetService <ISessionProviderService>() != null) { ApplicationServiceContext.Current.GetService <ISessionProviderService>().Established += (so, se) => { if (se.Elevated) { AuditUtil.AuditOverride(se.Session, se.Principal, se.Purpose, se.Policies, se.Success); } AuditUtil.AuditSessionStart(se.Session, se.Principal, se.Success); }; ApplicationServiceContext.Current.GetService <ISessionProviderService>().Abandoned += (so, se) => AuditUtil.AuditSessionStop(se.Session, se.Principal, se.Success); } // Audit that Audits are now being recorded var audit = new AuditData(DateTimeOffset.Now, ActionType.Execute, OutcomeIndicator.Success, EventIdentifierType.ApplicationActivity, AuditUtil.CreateAuditActionCode(EventTypeCodes.AuditLoggingStarted)); AuditUtil.AddLocalDeviceActor(audit); AuditUtil.SendAudit(audit); } catch (Exception ex) { this.m_tracer.TraceError("Error starting up audit repository service: {0}", ex); } }; this.Started?.Invoke(this, EventArgs.Empty); return(true); }