Skip to content

Commit

Permalink
pass username and password for login window
Browse files Browse the repository at this point in the history
  • Loading branch information
twocanoes committed Jul 3, 2022
1 parent ce6cc87 commit 6addc79
Show file tree
Hide file tree
Showing 7 changed files with 79 additions and 27 deletions.
15 changes: 15 additions & 0 deletions Shared/Tokens.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
//
// Tokens.swift
// XCreds
//
// Created by Timothy Perfitt on 7/2/22.
//

import Foundation
struct Tokens {
var password = ""
var accessToken = ""
var idToken = ""
var refreshToken = ""
}

29 changes: 15 additions & 14 deletions XCreds/MainController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -28,28 +28,29 @@ class MainController: NSObject {
DispatchQueue.main.async {
let keychainUtil = KeychainUtil()

guard let userInfo = notification.userInfo else {
guard let tokenInfo = notification.userInfo else {
return
}

if let accessToken = userInfo[PrefKeys.accessToken.rawValue] as? String {
let _ = keychainUtil.updatePassword(PrefKeys.accessToken.rawValue, pass: accessToken)
guard let tokens = tokenInfo["tokens"] as? Tokens else {
return
}

if let idToken = userInfo[PrefKeys.idToken.rawValue] as? String {
let _ = keychainUtil.updatePassword(PrefKeys.idToken.rawValue, pass: idToken)
if tokens.accessToken.count>0{
let _ = keychainUtil.updatePassword(PrefKeys.accessToken.rawValue, pass: tokens.accessToken)
}

if let refreshToken = userInfo[PrefKeys.refreshToken.rawValue] as? String {
let _ = keychainUtil.updatePassword(PrefKeys.refreshToken.rawValue, pass: refreshToken)
mainMenu.statusBarItem.button?.image=NSImage(named: "xcreds menu icon check")
if tokens.idToken.count>0{
let _ = keychainUtil.updatePassword(PrefKeys.idToken.rawValue, pass: tokens.idToken)
}

if tokens.refreshToken.count>0 {
let _ = keychainUtil.updatePassword(PrefKeys.refreshToken.rawValue, pass: tokens.refreshToken)
mainMenu.statusBarItem.button?.image=NSImage(named: "xcreds menu icon check")



}



if let cloudPassword = userInfo["password"] as? String {
let cloudPassword = tokens.password
if cloudPassword.count>0 {
let localPassword = self.localPassword()

if let localPassword = localPassword {
Expand Down
25 changes: 16 additions & 9 deletions XCreds/WebView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,9 @@ class WebViewController: NSWindowController {
}
}
}
func tokensUpdated(tokens: Tokens){
//to be overridden by superclasses
}
}

extension WebViewController: WKNavigationDelegate {
Expand Down Expand Up @@ -205,6 +208,7 @@ extension WebViewController: WKNavigationDelegate {
return dictionary
}


}

extension WebViewController: OIDCLiteDelegate {
Expand All @@ -221,15 +225,18 @@ extension WebViewController: OIDCLiteDelegate {
self.window?.close()
if let password = self.password {
TCSLog("password received")
NotificationCenter.default.post(name: Notification.Name("TCSTokensUpdated"), object: self, userInfo:
[
"password":password,
PrefKeys.accessToken.rawValue:tokens.accessToken ?? "",
PrefKeys.idToken.rawValue:tokens.idToken ?? "",
PrefKeys.refreshToken.rawValue:tokens.refreshToken ?? ""

]
)
// let tokensDict = [
// "password":password,
// PrefKeys.accessToken.rawValue:tokens.accessToken ?? "",
// PrefKeys.idToken.rawValue:tokens.idToken ?? "",
// PrefKeys.refreshToken.rawValue:tokens.refreshToken ?? ""
//
// ]
let returnTokens = Tokens(password: password, accessToken: tokens.accessToken ?? "", idToken: tokens.idToken ?? "", refreshToken: tokens.refreshToken ?? "")
self.tokensUpdated(tokens: returnTokens)
NotificationCenter.default.post(name: Notification.Name("TCSTokensUpdated"), object: self, userInfo:["tokens":returnTokens]

)

}
}
Expand Down
4 changes: 0 additions & 4 deletions XCredsLoginPlugIn/LoginWebViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -32,14 +32,10 @@ class LoginWebViewController: WebViewController {

}


@objc override var windowNibName: NSNib.Name {
return NSNib.Name("LoginWebView")
}




}


27 changes: 27 additions & 0 deletions XCredsLoginPlugIn/XCredsMechanism.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,27 @@ import os.log
@objc init(mechanism: UnsafePointer<MechanismRecord>) {
TCSLog("\(#function) \(#file):\(#line)")


self.mech = mechanism.pointee
self.mechCallbacks = mechanism.pointee.fPlugin.pointee.fCallbacks.pointee
self.mechEngine = mechanism.pointee.fEngine

super.init()
NotificationCenter.default.addObserver(forName: Notification.Name("TCSTokensUpdated"), object: nil, queue: nil) { notification in
TCSLog("updating username and password")
guard let tokenInfo = notification.userInfo else {
return
}

guard let tokens = tokenInfo["tokens"] as? Tokens else {
return
}

self.setContextString(type: kAuthorizationEnvironmentUsername, value: "tperfitt")
self.setContextString(type: kAuthorizationEnvironmentPassword, value: tokens.password)
self.allowLogin()

}
setupPrefs()

}
Expand Down Expand Up @@ -65,5 +81,16 @@ import os.log
if error != noErr {
}
}
func setContextString(type: String, value: String) {
let tempdata = value + "\0"
let data = tempdata.data(using: .utf8)
var value = AuthorizationValue(length: (data?.count)!, data: UnsafeMutableRawPointer(mutating: (data! as NSData).bytes.bindMemory(to: Void.self, capacity: (data?.count)!)))
let err = (mech?.fPlugin.pointee.fCallbacks.pointee.SetContextValue((mech?.fEngine)!, type, .extractable, &value))!
guard err == errSecSuccess else {

return
}
}


}
6 changes: 6 additions & 0 deletions xCreds.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@
766355DC287133C7002E3867 /* WebView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76EE06B327FD1E5F009E0F3A /* WebView.swift */; };
766355DE28713486002E3867 /* LoginWebView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 766355DD28713485002E3867 /* LoginWebView.xib */; };
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 */; };
767116A7284AABC500CCD6FF /* NotifyManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 767116A6284AABC500CCD6FF /* NotifyManager.swift */; };
767116A9284AAE2B00CCD6FF /* ScheduleManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 767116A8284AAE2B00CCD6FF /* ScheduleManager.swift */; };
767116AC284AB4C000CCD6FF /* PasswordUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 767116AB284AB4C000CCD6FF /* PasswordUtils.swift */; };
Expand Down Expand Up @@ -73,6 +75,7 @@
766355DA287132E9002E3867 /* LoginWebViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LoginWebViewController.swift; path = XCredsLoginPlugIn/LoginWebViewController.swift; sourceTree = SOURCE_ROOT; };
766355DD28713485002E3867 /* LoginWebView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = LoginWebView.xib; path = XCredsLoginPlugIn/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; };
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>"; };
767116AB284AB4C000CCD6FF /* PasswordUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PasswordUtils.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -195,6 +198,7 @@
764D8128284BCAB100B3EE54 /* Window+Shake.swift */,
76EE06B127FD1E24009E0F3A /* WebView.xib */,
76EE06B327FD1E5F009E0F3A /* WebView.swift */,
766355E4287148C1002E3867 /* Tokens.swift */,
767116AB284AB4C000CCD6FF /* PasswordUtils.swift */,
76EE06B527FD1E79009E0F3A /* PreferencesWindow.xib */,
764D812E284C06AB00B3EE54 /* defaults.plist */,
Expand Down Expand Up @@ -341,6 +345,7 @@
766355CF2870E9E7002E3867 /* PrefKeys.swift in Sources */,
766355CA2870DCF5002E3867 /* TCSUnifiedLogger.m in Sources */,
766355E328713C4A002E3867 /* LoginWindow.swift in Sources */,
766355E6287148C1002E3867 /* Tokens.swift in Sources */,
766355CC2870E9AD002E3867 /* WebView.swift in Sources */,
766355D42870F29A002E3867 /* TestWindowController.swift in Sources */,
766355C32870CB6F002E3867 /* XCredsLoginPlugin.m in Sources */,
Expand Down Expand Up @@ -371,6 +376,7 @@
767116B1284B021500CCD6FF /* MainController.swift in Sources */,
767116A9284AAE2B00CCD6FF /* ScheduleManager.swift in Sources */,
767116AC284AB4C000CCD6FF /* PasswordUtils.swift in Sources */,
766355E5287148C1002E3867 /* Tokens.swift in Sources */,
76EE06BE27FD1F13009E0F3A /* CheckTokenMenuItem.swift in Sources */,
76EE06AC27FD1D92009E0F3A /* TokenManager.swift in Sources */,
76EE06BA27FD1EE8009E0F3A /* SignInMenuItem.swift in Sources */,
Expand Down
Binary file not shown.

0 comments on commit 6addc79

Please sign in to comment.