IBOutlet BadgedImageView *changePasswordBadge;
IBOutlet BadgedImageView *errorBadge;
+ IBOutlet NSProgressIndicator *enterSpinny;
+ IBOutlet NSProgressIndicator *passwordSpinny;
+ IBOutlet NSProgressIndicator *samSpinny;
+ IBOutlet NSProgressIndicator *changePasswordSpinny;
+
// Controls that need to be made key
IBOutlet NSTextField *identityField;
IBOutlet NSTextField *passwordField;
contextInfo: (void *) contextInfo;
- (IBAction) changePasswordGearAction: (id) sender;
-- (void) changePasswordThread: (NSString *) identityString;
@end
}
}
+- (IBAction) showWindow: (id) sender
+{
+ [[self window] center];
+ [super showWindow:sender];
+}
+
- (void) setContent: (NSMutableDictionary *) newContent
{
[self window]; // wake up the nib connections
- (void) showEnterIdentity
{
kim_error err = KIM_NO_ERROR;
+ NSWindow *theWindow = [self window];
NSString *key = (associatedClient.name) ? ACAppPrincReqKey : ACPrincReqKey;
NSString *message = [NSString stringWithFormat:
NSLocalizedStringFromTable(key, ACLocalizationTable, NULL),
// wake up the nib connections and adjust window size
[self window];
// set up controls with info from associatedClient
- [[containerView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
- [containerView addSubview:identityView];
[enterBadge setBadgePath:associatedClient.path];
[glueController setValue:message
forKeyPath:message_keypath];
+
+ [theWindow setFrame:[theWindow frameRectForContentRect:[identityView frame]] display:NO];
+ [[containerView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
+ [containerView addSubview:identityView];
+
+ [enterSpinny stopAnimation:nil];
+
+ [theWindow makeFirstResponder:identityField];
[self showWindow:nil];
- [[self window] makeFirstResponder:identityField];
}
- (void) showAuthPrompt
{
uint32_t type = [[glueController valueForKeyPath:@"content.prompt_type"] unsignedIntegerValue];
+ [passwordSpinny stopAnimation:nil];
+ [samSpinny stopAnimation:nil];
+
switch (type) {
case kim_prompt_type_password :
[self showEnterPassword]; break;
NSRect frame;
NSString *key = nil;
NSString *message = nil;
-
- [self window];
+ NSWindow *theWindow = [self window];
if ([associatedClient.name isEqualToString:[[NSBundle mainBundle] bundlePath]]) {
key = ACPasswordReqKey;
[glueController setValue:message
forKeyPath:message_keypath];
- // wake up the nib connections and adjust window size
- // set up controls with info from associatedClient
- [[containerView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
- [containerView addSubview:passwordView];
// set badge
[passwordBadge setBadgePath:associatedClient.path];
-
+
+ frame = [passwordView frame];
+ [theWindow setFrame:[theWindow frameRectForContentRect:frame] display:NO];
+ [[containerView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
+ [containerView addSubview:passwordView];
+
// adjust for checkbox visibility
if (![[glueController valueForKeyPath:allow_save_password_keypath] boolValue]) {
+ frame = [theWindow frame];
shrinkBy = ([passwordField frame].origin.y -
[rememberPasswordInKeychainCheckBox frame].origin.y);
- frame = [[self window] frame];
frame.origin.y += shrinkBy;
frame.size.height -= shrinkBy;
- [[self window] setFrame:frame display:NO animate:NO];
+ [theWindow setFrame:frame display:NO];
}
+ [theWindow makeFirstResponder:passwordField];
[self showWindow:nil];
- [[self window] makeFirstResponder:passwordField];
}
- (void) showSAM
{
- // wake up the nib connections and adjust window size
- [self window];
- // set up controls with info from associatedClient
- [[containerView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
- [containerView addSubview:samView];
+ NSWindow *theWindow = [self window];
+
// set badge
[samBadge setBadgePath:associatedClient.path];
[glueController setValue:[NSNumber numberWithBool:NO]
forKeyPath:allow_save_password_keypath];
+ [theWindow setFrame:[theWindow frameRectForContentRect:[samView frame]] display:NO];
+ [[containerView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
+ [containerView addSubview:samView];
+
[self showWindow:nil];
[[self window] makeFirstResponder:samPromptField];
}
NSString *message = [NSString stringWithFormat:
NSLocalizedStringFromTable(key, ACLocalizationTable, NULL),
associatedClient.name];
+ NSWindow *theWindow = [self window];
BOOL expired = [[glueController valueForKeyPath:password_expired_keypath] boolValue];
[glueController setValue:message forKeyPath:message_keypath];
// wake up the nib connections and adjust window size
- [self window];
+ [theWindow setFrame:[theWindow frameRectForContentRect:[changePasswordView frame]] display:NO];
// set up controls with info from associatedClient
[[containerView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
[containerView addSubview:changePasswordView];
// set badge
[changePasswordBadge setBadgePath:associatedClient.path];
+ [changePasswordSpinny stopAnimation:nil];
+
[self showWindow:nil];
- [[self window] makeFirstResponder:oldPasswordField];
+ [theWindow makeFirstResponder:oldPasswordField];
}
- (void) showError
- (IBAction) changePasswordGearAction: (id) sender
{
NSString *expandedString = [KIMUtilities expandedIdentity:[identityField stringValue]];
- NSLog(@"%s", __FUNCTION__);
- if (expandedString && [expandedString length] > 0) {
- [expandedString retain];
- [NSThread detachNewThreadSelector:@selector(changePasswordThread:)
- toTarget:self
- withObject:expandedString];
- }
-}
-
-- (void) changePasswordThread: (NSString *) identityString
-{
- NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
- kim_error err = KIM_NO_ERROR;
- kim_identity identity = NULL;
+ NSDictionary *options = [favoriteOptions objectForKey:expandedString];
- NSLog(@"%s %@", __FUNCTION__, identityString);
- if (!err) {
- err = kim_identity_create_from_string(&identity, [identityString UTF8String]);
- }
- if (!err) {
- err = kim_identity_change_password(identity);
+ if (!options) {
+ options = [glueController valueForKeyPath:options_keypath];
}
-
- NSLog(@"%s %d", __FUNCTION__, err);
-
- kim_identity_free(&identity);
- [identityString release];
- [pool release];
+ [enterSpinny startAnimation:nil];
+
+ // the principal must already be valid to get this far
+ [associatedClient didEnterIdentity:expandedString options:options wantsChangePassword:YES];
}
- (IBAction) cancel: (id) sender
- (IBAction) enterIdentity: (id) sender
{
NSString *expandedString = [KIMUtilities expandedIdentity:[identityField stringValue]];
- NSDictionary *options = [favoriteOptions objectForKey:expandedString];
-
+ NSDictionary *options = [favoriteOptions objectForKey:expandedString];
+
if (!options) {
options = [glueController valueForKeyPath:options_keypath];
}
+
+ [enterSpinny startAnimation:nil];
+
// the principal must already be valid to get this far
- [associatedClient didEnterIdentity:expandedString options:options];
+ [associatedClient didEnterIdentity:expandedString options:options wantsChangePassword:NO];
}
- (IBAction) answerAuthPrompt: (id) sender
if (!saveResponse) {
saveResponse = [NSNumber numberWithBool:NO];
}
+ [passwordSpinny startAnimation:nil];
+ [samSpinny startAnimation:nil];
[associatedClient didPromptForAuth:responseString
saveResponse:saveResponse];
}
NSString *newString = [glueController valueForKeyPath:new_password_keypath];
NSString *verifyString = [glueController valueForKeyPath:verify_password_keypath];
+ [changePasswordSpinny startAnimation:nil];
+
[associatedClient didChangePassword:oldString
newPassword:newString
verifyPassword:verifyString];
- (kim_error) handleError: (NSDictionary *) info;
- (void) didCancel;
-- (void) didSelectIdentity: (NSString *) identityString options: (NSDictionary *) options;
-- (void) didEnterIdentity: (NSString *) identityString options: (NSDictionary *) options;
+- (void) didSelectIdentity: (NSString *) identityString
+ options: (NSDictionary *) options
+ wantsChangePassword: (BOOL) wantsChangePassword;
+- (void) didEnterIdentity: (NSString *) identityString
+ options: (NSDictionary *) options
+ wantsChangePassword: (BOOL) wantsChangePassword;
- (void) didPromptForAuth: (NSString *) responseString saveResponse: (NSNumber *) saveResponse;
- (void) didChangePassword: (NSString *) oldPassword
newPassword: (NSString *) newPassword
return 0;
}
-- (void) didSelectIdentity: (NSString *) identityString options: (NSDictionary *) options
+- (void) didSelectIdentity: (NSString *) identityString
+ options: (NSDictionary *) options
+ wantsChangePassword: (BOOL) wantsChangePassword
{
+ NSLog(@"%s %@ %@", __FUNCTION__, identityString, options);
[self.currentInfo setObject:identityString forKey:@"identity_string"];
- [self.currentInfo setObject:options forKey:@"options"];
-
+ // if the user set custom options, use those
+ if (options) {
+ [self.currentInfo setObject:options forKey:@"options"];
+ }
+ // else use the options in the hints
+ else {
+ [self.currentInfo setObject:[self.currentInfo valueForKeyPath:@"hints.options"]
+ forKey:@"options"];
+ }
+ [self.currentInfo setObject:[NSNumber numberWithBool:wantsChangePassword] forKey:@"wants_change_password"];
+
[KerberosAgentListener didSelectIdentity:self.currentInfo error:0];
// clean up state
return 0;
}
-- (void) didEnterIdentity: (NSString *) identityString options: (NSDictionary *) options
+- (void) didEnterIdentity: (NSString *) identityString
+ options: (NSDictionary *) options
+ wantsChangePassword: (BOOL) wantsChangePassword
{
[self.currentInfo setObject:identityString forKey:@"identity_string"];
[self.currentInfo setObject:options forKey:@"options"];
+ [self.currentInfo setObject:[NSNumber numberWithBool:wantsChangePassword] forKey:@"wants_change_password"];
[KerberosAgentListener didEnterIdentity:self.currentInfo error:0];
}
#import "KIMUtilities.h"
@interface Identity : NSObject {
- kim_identity kimIdentity;
- kim_options kimOptions;
+ NSString *identity;
+ NSDictionary *options;
kim_credential_state state;
- cc_time_t expiration_time;
+ NSDate *expirationDate;
BOOL favorite;
}
-@property kim_identity kimIdentity;
-@property kim_options kimOptions;
-@property kim_credential_state state;
-@property BOOL favorite;
-@property cc_time_t expiration_time;
+@property (readwrite, retain) NSString *identity;
+@property (readwrite, retain) NSDictionary *options;
+@property (assign) kim_credential_state state;
+@property (assign) BOOL favorite;
+@property (readwrite, retain) NSDate *expirationDate;
// derived properties
-@property(readonly) NSString *principalString;
-@property(readonly) NSString *componentsString;
-@property(readonly) NSString *realmString;
-@property(readonly) NSDate *expirationDate;
-@property(readonly) NSString *expirationString;
-@property(readonly) NSString *validLifetimeString;
-@property(readonly) NSString *renewableLifetimeString;
-@property(readonly) BOOL hasCCache;
-@property(readwrite) BOOL isRenewable;
-@property(readwrite) BOOL isForwardable;
-@property(readwrite) BOOL isAddressless;
-@property(readwrite) BOOL isProxiable;
-@property(readwrite) NSUInteger validLifetime;
-@property(readwrite) NSUInteger renewableLifetime;
+@property (readonly) kim_identity kimIdentity;
+@property (readonly) kim_options kimOptions;
+@property (readonly) NSString *expirationString;
+@property (readonly) NSString *validLifetimeString;
+@property (readonly) NSString *renewableLifetimeString;
+@property (readonly) BOOL hasCCache;
+@property (readwrite) BOOL isRenewable;
+@property (readwrite) BOOL isForwardable;
+@property (readwrite) BOOL isAddressless;
+@property (readwrite) BOOL isProxiable;
+@property (readwrite) NSUInteger validLifetime;
+@property (readwrite) NSUInteger renewableLifetime;
-- (id) initWithIdentity: (kim_identity) identity options: (kim_options) options;
-- (id) initWithFavoriteIdentity: (kim_identity) identity options: (kim_options) options;
+- (id) initWithKimIdentity: (kim_identity) an_identity kimOptions: (kim_options) some_options;
+- (id) initWithFavoriteIdentity: (kim_identity) an_identity options: (kim_options) some_options;
+- (id) initWithIdentity: (NSString *) anIdentity options: (NSDictionary *) someOptions;
- (BOOL) isEqualToKIMIdentity: (kim_identity) identity;
- (BOOL) isEqual: (Identity *)otherIdentity;
-- (kim_error) setPrincipalComponents: (NSString *) componentsString realm: (NSString *) realmString;
-
- (void) resetOptions;
- (void) toggleFavorite;
- (BOOL) addToFavorites;
@interface Identities : NSObject {
- NSArray *favoriteIdentities;
- NSArray *identities;
+ NSMutableArray *favoriteIdentities;
+ NSMutableArray *identities;
NSConnection *threadConnection;
}
-@property(readonly, retain) NSArray *identities;
+@property(readonly, retain) NSMutableArray *identities;
@property(readonly) NSUInteger minimumValidLifetime;
@property(readonly) NSUInteger maximumValidLifetime;
@property(readonly) NSUInteger minimumRenewableLifetime;
@implementation Identity
+@synthesize identity;
+@synthesize options;
+@synthesize expirationDate;
@synthesize state;
-@synthesize expiration_time;
@synthesize favorite;
#pragma mark Initialization & Comparison
NSMutableSet *result = [[super keyPathsForValuesAffectingValueForKey:key] mutableCopy];
NSSet *otherKeys = nil;
- if ([key isEqualToString:@"principalString"]) {
- otherKeys = [NSSet setWithObjects:@"kimIdentity", nil];
- }
- else if ([key isEqualToString:@"expirationDate"]) {
- otherKeys = [NSSet setWithObjects:@"kimOptions", @"state", @"expirationTime", nil];
- }
- else if ([key isEqualToString:@"expirationString"]) {
- otherKeys = [NSSet setWithObjects:@"kimOptions", @"state", @"expirationTime", nil];
- }
- else if ([key isEqualToString:@"isProxiable"]) {
- otherKeys = [NSSet setWithObjects:@"kimOptions", nil];
- }
- else if ([key isEqualToString:@"isForwardable"]) {
- otherKeys = [NSSet setWithObjects:@"kimOptions", nil];
- }
- else if ([key isEqualToString:@"isAddressless"]) {
- otherKeys = [NSSet setWithObjects:@"kimOptions", nil];
- }
- else if ([key isEqualToString:@"isRenewable"]) {
- otherKeys = [NSSet setWithObjects:@"kimOptions", nil];
- }
- else if ([key isEqualToString:@"validLifetime"]) {
- otherKeys = [NSSet setWithObjects:@"kimOptions", nil];
- }
- else if ([key isEqualToString:@"renewableLifetime"]) {
- otherKeys = [NSSet setWithObjects:@"kimOptions", nil];
- }
- else if ([key isEqualToString:@"validLifetimeString"]) {
- otherKeys = [NSSet setWithObjects:@"kimOptions", @"validLifetime", nil];
- }
- else if ([key isEqualToString:@"renewableLifetimeString"]) {
- otherKeys = [NSSet setWithObjects:@"kimOptions", @"renewableLifetime", nil];
- }
+// if ([key isEqualToString:@"principalString"]) {
+// otherKeys = [NSSet setWithObjects:@"kimIdentity", nil];
+// }
+// else if ([key isEqualToString:@"expirationDate"]) {
+// otherKeys = [NSSet setWithObjects:@"kimOptions", @"state", @"expirationTime", nil];
+// }
+// else if ([key isEqualToString:@"expirationString"]) {
+// otherKeys = [NSSet setWithObjects:@"kimOptions", @"state", @"expirationTime", nil];
+// }
+// else if ([key isEqualToString:@"isProxiable"]) {
+// otherKeys = [NSSet setWithObjects:@"kimOptions", nil];
+// }
+// else if ([key isEqualToString:@"isForwardable"]) {
+// otherKeys = [NSSet setWithObjects:@"kimOptions", nil];
+// }
+// else if ([key isEqualToString:@"isAddressless"]) {
+// otherKeys = [NSSet setWithObjects:@"kimOptions", nil];
+// }
+// else if ([key isEqualToString:@"isRenewable"]) {
+// otherKeys = [NSSet setWithObjects:@"kimOptions", nil];
+// }
+// else if ([key isEqualToString:@"validLifetime"]) {
+// otherKeys = [NSSet setWithObjects:@"kimOptions", nil];
+// }
+// else if ([key isEqualToString:@"renewableLifetime"]) {
+// otherKeys = [NSSet setWithObjects:@"kimOptions", nil];
+// }
+// else if ([key isEqualToString:@"validLifetimeString"]) {
+// otherKeys = [NSSet setWithObjects:@"kimOptions", @"validLifetime", nil];
+// }
+// else if ([key isEqualToString:@"renewableLifetimeString"]) {
+// otherKeys = [NSSet setWithObjects:@"kimOptions", @"renewableLifetime", nil];
+// }
[result unionSet:otherKeys];
- (id) init
{
- return [self initWithIdentity: NULL options: NULL];
+ return [self initWithIdentity: @"" options: [NSDictionary dictionary]];
}
// ---------------------------------------------------------------------------
-- (id) initWithIdentity: (kim_identity) identity options: (kim_options) options
+- (id) initWithKimIdentity: (kim_identity) an_identity kimOptions: (kim_options) some_options
{
- if ((self = [super init])) {
- self.kimIdentity = identity;
- self.kimOptions = options;
- self.state = kim_credentials_state_not_yet_valid;
- self.expiration_time = 0;
- self.favorite = FALSE;
- }
+ kim_error err = KIM_NO_ERROR;
+ kim_string identity_string = NULL;
- return self;
+ if (!err) {
+ err = kim_identity_get_display_string(an_identity, &identity_string);
+ }
+ return [self initWithIdentity:[NSString stringWithUTF8String:identity_string]
+ options:[KIMUtilities dictionaryForKimOptions:some_options]];
}
// ---------------------------------------------------------------------------
-- (id) initWithFavoriteIdentity: (kim_identity) identity options: (kim_options) options
+- (id) initWithFavoriteIdentity: (kim_identity) an_identity options: (kim_options) some_options
{
- if ((self = [self initWithIdentity: identity options: options])) {
+ if ((self = [self initWithKimIdentity: an_identity kimOptions: some_options])) {
self.favorite = TRUE;
}
// ---------------------------------------------------------------------------
-- (BOOL) isEqualToKIMIdentity: (kim_identity) identity
+- (id) initWithIdentity: (NSString *) anIdentity options: (NSDictionary *) someOptions
+{
+ self = [super init];
+ if (self != nil) {
+ self.identity = anIdentity;
+ self.options = someOptions;
+ self.state = kim_credentials_state_not_yet_valid;
+ self.expirationDate = [NSDate dateWithTimeIntervalSince1970:0];
+ self.favorite = NO;
+ }
+ return self;
+}
+
+// ---------------------------------------------------------------------------
+
+- (BOOL) isEqualToKIMIdentity: (kim_identity) comparison_identity
{
kim_error err = KIM_NO_ERROR;
kim_comparison comparison;
+ kim_identity an_identity = self.kimIdentity;
- err = kim_identity_compare (kimIdentity, identity, &comparison);
+ err = kim_identity_compare (an_identity, comparison_identity, &comparison);
+
+ kim_identity_free(&an_identity);
return (!err && kim_comparison_is_equal_to (comparison));
}
- (NSUInteger)hash
{
- return [self.principalString hash];
+ return [self.identity hash];
}
// ---------------------------------------------------------------------------
- (NSComparisonResult) compare: (Identity *)otherIdentity
{
- return ([self.principalString compare:otherIdentity.principalString]);
+ return ([self.identity compare:otherIdentity.identity]);
}
#pragma mark Actions
- (void) resetOptions
{
// property setter converts NULL into actual kim_options with default settings
- self.kimOptions = NULL;
+ kim_error err = KIM_NO_ERROR;
+ kim_options some_options = NULL;
+
+ err = kim_options_create(&some_options);
+
+ if (!err) {
+ self.options = [KIMUtilities dictionaryForKimOptions:some_options];
+ }
+
+ log_kim_error_to_console(err);
+
+ kim_options_free(&some_options);
}
// ---------------------------------------------------------------------------
{
kim_error err = KIM_NO_ERROR;
kim_preferences preferences = NULL;
- kim_options options = NULL;
- kim_string error_string = NULL;
- err = kim_preferences_create(&preferences);
+ kim_identity an_identity = self.kimIdentity;
+ kim_options some_options = self.kimOptions;
- if (!err) {
- err = kim_options_create(&options);
- }
+ err = kim_preferences_create(&preferences);
if (!err) {
- err = kim_preferences_add_favorite_identity(preferences, self.kimIdentity, options);
+ err = kim_preferences_add_favorite_identity(preferences, an_identity, some_options);
}
if (!err) {
err = kim_preferences_synchronize(preferences);
}
- if (options) {
- kim_options_free(&options);
- }
- kim_preferences_free(&preferences);
+
if (!err) {
self.favorite = true;
} else {
- kim_string_create_for_last_error(&error_string, err);
- NSLog(@"%s failed with %s", __FUNCTION__, error_string);
+ log_kim_error_to_console(err);
}
+
+ kim_preferences_free(&preferences);
+ kim_identity_free(&an_identity);
+ kim_options_free(&some_options);
+
return (err != KIM_NO_ERROR);
}
{
kim_error err = KIM_NO_ERROR;
kim_preferences preferences = NULL;
- kim_options options = NULL;
- kim_string error_string = NULL;
+ kim_identity an_identity = self.kimIdentity;
+
err = kim_preferences_create(&preferences);
if (!err) {
- err = kim_options_create(&options);
- }
-
- if (!err) {
- err = kim_preferences_remove_favorite_identity(preferences, self.kimIdentity);
+ err = kim_preferences_remove_favorite_identity(preferences, an_identity);
}
if (!err) {
err = kim_preferences_synchronize(preferences);
}
- if (options) {
- kim_options_free(&options);
- }
- kim_preferences_free(&preferences);
if (!err) {
self.favorite = false;
} else {
- kim_string_create_for_last_error(&error_string, err);
- NSLog(@"%s failed with %s", __FUNCTION__, error_string);
+ log_kim_error_to_console(err);
}
+
+ kim_preferences_free(&preferences);
+ kim_identity_free(&an_identity);
+
return (err != KIM_NO_ERROR);
}
// ---------------------------------------------------------------------------
-- (NSDate *) expirationDate
-{
- return [NSDate dateWithTimeIntervalSince1970:expiration_time];
-}
-
-// ---------------------------------------------------------------------------
-
- (BOOL) hasCCache
{
kim_error err = KIM_NO_ERROR;
// ---------------------------------------------------------------------------
- (kim_identity) kimIdentity
-{
- return kimIdentity;
-}
-
-// ---------------------------------------------------------------------------
-
-- (void) setKimIdentity:(kim_identity)newKimIdentity
{
kim_error err = KIM_NO_ERROR;
- kim_string string = NULL;
-
- if (!kimIdentity || kimIdentity != newKimIdentity) {
- [self willChangeValueForKey:@"kimOptions"];
-
- kim_identity_free(&kimIdentity);
- kimIdentity = NULL;
- if (newKimIdentity != NULL) {
- kim_identity_get_display_string(newKimIdentity, &string);
- err = kim_identity_copy(&kimIdentity, newKimIdentity);
- }
-
- [self didChangeValueForKey:@"kimOptions"];
- }
-
- if (err) {
- log_kim_error_to_console(err);
- }
+ kim_identity an_identity = NULL;
+ err = kim_identity_create_from_string(&an_identity, [self.identity UTF8String]);
+ return an_identity;
}
// ---------------------------------------------------------------------------
- (kim_options) kimOptions
{
- return kimOptions;
-}
-
-// ---------------------------------------------------------------------------
-
-- (void) setKimOptions:(kim_options)newKimOptions
-{
- // Passing NULL resets to default options
- kim_error err = KIM_NO_ERROR;
-
- if (!kimOptions || kimOptions != newKimOptions) {
- [self willChangeValueForKey:@"kimOptions"];
-
- kim_options_free(&kimOptions);
- kimOptions = NULL;
-
- if (newKimOptions == NULL) {
- err = kim_options_create(&kimOptions);
- } else {
- err = kim_options_copy(&kimOptions, newKimOptions);
- }
-
- [self didChangeValueForKey:@"kimOptions"];
- }
+ return [KIMUtilities kimOptionsForDictionary:self.options];
}
// ---------------------------------------------------------------------------
- (BOOL) isRenewable
{
- kim_error err = KIM_NO_ERROR;
- kim_boolean result = FALSE;
- kim_options options = self.kimOptions;
-
- err = kim_options_get_renewable(options, &result);
-
- return (result != 0);
+ return [[self.options valueForKey:@"renewable"] boolValue];
}
// ---------------------------------------------------------------------------
- (void) setIsRenewable: (BOOL) value
{
- kim_error err = KIM_NO_ERROR;
- kim_options options = self.kimOptions;
-
- err = kim_options_set_renewable(options, value);
+ [self.options setValue:[NSNumber numberWithBool:value]
+ forKey:@"renewable"];
}
// ---------------------------------------------------------------------------
- (BOOL) isForwardable
{
- kim_error err = KIM_NO_ERROR;
- kim_boolean result = FALSE;
- kim_options options = self.kimOptions;
-
- err = kim_options_get_forwardable(options, &result);
-
- return (result != 0);
+ return [[self.options valueForKey:@"forwardable"] boolValue];
}
// ---------------------------------------------------------------------------
- (void) setIsForwardable: (BOOL) value
{
- kim_error err = KIM_NO_ERROR;
- kim_options options = self.kimOptions;
-
- err = kim_options_set_forwardable(options, value);
+ [self.options setValue:[NSNumber numberWithBool:value]
+ forKey:@"forwardable"];
}
// ---------------------------------------------------------------------------
- (BOOL) isAddressless
{
- kim_error err = KIM_NO_ERROR;
- kim_boolean result = FALSE;
- kim_options options = self.kimOptions;
-
- err = kim_options_get_addressless(options, &result);
-
- return (result != 0);
+ return [[self.options valueForKey:@"addressless"] boolValue];
}
// ---------------------------------------------------------------------------
- (void) setIsAddressless: (BOOL) value
{
- kim_error err = KIM_NO_ERROR;
- kim_options options = self.kimOptions;
-
- err = kim_options_set_addressless(options, value);
+ [self.options setValue:[NSNumber numberWithBool:value]
+ forKey:@"addressless"];
}
// ---------------------------------------------------------------------------
- (BOOL) isProxiable
{
- kim_error err = KIM_NO_ERROR;
- kim_boolean result = FALSE;
- kim_options options = self.kimOptions;
-
- err = kim_options_get_proxiable(options, &result);
-
- return (result != 0);
+ return [[self.options valueForKey:@"proxiable"] boolValue];
}
// ---------------------------------------------------------------------------
- (void) setIsProxiable: (BOOL) value
{
- kim_error err = KIM_NO_ERROR;
- kim_options options = self.kimOptions;
-
- err = kim_options_set_proxiable(options, value);
+ [self.options setValue:[NSNumber numberWithBool:value]
+ forKey:@"proxiable"];
}
// ---------------------------------------------------------------------------
- (NSUInteger) validLifetime
{
- kim_error err = KIM_NO_ERROR;
- kim_lifetime value = 0;
- kim_options options = self.kimOptions;
-
- err = kim_options_get_lifetime(options, &value);
-
- return (NSUInteger) value;
+ return [[self.options valueForKey:@"valid_lifetime"] unsignedIntegerValue];
}
// ---------------------------------------------------------------------------
- (void) setValidLifetime: (NSUInteger) newLifetime
{
- kim_error err = KIM_NO_ERROR;
- kim_options options = self.kimOptions;
-
- // round to nearest five minutes
- newLifetime = (newLifetime / VALID_LIFETIME_INCREMENT) * VALID_LIFETIME_INCREMENT;
-
- err = kim_options_set_lifetime(options, (kim_lifetime) newLifetime);
+ [self.options setValue:[NSNumber numberWithUnsignedInteger:newLifetime]
+ forKey:@"valid_lifetime"];
}
// ---------------------------------------------------------------------------
- (NSUInteger) renewableLifetime
{
- kim_error err = KIM_NO_ERROR;
- kim_lifetime value = 0;
- kim_options options = self.kimOptions;
-
- err = kim_options_get_renewal_lifetime(options, &value);
-
- return (NSUInteger) value;
+ return [[self.options valueForKey:@"renewable_lifetime"] unsignedIntegerValue];
}
// ---------------------------------------------------------------------------
- (void) setRenewableLifetime: (NSUInteger) newLifetime
{
- kim_error err = KIM_NO_ERROR;
- kim_options options = self.kimOptions;
-
- // round to nearest five minutes
- newLifetime = (newLifetime / RENEWABLE_LIFETIME_INCREMENT) * RENEWABLE_LIFETIME_INCREMENT;
-
- err = kim_options_set_renewal_lifetime(options, (kim_lifetime) newLifetime);
+ [self.options setValue:[NSNumber numberWithUnsignedInteger:newLifetime]
+ forKey:@"renewable_lifetime"];
}
#pragma mark String representations
// ---------------------------------------------------------------------------
-- (NSString *) principalString
-{
- kim_error err = KIM_NO_ERROR;
- kim_string display_string = NULL;
- NSString *result = nil;
-
- if (self.kimIdentity) {
- err = kim_identity_get_display_string(self.kimIdentity, &display_string);
- }
-
- if (!err && display_string) {
- result = [NSString stringWithUTF8String:display_string];
- }
- else {
- result = @"-";
- }
-
- if (err) {
- log_kim_error_to_console(err);
- }
-
- kim_string_free(&display_string);
-
- return result;
-}
-
-// ---------------------------------------------------------------------------
-
-- (NSString *) componentsString
-{
- kim_error err = KIM_NO_ERROR;
- kim_string display_string = NULL;
- NSString *result = @"";
-
- if (self.kimIdentity) {
- err = kim_identity_get_components_string(self.kimIdentity, &display_string);
- }
-
- if (!err && display_string) {
- result = [NSString stringWithUTF8String:display_string];
- }
-
- if (err) {
- log_kim_error_to_console(err);
- }
-
- kim_string_free(&display_string);
-
- return result;
-}
-
-// ---------------------------------------------------------------------------
-
-- (NSString *) realmString
-{
- kim_error err = KIM_NO_ERROR;
- kim_string display_string = NULL;
- NSString *result = @"";
-
- if (self.kimIdentity) {
- err = kim_identity_get_realm(self.kimIdentity, &display_string);
- }
-
- if (!err && display_string) {
- result = [NSString stringWithUTF8String:display_string];
- }
-
- if (err) {
- log_kim_error_to_console(err);
- }
-
- kim_string_free(&display_string);
-
- return result;
-}
-
-// ---------------------------------------------------------------------------
-
-- (kim_error) setPrincipalComponents: (NSString *) componentsString realm: (NSString *) realmString
-{
- kim_error err = KIM_NO_ERROR;
- kim_identity new_identity = NULL;
- char *principal_string = NULL;
-
- asprintf(&principal_string, "%s@%s",
- [componentsString UTF8String], [realmString UTF8String]);
-
- if (principal_string) {
- err = kim_identity_create_from_string(&new_identity, principal_string);
- }
-
- self.kimIdentity = new_identity;
-
- kim_identity_free(&new_identity);
- if (principal_string) {
- free(principal_string);
- }
-
- return err;
-}
-
-// ---------------------------------------------------------------------------
-
- (NSString *) expirationString
{
NSString *result = nil;
-
- if (expiration_time > 0) {
- time_t now = time(NULL);
- time_t lifetime = expiration_time - now;
- time_t seconds = (lifetime % 60);
- time_t minutes = (lifetime / 60 % 60);
- time_t hours = (lifetime / 3600 % 24);
- time_t days = (lifetime / 86400);
+ NSTimeInterval lifetime = [self.expirationDate timeIntervalSinceNow];
+ if (lifetime > 0) {
+ NSTimeInterval seconds = fmod(lifetime, 60);
+ NSTimeInterval minutes = fmod(lifetime, 60 % 60);
+ NSTimeInterval hours = fmod(lifetime, 3600 % 24);
+ NSTimeInterval days = fmod(lifetime, 86400);
if (seconds > 0) { seconds = 0; minutes++; }
if (minutes > 59) { minutes = 0; hours++; }
- (NSString *) description
{
- return [NSString stringWithFormat:@"%@ (%@) %@", self.principalString, self.expirationString, super.description];
+ return [NSString stringWithFormat:@"%@ (%@) %@", self.identity, self.expirationString, [super description]];
}
@end
@interface Identities ()
-@property(readwrite, retain) NSArray *favoriteIdentities;
-@property(readwrite, retain) NSArray *identities;
+@property(readwrite, retain) NSMutableArray *favoriteIdentities;
+@property(readwrite, retain) NSMutableArray *identities;
@end
// NSLog(@"updating %@", [[NSThread currentThread] description]);
while (!err) {
kim_ccache ccache = NULL;
- kim_identity kimIdentity = NULL;
- kim_options kimOptions = NULL;
+ kim_identity an_identity = NULL;
+ kim_options some_options = NULL;
kim_credential_state state = kim_credentials_state_valid;
- kim_time expirationTime = 0;
- kim_lifetime lifetime = 0;
+ kim_time expiration_time = 0;
err = kim_ccache_iterator_next (iterator, &ccache);
if (!err && !ccache) { break; }
if (!err) {
- err = kim_ccache_get_client_identity (ccache, &kimIdentity);
+ err = kim_ccache_get_client_identity (ccache, &an_identity);
}
if (!err) {
}
if (!err && state == kim_credentials_state_valid) {
- err = kim_ccache_get_expiration_time (ccache, &expirationTime);
+ err = kim_ccache_get_expiration_time (ccache, &expiration_time);
}
if (!err) {
- err = kim_ccache_get_options(ccache, &kimOptions);
- }
-
- if (!err) {
- err = kim_options_get_lifetime(kimOptions, &lifetime);
+ err = kim_ccache_get_options(ccache, &some_options);
}
if (!err) {
- Identity *identity = [[Identity alloc] initWithIdentity: kimIdentity options: kimOptions];
+ Identity *identity = [[Identity alloc] initWithKimIdentity:an_identity kimOptions:some_options];
if (!identity) { err = ENOMEM; }
if (!err) {
- kimIdentity = NULL; /* take ownership */
- identity.kimOptions = kimOptions;
identity.state = state;
- identity.expiration_time = expirationTime;
+ identity.expirationDate = [NSDate dateWithTimeIntervalSince1970:expiration_time];
[newIdentities addObject: identity];
}
- if (identity) {
- [identity release];
- identity = nil;
- }
+ [identity release];
+ identity = nil;
}
if (err == KIM_NO_CREDENTIALS_ERR) {
log_kim_error_to_console(err);
}
- kim_options_free (&kimOptions);
- kim_identity_free (&kimIdentity);
+ kim_options_free (&some_options);
+ kim_identity_free (&an_identity);
kim_ccache_free (&ccache);
}
Identity *matchingIdentity = [newIdentities member:identity];
if (matchingIdentity) {
identity.state = matchingIdentity.state;
- identity.expiration_time = matchingIdentity.expiration_time;
+ identity.expirationDate = matchingIdentity.expirationDate;
[newIdentities removeObject:matchingIdentity];
} else {
identity.state = kim_credentials_state_expired;
- identity.expiration_time = 0;
+ identity.expirationDate = [NSDate distantPast];
}
}
[newIdentities unionSet:[NSSet setWithArray:self.favoriteIdentities]];
if (!err) {
- /* Use @property setter to trigger KVO notifications */
- self.identities = [[newIdentities allObjects] sortedArrayUsingSelector:@selector(compare:)];
+ [self.identities removeAllObjects];
+ [self.identities addObjectsFromArray:[newIdentities allObjects]];
+ [self.identities sortUsingSelector:@selector(compare:)];
+
if (!identities) { err = ENOMEM; }
} else {
log_kim_error_to_console(err);
- (kim_error) addIdentity: (Identity *) anIdentity
{
kim_error err = KIM_NO_ERROR;
- NSMutableArray *newIdentities = nil;
-
+
if (![self.identities containsObject:anIdentity]) {
- newIdentities = [self.identities mutableCopy];
- [newIdentities addObject:anIdentity];
- self.identities = newIdentities;
- [newIdentities release];
+ [self.identities addObject:anIdentity];
} else {
err = KIM_IDENTITY_ALREADY_IN_LIST_ERR;
}
#define min_renewable_keypath @"content.minRenewableLifetime"
#define max_renewable_keypath @"content.maxRenewableLifetime"
+#define wants_change_password_keypath @"content.wants_change_password"
+
#define ACKVOContext @"authenticationController"
- (IBAction) cancelOptions: (id) sender;
- (IBAction) doneOptions: (id) sender;
+- (IBAction) changePassword: (id) sender;
+
- (IBAction) select: (id) sender;
- (IBAction) cancel: (id) sender;
// ---------------------------------------------------------------------------
+- (IBAction) changePassword: (id) sender
+{
+
+}
+
+// ---------------------------------------------------------------------------
+
- (IBAction) select: (id) sender
{
Identity *selectedIdentity = nil;
}
selectedIdentity = [[identityArrayController selectedObjects] lastObject];
- [associatedClient didSelectIdentity: selectedIdentity.principalString
- options: [identityOptionsController valueForKeyPath:@"content.options"]];
+ [associatedClient didSelectIdentity: selectedIdentity.identity
+ options: [identityOptionsController valueForKeyPath:@"content.options"]
+ wantsChangePassword: NO];
}
// ---------------------------------------------------------------------------
- (void) showOptions: (NSString *) contextInfo
{
- Identity *anIdentity = identityOptionsController.content;
-
- [identityField setStringValue:anIdentity.principalString];
- [staticIdentityField setStringValue:anIdentity.principalString];
-
+ Identity *anIdentity = [[identityArrayController selectedObjects] lastObject];
// use a copy of the current options
+ [identityOptionsController setContent:
+ [[[glueController valueForKeyPath:options_keypath] mutableCopy] autorelease]];
+
+ [identityField setStringValue:anIdentity.identity];
+ [staticIdentityField setStringValue:anIdentity.identity];
+
[identityOptionsController setContent:
[[[glueController valueForKeyPath:options_keypath] mutableCopy] autorelease]];
<string key="IBDocument.HIToolboxVersion">352.00</string>
<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
<bool key="EncodedWithXMLCoder">YES</bool>
- <integer value="300157"/>
+ <integer value="300175"/>
+ <integer value="300314"/>
+ <integer value="19"/>
+ <integer value="300274"/>
<integer value="300420"/>
+ <integer value="300193"/>
</object>
<object class="NSArray" key="IBDocument.PluginDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>min_valid_lifetime</string>
<string>identity_string</string>
<string>favorite_identity_strings</string>
+ <string>isBusy</string>
</object>
<bool key="NSEditable">YES</bool>
<object class="_NSManagedProxy" key="_NSManagedProxy"/>
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSTextField" id="498665267">
<reference key="NSNextResponder" ref="92892041"/>
- <int key="NSvFlags">264</int>
+ <int key="NSvFlags">266</int>
<string key="NSFrame">{{101, 103}, {382, 54}}</string>
<reference key="NSSuperview" ref="92892041"/>
<bool key="NSEnabled">YES</bool>
</object>
<object class="NSMenuItem" id="744766544">
<reference key="NSMenu" ref="594991555"/>
- <bool key="NSIsHidden">YES</bool>
<string type="base64-UTF8" key="NSTitle">Q2hhbmdlIFBhc3N3b3Jk4oCmA</string>
<string key="NSKeyEquiv"/>
<int key="NSMnemonicLoc">2147483647</int>
<string key="NSAction">_popUpItemAction:</string>
<reference key="NSTarget" ref="690863814"/>
</object>
- <object class="NSMenuItem" id="917012637">
- <reference key="NSMenu" ref="594991555"/>
- <bool key="NSIsDisabled">YES</bool>
- <bool key="NSIsSeparator">YES</bool>
- <string key="NSTitle"/>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="530784694"/>
- <reference key="NSMixedImage" ref="790891323"/>
- <string key="NSAction">_popUpItemAction:</string>
- <reference key="NSTarget" ref="690863814"/>
- </object>
- <object class="NSMenuItem" id="8728780">
- <reference key="NSMenu" ref="594991555"/>
- <string type="base64-UTF8" key="NSTitle">QWJvdXQgS2VyYmVyb3PigKY</string>
- <string key="NSKeyEquiv"/>
- <int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="530784694"/>
- <reference key="NSMixedImage" ref="790891323"/>
- <string key="NSAction">_popUpItemAction:</string>
- <reference key="NSTarget" ref="690863814"/>
- </object>
</object>
</object>
<int key="NSSelectedIndex">2</int>
<int key="NSArrowPosition">2</int>
</object>
</object>
+ <object class="NSProgressIndicator" id="186678160">
+ <reference key="NSNextResponder" ref="92892041"/>
+ <int key="NSvFlags">1292</int>
+ <object class="NSPSMatrix" key="NSDrawMatrix"/>
+ <string key="NSFrame">{{66, 25}, {16, 16}}</string>
+ <reference key="NSSuperview" ref="92892041"/>
+ <int key="NSpiFlags">28938</int>
+ <double key="NSMinValue">1.600000e+01</double>
+ <double key="NSMaxValue">1.000000e+02</double>
+ </object>
</object>
<string key="NSFrameSize">{500, 187}</string>
<reference key="NSSuperview"/>
<string key="NSClassName">NSView</string>
</object>
<object class="NSCustomView" id="866582848">
- <nil key="NSNextResponder"/>
+ <reference key="NSNextResponder"/>
<int key="NSvFlags">274</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference key="NSSuperview" ref="866582848"/>
<string key="NSClassName">BadgedImageView</string>
</object>
+ <object class="NSProgressIndicator" id="524728083">
+ <reference key="NSNextResponder" ref="866582848"/>
+ <int key="NSvFlags">1292</int>
+ <object class="NSPSMatrix" key="NSDrawMatrix"/>
+ <string key="NSFrame">{{19, 22}, {16, 16}}</string>
+ <reference key="NSSuperview" ref="866582848"/>
+ <int key="NSpiFlags">28938</int>
+ <double key="NSMinValue">1.600000e+01</double>
+ <double key="NSMaxValue">1.000000e+02</double>
+ </object>
</object>
<string key="NSFrameSize">{500, 210}</string>
+ <reference key="NSSuperview"/>
<string key="NSClassName">NSView</string>
</object>
<object class="NSCustomView" id="898191415">
- <nil key="NSNextResponder"/>
+ <reference key="NSNextResponder"/>
<int key="NSvFlags">274</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSTextField" id="1018438662">
<reference key="NSNextResponder" ref="898191415"/>
<int key="NSvFlags">266</int>
- <string key="NSFrame">{{101, 149}, {382, 17}}</string>
+ <string key="NSFrame">{{101, 140}, {382, 17}}</string>
<reference key="NSSuperview" ref="898191415"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="169380754">
<object class="NSTextField" id="270897371">
<reference key="NSNextResponder" ref="898191415"/>
<int key="NSvFlags">290</int>
- <string key="NSFrame">{{226, 62}, {254, 22}}</string>
+ <string key="NSFrame">{{202, 62}, {278, 22}}</string>
<reference key="NSSuperview" ref="898191415"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="572127639">
<int key="NSPeriodicInterval">25</int>
</object>
</object>
- <object class="NSTextField" id="1041175973">
- <reference key="NSNextResponder" ref="898191415"/>
- <int key="NSvFlags">292</int>
- <string key="NSFrame">{{17, 64}, {204, 17}}</string>
- <reference key="NSSuperview" ref="898191415"/>
- <bool key="NSEnabled">YES</bool>
- <object class="NSTextFieldCell" key="NSCell" id="628540900">
- <int key="NSCellFlags">68288064</int>
- <int key="NSCellFlags2">71304192</int>
- <string key="NSContents">%@:</string>
- <reference key="NSSupport" ref="604532625"/>
- <reference key="NSControlView" ref="1041175973"/>
- <reference key="NSBackgroundColor" ref="876444531"/>
- <reference key="NSTextColor" ref="883746258"/>
- </object>
- </object>
<object class="NSTextField" id="798767897">
<reference key="NSNextResponder" ref="898191415"/>
<int key="NSvFlags">274</int>
- <string key="NSFrame">{{101, 92}, {382, 49}}</string>
+ <string key="NSFrame">{{101, 104}, {382, 28}}</string>
<reference key="NSSuperview" ref="898191415"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="840858923">
<int key="NSCellFlags">67239424</int>
<int key="NSCellFlags2">272629760</int>
- <string key="NSContents">%@</string>
+ <string type="base64-UTF8" key="NSContents">b25lIGxpbmUKdHdvIGxpbmVzA</string>
<object class="NSFont" key="NSSupport" id="26">
<string key="NSName">LucidaGrande</string>
<double key="NSSize">1.100000e+01</double>
<object class="NSCustomView" id="944021079">
<reference key="NSNextResponder" ref="898191415"/>
<int key="NSvFlags">268</int>
- <string key="NSFrame">{{20, 126}, {64, 64}}</string>
+ <string key="NSFrame">{{20, 103}, {64, 64}}</string>
<reference key="NSSuperview" ref="898191415"/>
<string key="NSClassName">BadgedImageView</string>
</object>
<int key="NSPeriodicInterval">25</int>
</object>
</object>
+ <object class="NSTextField" id="1022812428">
+ <reference key="NSNextResponder" ref="898191415"/>
+ <int key="NSvFlags">292</int>
+ <string key="NSFrame">{{17, 20}, {180, 61}}</string>
+ <reference key="NSSuperview" ref="898191415"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="370337827">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">71303168</int>
+ <string key="NSContents">I am a really big prompt label:</string>
+ <object class="NSFont" key="NSSupport">
+ <string key="NSName">LucidaGrande</string>
+ <double key="NSSize">1.300000e+01</double>
+ <int key="NSfFlags">16</int>
+ </object>
+ <reference key="NSControlView" ref="1022812428"/>
+ <reference key="NSBackgroundColor" ref="876444531"/>
+ <reference key="NSTextColor" ref="883746258"/>
+ </object>
+ </object>
+ <object class="NSProgressIndicator" id="188143209">
+ <reference key="NSNextResponder" ref="898191415"/>
+ <int key="NSvFlags">1292</int>
+ <object class="NSPSMatrix" key="NSDrawMatrix"/>
+ <string key="NSFrame">{{20, 22}, {16, 16}}</string>
+ <reference key="NSSuperview" ref="898191415"/>
+ <int key="NSpiFlags">28938</int>
+ <double key="NSMinValue">1.600000e+01</double>
+ <double key="NSMaxValue">1.000000e+02</double>
+ </object>
</object>
- <string key="NSFrameSize">{500, 210}</string>
+ <string key="NSFrameSize">{500, 187}</string>
+ <reference key="NSSuperview"/>
<string key="NSClassName">NSView</string>
</object>
<object class="NSCustomView" id="60326189">
- <nil key="NSNextResponder"/>
+ <reference key="NSNextResponder"/>
<int key="NSvFlags">286</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
<int key="NSPeriodicInterval">25</int>
</object>
</object>
+ <object class="NSProgressIndicator" id="314932147">
+ <reference key="NSNextResponder" ref="60326189"/>
+ <int key="NSvFlags">1292</int>
+ <object class="NSPSMatrix" key="NSDrawMatrix"/>
+ <string key="NSFrame">{{20, 22}, {16, 16}}</string>
+ <reference key="NSSuperview" ref="60326189"/>
+ <int key="NSpiFlags">28938</int>
+ <double key="NSMinValue">1.600000e+01</double>
+ <double key="NSMaxValue">1.000000e+02</double>
+ </object>
</object>
<string key="NSFrameSize">{500, 230}</string>
+ <reference key="NSSuperview"/>
<string key="NSClassName">NSView</string>
</object>
<object class="NSCustomView" id="861423802">
<string key="NSWindowContentMaxSize">{600, 400}</string>
<string key="NSWindowContentMinSize">{484, 199}</string>
<object class="NSView" key="NSWindowView" id="632526042">
- <nil key="NSNextResponder"/>
+ <reference key="NSNextResponder"/>
<int key="NSvFlags">256</int>
<string key="NSFrameSize">{500, 210}</string>
+ <reference key="NSSuperview"/>
</object>
<string key="NSScreenRect">{{0, 0}, {1920, 1178}}</string>
<string key="NSMinSize">{484, 221}</string>
</object>
<int key="connectionID">300372</int>
</object>
- <object class="IBConnectionRecord">
- <object class="IBBindingConnection" key="connection">
- <string key="label">value: selection.title</string>
- <reference key="source" ref="1041175973"/>
- <reference key="destination" ref="57033499"/>
- <object class="NSNibBindingConnector" key="connector">
- <reference key="NSSource" ref="1041175973"/>
- <reference key="NSDestination" ref="57033499"/>
- <string key="NSLabel">value: selection.title</string>
- <string key="NSBinding">value</string>
- <string key="NSKeyPath">selection.title</string>
- <int key="NSNibBindingConnectorVersion">2</int>
- </object>
- </object>
- <int key="connectionID">300373</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBBindingConnection" key="connection">
- <string key="label">value: selection.message</string>
- <reference key="source" ref="1018438662"/>
- <reference key="destination" ref="57033499"/>
- <object class="NSNibBindingConnector" key="connector">
- <reference key="NSSource" ref="1018438662"/>
- <reference key="NSDestination" ref="57033499"/>
- <string key="NSLabel">value: selection.message</string>
- <string key="NSBinding">value</string>
- <string key="NSKeyPath">selection.message</string>
- <int key="NSNibBindingConnectorVersion">2</int>
- </object>
- </object>
- <int key="connectionID">300374</int>
- </object>
- <object class="IBConnectionRecord">
- <object class="IBBindingConnection" key="connection">
- <string key="label">value: selection.description</string>
- <reference key="source" ref="798767897"/>
- <reference key="destination" ref="57033499"/>
- <object class="NSNibBindingConnector" key="connector">
- <reference key="NSSource" ref="798767897"/>
- <reference key="NSDestination" ref="57033499"/>
- <string key="NSLabel">value: selection.description</string>
- <string key="NSBinding">value</string>
- <string key="NSKeyPath">selection.description</string>
- <int key="NSNibBindingConnectorVersion">2</int>
- </object>
- </object>
- <int key="connectionID">300375</int>
- </object>
<object class="IBConnectionRecord">
<object class="IBBindingConnection" key="connection">
<string key="label">value: selection.prompt_response</string>
</object>
<int key="connectionID">300522</int>
</object>
+ <object class="IBConnectionRecord">
+ <object class="IBBindingConnection" key="connection">
+ <string key="label">value: selection.message</string>
+ <reference key="source" ref="798767897"/>
+ <reference key="destination" ref="57033499"/>
+ <object class="NSNibBindingConnector" key="connector">
+ <reference key="NSSource" ref="798767897"/>
+ <reference key="NSDestination" ref="57033499"/>
+ <string key="NSLabel">value: selection.message</string>
+ <string key="NSBinding">value</string>
+ <string key="NSKeyPath">selection.message</string>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
+ </object>
+ <int key="connectionID">300524</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBBindingConnection" key="connection">
+ <string key="label">value: selection.title</string>
+ <reference key="source" ref="1018438662"/>
+ <reference key="destination" ref="57033499"/>
+ <object class="NSNibBindingConnector" key="connector">
+ <reference key="NSSource" ref="1018438662"/>
+ <reference key="NSDestination" ref="57033499"/>
+ <string key="NSLabel">value: selection.title</string>
+ <string key="NSBinding">value</string>
+ <string key="NSKeyPath">selection.title</string>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
+ </object>
+ <int key="connectionID">300525</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBBindingConnection" key="connection">
+ <string key="label">displayPatternValue1: selection.description</string>
+ <reference key="source" ref="1022812428"/>
+ <reference key="destination" ref="57033499"/>
+ <object class="NSNibBindingConnector" key="connector">
+ <reference key="NSSource" ref="1022812428"/>
+ <reference key="NSDestination" ref="57033499"/>
+ <string key="NSLabel">displayPatternValue1: selection.description</string>
+ <string key="NSBinding">displayPatternValue1</string>
+ <string key="NSKeyPath">selection.description</string>
+ <object class="NSDictionary" key="NSOptions">
+ <string key="NS.key.0">NSDisplayPattern</string>
+ <string key="NS.object.0">%{value1}@:</string>
+ </object>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
+ </object>
+ <int key="connectionID">300529</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">samSpinny</string>
+ <reference key="source" ref="262677138"/>
+ <reference key="destination" ref="188143209"/>
+ </object>
+ <int key="connectionID">300532</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">changePasswordSpinny</string>
+ <reference key="source" ref="262677138"/>
+ <reference key="destination" ref="314932147"/>
+ </object>
+ <int key="connectionID">300537</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">enterSpinny</string>
+ <reference key="source" ref="262677138"/>
+ <reference key="destination" ref="186678160"/>
+ </object>
+ <int key="connectionID">300538</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">passwordSpinny</string>
+ <reference key="source" ref="262677138"/>
+ <reference key="destination" ref="524728083"/>
+ </object>
+ <int key="connectionID">300539</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBBindingConnection" key="connection">
+ <string key="label">enabled: selection.isPrincipalValid</string>
+ <reference key="source" ref="744766544"/>
+ <reference key="destination" ref="57033499"/>
+ <object class="NSNibBindingConnector" key="connector">
+ <reference key="NSSource" ref="744766544"/>
+ <reference key="NSDestination" ref="57033499"/>
+ <string key="NSLabel">enabled: selection.isPrincipalValid</string>
+ <string key="NSBinding">enabled</string>
+ <string key="NSKeyPath">selection.isPrincipalValid</string>
+ <int key="NSNibBindingConnectorVersion">2</int>
+ </object>
+ </object>
+ <int key="connectionID">300540</int>
+ </object>
</object>
<object class="IBMutableOrderedSet" key="objectRecords">
<object class="NSArray" key="orderedObjects">
<reference ref="529434335"/>
<reference ref="498665267"/>
<reference ref="1016187493"/>
+ <reference ref="186678160"/>
</object>
<reference key="parent" ref="0"/>
<string key="objectName">Enter Identity</string>
<reference ref="645528597"/>
<reference ref="464070473"/>
<reference ref="225475172"/>
+ <reference ref="524728083"/>
</object>
<reference key="parent" ref="0"/>
<string key="objectName">Enter Password</string>
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="944021079"/>
<reference ref="798767897"/>
- <reference ref="1018438662"/>
<reference ref="270897371"/>
- <reference ref="1041175973"/>
<reference ref="907069022"/>
<reference ref="499090485"/>
+ <reference ref="1018438662"/>
+ <reference ref="1022812428"/>
+ <reference ref="188143209"/>
</object>
<reference key="parent" ref="0"/>
<string key="objectName">SAM Authentication</string>
</object>
<reference key="parent" ref="898191415"/>
</object>
- <object class="IBObjectRecord">
- <int key="objectID">300200</int>
- <reference key="object" ref="1041175973"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="628540900"/>
- </object>
- <reference key="parent" ref="898191415"/>
- </object>
<object class="IBObjectRecord">
<int key="objectID">300223</int>
<reference key="object" ref="907069022"/>
<reference key="object" ref="119720976"/>
<reference key="parent" ref="907069022"/>
</object>
- <object class="IBObjectRecord">
- <int key="objectID">300203</int>
- <reference key="object" ref="628540900"/>
- <reference key="parent" ref="1041175973"/>
- </object>
<object class="IBObjectRecord">
<int key="objectID">300207</int>
<reference key="object" ref="572127639"/>
<reference ref="576133689"/>
<reference ref="105446308"/>
<reference ref="288995352"/>
+ <reference ref="314932147"/>
</object>
<reference key="parent" ref="0"/>
<string key="objectName">Change Password</string>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="1020091532"/>
- <reference ref="8728780"/>
- <reference ref="917012637"/>
<reference ref="452996455"/>
<reference ref="744766544"/>
</object>
<reference key="object" ref="1020091532"/>
<reference key="parent" ref="594991555"/>
</object>
- <object class="IBObjectRecord">
- <int key="objectID">300317</int>
- <reference key="object" ref="8728780"/>
- <reference key="parent" ref="594991555"/>
- </object>
- <object class="IBObjectRecord">
- <int key="objectID">300320</int>
- <reference key="object" ref="917012637"/>
- <reference key="parent" ref="594991555"/>
- </object>
<object class="IBObjectRecord">
<int key="objectID">300384</int>
<reference key="object" ref="441176528"/>
<reference key="object" ref="752049494"/>
<reference key="parent" ref="0"/>
</object>
+ <object class="IBObjectRecord">
+ <int key="objectID">300526</int>
+ <reference key="object" ref="1022812428"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="370337827"/>
+ </object>
+ <reference key="parent" ref="898191415"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">300527</int>
+ <reference key="object" ref="370337827"/>
+ <reference key="parent" ref="1022812428"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">300530</int>
+ <reference key="object" ref="188143209"/>
+ <reference key="parent" ref="898191415"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">300533</int>
+ <reference key="object" ref="186678160"/>
+ <reference key="parent" ref="92892041"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">300534</int>
+ <reference key="object" ref="524728083"/>
+ <reference key="parent" ref="866582848"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">300536</int>
+ <reference key="object" ref="314932147"/>
+ <reference key="parent" ref="60326189"/>
+ </object>
</object>
</object>
<object class="NSMutableDictionary" key="flattenedProperties">
<string>300196.ImportedFromIB2</string>
<string>300197.IBPluginDependency</string>
<string>300197.ImportedFromIB2</string>
- <string>300200.IBPluginDependency</string>
<string>300201.IBPluginDependency</string>
<string>300201.ImportedFromIB2</string>
- <string>300203.IBPluginDependency</string>
<string>300210.IBPluginDependency</string>
<string>300211.IBEditorWindowLastContentRect</string>
<string>300211.IBPluginDependency</string>
<string>300314.IBEditorWindowLastContentRect</string>
<string>300314.IBPluginDependency</string>
<string>300316.IBPluginDependency</string>
- <string>300317.IBPluginDependency</string>
- <string>300320.IBPluginDependency</string>
<string>300384.CustomClassName</string>
<string>300384.IBPluginDependency</string>
<string>300384.ImportedFromIB2</string>
<string>300469.IBPluginDependency</string>
<string>300502.IBPluginDependency</string>
<string>300510.IBPluginDependency</string>
+ <string>300526.IBPluginDependency</string>
+ <string>300527.IBPluginDependency</string>
+ <string>300530.IBPluginDependency</string>
+ <string>300533.IBPluginDependency</string>
+ <string>300534.IBPluginDependency</string>
+ <string>300536.IBPluginDependency</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>{484, 199}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="9"/>
- <string>{{602, 455}, {500, 187}}</string>
+ <string>{{338, 521}, {500, 187}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="9"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="9"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>{{477, 611}, {500, 210}}</string>
+ <string>{{790, 237}, {500, 210}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>NSSecureTextField</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>{{628, 163}, {500, 210}}</string>
+ <string>{{597, 343}, {500, 187}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="9"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="9"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<reference ref="9"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>{{553, 638}, {500, 210}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>{{611, 408}, {189, 93}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>{{347, 504}, {189, 63}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>NSSecureTextField</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
</object>
</object>
<object class="NSMutableDictionary" key="unlocalizedProperties">
</object>
</object>
<nil key="sourceID"/>
- <int key="maxID">300522</int>
+ <int key="maxID">300540</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
<object class="NSMutableArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>changePasswordBadge</string>
+ <string>changePasswordSpinny</string>
<string>changePasswordView</string>
<string>containerView</string>
<string>enterBadge</string>
+ <string>enterSpinny</string>
<string>errorBadge</string>
<string>errorView</string>
<string>expiredPasswordView</string>
<string>oldPasswordField</string>
<string>passwordBadge</string>
<string>passwordField</string>
+ <string>passwordSpinny</string>
<string>passwordView</string>
<string>rememberPasswordInKeychainCheckBox</string>
<string>renewableLifetimeSlider</string>
<string>samBadge</string>
<string>samPromptField</string>
+ <string>samSpinny</string>
<string>samView</string>
<string>ticketOptionsController</string>
<string>ticketOptionsSheet</string>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>BadgedImageView</string>
+ <string>NSProgressIndicator</string>
<string>NSView</string>
<string>NSView</string>
<string>BadgedImageView</string>
+ <string>NSProgressIndicator</string>
<string>BadgedImageView</string>
<string>NSView</string>
<string>NSView</string>
<string>NSTextField</string>
<string>BadgedImageView</string>
<string>NSTextField</string>
+ <string>NSProgressIndicator</string>
<string>NSView</string>
<string>NSButton</string>
<string>NSSlider</string>
<string>BadgedImageView</string>
<string>NSTextField</string>
+ <string>NSProgressIndicator</string>
<string>NSView</string>
<string>NSObjectController</string>
<string>NSWindow</string>
<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
<bool key="EncodedWithXMLCoder">YES</bool>
<integer value="6"/>
- <integer value="300301"/>
</object>
<object class="NSArray" key="IBDocument.PluginDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSWindowTemplate" id="224590347">
<int key="NSWindowStyleMask">13</int>
<int key="NSWindowBacking">2</int>
- <string key="NSWindowRect">{{279, 512}, {491, 316}}</string>
+ <string key="NSWindowRect">{{279, 568}, {398, 260}}</string>
<int key="NSWTFlags">1886913536</int>
<string key="NSWindowTitle">Select a Kerberos Identity</string>
<object class="NSMutableString" key="NSWindowClass">
<characters key="NS.bytes">View</characters>
</object>
<string key="NSWindowContentMaxSize">{600, 600}</string>
- <string key="NSWindowContentMinSize">{419, 298}</string>
<object class="NSView" key="NSWindowView" id="928852707">
<reference key="NSNextResponder"/>
<int key="NSvFlags">256</int>
<object class="NSTextField" id="499468804">
<reference key="NSNextResponder" ref="928852707"/>
<int key="NSvFlags">266</int>
- <string key="NSFrame">{{101, 265}, {373, 17}}</string>
+ <string key="NSFrame">{{101, 213}, {280, 17}}</string>
<reference key="NSSuperview" ref="928852707"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="82820472">
<object class="NSTextField" id="675887072">
<reference key="NSNextResponder" ref="928852707"/>
<int key="NSvFlags">266</int>
- <string key="NSFrame">{{101, 220}, {373, 37}}</string>
+ <string key="NSFrame">{{101, 168}, {280, 37}}</string>
<reference key="NSSuperview" ref="928852707"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="542766611">
<object class="NSButton" id="426244837">
<reference key="NSNextResponder" ref="928852707"/>
<int key="NSvFlags">289</int>
- <string key="NSFrame">{{390, 13}, {87, 32}}</string>
+ <string key="NSFrame">{{297, 12}, {87, 32}}</string>
<reference key="NSSuperview" ref="928852707"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="686991406">
<object class="NSButton" id="505388869">
<reference key="NSNextResponder" ref="928852707"/>
<int key="NSvFlags">289</int>
- <string key="NSFrame">{{308, 13}, {82, 32}}</string>
+ <string key="NSFrame">{{215, 12}, {82, 32}}</string>
<reference key="NSSuperview" ref="928852707"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="720384657">
<object class="NSCustomView" id="700535463">
<reference key="NSNextResponder" ref="928852707"/>
<int key="NSvFlags">268</int>
- <string key="NSFrame">{{20, 232}, {64, 64}}</string>
+ <string key="NSFrame">{{20, 176}, {64, 64}}</string>
<reference key="NSSuperview" ref="928852707"/>
<string key="NSClassName">BadgedImageView</string>
</object>
<object class="NSButton" id="949861041">
<reference key="NSNextResponder" ref="928852707"/>
<int key="NSvFlags">292</int>
- <string key="NSFrame">{{20, 19}, {28, 24}}</string>
+ <string key="NSFrame">{{20, 18}, {28, 24}}</string>
<reference key="NSSuperview" ref="928852707"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="871232847">
<object class="NSTableView" id="631507655">
<reference key="NSNextResponder" ref="568659409"/>
<int key="NSvFlags">256</int>
- <string key="NSFrameSize">{449, 133}</string>
+ <string key="NSFrameSize">{356, 83}</string>
<reference key="NSSuperview" ref="568659409"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTableHeaderView" key="NSHeaderView" id="282626403">
<reference key="NSNextResponder" ref="71614719"/>
<int key="NSvFlags">256</int>
- <string key="NSFrameSize">{449, 17}</string>
+ <string key="NSFrameSize">{356, 17}</string>
<reference key="NSSuperview" ref="71614719"/>
<reference key="NSTableView" ref="631507655"/>
</object>
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSTableColumn" id="1025403577">
<string key="NSIdentifier">identityColumn</string>
- <double key="NSWidth">2.670000e+02</double>
+ <double key="NSWidth">1.740000e+02</double>
<double key="NSMinWidth">4.000000e+01</double>
<double key="NSMaxWidth">1.000000e+03</double>
<object class="NSTableHeaderCell" key="NSHeaderCell">
<bool key="NSAllowsTypeSelect">YES</bool>
</object>
</object>
- <string key="NSFrame">{{1, 17}, {449, 133}}</string>
+ <string key="NSFrame">{{1, 17}, {356, 83}}</string>
<reference key="NSSuperview" ref="616284695"/>
<reference key="NSNextKeyView" ref="631507655"/>
<reference key="NSDocView" ref="631507655"/>
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="282626403"/>
</object>
- <string key="NSFrame">{{1, 0}, {449, 17}}</string>
+ <string key="NSFrame">{{1, 0}, {356, 17}}</string>
<reference key="NSSuperview" ref="616284695"/>
<reference key="NSNextKeyView" ref="282626403"/>
<reference key="NSDocView" ref="282626403"/>
</object>
<reference ref="865861000"/>
</object>
- <string key="NSFrame">{{20, 61}, {451, 151}}</string>
+ <string key="NSFrame">{{20, 59}, {358, 101}}</string>
<reference key="NSSuperview" ref="928852707"/>
<reference key="NSNextKeyView" ref="568659409"/>
<int key="NSsFlags">530</int>
<object class="NSPopUpButton" id="263312988">
<reference key="NSNextResponder" ref="928852707"/>
<int key="NSvFlags">292</int>
- <string key="NSFrame">{{47, 19}, {54, 24}}</string>
+ <string key="NSFrame">{{47, 18}, {54, 24}}</string>
<reference key="NSSuperview" ref="928852707"/>
<bool key="NSEnabled">YES</bool>
<object class="NSPopUpButtonCell" key="NSCell" id="659813048">
<reference ref="354283131"/>
<object class="NSMenuItem" id="136217401">
<reference key="NSMenu" ref="600123164"/>
- <bool key="NSIsHidden">YES</bool>
<string key="NSTitle">Remember Identity</string>
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<string key="NSAction">_popUpItemAction:</string>
<reference key="NSTarget" ref="659813048"/>
</object>
+ <object class="NSMenuItem" id="963135554">
+ <reference key="NSMenu" ref="600123164"/>
+ <string type="base64-UTF8" key="NSTitle">Q2hhbmdlIFBhc3N3b3Jk4oCmA</string>
+ <string key="NSKeyEquiv"/>
+ <int key="NSKeyEquivModMask">1048576</int>
+ <int key="NSMnemonicLoc">2147483647</int>
+ <reference key="NSOnImage" ref="514331248"/>
+ <reference key="NSMixedImage" ref="572887887"/>
+ <string key="NSAction">_popUpItemAction:</string>
+ <reference key="NSTarget" ref="659813048"/>
+ </object>
</object>
</object>
+ <int key="NSSelectedIndex">4</int>
<bool key="NSPullDown">YES</bool>
<int key="NSPreferredEdge">2</int>
<bool key="NSUsesItemFromMenu">YES</bool>
</object>
</object>
</object>
- <string key="NSFrameSize">{491, 316}</string>
+ <string key="NSFrameSize">{398, 260}</string>
<reference key="NSSuperview"/>
</object>
<string key="NSScreenRect">{{0, 0}, {1920, 1178}}</string>
- <string key="NSMinSize">{419, 320}</string>
<string key="NSMaxSize">{600, 622}</string>
- <string key="NSFrameAutosaveName">SelectIdentityWindow</string>
+ <string key="NSFrameAutosaveName"/>
</object>
<object class="NSArrayController" id="333357907">
<object class="NSMutableArray" key="NSDeclaredKeys">
<nil key="NSViewClass"/>
<string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
<object class="NSView" key="NSWindowView" id="1019868804">
- <reference key="NSNextResponder"/>
+ <nil key="NSNextResponder"/>
<int key="NSvFlags">258</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
</object>
<string key="NSFrameSize">{427, 348}</string>
- <reference key="NSSuperview"/>
</object>
<string key="NSScreenRect">{{0, 0}, {1280, 778}}</string>
<string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
</object>
<int key="connectionID">300484</int>
</object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">changePassword:</string>
+ <reference key="source" ref="262677138"/>
+ <reference key="destination" ref="963135554"/>
+ </object>
+ <int key="connectionID">300486</int>
+ </object>
</object>
<object class="IBMutableOrderedSet" key="objectRecords">
<object class="NSArray" key="orderedObjects">
<reference ref="136217401"/>
<reference ref="553755370"/>
<reference ref="778570067"/>
+ <reference ref="963135554"/>
</object>
<reference key="parent" ref="659813048"/>
</object>
<reference key="parent" ref="0"/>
<string key="objectName">Glue Controller</string>
</object>
+ <object class="IBObjectRecord">
+ <int key="objectID">300485</int>
+ <reference key="object" ref="963135554"/>
+ <reference key="parent" ref="600123164"/>
+ </object>
</object>
</object>
<object class="NSMutableDictionary" key="flattenedProperties">
<string>300431.IBPluginDependency</string>
<string>300432.IBPluginDependency</string>
<string>300462.IBPluginDependency</string>
+ <string>300485.IBPluginDependency</string>
<string>5.IBEditorWindowLastContentRect</string>
<string>5.IBPluginDependency</string>
<string>5.IBWindowTemplateEditedContentRect</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>{{535, 102}, {198, 83}}</string>
+ <string>{{535, 82}, {203, 103}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>{{499, 142}, {491, 316}}</string>
+ <string>{{508, 407}, {398, 260}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>{{499, 142}, {491, 316}}</string>
+ <string>{{508, 407}, {398, 260}}</string>
<reference ref="9"/>
<reference ref="9"/>
<string>{{503, 256}, {419, 465}}</string>
<reference ref="9"/>
- <reference ref="9"/>
+ <integer value="0"/>
<string>{600, 600}</string>
<string>{419, 298}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
</object>
</object>
<nil key="sourceID"/>
- <int key="maxID">300484</int>
+ <int key="maxID">300486</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
<string>addToFavorites:</string>
<string>cancel:</string>
<string>cancelOptions:</string>
+ <string>changePassword:</string>
<string>doneOptions:</string>
<string>editOptions:</string>
<string>newIdentity:</string>
<string>id</string>
<string>id</string>
<string>id</string>
+ <string>id</string>
</object>
</object>
<object class="NSMutableDictionary" key="outlets">