@@ -45,10 +45,8 @@ open class Client {
45
45
46
46
public init() {
47
47
http = Client.createHTTP()
48
-
49
- #if os(macOS) || os(iOS) || os(tvOS) || os(watchOS)
50
- addHeaders()
51
- #endif
48
+ addUserAgentHeader()
49
+ addOriginHeader()
52
50
}
53
51
54
52
private static func createHTTP(
@@ -540,51 +538,73 @@ open class Client {
540
538
request .body = .byteBuffer (bodyBuffer )
541
539
}
542
540
543
- private func addHeaders () {
541
+ private func addUserAgentHeader () {
544
542
let packageInfo = OSPackageInfo .get ()
545
- let deviceInfo = OSDeviceInfo ()
546
- var device = " " ;
547
- var operatingSystem = " "
548
-
549
- #if os (iOS )
550
- let iosinfo = deviceInfo .iOSInfo
551
- device = " \(iosinfo!.modelIdentifier) iOS/\(iosinfo!.systemVersion)" ;
552
- operatingSystem = " ios"
553
- #elseif os (tvOS )
554
- let iosinfo = deviceInfo .iOSInfo
555
- device = " \(iosinfo!.systemInfo.machine) tvOS/\(iosinfo!.systemVersion)" ;
556
- operatingSystem = " tvos"
557
- #elseif os (watchOS )
558
- let iosinfo = deviceInfo .iOSInfo
559
- device = " \(iosinfo!.systemInfo.machine) watchOS/\(iosinfo!.systemVersion)" ;
560
- operatingSystem = " watchos"
561
- #elseif os (macOS )
562
- let macinfo = deviceInfo .macOSInfo
563
- device = " (Macintosh; \(macinfo!.model))"
564
- operatingSystem = " macos"
565
- #elseif os (Linux )
566
- let lininfo = deviceInfo .linuxInfo
567
- device = " (Linux; U; \(lininfo!.id) \(lininfo!.version))"
568
- operatingSystem = " linux"
569
- #elseif os (Windows )
570
- let wininfo = deviceInfo .windowsInfo
571
- device = " (Windows NT; \(wininfo!.computerName))"
572
- operatingSystem = " windows"
573
- #endif
543
+ let device = Client .getDevice ()
574
544
575
545
#if !os (Linux ) && !os (Windows )
576
546
_ = addHeader (
577
547
key: " user-agent" ,
578
548
value: " \(packageInfo.packageName)/\(packageInfo.version) \(device)"
579
549
)
580
550
#endif
551
+ }
552
+
553
+ private func addOriginHeader () {
554
+ let packageInfo = OSPackageInfo .get ()
555
+ let operatingSystem = Client .getOperatingSystem ()
581
556
_ = addHeader (
582
557
key: " origin" ,
583
558
value: " {{ spec .title | caseLower }}-\(operatingSystem)://\(packageInfo.packageName)"
584
559
)
585
560
}
586
561
}
587
562
563
+ extension Client {
564
+ private static func getOperatingSystem () -> String {
565
+ #if os(iOS)
566
+ return "ios"
567
+ #elseif os(watchOS)
568
+ return "watchos"
569
+ #elseif os(tvOS)
570
+ return "tvos"
571
+ #elseif os(macOS)
572
+ return "macos"
573
+ #elseif os(Linux)
574
+ return "linux"
575
+ #elseif os(Windows)
576
+ return "windows"
577
+ #endif
578
+ }
579
+
580
+ private static func getDevice() -> String {
581
+ let deviceInfo = OSDeviceInfo()
582
+ var device = ""
583
+
584
+ #if os(iOS)
585
+ let info = deviceInfo.iOSInfo
586
+ device = "\(info!.modelIdentifier) iOS/\(info!.systemVersion)"
587
+ #elseif os(watchOS)
588
+ let info = deviceInfo.watchOSInfo
589
+ device = "\(info!.systemInfo.machine) watchOS/\(info!.systemVersion)"
590
+ #elseif os(tvOS)
591
+ let info = deviceInfo.tvOSInfo
592
+ device = "\(info!.systemInfo.machine) tvOS/\(info!.systemVersion)"
593
+ #elseif os(macOS)
594
+ let info = deviceInfo.macOSInfo
595
+ device = "(Macintosh; \(info!.model))"
596
+ #elseif os(Linux)
597
+ let info = deviceInfo.linuxInfo
598
+ device = "(Linux; U; \(info!.id) \(info!.version))"
599
+ #elseif os(Windows)
600
+ let info = deviceInfo.windowsInfo
601
+ device = "(Windows NT; \(info!.computerName))"
602
+ #endif
603
+
604
+ return device
605
+ }
606
+ }
607
+
588
608
extension Client {
589
609
590
610
public enum HTTPStatus: Int {
0 commit comments