1
1
import Foundation
2
2
import TSCBasic
3
+
3
4
/// Supplies `Authorization` header, typically to be appended to `URLRequest`
4
5
public protocol AuthorizationProviding {
5
6
/// Optional `Authorization` header, likely added to `URLRequest`
@@ -11,6 +12,7 @@ extension AuthorizationProviding {
11
12
return nil
12
13
}
13
14
}
15
+
14
16
#if os(Windows)
15
17
// FIXME: - add support for Windows when regex function available
16
18
#endif
@@ -24,11 +26,9 @@ extension AuthorizationProviding {
24
26
Netrc feature depends upon `NSTextCheckingResult.range(withName name: String) -> NSRange`,
25
27
which is only available in macOS 10.13+ at this time.
26
28
*/
27
-
28
29
@available ( OSX 10 . 13 , * )
29
30
/// Container of parsed netrc connection settings
30
31
public struct Netrc : AuthorizationProviding {
31
-
32
32
/// Representation of `machine` connection settings & `default` connection settings.
33
33
/// If `default` connection settings present, they will be last element.
34
34
public let machines : [ Machine ]
@@ -61,7 +61,6 @@ public struct Netrc: AuthorizationProviding {
61
61
return Netrc . from ( fileContents)
62
62
}
63
63
64
-
65
64
/// Regex matching logic for deriving `Netrc` container from string content
66
65
/// - Parameter content: String text of netrc file
67
66
/// - Returns: `Netrc` container with parsed connection settings, or error
@@ -100,7 +99,6 @@ public struct Netrc: AuthorizationProviding {
100
99
101
100
@available ( OSX 10 . 13 , * )
102
101
public extension Netrc {
103
-
104
102
enum Error : Swift . Error {
105
103
case invalidFilePath
106
104
case fileNotFound( AbsolutePath )
@@ -139,9 +137,7 @@ public extension Netrc {
139
137
140
138
@available ( OSX 10 . 13 , * )
141
139
fileprivate enum RegexUtil {
142
-
143
140
@frozen fileprivate enum Token : String , CaseIterable {
144
-
145
141
case machine, login, password, account, macdef, `default`
146
142
147
143
func capture( prefix: String = " " , in match: NSTextCheckingResult , string: String ) -> String ? {
@@ -151,15 +147,12 @@ fileprivate enum RegexUtil {
151
147
}
152
148
153
149
static let comments : String = " \\ #[ \\ s \\ S]*?.*$ "
154
-
155
150
static let `default` : String = #"(?:\s*(?<default>default))"#
156
151
static let accountOptional : String = #"(?:\s*account\s+\S++)?"#
157
-
158
152
static let loginPassword : String = #" \#( namedTrailingCapture ( " login " , prefix: " lp " ) ) \#( accountOptional) \#( namedTrailingCapture ( " password " , prefix: " lp " ) ) "#
159
153
static let passwordLogin : String = #" \#( namedTrailingCapture ( " password " , prefix: " pl " ) ) \#( accountOptional) \#( namedTrailingCapture ( " login " , prefix: " pl " ) ) "#
160
-
161
154
static let netrcPattern = #"(?:(?:( \#( namedTrailingCapture ( " machine " ) ) | \#( namedMatch ( " default " ) ) ))(?: \#( loginPassword) | \#( passwordLogin) ))"#
162
-
155
+
163
156
static func namedMatch( _ string: String ) -> String {
164
157
return #"(?:\s*(?< \#( string) > \#( string) ))"#
165
158
}
0 commit comments