comparison src/nabble/model/ListServer.java @ 0:7ecd1a4ef557

add content
author Franklin Schmidt <fschmidt@gmail.com>
date Thu, 21 Mar 2019 19:15:52 -0600
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:7ecd1a4ef557
1 package nabble.model;
2
3 import fschmidt.util.mail.Mail;
4 import fschmidt.util.mail.MailAddress;
5 import fschmidt.util.mail.MailHome;
6 import fschmidt.util.mail.PlainTextContent;
7
8 import java.util.Arrays;
9 import java.util.Date;
10 import java.util.HashMap;
11 import java.util.Map;
12
13
14 public abstract class ListServer {
15
16 private final static Map<String, ListServer> servers = new HashMap<String, ListServer>();
17
18 public static ListServer getServer(String type) {
19 ListServer listServer = servers.get(type);
20 return listServer==null?unknown:listServer;
21 }
22
23 public static String[] getAllServerTypes() {
24 String[] s = servers.keySet().toArray(new String[servers.keySet().size()]);
25 Arrays.sort(s);
26 return s;
27 }
28
29 private String type;
30
31 private ListServer(String type) {
32 servers.put(type, this);
33 this.type = type;
34 }
35
36 public String getType() {
37 return type;
38 }
39
40 public String getViewName() {
41 return getType();
42 }
43
44 public abstract boolean supportsDeliveryOff();
45 public abstract boolean needsDefaults();
46
47 abstract Mail defaultsMail(MailAddress emailAddress, String listAddress, String password);
48 abstract Mail subscribeMail(MailAddress emailAddress, String listAddress, String password, boolean useMainList);
49 abstract Mail unsubscribeMail(MailAddress emailAddress, String listAddress, String password);
50
51 public boolean canSubscribe() {
52 return true;
53 }
54
55 public boolean showInInitialSetup() {
56 return true;
57 }
58
59 String getEnvelopeFrom(Mail mail, MailingList mailingList) {
60 return mailingList.getSubscriberAddress().getAddrSpec();
61 }
62
63 protected Mail adminMail(MailAddress emailAddress, String adminAddress, String command) {
64 Mail mail = MailHome.newMail();
65 mail.setFrom(emailAddress);
66 mail.setTo(new MailAddress(adminAddress));
67 mail.setSentDate(new Date());
68 mail.setContent(new PlainTextContent(command));
69 return mail;
70 }
71
72 protected Mail subjectAdminMail(MailAddress emailAddress, String adminAddress, String subject) {
73 Mail mail = MailHome.newMail();
74 mail.setFrom(emailAddress);
75 mail.setTo(new MailAddress(adminAddress));
76 mail.setSentDate(new Date());
77 mail.setSubject(subject);
78 mail.setContent(new PlainTextContent(""));
79 return mail;
80 }
81
82 protected String listName(String listAddress) {
83 return listAddress.substring(0, listAddress.indexOf('@'));
84 }
85
86 protected String listDomain(String listAddress) {
87 return listAddress.substring(listAddress.indexOf('@')+1);
88 }
89
90 static abstract class Mailman extends ListServer {
91
92 protected Mailman(String type) {
93 super(type);
94 }
95
96 public boolean supportsDeliveryOff() {
97 return true;
98 }
99
100 public boolean needsDefaults() {
101 return true;
102 }
103
104 Mail subscribeMail(MailAddress emailAddress, String listAddress, String password, boolean useMainList) {
105 return adminMail(emailAddress, getAdminAddress(listAddress), "subscribe "+(password==null?"":password));
106 }
107
108 Mail unsubscribeMail(MailAddress emailAddress, String listAddress, String password) {
109 return adminMail(emailAddress, getAdminAddress(listAddress), "unsubscribe "+(password==null?"":password));
110 }
111
112 protected String getAdminAddress(String listAddress) {
113 return listAddress.replaceFirst("@", "-request@");
114 }
115 }
116
117 public static final ListServer mailman20 = new Mailman("mailman20") {
118
119 public String getViewName() {
120 return "Mailman 2.0.*";
121 }
122
123 Mail defaultsMail(MailAddress emailAddress, String listAddress, String password) {
124 StringBuilder buf = new StringBuilder();
125 buf.append("set ack off ");
126 buf.append(password);
127 buf.append("\n");
128 buf.append("set nomail on ");
129 buf.append(password);
130 buf.append("\n");
131 buf.append("set notmetoo on ");
132 buf.append(password);
133 buf.append("\n");
134 buf.append("end\n");
135 return adminMail(emailAddress, getAdminAddress(listAddress), buf.toString());
136 }
137
138 };
139
140 public static final ListServer mailman21 = new Mailman("mailman21") {
141
142 public String getViewName() {
143 return "Mailman 2.1.*";
144 }
145
146 Mail defaultsMail(MailAddress emailAddress, String listAddress, String password) {
147 StringBuilder buf = new StringBuilder();
148 buf.append("set authenticate ");
149 buf.append(password);
150 buf.append("\n");
151 buf.append("set delivery off\n");
152 buf.append("set ack off\n");
153 buf.append("set myposts off\n");
154 buf.append("set duplicates off\n");
155 buf.append("set reminders off\n");
156 buf.append("end\n");
157 return adminMail(emailAddress, getAdminAddress(listAddress), buf.toString());
158 }
159
160 };
161
162 public static final ListServer ezmlm = new ListServer("ezmlm") {
163
164 public boolean supportsDeliveryOff() {
165 return true;
166 }
167
168 public boolean needsDefaults() {
169 return false;
170 }
171
172 Mail subscribeMail(MailAddress emailAddress, String listAddress, String password, boolean useMainList) {
173 String suffix = useMainList?"-subscribe-":"-allow-subscribe-";
174 suffix += emailAddress.getAddrSpec().replace('@','=') + '@';
175 return adminMail(emailAddress, listAddress.replaceFirst("@", suffix), "");
176 }
177
178 Mail unsubscribeMail(MailAddress emailAddress, String listAddress, String password) {
179 String suffix = "-unsubscribe-" + emailAddress.getAddrSpec().replace('@','=') + '@';
180 return adminMail(emailAddress, listAddress.replaceFirst("@", suffix), "");
181 }
182
183 Mail defaultsMail(MailAddress emailAddress, String listAddress, String password) {
184 throw new UnsupportedOperationException();
185 }
186
187 };
188
189 public static final ListServer mlmmj = new ListServer("mlmmj") {
190
191 public boolean supportsDeliveryOff() {
192 return true;
193 }
194
195 public boolean needsDefaults() {
196 return false;
197 }
198
199 Mail subscribeMail(MailAddress emailAddress, String listAddress, String password, boolean useMainList) {
200 String suffix = useMainList?"+subscribe@":"+subscribe-nomail@";
201 return adminMail(emailAddress, listAddress.replaceFirst("@", suffix), "");
202 }
203
204 Mail unsubscribeMail(MailAddress emailAddress, String listAddress, String password) {
205 return adminMail(emailAddress, listAddress.replaceFirst("@", "+unsubscribe@"), "");
206 }
207
208 Mail defaultsMail(MailAddress emailAddress, String listAddress, String password) {
209 throw new UnsupportedOperationException();
210 }
211
212 };
213
214 public static final ListServer yahoo = new ListServer("yahoo") {
215
216 public String getViewName() {
217 return "Yahoo! Groups";
218 }
219
220 String getEnvelopeFrom(Mail mail, MailingList mailingList) {
221 // for yahoogroups it should be the users address
222 return mail.getFrom().getAddrSpec();
223 }
224
225 public boolean supportsDeliveryOff() {
226 return true;
227 }
228
229 public boolean needsDefaults() {
230 return true;
231 }
232
233 Mail subscribeMail(MailAddress emailAddress, String listAddress, String password, boolean useMainList) {
234 return adminMail(emailAddress, listAddress.replaceFirst("@", "-subscribe@"), "");
235 }
236
237 Mail unsubscribeMail(MailAddress emailAddress, String listAddress, String password) {
238 return adminMail(emailAddress, listAddress.replaceFirst("@", "-unsubscribe@"), "");
239 }
240
241 Mail defaultsMail(MailAddress emailAddress, String listAddress, String password) {
242 return adminMail(emailAddress, listAddress.replaceFirst("@", "-nomail@"), "");
243 }
244
245 };
246
247 private abstract static class ListProc extends ListServer {
248
249 protected ListProc(String type) {
250 super(type);
251 }
252
253 public boolean supportsDeliveryOff() {
254 return true;
255 }
256
257 public boolean needsDefaults() {
258 return true;
259 }
260
261 public boolean showInInitialSetup() {
262 return false;
263 }
264
265 Mail subscribeMail(MailAddress emailAddress, String listAddress, String password, boolean useMainList) {
266 StringBuilder buf = new StringBuilder();
267 buf.append("subscribe ");
268 buf.append(listName(listAddress));
269 buf.append(" ");
270 buf.append(emailAddress.getDisplayName());
271 return adminMail(emailAddress, "listproc@"+listDomain(listAddress), buf.toString());
272 }
273
274 Mail unsubscribeMail(MailAddress emailAddress, String listAddress, String password) {
275 StringBuilder buf = new StringBuilder();
276 buf.append("unsubscribe ");
277 buf.append(listName(listAddress));
278 return adminMail(emailAddress, "listproc@"+listDomain(listAddress), buf.toString());
279 }
280
281 Mail defaultsMail(MailAddress emailAddress, String listAddress, String password) {
282 StringBuilder buf = new StringBuilder();
283 buf.append("set ");
284 buf.append(listName(listAddress));
285 buf.append(" mail postpone");
286 return adminMail(emailAddress, "listproc@"+listDomain(listAddress), buf.toString());
287 }
288
289 }
290
291 // cren listproc
292 public final static ListServer listproc = new ListProc("listproc") {
293 };
294
295 // old listproc broken - uses smtp from only
296 public final static ListServer oldlistproc = new ListProc("oldlistproc") {
297 public boolean canSubscribe() {
298 return false;
299 }
300 };
301
302 // l-soft listserv
303 public static final ListServer listserv = new ListServer("listserv") {
304
305 public String getViewName() {
306 return "LISTSERV";
307 }
308
309 public boolean supportsDeliveryOff() {
310 return true;
311 }
312
313 public boolean needsDefaults() {
314 return false;
315 }
316
317 public boolean showInInitialSetup() {
318 return false;
319 }
320
321 Mail subscribeMail(MailAddress emailAddress, String listAddress, String password, boolean useMainList) {
322 StringBuilder buf = new StringBuilder();
323 buf.append("subscribe ");
324 buf.append(listName(listAddress));
325 buf.append(" ");
326 buf.append("anonymous");
327 if (!useMainList)
328 buf.append(" with noack nomail norepro");
329 return adminMail(emailAddress, "listserv@"+listDomain(listAddress), buf.toString());
330 }
331
332 Mail unsubscribeMail(MailAddress emailAddress, String listAddress, String password) {
333 StringBuilder buf = new StringBuilder();
334 buf.append("unsubscribe ");
335 buf.append(listName(listAddress));
336 return adminMail(emailAddress, "listserv@"+listDomain(listAddress), buf.toString());
337 }
338
339 Mail defaultsMail(MailAddress emailAddress, String listAddress, String password) {
340 throw new UnsupportedOperationException();
341 }
342
343 };
344
345 public static final ListServer lyris = new ListServer("lyris") {
346
347 public String getViewName() {
348 return "Lyris";
349 }
350
351 public boolean supportsDeliveryOff() {
352 return true;
353 }
354
355 public boolean needsDefaults() {
356 return true;
357 }
358
359 Mail subscribeMail(MailAddress emailAddress, String listAddress, String password, boolean useMainList) {
360 StringBuilder buf = new StringBuilder();
361 buf.append("join ");
362 buf.append(listName(listAddress));
363 buf.append(" ");
364 buf.append(emailAddress.getDisplayName());
365 return adminMail(emailAddress, "lyris@"+listDomain(listAddress), buf.toString());
366 }
367
368 Mail unsubscribeMail(MailAddress emailAddress, String listAddress, String password) {
369 StringBuilder buf = new StringBuilder();
370 buf.append("leave ");
371 buf.append(listName(listAddress));
372 return adminMail(emailAddress, "lyris@"+listDomain(listAddress), buf.toString());
373 }
374
375 Mail defaultsMail(MailAddress emailAddress, String listAddress, String password) {
376 StringBuilder buf = new StringBuilder();
377 buf.append("set ");
378 buf.append(listName(listAddress));
379 buf.append(" noack nomail norepro");
380 return adminMail(emailAddress, "lyris@"+listDomain(listAddress), buf.toString());
381 }
382
383 };
384
385 public static final ListServer listserver = new ListServer("listserver") {
386
387 public boolean supportsDeliveryOff() {
388 return true;
389 }
390
391 public boolean needsDefaults() {
392 return true;
393 }
394
395 public boolean showInInitialSetup() {
396 return false;
397 }
398
399 Mail subscribeMail(MailAddress emailAddress, String listAddress, String password, boolean useMainList) {
400 return adminMail(emailAddress, "listserver@"+listDomain(listAddress),
401 "subscribe "+listName(listAddress)
402 );
403 }
404
405 Mail unsubscribeMail(MailAddress emailAddress, String listAddress, String password) {
406 return adminMail(emailAddress, "listserver@"+listDomain(listAddress),
407 "unsubscribe "+listName(listAddress)
408 );
409 }
410
411 Mail defaultsMail(MailAddress emailAddress, String listAddress, String password) {
412 return adminMail(emailAddress, "listserver@"+listDomain(listAddress), "nomail "+listName(listAddress));
413 }
414
415 };
416
417 public static final ListServer communigate = new ListServer("communigate") {
418
419 public String getViewName() {
420 return "CommuniGate";
421 }
422
423 public boolean supportsDeliveryOff() {
424 return true;
425 }
426
427 public boolean needsDefaults() {
428 return false;
429 }
430
431 Mail subscribeMail(MailAddress emailAddress, String listAddress, String password, boolean useMainList) {
432 String suffix = useMainList?"-subscribe@":"-null@";
433 return adminMail(emailAddress, listAddress.replaceFirst("@", suffix), "");
434 }
435
436 Mail unsubscribeMail(MailAddress emailAddress, String listAddress, String password) {
437 return adminMail(emailAddress, listAddress.replaceFirst("@", "-unsubscribe@"), "");
438 }
439
440 Mail defaultsMail(MailAddress emailAddress, String listAddress, String password) {
441 throw new UnsupportedOperationException();
442 }
443
444 };
445
446 public static final ListServer smartlist = new ListServer("smartlist") {
447
448 public String getViewName() {
449 return "SmartList";
450 }
451
452 public boolean supportsDeliveryOff() {
453 return false;
454 }
455
456 public boolean needsDefaults() {
457 return false;
458 }
459
460 Mail subscribeMail(MailAddress emailAddress, String listAddress, String password, boolean useMainList) {
461 return subjectAdminMail(emailAddress, listAddress.replaceFirst("@", "-request@"), "subscribe");
462 }
463
464 Mail unsubscribeMail(MailAddress emailAddress, String listAddress, String password) {
465 return subjectAdminMail(emailAddress, listAddress.replaceFirst("@", "-request@"), "unsubscribe");
466 }
467
468 Mail defaultsMail(MailAddress emailAddress, String listAddress, String password) {
469 throw new UnsupportedOperationException();
470 }
471
472 };
473
474 public static final ListServer ecartis = new ListServer("ecartis") {
475
476 public String getViewName() {
477 return "Ecartis";
478 }
479
480 public boolean supportsDeliveryOff() {
481 return true;
482 }
483
484 public boolean needsDefaults() {
485 return true;
486 }
487
488 Mail subscribeMail(MailAddress emailAddress, String listAddress, String password, boolean useMainList) {
489 return subjectAdminMail(emailAddress, "ecartis@"+listDomain(listAddress), "subscribe "+listName(listAddress));
490 }
491
492 Mail unsubscribeMail(MailAddress emailAddress, String listAddress, String password) {
493 return subjectAdminMail(emailAddress, "ecartis@"+listDomain(listAddress), "unsubscribe "+listName(listAddress));
494 }
495
496 Mail defaultsMail(MailAddress emailAddress, String listAddress, String password) {
497 return subjectAdminMail(emailAddress, "ecartis@"+listDomain(listAddress), "set "+listName(listAddress)+" vacation");
498 }
499
500 };
501
502 public static final ListServer majordomo = new ListServer("majordomo") {
503
504 public String getViewName() {
505 return "Majordomo";
506 }
507
508 public boolean supportsDeliveryOff() {
509 return false;
510 }
511
512 public boolean needsDefaults() {
513 return false;
514 }
515
516 Mail subscribeMail(MailAddress emailAddress, String listAddress, String password, boolean useMainList) {
517 return adminMail(emailAddress, "majordomo@"+listDomain(listAddress), "subscribe "+listName(listAddress));
518 }
519
520 Mail unsubscribeMail(MailAddress emailAddress, String listAddress, String password) {
521 return adminMail(emailAddress, "majordomo@"+listDomain(listAddress), "unsubscribe "+listName(listAddress));
522 }
523
524 Mail defaultsMail(MailAddress emailAddress, String listAddress, String password) {
525 throw new UnsupportedOperationException();
526 }
527
528 };
529
530 public static final ListServer majordomo2 = new ListServer("majordomo2") {
531
532 public String getViewName() {
533 return "Majordomo 2";
534 }
535
536 public boolean supportsDeliveryOff() {
537 return true;
538 }
539
540 public boolean needsDefaults() {
541 return false;
542 }
543
544 Mail subscribeMail(MailAddress emailAddress, String listAddress, String password, boolean useMainList) {
545 return adminMail(emailAddress, "majordomo@"+listDomain(listAddress),
546 "subscribe-set-welcome "+listName(listAddress)+(useMainList?" ":" nomail,")+"noselfcopy,noackpost");
547 }
548
549 Mail unsubscribeMail(MailAddress emailAddress, String listAddress, String password) {
550 return adminMail(emailAddress, "majordomo@"+listDomain(listAddress), "unsubscribe "+listName(listAddress));
551 }
552
553 Mail defaultsMail(MailAddress emailAddress, String listAddress, String password) {
554 throw new UnsupportedOperationException();
555 }
556
557 };
558
559 public static final ListServer sympa = new ListServer("sympa") {
560
561 public String getViewName() {
562 return "Sympa";
563 }
564
565 public boolean supportsDeliveryOff() {
566 return true;
567 }
568
569 public boolean needsDefaults() {
570 return true;
571 }
572
573 Mail subscribeMail(MailAddress emailAddress, String listAddress, String password, boolean useMainList) {
574 StringBuilder buf = new StringBuilder();
575 buf.append("subscribe ");
576 buf.append(listName(listAddress));
577 buf.append(" ");
578 buf.append(emailAddress.getDisplayName());
579 return adminMail(emailAddress, "sympa@"+listDomain(listAddress), buf.toString());
580 }
581
582 Mail unsubscribeMail(MailAddress emailAddress, String listAddress, String password) {
583 StringBuilder buf = new StringBuilder();
584 buf.append("unsubscribe ");
585 buf.append(listName(listAddress));
586 return adminMail(emailAddress, "sympa@"+listDomain(listAddress), buf.toString());
587 }
588
589 Mail defaultsMail(MailAddress emailAddress, String listAddress, String password) {
590 String listname = listName(listAddress);
591 StringBuilder buf = new StringBuilder();
592 buf.append("set ");
593 buf.append(listname);
594 buf.append(" nomail\n");
595 buf.append("set ");
596 buf.append(listname);
597 buf.append(" not_me\n");
598 return adminMail(emailAddress, "sympa@"+listDomain(listAddress), buf.toString());
599 }
600
601 };
602
603 public static final ListServer google = new ListServer("google") {
604
605 public String getViewName() {
606 return "Google Groups";
607 }
608
609 public boolean supportsDeliveryOff() {
610 return true;
611 }
612
613 public boolean needsDefaults() {
614 return true;
615 }
616
617 Mail subscribeMail(MailAddress emailAddress, String listAddress, String password, boolean useMainList) {
618 return adminMail(emailAddress, listAddress.replaceFirst("@", "+subscribe@"), "");
619 }
620
621 Mail unsubscribeMail(MailAddress emailAddress, String listAddress, String password) {
622 return adminMail(emailAddress, listAddress.replaceFirst("@", "+unsubscribe@"), "");
623 }
624
625 Mail defaultsMail(MailAddress emailAddress, String listAddress, String password) {
626 throw new UnsupportedOperationException(); // set nomail only via google website
627 }
628
629 public boolean canSubscribe() {
630 return true;
631 }
632
633 };
634
635 private static abstract class Unsupported extends ListServer {
636
637 protected Unsupported(String type) {
638 super(type);
639 }
640
641 public boolean needsDefaults() {
642 throw new UnsupportedOperationException();
643 }
644
645 Mail subscribeMail(MailAddress emailAddress, String listAddress, String password, boolean useMainList) {
646 throw new UnsupportedOperationException();
647 }
648
649 Mail unsubscribeMail(MailAddress emailAddress, String listAddress, String password) {
650 throw new UnsupportedOperationException();
651 }
652
653 Mail defaultsMail(MailAddress emailAddress, String listAddress, String password) {
654 throw new UnsupportedOperationException();
655 }
656
657 public boolean canSubscribe() {
658 return false;
659 }
660
661 }
662
663 public static final ListServer websitenomail = new Unsupported("websitenomail") {
664
665 public boolean supportsDeliveryOff() {
666 return true;
667 }
668
669 public boolean showInInitialSetup() {
670 return false;
671 }
672 };
673
674 public static final ListServer websitemail = new Unsupported("websitemail") {
675
676 public boolean supportsDeliveryOff() {
677 return false;
678 }
679
680 public boolean showInInitialSetup() {
681 return false;
682 }
683
684 };
685
686 public static final ListServer unknown = new Unsupported("unknown") {
687
688 public String getViewName() {
689 return "Unknown or Other";
690 }
691
692 public boolean supportsDeliveryOff() {
693 return false;
694 }
695
696 };
697
698 }