Bläddra i källkod

Add whois support to the q auth plugin.

pull/405/head
Greg Holmes 9 år sedan
förälder
incheckning
3eabed5b01

+ 35
- 2
qauth/src/com/dmdirc/addons/qauth/QAuthManager.java Visa fil

35
 import com.dmdirc.events.ServerConnectedEvent;
35
 import com.dmdirc.events.ServerConnectedEvent;
36
 import com.dmdirc.events.ServerInviteReceivedEvent;
36
 import com.dmdirc.events.ServerInviteReceivedEvent;
37
 import com.dmdirc.events.ServerNoticeEvent;
37
 import com.dmdirc.events.ServerNoticeEvent;
38
+import com.dmdirc.events.ServerNumericEvent;
38
 import com.dmdirc.interfaces.Connection;
39
 import com.dmdirc.interfaces.Connection;
39
 import com.dmdirc.interfaces.User;
40
 import com.dmdirc.interfaces.User;
40
 import com.dmdirc.interfaces.config.AggregateConfigProvider;
41
 import com.dmdirc.interfaces.config.AggregateConfigProvider;
62
     private boolean whois;
63
     private boolean whois;
63
     private boolean autoInvite;
64
     private boolean autoInvite;
64
     private boolean acceptInvites;
65
     private boolean acceptInvites;
66
+    private boolean waitingWhois;
67
+    private boolean authed;
65
 
68
 
66
     @Inject
69
     @Inject
67
     public QAuthManager(
70
     public QAuthManager(
106
         connection.sendMessage("Q@Cserve.quakenet.org", "auth " + username + ' ' + password);
109
         connection.sendMessage("Q@Cserve.quakenet.org", "auth " + username + ' ' + password);
107
     }
110
     }
108
 
111
 
112
+    private void sendWhois(final Connection connection) {
113
+        connection.getLocalUser().ifPresent(u -> {
114
+            connection.requestUserInfo(u);
115
+            waitingWhois = true;
116
+            authed = false;
117
+        });
118
+    }
119
+
109
     @Handler
120
     @Handler
110
     void handleConnect(final ServerConnectedEvent event) {
121
     void handleConnect(final ServerConnectedEvent event) {
111
         if (!isValidConnection(event.getConnection())) {
122
         if (!isValidConnection(event.getConnection())) {
112
             return;
123
             return;
113
         }
124
         }
114
-        // TODO: whois
115
-        auth(event.getConnection());
125
+        if (whois) {
126
+            sendWhois(event.getConnection());
127
+        } else {
128
+            auth(event.getConnection());
129
+        }
130
+    }
131
+
132
+    @Handler
133
+    void handleServerNumericEvent(final ServerNumericEvent event) {
134
+        if (!waitingWhois) {
135
+            return;
136
+        }
137
+        if(event.getNumeric() == 330 && event.getConnection().getLocalUser().map(User::getNickname)
138
+                .orElse("").equalsIgnoreCase(event.getArgs()[3])) {
139
+            // TODO: Check account matches? (param arg 4)
140
+            authed = true;
141
+        }
142
+        if (event.getNumeric() == 318 && event.getConnection().getLocalUser().map(User::getNickname)
143
+                .orElse("").equalsIgnoreCase(event.getArgs()[3])) {
144
+            waitingWhois = false;
145
+            if (!authed) {
146
+                auth(event.getConnection());
147
+            }
148
+        }
116
     }
149
     }
117
 
150
 
118
     @Handler
151
     @Handler

+ 49
- 0
qauth/test/com/dmdirc/addons/qauth/QAuthManagerTest.java Visa fil

26
 import com.dmdirc.Invite;
26
 import com.dmdirc.Invite;
27
 import com.dmdirc.Query;
27
 import com.dmdirc.Query;
28
 import com.dmdirc.config.ConfigBinder;
28
 import com.dmdirc.config.ConfigBinder;
29
+import com.dmdirc.config.prefs.PreferencesCategory;
30
+import com.dmdirc.config.prefs.PreferencesDialogModel;
31
+import com.dmdirc.events.ClientPrefsOpenedEvent;
29
 import com.dmdirc.events.QueryMessageEvent;
32
 import com.dmdirc.events.QueryMessageEvent;
30
 import com.dmdirc.events.ServerConnectedEvent;
33
 import com.dmdirc.events.ServerConnectedEvent;
31
 import com.dmdirc.events.ServerInviteReceivedEvent;
34
 import com.dmdirc.events.ServerInviteReceivedEvent;
33
 import com.dmdirc.interfaces.Connection;
36
 import com.dmdirc.interfaces.Connection;
34
 import com.dmdirc.interfaces.User;
37
 import com.dmdirc.interfaces.User;
35
 import com.dmdirc.interfaces.config.AggregateConfigProvider;
38
 import com.dmdirc.interfaces.config.AggregateConfigProvider;
39
+import com.dmdirc.interfaces.config.ConfigProvider;
36
 import com.dmdirc.plugins.PluginInfo;
40
 import com.dmdirc.plugins.PluginInfo;
41
+import com.dmdirc.plugins.PluginMetaData;
37
 
42
 
38
 import java.util.Optional;
43
 import java.util.Optional;
39
 
44
 
40
 import org.junit.Before;
45
 import org.junit.Before;
41
 import org.junit.Test;
46
 import org.junit.Test;
42
 import org.junit.runner.RunWith;
47
 import org.junit.runner.RunWith;
48
+import org.mockito.ArgumentCaptor;
49
+import org.mockito.Captor;
43
 import org.mockito.Mock;
50
 import org.mockito.Mock;
44
 import org.mockito.runners.MockitoJUnitRunner;
51
 import org.mockito.runners.MockitoJUnitRunner;
45
 
52
 
53
+import static org.junit.Assert.assertTrue;
46
 import static org.mockito.Matchers.anyString;
54
 import static org.mockito.Matchers.anyString;
47
 import static org.mockito.Mockito.never;
55
 import static org.mockito.Mockito.never;
48
 import static org.mockito.Mockito.verify;
56
 import static org.mockito.Mockito.verify;
52
 @RunWith(MockitoJUnitRunner.class)
60
 @RunWith(MockitoJUnitRunner.class)
53
 public class QAuthManagerTest {
61
 public class QAuthManagerTest {
54
 
62
 
63
+    @Mock private AggregateConfigProvider aggregateConfigProvider;
64
+    @Mock private ConfigProvider configProvider;
65
+    @Mock private PreferencesDialogModel preferencesDialogModel;
55
     @Mock private DMDircMBassador eventBus;
66
     @Mock private DMDircMBassador eventBus;
56
     @Mock private PluginInfo pluginInfo;
67
     @Mock private PluginInfo pluginInfo;
68
+    @Mock private PluginMetaData pluginMetaData;
57
     @Mock private AggregateConfigProvider config;
69
     @Mock private AggregateConfigProvider config;
58
     @Mock private ConfigBinder configBinder;
70
     @Mock private ConfigBinder configBinder;
59
     @Mock private ServerConnectedEvent serverConnectedEvent;
71
     @Mock private ServerConnectedEvent serverConnectedEvent;
60
     @Mock private ServerInviteReceivedEvent serverInviteReceivedEvent;
72
     @Mock private ServerInviteReceivedEvent serverInviteReceivedEvent;
61
     @Mock private ServerNoticeEvent serverNoticeEvent;
73
     @Mock private ServerNoticeEvent serverNoticeEvent;
62
     @Mock private QueryMessageEvent queryMessageEvent;
74
     @Mock private QueryMessageEvent queryMessageEvent;
75
+    @Mock private ClientPrefsOpenedEvent clientPrefsOpenedEvent;
63
     @Mock private User user;
76
     @Mock private User user;
77
+    @Mock private User localUser;
64
     @Mock private Query query;
78
     @Mock private Query query;
65
     @Mock private Invite invite;
79
     @Mock private Invite invite;
66
     @Mock private Connection connection;
80
     @Mock private Connection connection;
81
+    @Mock private PreferencesCategory preferencesCategory;
82
+    @Captor private ArgumentCaptor<PreferencesCategory> preferencesCategoryArgumentCaptor;
67
     private QAuthManager instance;
83
     private QAuthManager instance;
68
 
84
 
69
     @Before
85
     @Before
82
         when(user.getNickname()).thenReturn("Q");
98
         when(user.getNickname()).thenReturn("Q");
83
         when(query.getConnection()).thenReturn(Optional.of(connection));
99
         when(query.getConnection()).thenReturn(Optional.of(connection));
84
         when(connection.getNetwork()).thenReturn("Quakenet");
100
         when(connection.getNetwork()).thenReturn("Quakenet");
101
+        when(connection.getLocalUser()).thenReturn(Optional.of(localUser));
85
         when(config.getBinder()).thenReturn(configBinder);
102
         when(config.getBinder()).thenReturn(configBinder);
86
         when(configBinder.withDefaultDomain("pluginDomain")).thenReturn(configBinder);
103
         when(configBinder.withDefaultDomain("pluginDomain")).thenReturn(configBinder);
104
+        when(pluginInfo.getMetaData()).thenReturn(pluginMetaData);
105
+        when(pluginMetaData.getFriendlyName()).thenReturn("Plugin");
106
+        when(clientPrefsOpenedEvent.getModel()).thenReturn(preferencesDialogModel);
107
+        when(preferencesDialogModel.getConfigManager()).thenReturn(aggregateConfigProvider);
108
+        when(preferencesDialogModel.getIdentity()).thenReturn(configProvider);
109
+        when(preferencesDialogModel.getCategory("Plugins")).thenReturn(preferencesCategory);
87
         instance = new QAuthManager("pluginDomain", pluginInfo, config, eventBus);
110
         instance = new QAuthManager("pluginDomain", pluginInfo, config, eventBus);
88
 
111
 
89
         instance.handleUsername("username");
112
         instance.handleUsername("username");
208
         instance.handleNotices(serverNoticeEvent);
231
         instance.handleNotices(serverNoticeEvent);
209
         verify(connection, never()).sendMessage("Q@Cserve.quakenet.org", "invite");
232
         verify(connection, never()).sendMessage("Q@Cserve.quakenet.org", "invite");
210
     }
233
     }
234
+
235
+    @Test
236
+    public void testAuthWithWhois() {
237
+        instance.handleWhois(true);
238
+        instance.handleConnect(serverConnectedEvent);
239
+        verify(connection).requestUserInfo(localUser);
240
+        verify(connection, never()).sendMessage(anyString(), anyString());
241
+    }
242
+
243
+    @Test
244
+    public void testAuthWithoutWhois() {
245
+        instance.handleWhois(false);
246
+        instance.handleConnect(serverConnectedEvent);
247
+        verify(connection, never()).requestUserInfo(localUser);
248
+        verify(connection).sendMessage(anyString(), anyString());
249
+    }
250
+
251
+    @Test
252
+    public void testHandlePrefsEvent() throws Exception {
253
+        when(aggregateConfigProvider.getOptionBool("domain", "whoisonquery")).thenReturn(true);
254
+        instance.showConfig(clientPrefsOpenedEvent);
255
+        verify(preferencesCategory).addSubCategory(preferencesCategoryArgumentCaptor.capture());
256
+        assertTrue(preferencesCategoryArgumentCaptor.getValue().getSettings().size() > 1);
257
+    }
258
+
259
+    // TODO: Test ServerNumericEvent method
211
 }
260
 }

Laddar…
Avbryt
Spara