// // ViewController.swift // AWSAuthSDKTestApp // import UIKit import AWSMobileClient import AWSCore /// View controller to handle user details. /// /// This controller is not specific for any provider. Controller just displays tokens /// credentials and user attributes. We make the assumption that the user in the userpool /// has two custom attributes named custom:mutableStringAttr1 and custom:mutableStringAttr1 class UserDetailsViewController: UIViewController { let CUSTOM_ATTRIBUTE_KEY1 = "custom:mutableStringAttr1" let CUSTOM_ATTRIBUTE_KEY2 = "custom:mutableStringAttr2" @IBOutlet weak var idTokenLabel: UILabel! @IBOutlet weak var accessTokenLabel: UILabel! @IBOutlet weak var refreshTokenLabel: UILabel! @IBOutlet weak var tokenExpirationLabel: UILabel! @IBOutlet weak var accesKeyLabel: UILabel! @IBOutlet weak var secretKeyLabel: UILabel! @IBOutlet weak var sessionKeyLabel: UILabel! @IBOutlet weak var credentialExpirationLabel: UILabel! @IBOutlet weak var attribute1Label: UILabel! @IBOutlet weak var attribute2Label: UILabel! @IBOutlet weak var attribute3Label: UILabel! @IBOutlet weak var customeAttribute1Label: UILabel! @IBOutlet weak var customeAttribute2Label: UILabel! override func viewDidLoad() { super.viewDidLoad() listenUserState() refreshData() } @IBAction func updateUserAttributeAction(_ sender: Any) { resetData() updateUserAttributes() } func listenUserState() { AWSMobileClient.default().addUserStateListener(self) { (state, additionalInfo) in print("User details state change - \(state)") if (state == .signedOutUserPoolsTokenInvalid) { // Dismiss this view if the user state expired. self.navigationController?.popViewController(animated: true) } } } func refreshData() { fetchUserAttributes() fetchToken() fetchCredentials() } func resetData() { DispatchQueue.main.async { self.idTokenLabel.text = "NA" self.accessTokenLabel.text = "NA" self.refreshTokenLabel.text = "NA" self.tokenExpirationLabel.text = "NA" self.accessTokenLabel.text = "NA" self.secretKeyLabel.text = "NA" self.sessionKeyLabel.text = "NA" self.credentialExpirationLabel.text = "NA" self.attribute1Label.text = "NA" self.attribute2Label.text = "NA" self.attribute3Label.text = "NA" self.customeAttribute1Label.text = "NA" self.customeAttribute2Label.text = "NA" } } func fetchToken() { AWSMobileClient.default().getTokens { (token, error) in DispatchQueue.main.async { guard let result = token else { self.idTokenLabel.text = "NA" self.accessTokenLabel.text = "NA" self.refreshTokenLabel.text = "NA" self.tokenExpirationLabel.text = "NA" return } if let idTokenString = result.idToken?.tokenString { let subIndex = idTokenString.index(idTokenString.startIndex, offsetBy: 20) self.idTokenLabel.text = String(idTokenString[..