root/trunk/TokenController.m

Revision 118, 1.6 kB (checked in by bart, 1 year ago)

--

Line 
1 //
2 //  TokenController.m
3 //  SSHKeychain
4 //
5 //  Created by Bart Matthaei on 22-8-07.
6 //  Copyright 2007 __MyCompanyName__. All rights reserved.
7 //
8
9 #import "TokenController.h"
10
11 TokenController* sharedTokenController;
12
13 @implementation TokenController
14 - (id)init
15 {
16         if(!(self = [super init]))
17         {
18                 return nil;
19         }
20        
21         tokens = [[NSMutableArray alloc] init];
22         tokenLock = [[NSLock alloc] init];
23        
24         sharedTokenController = self;
25        
26         return self;
27 }
28
29 - (void)dealloc
30 {
31         [tokens dealloc];
32         [tokenLock dealloc];
33        
34         [super dealloc];
35 }
36
37 + (TokenController *)sharedController
38 {
39         if(!sharedTokenController) {
40                 return [[TokenController alloc] init];
41         }
42        
43         return sharedTokenController;
44 }
45
46 - (bool)generateNewTokenForTool:(SSHTool *)tool
47 {
48         NSString *token;
49        
50         if(tool == nil) return NO;
51        
52         token = [self generateNewToken];
53        
54         if(token == nil) return NO;
55
56         [tool setEnvironmentVariable:@"SSHKeychainToken" withValue:token];
57
58         return YES;
59 }
60
61 - (NSString *)generateNewToken
62 {
63         SSHToken *token;
64        
65         token = [SSHToken randomToken];
66        
67         if(token != nil)
68         {
69                 [tokenLock lock];
70                 [tokens addObject:token];
71                 [tokenLock unlock];
72                
73                 return [token getToken];
74         }
75        
76         return nil;
77 }
78
79 - (bool)checkToken:(NSString *)token
80 {
81         NSEnumerator *e;
82         SSHToken *aToken;
83        
84         [tokenLock lock];
85
86         e = [tokens objectEnumerator];
87
88         while (aToken = [e nextObject])
89         {
90                 if ([[aToken getToken] isEqualTo:token])
91                 {
92                         if([aToken isValid])
93                         {
94                                 [tokens removeObject:aToken];
95                                 [tokenLock unlock];
96                                 return YES;
97                         }
98                        
99                         [tokens removeObject:aToken];
100                 } else if(![aToken isValid]) {
101                         [tokens removeObject:aToken];
102                 }
103         }
104        
105         [tokenLock unlock];
106        
107         return NO;
108 }
109
110 @end
Note: See TracBrowser for help on using the browser.