From ca9b4f2d413ae35ddee6a465a24e6dea0c8780e1 Mon Sep 17 00:00:00 2001 From: German Laullon Date: Thu, 5 May 2011 16:43:17 -0700 Subject: [PATCH] new AskPasswd --- ApplicationController.m | 4 +- English.lproj/Preferences.xib | 875 ++++++---------------------------- PBGitDefaults.h | 1 + PBGitDefaults.m | 8 + gitx_askpasswd_main.m | 276 ++++------- 5 files changed, 231 insertions(+), 933 deletions(-) diff --git a/ApplicationController.m b/ApplicationController.m index 13b4b94..ad7149c 100644 --- a/ApplicationController.m +++ b/ApplicationController.m @@ -66,10 +66,12 @@ [[SUUpdater sharedUpdater] setSendsSystemProfile:YES]; [[SUUpdater sharedUpdater] setDelegate:self]; + if ([PBGitDefaults useAskPasswd]) { // Make sure Git's SSH password requests get forwarded to our little UI tool: setenv( "SSH_ASKPASS", [[[NSBundle mainBundle] pathForResource: @"gitx_askpasswd" ofType: @""] UTF8String], 1 ); setenv( "DISPLAY", "localhost:0", 1 ); - + } + [self registerServices]; BOOL hasOpenedDocuments = NO; diff --git a/English.lproj/Preferences.xib b/English.lproj/Preferences.xib index 2d8b54b..4afaeed 100644 --- a/English.lproj/Preferences.xib +++ b/English.lproj/Preferences.xib @@ -2,19 +2,31 @@ 1050 - 10J567 - 823 + 10J869 + 1305 1038.35 - 462.00 + 461.00 com.apple.InterfaceBuilder.CocoaPlugin - 823 + 1305 - + YES - - - + NSPopUpButton + NSMenuItem + NSMenu + NSButtonCell + NSButton + NSTextFieldCell + NSDateFormatter + NSPathCell + NSBox + NSPathControl + NSCustomObject + NSCustomView + NSPopUpButtonCell + NSUserDefaultsController + NSTextField YES @@ -25,9 +37,7 @@ YES - - YES - + YES @@ -48,8 +58,10 @@ 268 - {{18, 193}, {158, 18}} + {{18, 185}, {158, 18}} + + YES -2080244224 @@ -81,6 +93,8 @@ 268 {{17, 22}, {166, 17}} + + YES 68288064 @@ -113,6 +127,8 @@ 268 {{182, 12}, {137, 32}} + + YES -2080244224 @@ -132,8 +148,10 @@ 268 - {{248, 118}, {41, 22}} + {{248, 117}, {41, 22}} + + YES -1804468671 @@ -162,8 +180,10 @@ 268 - {{121, 120}, {122, 17}} + {{121, 119}, {122, 17}} + + YES 68288064 @@ -178,8 +198,10 @@ 268 - {{18, 143}, {273, 18}} + {{18, 145}, {273, 18}} + + YES -2080244224 @@ -202,6 +224,8 @@ 268 {{17, 92}, {99, 17}} + + YES 68288064 @@ -226,6 +250,8 @@ {{121, 88}, {179, 22}} + + YES 337772033 @@ -248,6 +274,8 @@ 268 {{118, 52}, {192, 28}} + + YES 67239424 @@ -264,6 +292,8 @@ 268 {{306, 92}, {54, 14}} + + YES -2080244224 @@ -287,8 +317,10 @@ 268 - {{18, 168}, {203, 18}} + {{18, 165}, {203, 18}} + + YES -2080244224 @@ -309,8 +341,10 @@ 268 - {{18, 218}, {279, 18}} + {{18, 205}, {279, 18}} + + YES -2080244224 @@ -328,11 +362,37 @@ 25 + + + 268 + {{18, 225}, {207, 18}} + + + + YES + + -2080244224 + 0 + Use custom askpasswd + + + 1211912703 + 2 + + + + + 200 + 25 + + 268 - {{18, 243}, {207, 18}} + {{18, 245}, {207, 18}} + + YES -2080244224 @@ -351,8 +411,10 @@ - {401, 279} + {401, 281} + + NSView @@ -530,7 +592,7 @@ - EEEE, d. MMMM yyyy HH:mm:ss + EEEE, MMMM d, yyyy h:mm:ss a NO @@ -563,7 +625,7 @@ NSView - + 268 YES @@ -591,21 +653,16 @@ {239, 54} - NSView SUUpdater - - YES - PBITerm2Available - YES - + 268 YES @@ -756,7 +813,6 @@ {400, 136} - NSView @@ -1214,6 +1270,22 @@ 154 + + + value: values.PBUseAskPasswd + + + + + + value: values.PBUseAskPasswd + value + values.PBUseAskPasswd + 2 + + + 161 + @@ -1247,19 +1319,20 @@ YES - - - - - + + + + + + + - General @@ -1717,6 +1790,21 @@ + + 155 + + + YES + + + + Check Box + + + 156 + + + @@ -1763,6 +1851,8 @@ 147.IBPluginDependency 15.IBEditorWindowLastContentRect 15.IBPluginDependency + 155.IBPluginDependency + 156.IBPluginDependency 16.IBPluginDependency 17.IBPluginDependency 18.IBPluginDependency @@ -1876,6 +1966,8 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin {{324, 683}, {400, 139}} com.apple.InterfaceBuilder.CocoaPlugin @@ -1916,20 +2008,16 @@ YES - - YES - + YES - - YES - + - 154 + 161 @@ -1939,21 +2027,7 @@ NSWindowController IBProjectSource - DBPrefsWindowController.h - - - - NSApplication - - IBProjectSource - NSApplication+GitXScripting.h - - - - NSCell - - IBProjectSource - View/CellTrackingRect.h + ./Classes/DBPrefsWindowController.h @@ -2067,24 +2141,7 @@ IBProjectSource - PBPrefsWindowController.h - - - - - YES - - NSObject - - IBDocumentRelativeSource - ../Sparkle.framework/Versions/A/Headers/SUAppcast.h - - - - NSObject - - IBDocumentRelativeSource - ../Sparkle.framework/Versions/A/Headers/SUUpdater.h + ./Classes/PBPrefsWindowController.h @@ -2112,676 +2169,11 @@ id - - - - - YES - - NSActionCell - NSCell - IBFrameworkSource - AppKit.framework/Headers/NSActionCell.h + IBProjectSource + ./Classes/SUUpdater.h - - NSApplication - NSResponder - - IBFrameworkSource - AppKit.framework/Headers/NSApplication.h - - - - NSApplication - - IBFrameworkSource - AppKit.framework/Headers/NSApplicationScripting.h - - - - NSApplication - - IBFrameworkSource - AppKit.framework/Headers/NSColorPanel.h - - - - NSApplication - - IBFrameworkSource - AppKit.framework/Headers/NSHelpManager.h - - - - NSApplication - - IBFrameworkSource - AppKit.framework/Headers/NSPageLayout.h - - - - NSApplication - - IBFrameworkSource - AppKit.framework/Headers/NSUserInterfaceItemSearching.h - - - - NSBox - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSBox.h - - - - NSButton - NSControl - - IBFrameworkSource - AppKit.framework/Headers/NSButton.h - - - - NSButtonCell - NSActionCell - - IBFrameworkSource - AppKit.framework/Headers/NSButtonCell.h - - - - NSCell - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSCell.h - - - - NSControl - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSControl.h - - - - NSController - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSController.h - - - - NSDateFormatter - NSFormatter - - IBFrameworkSource - Foundation.framework/Headers/NSDateFormatter.h - - - - NSFormatter - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSFormatter.h - - - - NSImageView - NSControl - - IBFrameworkSource - AppKit.framework/Headers/NSImageView.h - - - - NSMenu - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSMenu.h - - - - NSMenuItem - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSMenuItem.h - - - - NSMenuItemCell - NSButtonCell - - IBFrameworkSource - AppKit.framework/Headers/NSMenuItemCell.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSAccessibility.h - - - - NSObject - - - - NSObject - - - - NSObject - - - - NSObject - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSDictionaryController.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSDragging.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSFontManager.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSFontPanel.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSKeyValueBinding.h - - - - NSObject - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSNibLoading.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSOutlineView.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSPasteboard.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSSavePanel.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSTableView.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSToolbarItem.h - - - - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSView.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSArchiver.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSClassDescription.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSError.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSFileManager.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyValueCoding.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyValueObserving.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSKeyedArchiver.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSObject.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSObjectScripting.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSPortCoder.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSRunLoop.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSScriptClassDescription.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSScriptKeyValueCoding.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSScriptObjectSpecifiers.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSScriptWhoseTests.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSThread.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSURL.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSURLConnection.h - - - - NSObject - - IBFrameworkSource - Foundation.framework/Headers/NSURLDownload.h - - - - NSObject - - IBFrameworkSource - QuartzCore.framework/Headers/CAAnimation.h - - - - NSObject - - IBFrameworkSource - QuartzCore.framework/Headers/CALayer.h - - - - NSObject - - IBFrameworkSource - QuartzCore.framework/Headers/CIImageProvider.h - - - - NSObject - - IBFrameworkSource - ScriptingBridge.framework/Headers/SBApplication.h - - - - NSObject - - IBFrameworkSource - Sparkle.framework/Headers/SUAppcast.h - - - - NSObject - - IBFrameworkSource - Sparkle.framework/Headers/SUUpdater.h - - - - NSObject - - IBFrameworkSource - WebKit.framework/Headers/WebDownload.h - - - - NSObject - - IBFrameworkSource - WebKit.framework/Headers/WebEditingDelegate.h - - - - NSObject - - IBFrameworkSource - WebKit.framework/Headers/WebFrameLoadDelegate.h - - - - NSObject - - IBFrameworkSource - WebKit.framework/Headers/WebJavaPlugIn.h - - - - NSObject - - IBFrameworkSource - WebKit.framework/Headers/WebPlugin.h - - - - NSObject - - IBFrameworkSource - WebKit.framework/Headers/WebPluginContainer.h - - - - NSObject - - IBFrameworkSource - WebKit.framework/Headers/WebPolicyDelegate.h - - - - NSObject - - IBFrameworkSource - WebKit.framework/Headers/WebResourceLoadDelegate.h - - - - NSObject - - IBFrameworkSource - WebKit.framework/Headers/WebScriptObject.h - - - - NSObject - - IBFrameworkSource - WebKit.framework/Headers/WebUIDelegate.h - - - - NSPathCell - NSActionCell - - IBFrameworkSource - AppKit.framework/Headers/NSPathCell.h - - - - NSPathControl - NSControl - - IBFrameworkSource - AppKit.framework/Headers/NSPathControl.h - - - - NSPopUpButton - NSButton - - IBFrameworkSource - AppKit.framework/Headers/NSPopUpButton.h - - - - NSPopUpButtonCell - NSMenuItemCell - - IBFrameworkSource - AppKit.framework/Headers/NSPopUpButtonCell.h - - - - NSResponder - - IBFrameworkSource - AppKit.framework/Headers/NSInterfaceStyle.h - - - - NSResponder - NSObject - - IBFrameworkSource - AppKit.framework/Headers/NSResponder.h - - - - NSTextField - NSControl - - IBFrameworkSource - AppKit.framework/Headers/NSTextField.h - - - - NSTextFieldCell - NSActionCell - - IBFrameworkSource - AppKit.framework/Headers/NSTextFieldCell.h - - - - NSUserDefaultsController - NSController - - IBFrameworkSource - AppKit.framework/Headers/NSUserDefaultsController.h - - - - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSClipView.h - - - - NSView - - - - NSView - - IBFrameworkSource - AppKit.framework/Headers/NSRulerView.h - - - - NSView - NSResponder - - - - NSWindow - - IBFrameworkSource - AppKit.framework/Headers/NSDrawer.h - - - - NSWindow - NSResponder - - IBFrameworkSource - AppKit.framework/Headers/NSWindow.h - - - - NSWindow - - IBFrameworkSource - AppKit.framework/Headers/NSWindowScripting.h - - - - NSWindowController - NSResponder - - showWindow: - id - - - showWindow: - - showWindow: - id - - - - IBFrameworkSource - AppKit.framework/Headers/NSWindowController.h - - - - SUUpdater - NSObject - - checkForUpdates: - id - - - checkForUpdates: - - checkForUpdates: - id - - - - delegate - id - - - delegate - - delegate - id - - - - 0 @@ -2799,7 +2191,6 @@ YES - ../GitX.xcodeproj 3 YES diff --git a/PBGitDefaults.h b/PBGitDefaults.h index f4154ff..b23a2ee 100644 --- a/PBGitDefaults.h +++ b/PBGitDefaults.h @@ -19,6 +19,7 @@ + (BOOL) isGistPublic; + (BOOL)showWhitespaceDifferences; + (BOOL)refreshAutomatically; ++ (BOOL) useAskPasswd; + (BOOL)openCurDirOnLaunch; + (BOOL)showOpenPanelOnLaunch; + (BOOL) shouldCheckoutBranch; diff --git a/PBGitDefaults.m b/PBGitDefaults.m index 76faa0f..3534de7 100644 --- a/PBGitDefaults.m +++ b/PBGitDefaults.m @@ -18,6 +18,7 @@ #define kPublicGist @"PBGistPublic" #define kShowWhitespaceDifferences @"PBShowWhitespaceDifferences" #define kRefreshAutomatically @"PBRefreshAutomatically" +#define kUseAskPasswd @"PBUseAskPasswd" #define kOpenCurDirOnLaunch @"PBOpenCurDirOnLaunch" #define kShowOpenPanelOnLaunch @"PBShowOpenPanelOnLaunch" #define kShouldCheckoutBranch @"PBShouldCheckoutBranch" @@ -53,6 +54,8 @@ forKey:kShowWhitespaceDifferences]; [defaultValues setObject:[NSNumber numberWithBool:YES] forKey:kRefreshAutomatically]; + [defaultValues setObject:[NSNumber numberWithBool:YES] + forKey:kUseAskPasswd]; [defaultValues setObject:[NSNumber numberWithBool:YES] forKey:kOpenCurDirOnLaunch]; [defaultValues setObject:[NSNumber numberWithBool:YES] @@ -110,6 +113,11 @@ return [[NSUserDefaults standardUserDefaults] boolForKey:kRefreshAutomatically]; } ++ (BOOL) useAskPasswd +{ + return [[NSUserDefaults standardUserDefaults] boolForKey:kUseAskPasswd]; +} + + (BOOL)openCurDirOnLaunch { return [[NSUserDefaults standardUserDefaults] boolForKey:kOpenCurDirOnLaunch]; diff --git a/gitx_askpasswd_main.m b/gitx_askpasswd_main.m index a2d65ba..a2291be 100644 --- a/gitx_askpasswd_main.m +++ b/gitx_askpasswd_main.m @@ -32,16 +32,8 @@ @interface GAPAppDelegate : NSObject { - NSPanel* mPasswordPanel; - NSSecureTextField* mPasswordField; - NSButton* rememberCheck; } --(NSPanel*)passwordPanel:(NSString *)prompt remember:(BOOL)remember; - --(IBAction) doOKButton: (id)sender; --(IBAction) doCancelButton: (id)sender; - @end NSString* url; @@ -50,139 +42,59 @@ OSStatus StorePasswordKeychain (const char *url, UInt32 urlLength, void* passw @implementation GAPAppDelegate --(NSPanel*)passwordPanel:(NSString *)prompt remember:(BOOL)remember -{ - if( !mPasswordPanel ) - { - NSRect box = NSMakeRect( 100, 100, 400, 134 ); - mPasswordPanel = [[NSPanel alloc] initWithContentRect: box - styleMask: NSTitledWindowMask - backing: NSBackingStoreBuffered defer: NO]; - [mPasswordPanel setHidesOnDeactivate: NO]; - [mPasswordPanel setLevel: NSFloatingWindowLevel]; - [mPasswordPanel setTitle: @"GitX SSH Remote Login"]; - if (![mPasswordPanel setFrameUsingName: WINDOWAUTOSAVENAME]) { - [mPasswordPanel center]; - [mPasswordPanel setFrameAutosaveName: WINDOWAUTOSAVENAME]; +-(void)yesNo:(NSString *)prompt url:(NSString *)url{ + NSAlert *alert = [[NSAlert alloc] init]; + [alert addButtonWithTitle:@"YES"]; + [alert addButtonWithTitle:@"NO"]; + [alert setMessageText:[NSString stringWithFormat:@"%@?",url]]; + [alert setInformativeText:prompt]; + [alert setAlertStyle:NSWarningAlertStyle]; + NSInteger result = [alert runModal]; + + Boolean yes=NO; + if ( result == NSAlertFirstButtonReturn ) { + yes=YES; + } + [alert release]; + printf("%s",yes?"yes":"no"); +} + + +- (void)pasword:(NSString *)prompt url:(NSString *)url{ + + NSRect box = NSMakeRect(0, 0, 200, 24); + + NSTextField * passView = [[NSTextField alloc] initWithFrame: box]; + [passView setSelectable: YES]; + [passView setEditable: YES]; + [passView setBordered: YES]; + [passView setBezeled: YES]; + [passView setBezelStyle: NSTextFieldSquareBezel]; + [passView selectText: self]; + + + NSAlert *alert = [[NSAlert alloc] init]; + [alert addButtonWithTitle:@"Ok"]; + [alert addButtonWithTitle:@"cancel"]; + [alert setMessageText:[NSString stringWithFormat:@"%@?",url]]; + [alert setInformativeText:prompt]; + [alert setAlertStyle:NSWarningAlertStyle]; + [alert setAccessoryView:passView]; + [alert setShowsSuppressionButton:YES]; + [[alert suppressionButton] setTitle:@"Save on keychain"]; + NSInteger result = [alert runModal]; + if ( result == NSAlertFirstButtonReturn ) { + NSString *pas=[passView stringValue]; + printf( "%s", [pas UTF8String] ); + if ([[alert suppressionButton] state] == NSOnState) { + StorePasswordKeychain ([url cStringUsingEncoding:NSASCIIStringEncoding], + [url lengthOfBytesUsingEncoding:NSASCIIStringEncoding], + (void *)[pas cStringUsingEncoding:NSASCIIStringEncoding], + [pas lengthOfBytesUsingEncoding:NSASCIIStringEncoding]); } - - box.origin = NSZeroPoint; // Only need local coords from now on. - - // OK: - NSRect okBox = box; - okBox.origin.x = NSMaxX( box ) -OKBUTTONWIDTH -20; - okBox.size.width = OKBUTTONWIDTH; - okBox.origin.y += 20; - okBox.size.height = OKBUTTONHEIGHT; - NSButton *okButton = [[NSButton alloc] initWithFrame: okBox]; - [okButton setTarget: self]; - [okButton setAction: @selector(doOKButton:)]; - [okButton setTitle: @"OK"]; // +++ Localize. - [okButton setKeyEquivalent: @"\r"]; - [okButton setBordered: YES]; - [okButton setBezelStyle: NSRoundedBezelStyle]; - [[mPasswordPanel contentView] addSubview: okButton]; - - // Cancel: - NSRect cancelBox = box; - cancelBox.origin.x = NSMinX( okBox ) -CANCELBUTTONWIDTH -6; - cancelBox.size.width = CANCELBUTTONWIDTH; - cancelBox.origin.y += 20; - cancelBox.size.height = CANCELBUTTONHEIGHT; - NSButton *cancleButton = [[NSButton alloc] initWithFrame: cancelBox]; - [cancleButton setTarget: self]; - [cancleButton setAction: @selector(doCancelButton:)]; - [cancleButton setTitle: @"Cancel"]; // +++ Localize. - [cancleButton setBordered: YES]; - [cancleButton setBezelStyle: NSRoundedBezelStyle]; - [[mPasswordPanel contentView] addSubview: cancleButton]; - - // Password field: - NSRect passBox = box; - passBox.origin.y = NSMaxY(okBox) + 24; - passBox.size.height = PASSHEIGHT; - passBox.origin.x += 104; - passBox.size.width -= 104 + 20; - mPasswordField = [[NSSecureTextField alloc] initWithFrame: passBox]; - [mPasswordField setSelectable: YES]; - [mPasswordField setEditable: YES]; - [mPasswordField setBordered: YES]; - [mPasswordField setBezeled: YES]; - [mPasswordField setBezelStyle: NSTextFieldSquareBezel]; - [mPasswordField selectText: self]; - [[mPasswordPanel contentView] addSubview: mPasswordField]; - - // Password label: - NSRect passLabelBox = box; - passLabelBox.origin.y = NSMaxY(passBox) + 8; - passLabelBox.size.height = PASSLABELHEIGHT; - passLabelBox.origin.x += 100; - passLabelBox.size.width -= 100 + 20; - NSTextField *passwordLabel = [[NSTextField alloc] initWithFrame: passLabelBox]; - [passwordLabel setSelectable: YES]; - [passwordLabel setEditable: NO]; - [passwordLabel setBordered: NO]; - [passwordLabel setBezeled: NO]; - [passwordLabel setDrawsBackground: NO]; - [passwordLabel setStringValue: prompt]; - [[mPasswordPanel contentView] addSubview: passwordLabel]; - - // remember buton: - if(remember){ - NSRect rememberBox = box; - rememberBox.origin.x = 100; - rememberBox.size.width = CANCELBUTTONWIDTH; - rememberBox.origin.y += 20; - rememberBox.size.height = CANCELBUTTONHEIGHT; - rememberCheck = [[NSButton alloc] initWithFrame: rememberBox]; - [rememberCheck setButtonType:NSSwitchButton]; - [rememberCheck setTarget: self]; - [rememberCheck setTitle: @"Remenber"]; // +++ Localize. - [[mPasswordPanel contentView] addSubview: rememberCheck]; - } - - // GitX icon: - NSRect gitxIconBox = box; - gitxIconBox.origin.y = NSMaxY(box) - 78; - gitxIconBox.size.height = 64; - gitxIconBox.origin.x += 20; - gitxIconBox.size.width = 64; - NSImageView *gitxIconView = [[NSImageView alloc] initWithFrame: gitxIconBox]; - [gitxIconView setEditable: NO]; - NSString *gitxIconPath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent: @"gitx.icns"]; - NSImage *gitxIcon = [[NSImage alloc] initWithContentsOfFile: gitxIconPath]; - [gitxIconView setImage: gitxIcon]; - [[mPasswordPanel contentView] addSubview: gitxIconView]; - } - - return mPasswordPanel; -} - - --(IBAction) doOKButton: (id)sender -{ - NSString *pas=[mPasswordField stringValue]; - printf( "%s", [pas UTF8String] ); - - if ((rememberCheck!=nil) && [rememberCheck state]==NSOnState) { - OSStatus status = StorePasswordKeychain ([url cStringUsingEncoding:NSASCIIStringEncoding], - [url lengthOfBytesUsingEncoding:NSASCIIStringEncoding], - (void *)[pas cStringUsingEncoding:NSASCIIStringEncoding], - [pas lengthOfBytesUsingEncoding:NSASCIIStringEncoding]); //Call - if (status != noErr) { - [[NSApplication sharedApplication] stopModalWithCode:-1]; - } - } - [[NSApplication sharedApplication] stopModalWithCode:0]; -} - - -// TODO: Need to find out how to get SSH to cancel. -// When the user cancels the window it is opened again for however -// many times the remote server allows failed attempts. --(IBAction) doCancelButton: (id)sender -{ - [[NSApplication sharedApplication] stopModalWithCode:-1]; + } + + [alert release]; } @end @@ -295,61 +207,45 @@ int main( int argc, const char* argv[] ) { // close stderr to stop cocoa log messages from being picked up by GitX close(STDERR_FILENO); - - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - + ProcessSerialNumber myPSN = { 0, kCurrentProcess }; TransformProcessType( &myPSN, kProcessTransformToForegroundApplication ); NSApplication *app = [NSApplication sharedApplication]; GAPAppDelegate *appDel = [[GAPAppDelegate alloc] init]; [app setDelegate: appDel]; + - char args[4024]; - getproclline(getppid(),args); - NSString *cmd=[NSString stringWithFormat:@"%@",[NSString stringWithUTF8String:args]]; - - NSString *prompt=@"???"; - - url=@"poipoi"; - - BOOL remember=NO; - - if([cmd hasPrefix:@"git-remote-https"]){ - NSArray *args=[cmd componentsSeparatedByString:@" "]; - url=[args objectAtIndex:[args count]-1]; - prompt=[NSString stringWithFormat:@"%@ %@",[NSString stringWithCString:argv[1] encoding:NSASCIIStringEncoding],url]; - remember=YES; - }else if((sizeof(argv)/sizeof(char*))>1){ - prompt=[NSString stringWithCString:argv[1] encoding:NSASCIIStringEncoding]; - }else{ // only for test - remember=YES; - prompt=[NSString stringWithFormat:@"%???? %@",url]; - } - - void *passwordData = nil; - SecKeychainItemRef itemRef = nil; - UInt32 passwordLength = 0; - - OSStatus status = GetPasswordKeychain ([url cStringUsingEncoding:NSASCIIStringEncoding],[url lengthOfBytesUsingEncoding:NSASCIIStringEncoding],&passwordData,&passwordLength,&itemRef); - if (status == noErr) { - SecKeychainItemFreeContent (NULL,passwordData); - NSString *pas=[[NSString stringWithCString:passwordData encoding:NSASCIIStringEncoding] substringToIndex:passwordLength]; - printf( "%s", [pas UTF8String] ); - //DLog(@"--> '%@'",pas); - return 0; - }else if (status != errSecItemNotFound) { - return -1; - } - - NSInteger code; - - NSWindow *passPanel = [appDel passwordPanel:prompt remember:remember]; - [app activateIgnoringOtherApps: YES]; - [passPanel makeKeyAndOrderFront: nil]; - code = [app runModalForWindow: passPanel]; - - [defaults synchronize]; - - return code; + char args[4024]; + getproclline(getppid(),args); + NSString *cmd=[NSString stringWithFormat:@"%@",[NSString stringWithUTF8String:args]]; + + NSLog(@"cmd: '%@'",cmd); + + if([cmd hasPrefix:@"git-remote"]){ + NSArray *args=[cmd componentsSeparatedByString:@" "]; + NSString *url=[args objectAtIndex:[args count]-1]; + + void *passwordData = nil; + SecKeychainItemRef itemRef = nil; + UInt32 passwordLength = 0; + + OSStatus status = GetPasswordKeychain ([url cStringUsingEncoding:NSASCIIStringEncoding],[url lengthOfBytesUsingEncoding:NSASCIIStringEncoding],&passwordData,&passwordLength,&itemRef); + if (status == noErr) { + SecKeychainItemFreeContent (NULL,passwordData); + NSString *pas=[[NSString stringWithCString:passwordData encoding:NSASCIIStringEncoding] substringToIndex:passwordLength]; + printf( "%s", [pas UTF8String] ); + return 0; + } + + NSString *prompt=[NSString stringWithFormat:@"%@",[NSString stringWithCString:argv[1] encoding:NSASCIIStringEncoding]]; + [appDel pasword:prompt url:url]; + }else{ // yes/no? + NSString *prompt=[NSString stringWithFormat:@"%@",[NSString stringWithCString:argv[1] encoding:NSASCIIStringEncoding]]; + NSArray *args=[cmd componentsSeparatedByString:@" "]; + NSString *url=[args objectAtIndex:1]; + [appDel yesNo:prompt url:url]; + } + + return 0; }