Skip to content

Commit

Permalink
implemented shares
Browse files Browse the repository at this point in the history
  • Loading branch information
twocanoes committed Jan 13, 2024
1 parent 18e44d1 commit 8bd74a3
Show file tree
Hide file tree
Showing 11 changed files with 92 additions and 338 deletions.
13 changes: 7 additions & 6 deletions ShareMounter.swift
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ enum ShareKeys {
static let homeMount = "HomeMount"
static let mount = "Mount"
static let shares = "Shares"
static let groups = "Groups"
// static let groups = "Groups"
static let connectedOnly = "ConnectedOnly"
static let options = "Options"
static let name = "Name"
Expand Down Expand Up @@ -69,7 +69,7 @@ class ShareMounter {

let fm = FileManager.default
let ws = NSWorkspace.shared
let sharePrefs = UserDefaults.init(suiteName: "menu.nomad.shares")
let sharePrefs = UserDefaults.init(suiteName: "com.twocanoes.xcreds-shares")

var mountedShares = [URL]()
var mountedOriginalShares = [String]()
Expand All @@ -83,6 +83,7 @@ class ShareMounter {
var userPrincipal = ""
var connectedState = false

var adUserRecord:ADUserRecord?
let openOptionsDict : [String : Any] = [
kNAUIOptionKey : kNAUIOptionNoUI,
kNetFSUseGuestKey : false,
Expand All @@ -98,7 +99,7 @@ class ShareMounter {

var tempShares = [share_info]()

guard let groups = defaults.array(forKey: "Groups") else { return }
guard let groups = adUserRecord?.groups else { return }

//TODO: ShareReset

Expand Down Expand Up @@ -477,10 +478,10 @@ class ShareMounter {
// TODO: get e-mail address as a variable
var createdURL = url

guard let domain = defaults.string(forKey: PrefKeys.aDDomain.rawValue),
let fullName = defaults.string(forKey: PrefKeys.displayName.rawValue)?.safeURLPath(),
guard let domain = adUserRecord?.domain,
let fullName = adUserRecord?.fullName.safeURLPath(),
let serial = getSerial().safeURLPath(),
let shortName = defaults.string(forKey: PrefKeys.userShortName.rawValue)
let shortName = adUserRecord?.shortName
else {
return nil
}
Expand Down
38 changes: 22 additions & 16 deletions ShareMounterMenu.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,11 @@ let shareMounterQueue = DispatchQueue(label: "menu.nomad.NoMAD.shareMounting", a

// class to build the share mount menu and accept clicks

class ShareMounterMenu: NSObject {
@objc class ShareMounterMenu: NSObject {

let defaults = UserDefaults.standard

let myShareMounter = ShareMounter()
var shareMounter:ShareMounter?
@objc var worksWhenModal = true
@objc let myShareMenu = NSMenu()

Expand All @@ -32,18 +32,22 @@ class ShareMounterMenu: NSObject {

if (sharePrefs?.integer(forKey: "Version") ?? 0) >= 1 {
shareMounterQueue.sync(execute: {
self.myShareMounter.connectedState = connected
self.myShareMounter.tickets = tickets
self.myShareMounter.userPrincipal = kerbUser
self.myShareMounter.getMountedShares()
self.myShareMounter.getMounts()
self.myShareMounter.mountShares()
self.shareMounter?.connectedState = connected
self.shareMounter?.tickets = tickets
self.shareMounter?.userPrincipal = kerbUser
self.shareMounter?.getMountedShares()
self.shareMounter?.getMounts()
self.shareMounter?.mountShares()
})
}
}

@objc func buildMenu(connected: Bool=false) -> NSMenu {

guard let shareMounter = shareMounter else {
return NSMenu()

}
if sharePrefs?.integer(forKey: "Version") != 1 {
return NSMenu.init()
}
Expand All @@ -68,17 +72,17 @@ class ShareMounterMenu: NSObject {
// return NSMenu.init()
// }

if myShareMounter.all_shares.count > 0 {
if shareMounter.all_shares.count > 0 {
// Menu Items and Menu

myShareMenu.removeAllItems()

if CommandLine.arguments.contains("-shares") {
print("***Building Share Menu***")
print(self.myShareMounter.all_shares)
print(shareMounter.all_shares)
}

for share in self.myShareMounter.all_shares {
for share in shareMounter.all_shares {
let myItem = NSMenuItem()
myItem.title = share.name

Expand All @@ -87,8 +91,8 @@ class ShareMounterMenu: NSObject {
} else {
myItem.target = nil
}
myItem.action = #selector(openShareFromMenu)

myItem.action = #selector(openShareFromMenu(_:))
myItem.toolTip = String(describing: share.url)
if share.mountStatus == .mounted {
myItem.isEnabled = true
Expand Down Expand Up @@ -117,8 +121,10 @@ class ShareMounterMenu: NSObject {
}

@IBAction func openShareFromMenu(_ sender: AnyObject) {

for share in myShareMounter.all_shares {
guard let shareMounter = shareMounter else {
return
}
for share in shareMounter.all_shares {
if share.name == sender.title {
if share.mountStatus != .mounted {
myLogger.logit(.debug, message: "Mounting share: " + String(describing: share.url))
Expand Down
29 changes: 25 additions & 4 deletions XCreds/AppDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,29 @@ class AppDelegate: NSObject, NSApplicationDelegate, DSQueryable {
var screenIsLocked=true
var isDisplayAsleep=true
var waitForScreenToWake=false
// @IBOutlet var shareMounterMenu: ShareMounterMenu?
@IBOutlet var shareMounterMenu: ShareMounterMenu?
@IBOutlet weak var statusMenu: NSMenu!
var shareMenu:NSMenu?
var statusBarItem:NSStatusItem?

func updateShareMenu(adUser:ADUserRecord){
shareMounterMenu?.shareMounter?.adUserRecord = adUser
shareMounterMenu?.updateShares()
shareMenu = shareMounterMenu?.buildMenu(connected: true)

if let sharesMenuItem = statusMenu.item(withTag: StatusMenuController.StatusMenuItemType.SharesMenuItem.rawValue) {

if shareMenu?.items.count==0{
sharesMenuItem.isHidden=true
}
else {
sharesMenuItem.isHidden=false
statusMenu.setSubmenu(shareMenu, for:sharesMenuItem )
}

}

}
func updateStatusMenuIcon(showDot:Bool){


Expand All @@ -45,9 +63,12 @@ class AppDelegate: NSObject, NSApplicationDelegate, DSQueryable {
statusBarItem?.isVisible=true
statusBarItem?.menu = statusMenu
self.statusBarItem?.button?.image=NSImage(named: "xcreds menu icon")
// shareMounterMenu = ShareMounterMenu()
// shareMounterMenu?.updateShares()
// shareMenu = shareMounterMenu?.buildMenu()
let shareMounter = ShareMounter()

shareMounterMenu = ShareMounterMenu()
shareMounterMenu?.shareMounter = shareMounter
shareMounterMenu?.updateShares()
shareMenu = shareMounterMenu?.buildMenu(connected: true)

let defaultsPath = Bundle.main.path(forResource: "defaults", ofType: "plist")

Expand Down
8 changes: 7 additions & 1 deletion XCreds/Base.lproj/MainMenu.xib
Original file line number Diff line number Diff line change
Expand Up @@ -720,8 +720,14 @@
<action selector="changePasswordMenuItemSelected:" target="1OV-ou-Ss5" id="dfP-8J-fS8"/>
</connections>
</menuItem>
<menuItem title="Shares" tag="7" hidden="YES" id="qRq-yn-8sT">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="changePasswordMenuItemSelected:" target="1OV-ou-Ss5" id="mhw-jg-LgC"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="op6-Hq-2li"/>
<menuItem title="Quit" tag="7" id="OM5-mb-fFV">
<menuItem title="Quit" tag="8" id="OM5-mb-fFV">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="quitMenuItemSelected:" target="1OV-ou-Ss5" id="yL8-dQ-nRK"/>
Expand Down
7 changes: 7 additions & 0 deletions XCreds/MainController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ import OIDCLite
class MainController: NSObject, UpdateCredentialsFeedbackProtocol {




var passwordCheckTimer:Timer?
var feedbackDelegate:TokenManagerFeedbackDelegate?

Expand Down Expand Up @@ -288,6 +290,11 @@ class MainController: NSObject, UpdateCredentialsFeedbackProtocol {
credentialStatus="Kerberos Tickets Failed"
showSignInWindow()
}
func adUserUpdated(_ adUser: ADUserRecord) {

(NSApp.delegate as? AppDelegate)?.updateShareMenu(adUser: adUser)

}

}

7 changes: 6 additions & 1 deletion XCreds/ScheduleManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,11 @@ class ScheduleManager:TokenManagerFeedbackDelegate, NoMADUserSessionDelegate {

TCSLogWithMark("checking for oidc tokens if configured")
tokenManager.feedbackDelegate=self
tokenManager.getNewAccessToken()

if let _ = DefaultsOverride.standardOverride.string(forKey: PrefKeys.discoveryURL.rawValue) {

tokenManager.getNewAccessToken()
}


}
Expand Down Expand Up @@ -175,6 +179,7 @@ class ScheduleManager:TokenManagerFeedbackDelegate, NoMADUserSessionDelegate {
if let passExpired = user.passwordExpire {
let dateString = dateFormatter.string(from: passExpired)
feedbackDelegate?.passwordExpiryUpdate(dateString)
feedbackDelegate?.adUserUpdated(user)
// passwordExpires=dateString

}
Expand Down
7 changes: 5 additions & 2 deletions XCreds/StatusMenuController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,9 @@ class StatusMenuController: NSObject, NSMenuItemValidation {
case PasswordExpires=4
case SignInMenuItem=5
case ChangePasswordMenuItem=6
case QuitMenuItem=7

case SharesMenuItem=7
case QuitMenuItem=8

}
var signedIn = false
var aboutWindowController: AboutWindowController?
Expand Down Expand Up @@ -123,6 +124,8 @@ class StatusMenuController: NSObject, NSMenuItemValidation {

}
return false
case .SharesMenuItem:
return true
}
return true
}
Expand Down
4 changes: 4 additions & 0 deletions XCredsLoginPlugIn/LoginWindow/SignInWindowController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ protocol UpdateCredentialsFeedbackProtocol {
func credentialsCheckFailed()
func kerberosTicketUpdated()
func kerberosTicketCheckFailed()
func adUserUpdated(_ adUser:ADUserRecord)

}

@objc class SignInViewController: NSViewController, DSQueryable, TokenManagerFeedbackDelegate {
Expand Down Expand Up @@ -819,6 +821,8 @@ extension SignInViewController: NoMADUserSessionDelegate {
updateCredentialsFeedbackDelegate?.passwordExpiryUpdate(dateString)

}
updateCredentialsFeedbackDelegate?.adUserUpdated(user)



TCSLogWithMark("Checking for DenyLogin groupsChecking for DenyLogin groups")
Expand Down
4 changes: 4 additions & 0 deletions xCreds.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@
761B486928A34CC900C6A02B /* LoginProgressWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 761B486728A34CC900C6A02B /* LoginProgressWindowController.xib */; };
761B486A28A34CC900C6A02B /* LoginProgressWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 761B486828A34CC900C6A02B /* LoginProgressWindowController.swift */; };
761B486C28A3575000C6A02B /* XCredsLoginDone.swift in Sources */ = {isa = PBXBuildFile; fileRef = 761B486B28A3575000C6A02B /* XCredsLoginDone.swift */; };
7623384C2B53029D00F2D714 /* ShareMounterMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 763DDF152B4F100D000D48CC /* ShareMounterMenu.swift */; };
7623384D2B53029D00F2D714 /* ShareMounter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76C4ACBE2B3D0F8D003B3605 /* ShareMounter.swift */; };
762761602B294A7C0067D1D4 /* icon_128x128.png in Resources */ = {isa = PBXBuildFile; fileRef = 7614D03B2B181A5D006EAF36 /* icon_128x128.png */; };
76319360287D22C700D36BF7 /* authrights.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7631935F287D22C700D36BF7 /* authrights.swift */; };
76319366287D24E100D36BF7 /* ArgumentParser in Frameworks */ = {isa = PBXBuildFile; productRef = 76319365287D24E100D36BF7 /* ArgumentParser */; };
Expand Down Expand Up @@ -1301,6 +1303,7 @@
7657DEC92B350606003A23DB /* KlistUtil.swift in Sources */,
764D812C284BCC7400B3EE54 /* VerifyOIDCPasswordWindowController.swift in Sources */,
76E74DD42B39037A004C6429 /* LoginProgressWindowController.swift in Sources */,
7623384D2B53029D00F2D714 /* ShareMounter.swift in Sources */,
7657DEB32B350476003A23DB /* NoMADSession.swift in Sources */,
760418E02A133A370051411B /* DSQueryable.swift in Sources */,
76319373287E18BF00D36BF7 /* DataExtension.swift in Sources */,
Expand Down Expand Up @@ -1340,6 +1343,7 @@
7657DEC32B3505CB003A23DB /* ADLDAPPing.swift in Sources */,
76EE06AC27FD1D92009E0F3A /* TokenManager.swift in Sources */,
76B882B229CCFDBA00BB8186 /* NSData+HexString.m in Sources */,
7623384C2B53029D00F2D714 /* ShareMounterMenu.swift in Sources */,
7657DEC02B3505A3003A23DB /* DNSResolver.m in Sources */,
76E9CE702A0DC6E30060220C /* TCSLoginWindowUtilities.m in Sources */,
76342E5A2B282653007D4F29 /* DesktopLoginWindowController.swift in Sources */,
Expand Down
Binary file not shown.

0 comments on commit 8bd74a3

Please sign in to comment.