Skip to content

Commit 366b4f1

Browse files
committed
working
1 parent 8c6fda2 commit 366b4f1

File tree

1 file changed

+31
-25
lines changed

1 file changed

+31
-25
lines changed

gitx_askpasswd_main.m

Lines changed: 31 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,6 @@ -(NSPanel*)passwordPanel:(NSString *)prompt remember:(BOOL)remember
137137
[rememberCheck setButtonType:NSSwitchButton];
138138
[rememberCheck setTarget: self];
139139
[rememberCheck setTitle: @"Remenber"]; // +++ Localize.
140-
[rememberCheck setKeyEquivalent: @"\r"];
141140
[[mPasswordPanel contentView] addSubview: rememberCheck];
142141
}
143142

@@ -162,15 +161,17 @@ -(NSPanel*)passwordPanel:(NSString *)prompt remember:(BOOL)remember
162161
-(IBAction) doOKButton: (id)sender
163162
{
164163
NSString *pas=[mPasswordField stringValue];
165-
printf( "%s\n", [pas UTF8String] );
166164

167-
StorePasswordKeychain ([url cStringUsingEncoding:NSASCIIStringEncoding],
168-
[url lengthOfBytesUsingEncoding:NSASCIIStringEncoding],
169-
[pas cStringUsingEncoding:NSASCIIStringEncoding],
170-
[pas lengthOfBytesUsingEncoding:NSASCIIStringEncoding]); //Call
171-
172-
173-
[[NSApplication sharedApplication] stopModalWithCode: 0];
165+
if ((rememberCheck!=nil) && [rememberCheck state]==NSOnState) {
166+
OSStatus status = StorePasswordKeychain ([url cStringUsingEncoding:NSASCIIStringEncoding],
167+
[url lengthOfBytesUsingEncoding:NSASCIIStringEncoding],
168+
[pas cStringUsingEncoding:NSASCIIStringEncoding],
169+
[pas lengthOfBytesUsingEncoding:NSASCIIStringEncoding]); //Call
170+
if (status != noErr) {
171+
[[NSApplication sharedApplication] stopModalWithCode:-1];
172+
}
173+
}
174+
[[NSApplication sharedApplication] stopModalWithCode:0];
174175
}
175176

176177

@@ -179,7 +180,7 @@ -(IBAction) doOKButton: (id)sender
179180
// many times the remote server allows failed attempts.
180181
-(IBAction) doCancelButton: (id)sender
181182
{
182-
[[NSApplication sharedApplication] stopModalWithCode: 1];
183+
[[NSApplication sharedApplication] stopModalWithCode:-1];
183184
}
184185

185186
@end
@@ -310,36 +311,41 @@ int main( int argc, const char* argv[] )
310311

311312
url=@"poipoi";
312313

314+
BOOL remember=NO;
315+
313316
if([cmd hasPrefix:@"git-remote-https"]){
314317
NSArray *args=[cmd componentsSeparatedByString:@" "];
315318
url=[args objectAtIndex:[args count]-1];
319+
prompt=[NSString stringWithFormat:@"%@ %@",[NSString stringWithCString:argv[1] encoding:NSASCIIStringEncoding],url];
320+
remember=YES;
316321
}else if((sizeof(argv)/sizeof(char*))>1){
317322
prompt=[NSString stringWithCString:argv[1] encoding:NSASCIIStringEncoding];
318-
}else{
319-
prompt=@"null";
323+
}else{ // only for test
324+
remember=YES;
325+
prompt=[NSString stringWithFormat:@"%???? %@",url];
320326
}
321327

322-
323-
OSStatus status,status1;
324328
void *passwordData = nil;
325329
SecKeychainItemRef itemRef = nil;
326330
UInt32 passwordLength = nil;
327331

328-
status1 = GetPasswordKeychain ([url cStringUsingEncoding:NSASCIIStringEncoding],[url lengthOfBytesUsingEncoding:NSASCIIStringEncoding],&passwordData,&passwordLength,&itemRef);
329-
if (status1 == noErr) {
332+
OSStatus status = GetPasswordKeychain ([url cStringUsingEncoding:NSASCIIStringEncoding],[url lengthOfBytesUsingEncoding:NSASCIIStringEncoding],&passwordData,&passwordLength,&itemRef);
333+
printf( "status= %d\n",status);
334+
if (status == noErr) {
330335
SecKeychainItemFreeContent (NULL,passwordData);
336+
NSString *pas=[NSString stringWithCString:passwordData encoding:NSASCIIStringEncoding];
337+
printf( "%s\n", [pas UTF8String] );
338+
return 0;
339+
}else if (status != errSecItemNotFound) {
340+
return -1;
331341
}
332-
342+
333343
NSInteger code;
334344

335-
if(passwordLength>0){
336-
NSString *pass=[NSString stringWithCString:passwordData encoding:NSASCIIStringEncoding];
337-
}else {
338-
NSWindow *passPanel = [appDel passwordPanel:prompt remember:NO];
339-
[app activateIgnoringOtherApps: YES];
340-
[passPanel makeKeyAndOrderFront: nil];
341-
code = [app runModalForWindow: passPanel];
342-
}
345+
NSWindow *passPanel = [appDel passwordPanel:prompt remember:remember];
346+
[app activateIgnoringOtherApps: YES];
347+
[passPanel makeKeyAndOrderFront: nil];
348+
code = [app runModalForWindow: passPanel];
343349

344350
[defaults synchronize];
345351

0 commit comments

Comments
 (0)