Skip to content

Commit

Permalink
fixed regression for password change not capturing new password on azure
Browse files Browse the repository at this point in the history
  • Loading branch information
twocanoes committed Apr 7, 2023
1 parent 5a6cc5a commit 8db379d
Show file tree
Hide file tree
Showing 7 changed files with 193 additions and 48 deletions.
62 changes: 62 additions & 0 deletions LicenseChecker.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
//
// LicenseChecker.swift
// XCreds
//
// Created by Timothy Perfitt on 3/28/23.
//

import Cocoa

class LicenseChecker: NSObject {
enum LicenseState {
case valid
case invalid
case trial(Int)
case trialExpired
case expired
}

func currentLicenseState() -> LicenseState {
let trialDays = 14

if UserDefaults.standard.value(forKey: "tts") == nil {
UserDefaults.standard.setValue(Date(), forKey: "tts")
}
let firstLaunchDate = UserDefaults.standard.value(forKey: "tts") as? Date

var trialState = LicenseState.trialExpired
if let firstLaunchDate = firstLaunchDate {
let secondsPassed = Date().timeIntervalSince(firstLaunchDate)
let trialDaysLeft=trialDays-(Int(secondsPassed)/(24*60*60));

if secondsPassed<Double(24*60*60*trialDays) {
trialState = .trial(trialDaysLeft)
}

}
let check = TCSLicenseCheck()
let status = check.checkLicenseStatus("com.twocanoes.xcreds", withExtension: "")

switch status {

case .valid:
TCSLogWithMark("valid license")
return .valid
case .expired:
TCSLogWithMark("expired license")
return trialState

case .invalid:
TCSLogWithMark("license invalid")
return trialState
case .unset:
TCSLogWithMark("No License")
return trialState
default:
TCSLogWithMark("invalid license")
return trialState
}

}

}
38 changes: 31 additions & 7 deletions XCreds/WebView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,39 @@ class WebViewController: NSWindowController {
@IBOutlet weak var cancelButton: NSButton!

var password:String?

func loadPage() {


let licenseState = LicenseChecker().currentLicenseState()
if let refreshTitleTextField = refreshTitleTextField {
refreshTitleTextField.isHidden = !UserDefaults.standard.bool(forKey: PrefKeys.shouldShowRefreshBanner.rawValue)
}

webView.navigationDelegate = self
TokenManager.shared.oidc().delegate = self
clearCookies()
if let url = TokenManager.shared.oidc().createLoginURL() {

switch licenseState {

case .valid, .trial(_):
break
case .invalid,.trialExpired, .expired:
let allBundles = Bundle.allBundles
for currentBundle in allBundles {
TCSLogWithMark(currentBundle.bundlePath)
if currentBundle.bundlePath.contains("XCreds") {
TCSLogWithMark()
let loadPageURL = currentBundle.url(forResource: "errorpage", withExtension: "html")
TCSLogWithMark(loadPageURL?.debugDescription ?? "none")
self.webView.load(URLRequest(url:loadPageURL!))
break
}
}
return

}
if let url = TokenManager.shared.oidc().createLoginURL() {
TCSLogWithMark()
self.webView.load(URLRequest(url: url))
}
Expand Down Expand Up @@ -251,12 +273,14 @@ extension WebViewController: WKNavigationDelegate {
}
})

// javaScript = "document.getElementById('confirmNewPassword').value"
// webView.evaluateJavaScript(javaScript, completionHandler: { response, error in
// if let rawPass = response as? String {
// self.password=rawPass
// }
// })
javaScript = "document.getElementById('confirmNewPassword').value"
webView.evaluateJavaScript(javaScript, completionHandler: { response, error in
if let rawPass = response as? String {
TCSLogWithMark("========= new password set===========")

self.password=rawPass
}
})
} else if navigationAction.request.url?.host == "accounts.google.com" {
// Google snarfing
TCSLogWithMark("Google")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,37 @@ class LoginWindowControlsWindowController: NSWindowController {
}
override func windowDidLoad() {
super.windowDidLoad()
let licenseState = LicenseChecker().currentLicenseState()


switch licenseState {

case .valid:
TCSLogWithMark("valid license")
self.trialVersionStatusTextField?.isHidden = true

case .expired:
self.trialVersionStatusTextField.stringValue = "License Expired. Please visit twocanoes.com for more information."


case .trial(let daysRemaining):
TCSLogWithMark("Trial")
self.trialVersionStatusTextField?.isHidden = false
self.trialVersionStatusTextField.stringValue = "XCreds Trial. \(daysRemaining) left on trial."

case .trialExpired:
TCSLogWithMark("Trial Expired")
self.trialVersionStatusTextField?.isHidden = false
self.trialVersionStatusTextField.stringValue = "Trial Expired"



default:
TCSLogWithMark("invalid license")
self.trialVersionStatusTextField?.isHidden = false
self.trialVersionStatusTextField.stringValue = "Invalid License. Please visit twocanoes.com for more information."

}
setupLoginWindowControlsAppearance()
let allBundles = Bundle.allBundles
versionTextField?.stringValue = ""
Expand Down Expand Up @@ -70,22 +101,6 @@ class LoginWindowControlsWindowController: NSWindowController {
self.macLoginWindowGribColumn?.isHidden = !UserDefaults.standard.bool(forKey: PrefKeys.shouldShowMacLoginButton .rawValue)

self.versionTextField?.isHidden = !UserDefaults.standard.bool(forKey: PrefKeys.shouldShowVersionInfo.rawValue)
self.trialVersionStatusTextField?.isHidden = false

// self.versionTextField?.isHidden = !UserDefaults.standard.bool(forKey: PrefKeys.shouldShowVersionInfo.rawValue)
let check = TCSLicenseCheck()

let status = check.checkLicenseStatus("com.twocanoes.xcreds", withExtension: "")

if status != .invalid {
TCSLogWithMark("valid license")

}
else {
TCSLogWithMark("invalid license")

}



self.window?.level = .screenSaver
Expand Down
2 changes: 1 addition & 1 deletion XCredsLoginPlugIn/loadpage.html
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
<body>
<div class="center-screen">
<h1>Please Wait....</h1>
<p>(or try connecting to network or check preferences)
<p>(or try connecting to network or check preferences)</p>
</div>
</body>
</html>
36 changes: 24 additions & 12 deletions xCreds.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,9 @@
766355E328713C4A002E3867 /* LoginWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 766355E128713C47002E3867 /* LoginWindow.swift */; };
766355E5287148C1002E3867 /* Tokens.swift in Sources */ = {isa = PBXBuildFile; fileRef = 766355E4287148C1002E3867 /* Tokens.swift */; };
766355E6287148C1002E3867 /* Tokens.swift in Sources */ = {isa = PBXBuildFile; fileRef = 766355E4287148C1002E3867 /* Tokens.swift */; };
76673CD229D3CFF900452848 /* errorpage.html in Resources */ = {isa = PBXBuildFile; fileRef = 766CC43729D3AED2009BC526 /* errorpage.html */; };
76673CD529D3D5F500452848 /* LicenseChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76673CD429D3D5F500452848 /* LicenseChecker.swift */; };
76673CD629D3D5F500452848 /* LicenseChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76673CD429D3D5F500452848 /* LicenseChecker.swift */; };
766CC42829D3A3DC009BC526 /* ProductLicense.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 766CC42229D3A321009BC526 /* ProductLicense.framework */; };
766CC42929D3A3DC009BC526 /* ProductLicense.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 766CC42229D3A321009BC526 /* ProductLicense.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
766CC42A29D3A3DC009BC526 /* Paddle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 766CC42129D3A320009BC526 /* Paddle.framework */; };
Expand All @@ -66,6 +69,7 @@
766CC43329D3A3F8009BC526 /* ProductLicense.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 766CC42229D3A321009BC526 /* ProductLicense.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
766CC43429D3A3F8009BC526 /* Paddle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 766CC42129D3A320009BC526 /* Paddle.framework */; };
766CC43529D3A3F8009BC526 /* Paddle.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 766CC42129D3A320009BC526 /* Paddle.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
766CC43829D3AED2009BC526 /* errorpage.html in Resources */ = {isa = PBXBuildFile; fileRef = 766CC43729D3AED2009BC526 /* errorpage.html */; };
766F4C4B2883AFD90021F548 /* pleaseWaitGraphic.png in Resources */ = {isa = PBXBuildFile; fileRef = 766F4C4A2883AFD90021F548 /* pleaseWaitGraphic.png */; };
767116A7284AABC500CCD6FF /* NotifyManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 767116A6284AABC500CCD6FF /* NotifyManager.swift */; };
767116A9284AAE2B00CCD6FF /* ScheduleManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 767116A8284AAE2B00CCD6FF /* ScheduleManager.swift */; };
Expand Down Expand Up @@ -253,8 +257,10 @@
766355DD28713485002E3867 /* LoginWebView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = LoginWebView.xib; path = XCredsLoginPlugIn/LoginWindow/LoginWebView.xib; sourceTree = SOURCE_ROOT; };
766355E128713C47002E3867 /* LoginWindow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoginWindow.swift; sourceTree = "<group>"; };
766355E4287148C1002E3867 /* Tokens.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = Tokens.swift; path = Shared/Tokens.swift; sourceTree = SOURCE_ROOT; };
76673CD429D3D5F500452848 /* LicenseChecker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LicenseChecker.swift; sourceTree = "<group>"; };
766CC42129D3A320009BC526 /* Paddle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Paddle.framework; path = Carthage/Build/Mac/Paddle.framework; sourceTree = "<group>"; };
766CC42229D3A321009BC526 /* ProductLicense.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ProductLicense.framework; path = Carthage/Build/Mac/ProductLicense.framework; sourceTree = "<group>"; };
766CC43729D3AED2009BC526 /* errorpage.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = errorpage.html; sourceTree = "<group>"; };
766F4C4A2883AFD90021F548 /* pleaseWaitGraphic.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = pleaseWaitGraphic.png; sourceTree = "<group>"; };
767116A6284AABC500CCD6FF /* NotifyManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotifyManager.swift; sourceTree = "<group>"; };
767116A8284AAE2B00CCD6FF /* ScheduleManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScheduleManager.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -391,6 +397,7 @@
76B882A929CCFD7A00BB8186 /* TCSKeychain.h */,
76B882A829CCFD7900BB8186 /* TCSKeychain.m */,
7613FDF6289E114F00340CCD /* loadpage.html */,
766CC43729D3AED2009BC526 /* errorpage.html */,
7677908428908E40004E7085 /* WifiManager.swift */,
7677908328908E40004E7085 /* WifiWindowController.swift */,
7677908528908E40004E7085 /* WifiWindowController.xib */,
Expand Down Expand Up @@ -497,6 +504,7 @@
76EE069127FD1D00009E0F3A = {
isa = PBXGroup;
children = (
76673CD429D3D5F500452848 /* LicenseChecker.swift */,
7683973029A854EC003D9B9F /* NSImage+String.swift */,
7659CA06298E1BB6005D1AA3 /* DefaultBackground.png */,
7675444428918CD100613840 /* Info.plist */,
Expand Down Expand Up @@ -743,6 +751,7 @@
7659CA07298E1BB6005D1AA3 /* DefaultBackground.png in Resources */,
766355D52870F29A002E3867 /* TestWindowController.xib in Resources */,
761B486928A34CC900C6A02B /* LoginProgressWindowController.xib in Resources */,
766CC43829D3AED2009BC526 /* errorpage.html in Resources */,
76BEF7E4287202090013E2A1 /* RestartX.png in Resources */,
76D925D32894ADB4005C3245 /* Assets.xcassets in Resources */,
76BEF8012872A3030013E2A1 /* loginwindow.png in Resources */,
Expand Down Expand Up @@ -782,6 +791,7 @@
76EE06A027FD1D01009E0F3A /* Assets.xcassets in Resources */,
764D812F284C06AB00B3EE54 /* defaults.plist in Resources */,
764D8133284D14A500B3EE54 /* Credits.rtf in Resources */,
76673CD229D3CFF900452848 /* errorpage.html in Resources */,
764D812D284BCC7400B3EE54 /* VerifyOIDCPassword.xib in Resources */,
764D8127284BC1C300B3EE54 /* LoginPasswordWindowController.xib in Resources */,
76EE06A327FD1D01009E0F3A /* MainMenu.xib in Resources */,
Expand Down Expand Up @@ -832,6 +842,7 @@
76BEF7F82872504C0013E2A1 /* ContextAndHintHandling.swift in Sources */,
766355E6287148C1002E3867 /* Tokens.swift in Sources */,
766355CC2870E9AD002E3867 /* WebView.swift in Sources */,
76673CD629D3D5F500452848 /* LicenseChecker.swift in Sources */,
7611CEC0288B75140063A644 /* XCredsCreateUser.swift in Sources */,
766355D42870F29A002E3867 /* TestWindowController.swift in Sources */,
766355C32870CB6F002E3867 /* XCredsLoginPlugin.m in Sources */,
Expand Down Expand Up @@ -871,6 +882,7 @@
buildActionMask = 2147483647;
files = (
76EECD0228752C1F00483C66 /* LoginWindow.swift in Sources */,
76673CD529D3D5F500452848 /* LicenseChecker.swift in Sources */,
767116A7284AABC500CCD6FF /* NotifyManager.swift in Sources */,
76EE06B827FD1EB7009E0F3A /* PreferencesWindowController.swift in Sources */,
76EE06AE27FD1DC3009E0F3A /* PrefKeys.swift in Sources */,
Expand Down Expand Up @@ -989,7 +1001,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 3509;
CURRENT_PROJECT_VERSION = 3004;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = UXP6YEHSPW;
FRAMEWORK_SEARCH_PATHS = (
Expand All @@ -1006,7 +1018,7 @@
"@executable_path/../Frameworks",
"@loader_path/../Frameworks",
);
MARKETING_VERSION = 2.4;
MARKETING_VERSION = 3.0;
PRODUCT_BUNDLE_IDENTIFIER = com.twocanoes.XCredsLoginPlugin;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
Expand All @@ -1026,7 +1038,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 3509;
CURRENT_PROJECT_VERSION = 3004;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = UXP6YEHSPW;
FRAMEWORK_SEARCH_PATHS = (
Expand All @@ -1043,7 +1055,7 @@
"@executable_path/../Frameworks",
"@loader_path/../Frameworks",
);
MARKETING_VERSION = 2.4;
MARKETING_VERSION = 3.0;
PRODUCT_BUNDLE_IDENTIFIER = com.twocanoes.XCredsLoginPlugin;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
Expand Down Expand Up @@ -1091,7 +1103,7 @@
CODE_SIGN_ENTITLEMENTS = "XCreds Login Overlay/XCreds_Login_Overlay.entitlements";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 3509;
CURRENT_PROJECT_VERSION = 3004;
DEVELOPMENT_TEAM = UXP6YEHSPW;
ENABLE_HARDENED_RUNTIME = YES;
FRAMEWORK_SEARCH_PATHS = (
Expand All @@ -1107,7 +1119,7 @@
"$(inherited)",
"@executable_path/../Frameworks",
);
MARKETING_VERSION = 2.4;
MARKETING_VERSION = 3.0;
PRODUCT_BUNDLE_IDENTIFIER = "com.twocanoes.XCreds-Login-Overlay";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
Expand All @@ -1127,7 +1139,7 @@
CODE_SIGN_ENTITLEMENTS = "XCreds Login Overlay/XCreds_Login_Overlay.entitlements";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 3509;
CURRENT_PROJECT_VERSION = 3004;
DEVELOPMENT_TEAM = UXP6YEHSPW;
ENABLE_HARDENED_RUNTIME = YES;
FRAMEWORK_SEARCH_PATHS = (
Expand All @@ -1143,7 +1155,7 @@
"$(inherited)",
"@executable_path/../Frameworks",
);
MARKETING_VERSION = 2.4;
MARKETING_VERSION = 3.0;
PRODUCT_BUNDLE_IDENTIFIER = "com.twocanoes.XCreds-Login-Overlay";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
Expand Down Expand Up @@ -1276,7 +1288,7 @@
CODE_SIGN_ENTITLEMENTS = XCreds/xCreds.entitlements;
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 3509;
CURRENT_PROJECT_VERSION = 3004;
DEVELOPMENT_TEAM = UXP6YEHSPW;
ENABLE_HARDENED_RUNTIME = YES;
FRAMEWORK_SEARCH_PATHS = (
Expand All @@ -1292,7 +1304,7 @@
"$(inherited)",
"@executable_path/../Frameworks",
);
MARKETING_VERSION = 2.4;
MARKETING_VERSION = 3.0;
PRODUCT_BUNDLE_IDENTIFIER = com.twocanoes.xcreds;
PRODUCT_NAME = "$(TARGET_NAME)";
STRIP_INSTALLED_PRODUCT = NO;
Expand All @@ -1311,7 +1323,7 @@
CODE_SIGN_ENTITLEMENTS = XCreds/xCreds.entitlements;
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 3509;
CURRENT_PROJECT_VERSION = 3004;
DEVELOPMENT_TEAM = UXP6YEHSPW;
ENABLE_HARDENED_RUNTIME = YES;
FRAMEWORK_SEARCH_PATHS = (
Expand All @@ -1327,7 +1339,7 @@
"$(inherited)",
"@executable_path/../Frameworks",
);
MARKETING_VERSION = 2.4;
MARKETING_VERSION = 3.0;
PRODUCT_BUNDLE_IDENTIFIER = com.twocanoes.xcreds;
PRODUCT_NAME = "$(TARGET_NAME)";
STRIP_INSTALLED_PRODUCT = NO;
Expand Down
Binary file not shown.

0 comments on commit 8db379d

Please sign in to comment.