From 119e277ec86d06306849a5d11fbf9f9a98ec0076 Mon Sep 17 00:00:00 2001 From: Greg Neagle Date: Thu, 15 May 2025 14:28:47 -0700 Subject: [PATCH] A big messy commit. Sorry about that --- .../munki/middleware/MiddlewareFactory.swift | 8 - .../munki/middleware/MiddlewareProtocol.swift | 8 - .../cli/munki/munki.xcodeproj/project.pbxproj | 52 +++ .../munki/shared/munkirepo/RepoFactory.swift | 2 +- code/cli/munki/shared/network/fetch.swift | 35 +- .../middleware/MiddlewareProtocol.swift | 7 +- .../project.pbxproj | 298 ------------------ .../contents.xcworkspacedata | 7 - .../UserInterfaceState.xcuserstate | Bin 170689 -> 0 bytes .../xcschemes/xcschememanagement.plist | 14 - .../AzureStorageMiddleware.swift | 30 -- .../MiddlewareProtocol.swift | 38 --- 12 files changed, 86 insertions(+), 413 deletions(-) delete mode 100644 code/cli/munki/middleware/MiddlewareFactory.swift delete mode 100644 code/cli/munki/middleware/MiddlewareProtocol.swift delete mode 100644 code/cli/s3Middleware/AzureStorageMiddleware.xcodeproj/project.pbxproj delete mode 100644 code/cli/s3Middleware/AzureStorageMiddleware.xcodeproj/project.xcworkspace/contents.xcworkspacedata delete mode 100644 code/cli/s3Middleware/AzureStorageMiddleware.xcodeproj/project.xcworkspace/xcuserdata/gneagle.xcuserdatad/UserInterfaceState.xcuserstate delete mode 100644 code/cli/s3Middleware/AzureStorageMiddleware.xcodeproj/xcuserdata/gneagle.xcuserdatad/xcschemes/xcschememanagement.plist delete mode 100644 code/cli/s3Middleware/AzureStorageMiddleware/AzureStorageMiddleware.swift delete mode 100644 code/cli/s3Middleware/AzureStorageMiddleware/MiddlewareProtocol.swift diff --git a/code/cli/munki/middleware/MiddlewareFactory.swift b/code/cli/munki/middleware/MiddlewareFactory.swift deleted file mode 100644 index 6bce0c41..00000000 --- a/code/cli/munki/middleware/MiddlewareFactory.swift +++ /dev/null @@ -1,8 +0,0 @@ -// -// MiddlewareFactory.swift -// munki -// -// Created by Greg Neagle on 5/10/25. -// - -import Foundation diff --git a/code/cli/munki/middleware/MiddlewareProtocol.swift b/code/cli/munki/middleware/MiddlewareProtocol.swift deleted file mode 100644 index 26540150..00000000 --- a/code/cli/munki/middleware/MiddlewareProtocol.swift +++ /dev/null @@ -1,8 +0,0 @@ -// -// MiddleWareProtocol.swift -// munki -// -// Created by Greg Neagle on 5/10/25. -// - -import Foundation diff --git a/code/cli/munki/munki.xcodeproj/project.pbxproj b/code/cli/munki/munki.xcodeproj/project.pbxproj index 494a5bd2..d4c7a963 100644 --- a/code/cli/munki/munki.xcodeproj/project.pbxproj +++ b/code/cli/munki/munki.xcodeproj/project.pbxproj @@ -167,6 +167,14 @@ C058EF712DCE9C1B002775E0 /* pkginfoOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C030A99E2C3B4F04007F0B34 /* pkginfoOptions.swift */; }; C058EF722DCE9C3E002775E0 /* admincommon.swift in Sources */ = {isa = PBXBuildFile; fileRef = C013643E2C2DCA5C008DB215 /* admincommon.swift */; }; C058EF742DCE9CAE002775E0 /* ArgumentParser in Frameworks */ = {isa = PBXBuildFile; productRef = C058EF732DCE9CAE002775E0 /* ArgumentParser */; }; + C058EF7C2DCF9FB0002775E0 /* MiddlewareProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = C058EF7B2DCF9FB0002775E0 /* MiddlewareProtocol.swift */; }; + C058EF7D2DCF9FB0002775E0 /* MiddlewareProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = C058EF7B2DCF9FB0002775E0 /* MiddlewareProtocol.swift */; }; + C058EF7E2DCF9FB0002775E0 /* MiddlewareProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = C058EF7B2DCF9FB0002775E0 /* MiddlewareProtocol.swift */; }; + C058EF7F2DCF9FB0002775E0 /* MiddlewareProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = C058EF7B2DCF9FB0002775E0 /* MiddlewareProtocol.swift */; }; + C058EF9A2DCFA4B2002775E0 /* MiddlewareFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = C058EF992DCFA4B2002775E0 /* MiddlewareFactory.swift */; }; + C058EF9B2DCFA4B2002775E0 /* MiddlewareFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = C058EF992DCFA4B2002775E0 /* MiddlewareFactory.swift */; }; + C058EF9C2DCFA4B2002775E0 /* MiddlewareFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = C058EF992DCFA4B2002775E0 /* MiddlewareFactory.swift */; }; + C058EF9D2DCFA4B2002775E0 /* MiddlewareFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = C058EF992DCFA4B2002775E0 /* MiddlewareFactory.swift */; }; C05DB20C2DAC62530081FACD /* ArgumentParser in Frameworks */ = {isa = PBXBuildFile; productRef = C05DB20B2DAC62530081FACD /* ArgumentParser */; }; C05DB20D2DAC66810081FACD /* version.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0D00FAF2C458EAA0021DA9C /* version.swift */; }; C05DB20E2DAC66E50081FACD /* readline.swift in Sources */ = {isa = PBXBuildFile; fileRef = C030A9F52C435183007F0B34 /* readline.swift */; }; @@ -684,8 +692,15 @@ C030A9F52C435183007F0B34 /* readline.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = readline.swift; sourceTree = ""; }; C043ED1E2C4822C70047C025 /* sqlite3.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = sqlite3.swift; sourceTree = ""; }; C043ED222C483EEE0047C025 /* rmpkgs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = rmpkgs.swift; sourceTree = ""; }; + C05764AB2DD57C4800FEF66A /* managedsoftwareupdate.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = managedsoftwareupdate.entitlements; sourceTree = ""; }; + C05764AE2DD57CF500FEF66A /* repoclean.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = repoclean.entitlements; sourceTree = ""; }; + C05764AF2DD57CF800FEF66A /* iconimporter.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = iconimporter.entitlements; sourceTree = ""; }; + C05764B02DD57CFF00FEF66A /* munkiimport.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = munkiimport.entitlements; sourceTree = ""; }; + C05764B12DD57D0800FEF66A /* makecatalogs.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = makecatalogs.entitlements; sourceTree = ""; }; C058EF1D2DCD041A002775E0 /* RepoProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RepoProtocol.swift; sourceTree = ""; }; C058EF282DCD11E1002775E0 /* tempfileutils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = tempfileutils.swift; sourceTree = ""; }; + C058EF7B2DCF9FB0002775E0 /* MiddlewareProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MiddlewareProtocol.swift; sourceTree = ""; }; + C058EF992DCFA4B2002775E0 /* MiddlewareFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MiddlewareFactory.swift; sourceTree = ""; }; C05DB2022DAC53150081FACD /* manifestutil */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = manifestutil; sourceTree = BUILT_PRODUCTS_DIR; }; C05DB2122DAC67760081FACD /* manifestutil-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "manifestutil-Bridging-Header.h"; sourceTree = ""; }; C0684DD12DBFDBD20091E774 /* precache_agent */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = precache_agent; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -982,6 +997,7 @@ C030A9CE2C41F798007F0B34 /* munkiimport */ = { isa = PBXGroup; children = ( + C05764B02DD57CFF00FEF66A /* munkiimport.entitlements */, C030A9CF2C41F798007F0B34 /* munkiimport.swift */, ); path = munkiimport; @@ -998,6 +1014,15 @@ path = installer; sourceTree = ""; }; + C058EF7A2DCF9F6E002775E0 /* middleware */ = { + isa = PBXGroup; + children = ( + C058EF7B2DCF9FB0002775E0 /* MiddlewareProtocol.swift */, + C058EF992DCFA4B2002775E0 /* MiddlewareFactory.swift */, + ); + path = middleware; + sourceTree = ""; + }; C0684E462DC586250091E774 /* osinstaller */ = { isa = PBXGroup; children = ( @@ -1062,6 +1087,7 @@ C07A6FA72C2A82B400090743 /* managedsoftwareupdate */ = { isa = PBXGroup; children = ( + C05764AB2DD57C4800FEF66A /* managedsoftwareupdate.entitlements */, C07A6FA82C2A82B400090743 /* managedsoftwareupdate.swift */, C0011CB42C7EC5B60004ED70 /* msuutils.swift */, C0011CB72C7F86480004ED70 /* distributednotifications.swift */, @@ -1082,6 +1108,7 @@ C07A6FC52C2B5C0700090743 /* makecatalogs */ = { isa = PBXGroup; children = ( + C05764B12DD57D0800FEF66A /* makecatalogs.entitlements */, C07A6FC62C2B5C0700090743 /* makecatalogs.swift */, ); path = makecatalogs; @@ -1174,6 +1201,7 @@ C07AED6D2C67DF4F00DE6119 /* network */ = { isa = PBXGroup; children = ( + C058EF7A2DCF9F6E002775E0 /* middleware */, C07AED6E2C67DF6B00DE6119 /* gurl.swift */, C07AED712C67F77000DE6119 /* sslerrors.swift */, C01792D22C6BC81B008CBC22 /* fetch.swift */, @@ -1186,6 +1214,7 @@ C0848D182C94D1840008B463 /* iconimporter */ = { isa = PBXGroup; children = ( + C05764AF2DD57CF800FEF66A /* iconimporter.entitlements */, C0848D192C94D1840008B463 /* iconimporter.swift */, ); path = iconimporter; @@ -1194,6 +1223,7 @@ C0BF62CE2CEC00E90030885D /* repoclean */ = { isa = PBXGroup; children = ( + C05764AE2DD57CF500FEF66A /* repoclean.entitlements */, C0BF62CF2CEC00E90030885D /* repoclean.swift */, ); path = repoclean; @@ -1868,6 +1898,7 @@ C0684DE02DBFDD530091E774 /* munkistatus.swift in Sources */, C0684DEC2DBFDF470091E774 /* cliutils.swift in Sources */, C0684DDD2DBFDD0C0091E774 /* stderrout.swift in Sources */, + C058EF9A2DCFA4B2002775E0 /* MiddlewareFactory.swift in Sources */, C0684DF52DBFE2580091E774 /* dmgutils.swift in Sources */, C0684DE22DBFDD930091E774 /* fetch.swift in Sources */, C0684DEA2DBFDF0D0091E774 /* munkihash.swift in Sources */, @@ -1886,6 +1917,7 @@ C0684DED2DBFDF5C0091E774 /* keychain.swift in Sources */, C0684DDE2DBFDD190091E774 /* constants.swift in Sources */, C058EF302DCD18D3002775E0 /* tempfileutils.swift in Sources */, + C058EF7E2DCF9FB0002775E0 /* MiddlewareProtocol.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1921,6 +1953,7 @@ files = ( C0684E9B2DC7E5700091E774 /* manifests.swift in Sources */, C0684E6C2DC73C150091E774 /* plistutils.swift in Sources */, + C058EF7F2DCF9FB0002775E0 /* MiddlewareProtocol.swift in Sources */, C058EF242DCD041A002775E0 /* RepoProtocol.swift in Sources */, C0684E792DC7BF2F0091E774 /* prefs.swift in Sources */, C0684E8E2DC7E2D10091E774 /* dateutils.swift in Sources */, @@ -1950,6 +1983,7 @@ C0684E9E2DC7E59B0091E774 /* stoprequested.swift in Sources */, C0684E892DC7E2470091E774 /* gurl.swift in Sources */, C0684E8A2DC7E2470091E774 /* clientcerts.swift in Sources */, + C058EF9D2DCFA4B2002775E0 /* MiddlewareFactory.swift in Sources */, C0684EA92DC83B9A0091E774 /* appleupdates.swift in Sources */, C0684E852DC7C6220091E774 /* download.swift in Sources */, C0684E942DC7E3BC0091E774 /* dmgutils.swift in Sources */, @@ -1997,6 +2031,8 @@ C07A6FDA2C2CF19600090743 /* cliutils.swift in Sources */, C0D9C2A02C6175A10019A067 /* processes.swift in Sources */, C01364432C2DD1BA008DB215 /* plistutils.swift in Sources */, + C058EF9C2DCFA4B2002775E0 /* MiddlewareFactory.swift in Sources */, + C058EF7C2DCF9FB0002775E0 /* MiddlewareProtocol.swift in Sources */, C00519A92D2A5C180060DDB6 /* authrestartclient.swift in Sources */, C01792D32C6BC81B008CBC22 /* fetch.swift in Sources */, C0684E3D2DC19C7A0091E774 /* BlockingApplications.swift in Sources */, @@ -2065,6 +2101,7 @@ C01792EC2C75089F008CBC22 /* licensing.swift in Sources */, C0D00FB72C45BCB90021DA9C /* errors.swift in Sources */, C07A9D9E2C86CB3A00D5D4B2 /* msuoptions.swift in Sources */, + C058EF7D2DCF9FB0002775E0 /* MiddlewareProtocol.swift in Sources */, C0B7FA022D288C2700CC14F0 /* authrestart.swift in Sources */, C030A9C82C41F32E007F0B34 /* munkiimportOptions.swift in Sources */, C030A9C02C409738007F0B34 /* iconutils.swift in Sources */, @@ -2118,6 +2155,7 @@ C030A9C12C419565007F0B34 /* osinstaller.swift in Sources */, C06C21352C8793720023E9D9 /* bootstrapping.swift in Sources */, C0D9C2B12C62D4120019A067 /* powermanager.swift in Sources */, + C058EF9B2DCFA4B2002775E0 /* MiddlewareFactory.swift in Sources */, C0D9C2982C6012C80019A067 /* dmg.swift in Sources */, C030A9C22C41B556007F0B34 /* pkginfolib.swift in Sources */, C058EF232DCD041A002775E0 /* RepoProtocol.swift in Sources */, @@ -2416,6 +2454,7 @@ isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = munkiimport/munkiimport.entitlements; CODE_SIGN_STYLE = Manual; CREATE_INFOPLIST_SECTION_IN_BINARY = NO; DEAD_CODE_STRIPPING = YES; @@ -2437,6 +2476,7 @@ isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = munkiimport/munkiimport.entitlements; CODE_SIGN_STYLE = Manual; CREATE_INFOPLIST_SECTION_IN_BINARY = NO; DEAD_CODE_STRIPPING = YES; @@ -2456,6 +2496,7 @@ C05DB2062DAC53150081FACD /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CODE_SIGN_ENTITLEMENTS = manifestutil/manifestutil.entitlements; CODE_SIGN_STYLE = Manual; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = ""; @@ -2472,6 +2513,7 @@ C05DB2072DAC53150081FACD /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + CODE_SIGN_ENTITLEMENTS = manifestutil/manifestutil.entitlements; CODE_SIGN_STYLE = Manual; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = ""; @@ -2488,6 +2530,7 @@ C0684DD62DBFDBD20091E774 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CODE_SIGN_ENTITLEMENTS = precache_agent/precache_agent.entitlements; CODE_SIGN_STYLE = Manual; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = ""; @@ -2503,6 +2546,7 @@ C0684DD72DBFDBD20091E774 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + CODE_SIGN_ENTITLEMENTS = precache_agent/precache_agent.entitlements; CODE_SIGN_STYLE = Manual; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = ""; @@ -2731,6 +2775,7 @@ isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = managedsoftwareupdate/managedsoftwareupdate.entitlements; CODE_SIGN_STYLE = Manual; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = ""; @@ -2750,6 +2795,7 @@ isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = managedsoftwareupdate/managedsoftwareupdate.entitlements; CODE_SIGN_STYLE = Manual; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = ""; @@ -2804,6 +2850,7 @@ C07A6FC92C2B5C0700090743 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CODE_SIGN_ENTITLEMENTS = makecatalogs/makecatalogs.entitlements; CODE_SIGN_STYLE = Manual; CREATE_INFOPLIST_SECTION_IN_BINARY = NO; DEAD_CODE_STRIPPING = YES; @@ -2823,6 +2870,7 @@ C07A6FCA2C2B5C0700090743 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + CODE_SIGN_ENTITLEMENTS = makecatalogs/makecatalogs.entitlements; CODE_SIGN_STYLE = Manual; CREATE_INFOPLIST_SECTION_IN_BINARY = NO; DEAD_CODE_STRIPPING = YES; @@ -2842,6 +2890,7 @@ C0848D1B2C94D1840008B463 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CODE_SIGN_ENTITLEMENTS = iconimporter/iconimporter.entitlements; CODE_SIGN_STYLE = Manual; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = ""; @@ -2858,6 +2907,7 @@ C0848D1C2C94D1840008B463 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + CODE_SIGN_ENTITLEMENTS = iconimporter/iconimporter.entitlements; CODE_SIGN_STYLE = Manual; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = ""; @@ -2874,6 +2924,7 @@ C0BF62D12CEC00E90030885D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CODE_SIGN_ENTITLEMENTS = repoclean/repoclean.entitlements; CODE_SIGN_STYLE = Manual; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = ""; @@ -2890,6 +2941,7 @@ C0BF62D22CEC00E90030885D /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + CODE_SIGN_ENTITLEMENTS = repoclean/repoclean.entitlements; CODE_SIGN_STYLE = Manual; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = ""; diff --git a/code/cli/munki/shared/munkirepo/RepoFactory.swift b/code/cli/munki/shared/munkirepo/RepoFactory.swift index 08e7679e..3f556734 100644 --- a/code/cli/munki/shared/munkirepo/RepoFactory.swift +++ b/code/cli/munki/shared/munkirepo/RepoFactory.swift @@ -23,7 +23,7 @@ import Foundation /// Loads a Repo plugin from a dylib /// implementation lifted from /// https://theswiftdev.com/building-and-loading-dynamic-libraries-at-runtime-in-swift/ -func loadRepoPlugin(at path: String) throws -> RepoPluginBuilder { +private func loadRepoPlugin(at path: String) throws -> RepoPluginBuilder { typealias InitFunction = @convention(c) () -> UnsafeMutableRawPointer let openRes = dlopen(path, RTLD_NOW | RTLD_LOCAL) diff --git a/code/cli/munki/shared/network/fetch.swift b/code/cli/munki/shared/network/fetch.swift index 1e33d906..4511f046 100644 --- a/code/cli/munki/shared/network/fetch.swift +++ b/code/cli/munki/shared/network/fetch.swift @@ -141,9 +141,22 @@ func headerDictFromList(_ strList: [String]?) -> [String: String] { return headerDict } -func runMiddleware(options: GurlOptions, pkginfo _: PlistDict?) -> GurlOptions { - // placeholder function - return options +/// Attempts to process our request via a middleware plugin, if one is found +func runMiddleware(_ request: MunkiMiddlewareRequest) -> MunkiMiddlewareRequest { + let display = DisplayAndLog.main + do { + if let middleware = try loadMiddlewarePlugin() { + display.debug2("Running middleware plugin") + display.debug2("Input: \(request)") + let modifiedRequest = middleware.processRequest(request) + display.debug2("Output: \(modifiedRequest)") + return modifiedRequest + } + } catch { + display.error("Could not load middleware plugin: \(error.localizedDescription)") + } + // no plugin found, or error loading plugin -- just return unmodified request + return request } /// Gets an HTTP or HTTPS URL and stores it in @@ -171,6 +184,15 @@ func getURL( if pathExists(tempDownloadPath), !resume { try? FileManager.default.removeItem(atPath: tempDownloadPath) } + + let headers = headerDictFromList(customHeaders) + + // Run middleware + var request = MunkiMiddlewareRequest( + url: url, + headers: headers + ) + request = runMiddleware(request) var cacheData: [String: String]? if onlyIfNewer, pathExists(destinationPath) { @@ -184,9 +206,9 @@ func getURL( let ignoreSystemProxy = pref("IgnoreSystemProxies") as? Bool ?? false var options = GurlOptions( - url: url, + url: request.url, destinationPath: tempDownloadPath, - additionalHeaders: headerDictFromList(customHeaders), + additionalHeaders: request.headers, followRedirects: followRedirects, ignoreSystemProxy: ignoreSystemProxy, canResume: resume, @@ -195,9 +217,6 @@ func getURL( log: DisplayAndLog.main.debug2 ) - // TODO: middleware support - options = runMiddleware(options: options, pkginfo: pkginfo) - let display = DisplayAndLog.main let session = Gurl(options: options) var displayMessage = message diff --git a/code/cli/munki/shared/network/middleware/MiddlewareProtocol.swift b/code/cli/munki/shared/network/middleware/MiddlewareProtocol.swift index c28e4487..6e8b33a4 100644 --- a/code/cli/munki/shared/network/middleware/MiddlewareProtocol.swift +++ b/code/cli/munki/shared/network/middleware/MiddlewareProtocol.swift @@ -20,8 +20,13 @@ import Foundation +public struct MunkiMiddlewareRequest { + var url: String + var headers: [String: String] +} + public protocol MunkiMiddleware { - func processRequest(_ request: URLRequest) -> URLRequest + func processRequest(_ request: MunkiMiddlewareRequest) -> MunkiMiddlewareRequest } open class MiddlewarePluginBuilder { diff --git a/code/cli/s3Middleware/AzureStorageMiddleware.xcodeproj/project.pbxproj b/code/cli/s3Middleware/AzureStorageMiddleware.xcodeproj/project.pbxproj deleted file mode 100644 index b14f4765..00000000 --- a/code/cli/s3Middleware/AzureStorageMiddleware.xcodeproj/project.pbxproj +++ /dev/null @@ -1,298 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 77; - objects = { - -/* Begin PBXFileReference section */ - C058EF892DCFA10A002775E0 /* libs3Middleware.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libs3Middleware.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; -/* End PBXFileReference section */ - -/* Begin PBXFileSystemSynchronizedRootGroup section */ - C058EF8B2DCFA10A002775E0 /* s3Middleware */ = { - isa = PBXFileSystemSynchronizedRootGroup; - path = s3Middleware; - sourceTree = ""; - }; -/* End PBXFileSystemSynchronizedRootGroup section */ - -/* Begin PBXFrameworksBuildPhase section */ - C058EF872DCFA10A002775E0 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - C058EF802DCFA10A002775E0 = { - isa = PBXGroup; - children = ( - C058EF8B2DCFA10A002775E0 /* s3Middleware */, - C058EF8A2DCFA10A002775E0 /* Products */, - ); - sourceTree = ""; - }; - C058EF8A2DCFA10A002775E0 /* Products */ = { - isa = PBXGroup; - children = ( - C058EF892DCFA10A002775E0 /* libs3Middleware.dylib */, - ); - name = Products; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - C058EF852DCFA10A002775E0 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - C058EF882DCFA10A002775E0 /* s3Middleware */ = { - isa = PBXNativeTarget; - buildConfigurationList = C058EF922DCFA10A002775E0 /* Build configuration list for PBXNativeTarget "s3Middleware" */; - buildPhases = ( - C058EF852DCFA10A002775E0 /* Headers */, - C058EF862DCFA10A002775E0 /* Sources */, - C058EF872DCFA10A002775E0 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - fileSystemSynchronizedGroups = ( - C058EF8B2DCFA10A002775E0 /* s3Middleware */, - ); - name = s3Middleware; - packageProductDependencies = ( - ); - productName = s3Middleware; - productReference = C058EF892DCFA10A002775E0 /* libs3Middleware.dylib */; - productType = "com.apple.product-type.library.dynamic"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - C058EF812DCFA10A002775E0 /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = 1; - LastUpgradeCheck = 1630; - TargetAttributes = { - C058EF882DCFA10A002775E0 = { - CreatedOnToolsVersion = 16.3; - LastSwiftMigration = 1630; - }; - }; - }; - buildConfigurationList = C058EF842DCFA10A002775E0 /* Build configuration list for PBXProject "s3Middleware" */; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = C058EF802DCFA10A002775E0; - minimizedProjectReferenceProxies = 1; - preferredProjectObjectVersion = 77; - productRefGroup = C058EF8A2DCFA10A002775E0 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - C058EF882DCFA10A002775E0 /* s3Middleware */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXSourcesBuildPhase section */ - C058EF862DCFA10A002775E0 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - C058EF902DCFA10A002775E0 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MACOSX_DEPLOYMENT_TARGET = 15.4; - MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; - MTL_FAST_MATH = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = macosx; - }; - name = Debug; - }; - C058EF912DCFA10A002775E0 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_USER_SCRIPT_SANDBOXING = YES; - GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MACOSX_DEPLOYMENT_TARGET = 15.4; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - SDKROOT = macosx; - }; - name = Release; - }; - C058EF932DCFA10A002775E0 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_STYLE = Automatic; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - EXECUTABLE_PREFIX = lib; - MACOSX_DEPLOYMENT_TARGET = 10.15; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 6.0; - }; - name = Debug; - }; - C058EF942DCFA10A002775E0 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_STYLE = Automatic; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - EXECUTABLE_PREFIX = lib; - MACOSX_DEPLOYMENT_TARGET = 10.15; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - SWIFT_VERSION = 6.0; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - C058EF842DCFA10A002775E0 /* Build configuration list for PBXProject "s3Middleware" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C058EF902DCFA10A002775E0 /* Debug */, - C058EF912DCFA10A002775E0 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - C058EF922DCFA10A002775E0 /* Build configuration list for PBXNativeTarget "s3Middleware" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C058EF932DCFA10A002775E0 /* Debug */, - C058EF942DCFA10A002775E0 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = C058EF812DCFA10A002775E0 /* Project object */; -} diff --git a/code/cli/s3Middleware/AzureStorageMiddleware.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/code/cli/s3Middleware/AzureStorageMiddleware.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 919434a6..00000000 --- a/code/cli/s3Middleware/AzureStorageMiddleware.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/code/cli/s3Middleware/AzureStorageMiddleware.xcodeproj/project.xcworkspace/xcuserdata/gneagle.xcuserdatad/UserInterfaceState.xcuserstate b/code/cli/s3Middleware/AzureStorageMiddleware.xcodeproj/project.xcworkspace/xcuserdata/gneagle.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index 698bc09ba452834975aaab246a88b659cf269433..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 170689 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

`R$bZPW`geKKooRer}$h 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 lawU&oE>-$6jPIF7vA? - - - - SchemeUserState - - s3Middleware.xcscheme_^#shared#^_ - - orderHint - 0 - - - - diff --git a/code/cli/s3Middleware/AzureStorageMiddleware/AzureStorageMiddleware.swift b/code/cli/s3Middleware/AzureStorageMiddleware/AzureStorageMiddleware.swift deleted file mode 100644 index 050ee891..00000000 --- a/code/cli/s3Middleware/AzureStorageMiddleware/AzureStorageMiddleware.swift +++ /dev/null @@ -1,30 +0,0 @@ -// -// s3Middleware.swift -// s3Middleware -// -// Created by Greg Neagle on 5/10/25. -// - -import Foundation - -class s3Middleware: MunkiMiddleware { - func processRequest(_ request: MunkiMiddlewareRequest) -> MunkiMiddlewareRequest { - var modifiedRequest = request - modifiedRequest.headers["X-Custom-Header-Hello"] = "Hello, World!" - return modifiedRequest - } -} - -// MARK: dylib "interface" - -/// Function with C calling style for our dylib. We use it to instantiate the Repo object and return an instance -@_cdecl("createPlugin") -public func createPlugin() -> UnsafeMutableRawPointer { - return Unmanaged.passRetained(MWA2APIRepoBuilder()).toOpaque() -} - -final class MWA2APIRepoBuilder: MiddlewarePluginBuilder { - override func create() -> MunkiMiddleware { - return s3Middleware() - } -} diff --git a/code/cli/s3Middleware/AzureStorageMiddleware/MiddlewareProtocol.swift b/code/cli/s3Middleware/AzureStorageMiddleware/MiddlewareProtocol.swift deleted file mode 100644 index 6e8b33a4..00000000 --- a/code/cli/s3Middleware/AzureStorageMiddleware/MiddlewareProtocol.swift +++ /dev/null @@ -1,38 +0,0 @@ -// -// MiddlewareProtocol.swift -// munki -// -// Created by Greg Neagle on 5/10/25. -// -// Copyright 2025 Greg Neagle. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import Foundation - -public struct MunkiMiddlewareRequest { - var url: String - var headers: [String: String] -} - -public protocol MunkiMiddleware { - func processRequest(_ request: MunkiMiddlewareRequest) -> MunkiMiddlewareRequest -} - -open class MiddlewarePluginBuilder { - // public init() {} - - open func create() -> MunkiMiddleware { - fatalError("You have to override this method.") - } -}