added iOS source code
[wl-app.git] / iOS / Pods / MatomoTracker / MatomoTracker / Visitor.swift
1 //
2 //  Visitor.swift
3 //  PiwikTracker
4 //
5 //  Created by Cornelius Horstmann on 26.02.17.
6 //  Copyright © 2017 PIWIK. All rights reserved.
7 //
8
9 import Foundation
10
11 struct Visitor {
12     /// Unique ID per visitor (device in this case). Should be
13     /// generated upon first start and never changed after.
14     /// api-key: _id
15     let id: String
16     
17     /// An optional user identifier such as email or username.
18     /// api-key: uid
19     let userId: String?
20 }
21
22 extension Visitor {
23     static func current(in matomoUserDefaults: MatomoUserDefaults) -> Visitor {
24         var matomoUserDefaults = matomoUserDefaults
25         let id: String
26         if let existingId = matomoUserDefaults.clientId {
27             id = existingId
28         } else {
29             let newId = newVisitorID()
30             matomoUserDefaults.clientId = newId
31             id = newId
32         }
33         let userId = matomoUserDefaults.visitorUserId
34         return Visitor(id: id, userId: userId)
35     }
36     
37     static func newVisitorID() -> String {
38         let uuid = UUID().uuidString
39         let sanitizedUUID = uuid.replacingOccurrences(of: "-", with: "")
40         let start = sanitizedUUID.startIndex
41         let end = sanitizedUUID.index(start, offsetBy: 16)
42         return String(sanitizedUUID[start..<end])
43     }
44 }