Exemple #1
0
        /// <summary>
        /// Converts the <paramref name="source"/> <see cref="AuditRequest"/> to
        /// an equivalent <see cref="AuditEvent"/> instance
        /// </summary>
        /// <param name="source">The source <see cref="AuditRequest"/>.</param>
        /// <returns>The <see cref="AuditEvent"/></returns>
        internal static AuditEvent AsAuditEvent(this AuditRequest source)
        {
            Contract.Requires(source != null);
            Guard.AgainstNullArgument(nameof(source), source);
            Contract.EndContractBlock();

            var result = new AuditEvent(source);

            return(result);
        }
Exemple #2
0
        /// <summary>
        /// Audits your DTO asynchronously.
        /// </summary>
        /// <param name="auditRequest">The audit request.</param>
        /// <returns></returns>
        public async Task AuditAsync(AuditRequest auditRequest)
        {
            var auditEvent = auditRequest.AsAuditEvent();

            AuditConfiguration.Current.ApplyTo(auditEvent);
            auditEvent.EnsureValid();

            var url = $"{this.serviceBase}/api/{AuditAsyncRoute}";

            await this.httpClient.PostAsJsonAsync(url, auditEvent);
        }
Exemple #3
0
        public async Task AuditAsync(AuditRequest auditRequest)
        {
            var auditEvent = auditRequest.AsAuditEvent();

            AuditConfiguration.Current.ApplyTo(auditEvent);
            auditEvent.EnsureValid();

            var payload = JsonConvert.SerializeObject(auditEvent);
            var message = new BrokeredMessage(payload);

            await this.topicClient.SendAsync(message);
        }
Exemple #4
0
        /// <summary>
        /// Adds a <paramref name="description"/> to the <paramref name="source"/> <see cref="AuditRequest"/>.
        /// </summary>
        /// <param name="source">The source <see cref="AuditRequest"/>.</param>
        /// <param name="description">The description.</param>
        /// <returns>The <see cref="AuditRequest"/></returns>
        public static AuditRequest WithDescription(this AuditRequest source, string description)
        {
            Contract.Requires(source != null);
            Contract.Requires(!string.IsNullOrWhiteSpace(description));
            Guard.AgainstNullArgument(nameof(source), source);
            Guard.AgainstNullArgument(nameof(description), description);
            Contract.EndContractBlock();

            source.Description = description;

            return(source);
        }
Exemple #5
0
        /// <summary>
        /// Defines the <paramref name="eventName"/> for the <paramref name="source"/> <see cref="AuditRequest"/>
        /// </summary>
        /// <param name="source">The source <see cref="AuditRequest"/>.</param>
        /// <param name="eventName">Name of the event.</param>
        /// <returns>The <see cref="AuditRequest"/></returns>
        public static AuditRequest AsEvent(this AuditRequest source, string eventName)
        {
            Contract.Requires(source != null);
            Contract.Requires(!string.IsNullOrWhiteSpace(eventName));
            Guard.AgainstNullArgument(nameof(source), source);
            Guard.AgainstNullArgument(nameof(eventName), eventName);
            Contract.EndContractBlock();

            source.EventType = eventName;

            return(source);
        }
Exemple #6
0
        /// <summary>
        /// Indicates that the <paramref name="source"/> <see cref="AuditRequest"/>
        /// has no data payload
        /// </summary>
        /// <param name="source">The source <see cref="AuditRequest"/>.</param>
        /// <returns>The <see cref="AuditRequest"/></returns>
        public static AuditRequest WithNoData(this AuditRequest source)
        {
            Contract.Requires(source != null);
            Guard.AgainstNullArgument(nameof(source), source);
            Contract.EndContractBlock();

            source.DataType = null;
            source.DataId   = null;
            source.Data     = null;

            return(source);
        }
Exemple #7
0
        /// <summary>
        /// Returns an <see cref="AuditRequest" /> representing a statement about
        /// the target object
        /// </summary>
        /// <typeparam name="T">The type of the target</typeparam>
        /// <param name="target">The target.</param>
        /// <param name="targetIdAccessor">The target identifier accessor.</param>
        /// <returns>
        /// The <see cref="AuditRequest" />
        /// </returns>
        public static AuditRequest AsStatementAbout <T>(T target, Func <T, string> targetIdAccessor)
            where T : class
        {
            Contract.Requires(target != null);
            Contract.Requires(targetIdAccessor != null);
            Guard.AgainstNullArgument(nameof(target), target);
            Guard.AgainstNullArgument(nameof(targetIdAccessor), targetIdAccessor);
            Contract.EndContractBlock();

            var request = new AuditRequest(OperationType.Statement, typeof(T), targetIdAccessor(target));

            return(request);
        }
Exemple #8
0
        /// <summary>
        /// Attaches data to the <paramref name="source"/> <see cref="AuditRequest"/>.
        /// </summary>
        /// <typeparam name="T">The type of the data object</typeparam>
        /// <param name="source">The source <see cref="AuditRequest"/>.</param>
        /// <param name="data">The data object.</param>
        /// <param name="dataIdAccessor">The data identifier accessor.</param>
        /// <returns>The <see cref="AuditRequest"/></returns>
        public static AuditRequest WithData <T>(this AuditRequest source, T data, Func <T, string> dataIdAccessor)
            where T : class
        {
            Contract.Requires(source != null);
            Contract.Requires(data != null);
            Contract.Requires(dataIdAccessor != null);
            Guard.AgainstNullArgument(nameof(source), source);
            Guard.AgainstNullArgument(nameof(data), data);
            Guard.AgainstNullArgument(nameof(dataIdAccessor), dataIdAccessor);
            Contract.EndContractBlock();

            source.Data     = (dynamic)data;
            source.DataType = typeof(T).FullName;
            source.DataId   = dataIdAccessor(data);

            return(source);
        }