diff --git a/wrappers/obj-c/ODWPrivacyConcernMetadataProvider.h b/wrappers/obj-c/ODWPrivacyConcernMetadataProvider.h new file mode 100644 index 000000000..9e7b16344 --- /dev/null +++ b/wrappers/obj-c/ODWPrivacyConcernMetadataProvider.h @@ -0,0 +1,80 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +/*! + @brief Represents a metadata provider for privacy concern events. + */ +@interface ODWPrivacyConcernMetadataProvider : NSObject + +/*! + @brief Get the database name. + @param record The record for which to retrieve the database name. + @return A string representing the database name. + */ +- (NSString *)getDatabaseNameForRecord:(id)record; + +/*! + @brief Get the server name. + @param record The record for which to retrieve the server name. + @return A string representing the server name. + */ +- (NSString *)getServerNameForRecord:(id)record; + +/*! + @brief Get the event locator name. + @param record The record for which to retrieve the event locator name. + @return A string representing the event locator name. + */ +- (NSString *)getEventLocatorNameForRecord:(id)record; + +/*! + @brief Get the event locator value. + @param record The record for which to retrieve the event locator value. + @return A string representing the event locator value. + */ +- (NSString *)getEventLocatorValueForRecord:(id)record; + +/*! + @brief Get the override for the privacy guard event time. + @param record The record for which to retrieve the event time override. + @return An integer representing the event time override. + */ +- (int64_t)getPrivacyGuardEventTimeOverrideForRecord:(id)record; + +/*! + @brief Check if the record should be ignored. + @param record The record to check. + @return A boolean indicating whether the record should be ignored. + */ +- (BOOL)getShouldIgnoreOverrideForRecord:(id)record; + +/*! + @brief Get the associated tenant. + @param record The record for which to retrieve the associated tenant. + @return A string representing the associated tenant. + */ +- (NSString *)getAssociatedTenantForRecord:(id)record; + +/*! + @brief Get the environment. + @param record The record for which to retrieve the environment. + @return A string representing the environment. + */ +- (NSString *)getEnvironmentForRecord:(id)record; + +/*! + @brief Get the metadata. + @param record The record for which to retrieve the metadata. + @return A string representing the metadata. + */ +- (NSString *)getMetadataForRecord:(id)record; + +@end + +NS_ASSUME_NONNULL_END diff --git a/wrappers/obj-c/ODWPrivacyConcernMetadataProvider.mm b/wrappers/obj-c/ODWPrivacyConcernMetadataProvider.mm new file mode 100644 index 000000000..a8b40a64b --- /dev/null +++ b/wrappers/obj-c/ODWPrivacyConcernMetadataProvider.mm @@ -0,0 +1,51 @@ + +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 +// + +#import +#import "ODWPrivacyConcernMetadataProvider.h" + +/*! + @brief Represents a metadata provider for privacy concern events. + */ +@implementation ODWPrivacyConcernMetadataProvider : NSObject + +- (NSString *)getDatabaseNameForRecord:(id)record { + return @""; // Default implementation +} + +- (NSString *)getServerNameForRecord:(id)record { + return @""; // Default implementation +} + +- (NSString *)getEventLocatorNameForRecord:(id)record { + return @"BaseType"; // Default implementation +} + +- (NSString *)getEventLocatorValueForRecord:(id)record { + return [record baseType]; // Example assuming `record` has a `baseType` property +} + +- (int64_t)getPrivacyGuardEventTimeOverrideForRecord:(id)record { + return [record time]; // Example assuming `record` has a `time` property +} + +- (BOOL)getShouldIgnoreOverrideForRecord:(id)record { + return NO; // Default implementation +} + +- (NSString *)getAssociatedTenantForRecord:(id)record { + return [record iKey]; // Example assuming `record` has an `iKey` property +} + +- (NSString *)getEnvironmentForRecord:(id)record { + return @""; // Default implementation +} + +- (NSString *)getMetadataForRecord:(id)record { + return @""; // Default implementation +} + +@end diff --git a/wrappers/obj-c/ODWPrivacyGuard.mm b/wrappers/obj-c/ODWPrivacyGuard.mm index 8bd762dbf..69f80f935 100644 --- a/wrappers/obj-c/ODWPrivacyGuard.mm +++ b/wrappers/obj-c/ODWPrivacyGuard.mm @@ -98,6 +98,10 @@ +(void)initializePrivacyGuard:(ILogger *)logger withODWPrivacyGuardInitConfig:(O { config.SemanticContextNotificationEventName = [[initConfigObject semanticContextNotificationEventName] UTF8String]; } + if ([initConfigObject metadataProvider] != nill) + { + config.metadataProvider = [[]] + } if ([initConfigObject summaryEventName] != nil) { config.SummaryEventName = [[initConfigObject summaryEventName] UTF8String]; diff --git a/wrappers/obj-c/ODWPrivacyGuardInitConfig.h b/wrappers/obj-c/ODWPrivacyGuardInitConfig.h index be6261eed..b8285960b 100644 --- a/wrappers/obj-c/ODWPrivacyGuardInitConfig.h +++ b/wrappers/obj-c/ODWPrivacyGuardInitConfig.h @@ -4,6 +4,7 @@ // #include "objc_begin.h" #import "ODWCommonDataContext.h" +#import "ODWPrivacyConcernMetatadataProvider.h" NS_ASSUME_NONNULL_BEGIN /*! @@ -24,6 +25,11 @@ NS_ASSUME_NONNULL_BEGIN */ @property(readwrite, copy, nonatomic) NSString* semanticContextNotificationEventName; +/*! + @brief (OPTIONAL) Privacy Concern Event metadata provider to use with privacyguard. + */ +@property(readwrite, copy, nonatomic) ODWPrivacyConcernMetadataProvider* metadataProvider; + /*! @brief (OPTIONAL) Custom event name to use when logging summary events. Default value is `PrivacyGuardSummary`. */ diff --git a/wrappers/swift/Headers/ObjCModule-Bridging-Header.h b/wrappers/swift/Headers/ObjCModule-Bridging-Header.h index c0e11bcb8..f67d70bf2 100644 --- a/wrappers/swift/Headers/ObjCModule-Bridging-Header.h +++ b/wrappers/swift/Headers/ObjCModule-Bridging-Header.h @@ -12,6 +12,7 @@ #import "../../obj-c/ODWLogConfiguration.h" #import "../../obj-c/ODWLogger.h" #import "../../obj-c/ODWLogManager.h" +#import "../../obj-c/ODWPrivacyConcernMetadataProvider.h" #import "../../obj-c/ODWPrivacyGuard.h" #import "../../obj-c/ODWPrivacyGuardInitConfig.h" #import "../../obj-c/ODWSemanticContext.h" diff --git a/wrappers/swift/Sources/OneDSSwift/PrivacyConcernMetadataProvider.swift b/wrappers/swift/Sources/OneDSSwift/PrivacyConcernMetadataProvider.swift new file mode 100644 index 000000000..84e62b2bd --- /dev/null +++ b/wrappers/swift/Sources/OneDSSwift/PrivacyConcernMetadataProvider.swift @@ -0,0 +1,68 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 +// + +import ObjCModule + +/// Wrapper over ODWPrivacyConcernMetadataProvider class. +public final class PrivacyConcernMetadataProvider { + + /// ObjC variable which is wrapped by Swift. + var odwPrivacyConcernMetadataProvider: ODWPrivacyConcernMetadataProvider + + /// Constructor initialized with ObjC wrapped object. + init(odwPrivacyConcernMetadataProvider: ODWPrivacyConcernMetadataProvider) { + self.odwPrivacyConcernMetadataProvider = odwPrivacyConcernMetadataProvider + } + + /// Default constructor. + public init() { + odwPrivacyConcernMetadataProvider = ODWPrivacyConcernMetadataProvider() + } + + /// Get the database name for the provided record. + public func getDatabaseName(for record: Any) -> String { + return odwPrivacyConcernMetadataProvider.getDatabaseNameForRecord(record) + } + + /// Get the server name for the provided record. + public func getServerName(for record: Any) -> String { + return odwPrivacyConcernMetadataProvider.getServerNameForRecord(record) + } + + /// Get the event locator name for the provided record. + public func getEventLocatorName(for record: Any) -> String { + return odwPrivacyConcernMetadataProvider.getEventLocatorNameForRecord(record) + } + + /// Get the event locator value for the provided record. + public func getEventLocatorValue(for record: Any) -> String { + return odwPrivacyConcernMetadataProvider.getEventLocatorValueForRecord(record) + } + + /// Get the override for the privacy guard event time for the provided record. + public func getPrivacyGuardEventTimeOverride(for record: Any) -> Int64 { + return odwPrivacyConcernMetadataProvider.getPrivacyGuardEventTimeOverrideForRecord(record) + } + + /// Check if the record should be ignored. + public func getShouldIgnoreOverride(for record: Any) -> Bool { + return odwPrivacyConcernMetadataProvider.getShouldIgnoreOverrideForRecord(record) + } + + /// Get the associated tenant for the provided record. + public func getAssociatedTenant(for record: Any) -> String { + return odwPrivacyConcernMetadataProvider.getAssociatedTenantForRecord(record) + } + + /// Get the environment for the provided record. + public func getEnvironment(for record: Any) -> String { + return odwPrivacyConcernMetadataProvider.getEnvironmentForRecord(record) + } + + /// Get the metadata for the provided record. + public func getMetadata(for record: Any) -> String { + return odwPrivacyConcernMetadataProvider.getMetadataForRecord(record) + } +} diff --git a/wrappers/swift/Sources/OneDSSwift/PrivacyGuardInitConfig.swift b/wrappers/swift/Sources/OneDSSwift/PrivacyGuardInitConfig.swift index 7f660d9f6..4bd77f974 100644 --- a/wrappers/swift/Sources/OneDSSwift/PrivacyGuardInitConfig.swift +++ b/wrappers/swift/Sources/OneDSSwift/PrivacyGuardInitConfig.swift @@ -8,7 +8,7 @@ import ObjCModule public final class PrivacyGuardInitConfig { let odwPrivacyGuardInitConfig: ODWPrivacyGuardInitConfig private var commonDataContext: CommonDataContext - + private var privacyConcernMetadataProvider: PrivacyConcernMetadataProvider /// Data Context to use with the Privacy Guard. public var dataContext: CommonDataContext { get { @@ -20,6 +20,17 @@ public final class PrivacyGuardInitConfig { } } + /// Metadata provider to use with Privacy Guard. + public var metadataProvider: PrivacyConcernMetadataProvider { + get { + return metadataProvider + } + set { + metadataProvider = newValue + odwPrivacyGuardInitConfig.metadataProvider = privacyConcernMetadataProvider.odwPrivacyConcernMetadataProvider + } + } + /// (OPTIONAL) Custom event name to use when logging privacy concerns. Default value is `PrivacyConcern`. public var notificationEventName: String { get { @@ -84,6 +95,8 @@ public final class PrivacyGuardInitConfig { public init() { odwPrivacyGuardInitConfig = ODWPrivacyGuardInitConfig() odwPrivacyGuardInitConfig.dataContext = ODWCommonDataContext() + odwPrivacyGuardInitConfig.metadataProvider = ODWPrivacyConcernMetadataProvider() + metadataProvider = PrivacyConcernMetadataProvider(odwPrivacyConcernMetadataProvider: odwPrivacyGuardInitConfig.metadataProvider) commonDataContext = CommonDataContext(odwCommonDataContext: odwPrivacyGuardInitConfig.dataContext) }