001 /**
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017 package org.apache.camel.component.irc;
018
019 import java.net.URI;
020 import java.net.URISyntaxException;
021 import java.util.ArrayList;
022 import java.util.Arrays;
023 import java.util.Dictionary;
024 import java.util.Hashtable;
025 import java.util.List;
026
027 import org.apache.camel.RuntimeCamelException;
028 import org.apache.camel.util.ObjectHelper;
029 import org.schwering.irc.lib.ssl.SSLDefaultTrustManager;
030 import org.schwering.irc.lib.ssl.SSLTrustManager;
031
032 public class IrcConfiguration implements Cloneable {
033 private String target;
034 private List<String> channels = new ArrayList<String>();
035 private Dictionary<String, String> keys = new Hashtable<String, String>();
036 private String hostname;
037 private String password;
038 private String nickname;
039 private String realname;
040 private String username;
041 private SSLTrustManager trustManager = new SSLDefaultTrustManager();
042 private boolean usingSSL;
043 private boolean persistent = true;
044 private boolean colors = true;
045 private boolean onNick = true;
046 private boolean onQuit = true;
047 private boolean onJoin = true;
048 private boolean onKick = true;
049 private boolean onMode = true;
050 private boolean onPart = true;
051 private boolean onReply;
052 private boolean onTopic = true;
053 private boolean onPrivmsg = true;
054 private boolean autoRejoin = true;
055 private int[] ports = {6667, 6668, 6669};
056
057 /*
058 * Temporary storage for when keys are listed in the parameters before channels.
059 */
060 private String channelKeys;
061
062 public IrcConfiguration() {
063 }
064
065 public IrcConfiguration(String hostname, String nickname, String displayname, List<String> channels) {
066 this.channels = channels;
067 this.hostname = hostname;
068 this.nickname = nickname;
069 this.username = nickname;
070 this.realname = displayname;
071 }
072
073 public IrcConfiguration(String hostname, String username, String password, String nickname, String displayname, List<String> channels) {
074 this.channels = channels;
075 this.hostname = hostname;
076 this.username = username;
077 this.password = password;
078 this.nickname = nickname;
079 this.realname = displayname;
080 }
081
082 public IrcConfiguration copy() {
083 try {
084 return (IrcConfiguration) clone();
085 } catch (CloneNotSupportedException e) {
086 throw new RuntimeCamelException(e);
087 }
088 }
089
090 public String getCacheKey() {
091 return hostname + ":" + nickname;
092 }
093
094 public String getListOfChannels() {
095 String retval = "";
096 for (String channel : channels) {
097 retval += channel + " ";
098 }
099 return retval.trim();
100 }
101
102 public void configure(String uriStr) throws URISyntaxException {
103 // fix provided URI and handle that we can use # to indicate the IRC room
104 if (uriStr.startsWith("ircs")) {
105 setUsingSSL(true);
106 if (!uriStr.startsWith("ircs://")) {
107 uriStr = uriStr.replace("ircs:", "ircs://");
108 }
109 } else if (!uriStr.startsWith("irc://")) {
110 uriStr = uriStr.replace("irc:", "irc://");
111 }
112
113 if (uriStr.contains("?")) {
114 uriStr = ObjectHelper.before(uriStr, "?");
115 }
116
117 URI uri = new URI(uriStr);
118
119 setNickname(uri.getUserInfo());
120 setUsername(uri.getUserInfo());
121 setRealname(uri.getUserInfo());
122 setHostname(uri.getHost());
123
124 if (uri.getFragment() != null && uri.getFragment().length() != 0) {
125 String channel = "#" + uri.getFragment();
126 addChannel(channel);
127 }
128 }
129
130 public void addChannel(String channel) {
131 boolean alreadyHave = false;
132 for (String aChannel : channels) {
133 if (channel.contentEquals(aChannel)) {
134 alreadyHave = true;
135 }
136 }
137 if (!alreadyHave) {
138 channels.add(channel);
139 }
140 }
141
142 public void setChannels(String channels) {
143 String[] args = channels.split(",");
144
145 for (String channel : args) {
146 channel = channel.trim();
147 if (channel.startsWith("#")) {
148 addChannel(channel);
149 }
150 }
151
152 if (keys.size() == 0 && channelKeys != null) {
153 setKeys(channelKeys);
154 }
155 }
156
157 public void setKeys(String keys) {
158 if (channels.size() == 0) {
159 // keys are listed in the parameters before channels
160 // store the string and process after channels
161 channelKeys = keys;
162 } else {
163 String[] s = keys.split(",");
164 int index = 0;
165 for (String key : s) {
166 this.keys.put(channels.get(index), key);
167 index++;
168 }
169 }
170 }
171
172 public String getKey(String channel) {
173 return keys.get(channel);
174 }
175
176 public Dictionary<String, String> getKeys() {
177 return keys;
178 }
179
180 public void setTrustManager(SSLTrustManager trustManager) {
181 this.trustManager = trustManager;
182 }
183
184 public SSLTrustManager getTrustManager() {
185 return trustManager;
186 }
187
188 public boolean getUsingSSL() {
189 return usingSSL;
190 }
191
192 private void setUsingSSL(boolean usingSSL) {
193 this.usingSSL = usingSSL;
194 }
195
196 public String getHostname() {
197 return hostname;
198 }
199
200 public void setHostname(String hostname) {
201 this.hostname = hostname;
202 }
203
204 public String getPassword() {
205 return password;
206 }
207
208 public void setPassword(String password) {
209 this.password = password;
210 }
211
212 public String getNickname() {
213 return nickname;
214 }
215
216 public void setNickname(String nickname) {
217 this.nickname = nickname;
218 }
219
220 public String getRealname() {
221 return realname;
222 }
223
224 public void setRealname(String realname) {
225 this.realname = realname;
226 }
227
228 public String getUsername() {
229 return username;
230 }
231
232 public void setUsername(String username) {
233 this.username = username;
234 }
235
236 public int[] getPorts() {
237 return ports;
238 }
239
240 public void setPorts(int[] ports) {
241 this.ports = ports;
242 }
243
244 public List<String> getChannels() {
245 return channels;
246 }
247
248 public boolean isPersistent() {
249 return persistent;
250 }
251
252 public void setPersistent(boolean persistent) {
253 this.persistent = persistent;
254 }
255
256 public boolean isColors() {
257 return colors;
258 }
259
260 public void setColors(boolean colors) {
261 this.colors = colors;
262 }
263
264 public boolean isOnNick() {
265 return onNick;
266 }
267
268 public void setOnNick(boolean onNick) {
269 this.onNick = onNick;
270 }
271
272 public boolean isOnQuit() {
273 return onQuit;
274 }
275
276 public void setOnQuit(boolean onQuit) {
277 this.onQuit = onQuit;
278 }
279
280 public boolean isOnJoin() {
281 return onJoin;
282 }
283
284 public void setOnJoin(boolean onJoin) {
285 this.onJoin = onJoin;
286 }
287
288 public boolean isOnKick() {
289 return onKick;
290 }
291
292 public void setOnKick(boolean onKick) {
293 this.onKick = onKick;
294 }
295
296 public boolean isOnMode() {
297 return onMode;
298 }
299
300 public void setOnMode(boolean onMode) {
301 this.onMode = onMode;
302 }
303
304 public boolean isOnPart() {
305 return onPart;
306 }
307
308 public void setOnPart(boolean onPart) {
309 this.onPart = onPart;
310 }
311
312 public boolean isOnReply() {
313 return onReply;
314 }
315
316 public void setOnReply(boolean onReply) {
317 this.onReply = onReply;
318 }
319
320 public boolean isOnTopic() {
321 return onTopic;
322 }
323
324 public void setOnTopic(boolean onTopic) {
325 this.onTopic = onTopic;
326 }
327
328 public boolean isOnPrivmsg() {
329 return onPrivmsg;
330 }
331
332 public void setOnPrivmsg(boolean onPrivmsg) {
333 this.onPrivmsg = onPrivmsg;
334 }
335
336 public boolean isAutoRejoin() {
337 return autoRejoin;
338 }
339
340 public void setAutoRejoin(boolean autoRejoin) {
341 this.autoRejoin = autoRejoin;
342 }
343
344 public String toString() {
345 return "IrcConfiguration[hostname: " + hostname + ", ports=" + Arrays.toString(ports) + ", target: " + target + ", username=" + username + "]";
346 }
347 }