1
2
3
4
5
6
7 package gov.bnl.gums;
8
9 import gov.bnl.gums.account.*;
10 import gov.bnl.gums.configuration.Configuration;
11 import gov.bnl.gums.configuration.ConfigurationToolkit;
12 import gov.bnl.gums.groupToAccount.GroupToAccountMapping;
13 import gov.bnl.gums.hostToGroup.HostToGroupMapping;
14 import gov.bnl.gums.userGroup.UserGroup;
15 import gov.bnl.gums.userGroup.VOMSUserGroup;
16 import gov.bnl.gums.util.StringUtil;
17
18 import java.io.FileInputStream;
19 import java.io.OutputStream;
20 import java.io.PrintStream;
21 import java.util.*;
22
23 import org.apache.log4j.Logger;
24
25
26
27
28
29
30
31 public class CoreLogic {
32
33 private Logger gumsAdminLog = Logger.getLogger(GUMS.gumsAdminLogName);
34 Configuration conf = null;
35
36
37
38
39
40
41 public CoreLogic() {
42 }
43
44
45
46
47
48
49 public CoreLogic(Configuration conf) {
50 this.conf = conf;
51 }
52
53 public void addAccountRange(String accountPoolMapperName, String range) throws Exception {
54 AccountMapper accountMapper = getConfiguration().getAccountMapper(accountPoolMapperName);
55 if (accountMapper==null)
56 throw new RuntimeException("Account Mapper '" + accountPoolMapperName + "' does not exist");
57 if (!(accountMapper instanceof AccountPoolMapper))
58 throw new RuntimeException("Account Mapper '" + accountPoolMapperName + "' is not an account pool mapper");
59 AccountPoolMapper accountPoolMapper = (AccountPoolMapper)accountMapper;
60
61 String firstAccount = range.substring(0, range.indexOf('-'));
62 String lastAccountN = range.substring(range.indexOf('-') + 1);
63 String firstAccountN = firstAccount.substring(firstAccount.length() - lastAccountN.length());
64
65 int nFirstAccount = Integer.parseInt(firstAccountN);
66 int nLastAccount = Integer.parseInt(lastAccountN);
67
68 StringBuffer last = new StringBuffer(firstAccount);
69 String nLastAccountString = Integer.toString(nLastAccount);
70 last.replace(firstAccount.length() - nLastAccountString.length(), firstAccount.length(), nLastAccountString);
71
72 StringBuffer buf = new StringBuffer(firstAccount);
73 int len = firstAccount.length();
74 List<Mapping> mappings = ((AccountPoolMapper)accountPoolMapper).getMappings();
75 for (int account = nFirstAccount; account <= nLastAccount; account++) {
76 String nAccount = Integer.toString(account);
77 buf.replace(len - nAccount.length(), len, nAccount);
78 if (mappings.contains(new SiteUser(buf.toString()))) {
79 String message = "One or more accounts already exist for '"+accountPoolMapperName+" "+range+"'. None were added.";
80 gumsAdminLog.warn(message);
81 throw new RuntimeException(message);
82 }
83 }
84 buf = new StringBuffer(firstAccount);
85 for (int account = nFirstAccount; account <= nLastAccount; account++) {
86 String nAccount = Integer.toString(account);
87 buf.replace(len - nAccount.length(), len, nAccount);
88 accountPoolMapper.createMapping(null, new SiteUser(buf.toString()));
89 }
90 }
91
92 public boolean isUserBanned(GridUser user) throws Exception {
93 return getConfiguration().isUserBanned(user);
94 }
95
96
97
98
99
100 public String generateOsgUserVoMap(String hostname) throws Exception {
101 Configuration conf = getConfiguration();
102 StringBuffer osgMapBuffer = new StringBuffer("");
103 HostToGroupMapping host2GroupMapper = hostToGroupMapping(conf, hostname);
104 if (host2GroupMapper == null) {
105 String message = "Cannot generate osg user VO map for host '" + hostname + "' - it is not defined in any host to group mapping.";
106 gumsAdminLog.warn(message);
107 throw new RuntimeException(message);
108 }
109
110
111 osgMapBuffer.append("#User-VO map\n");
112 osgMapBuffer.append("# #comment line, format of each regular line line: account VO\n");
113 osgMapBuffer.append("# Next 2 lines with VO names, same order, all lowercase, with case (lines starting with #voi, #VOc)\n");
114 String voi = "#voi";
115 String voc = "#VOc";
116 Iterator<String> iter = getGroupToAccountMappings(host2GroupMapper).iterator();
117 while (iter.hasNext()) {
118 GroupToAccountMapping gMap = conf.getGroupToAccountMapping( iter.next() );
119 Collection<String> userGroups = getUserGroups(gMap);
120 Iterator<String> userGroupIt = userGroups.iterator();
121 while (userGroupIt.hasNext()) {
122 UserGroup userGroup = conf.getUserGroup( userGroupIt.next() );
123 if (userGroup.getMembers().size()!=0 && !gMap.getAccountingVoSubgroup().equals("") && !gMap.getAccountingVo().equals("")) {
124 voi = voi + " " + gMap.getAccountingVoSubgroup();
125 voc = voc + " " + gMap.getAccountingVo();
126 }
127 }
128 }
129 osgMapBuffer.append(voi);
130 osgMapBuffer.append("\n");
131 osgMapBuffer.append(voc);
132 osgMapBuffer.append("\n");
133
134
135 List<String> accountsInMap = new ArrayList<String>();
136 iter = getGroupToAccountMappings(host2GroupMapper).iterator();
137 while (iter.hasNext()) {
138 GroupToAccountMapping gMap = (GroupToAccountMapping) conf.getGroupToAccountMapping( (String)iter.next() );
139 if (!gMap.getAccountingVoSubgroup().equals("") && !gMap.getAccountingVo().equals("")) {
140 Collection<String> userGroups = getUserGroups(gMap);
141 Collection<String> accountMappers = getAccountMappers(gMap);
142 Iterator<String> userGroupIt = userGroups.iterator();
143 while (userGroupIt.hasNext()) {
144 UserGroup userGroup = conf.getUserGroup( userGroupIt.next() );
145 Set<GridUser> users = new TreeSet<GridUser>(retrieveUserComparatorByDN());
146 users.addAll(userGroup.getMembers());
147 osgMapBuffer.append("#---- accounts for vo: " + userGroup.getName() + " ----#\n");
148 Iterator<GridUser> memberIter = users.iterator();
149 while (memberIter.hasNext()) {
150 GridUser user = memberIter.next();
151 if (isUserBanned(user))
152 continue;
153 Iterator<String> accountMapperIt = accountMappers.iterator();
154 while (accountMapperIt.hasNext()) {
155 AccountMapper accountMapper = conf.getAccountMapper( accountMapperIt.next() );
156 SiteUser siteUser = accountMapper.mapDn(user.getDn(), false);
157 if (siteUser!=null && siteUser.getAccount()!=null && !accountsInMap.contains(siteUser.getAccount())) {
158 osgMapBuffer.append(siteUser.getAccount());
159 osgMapBuffer.append(' ');
160 osgMapBuffer.append(gMap.getAccountingVoSubgroup());
161 osgMapBuffer.append("\n");
162 accountsInMap.add(siteUser.getAccount());
163 }
164 }
165 }
166 }
167 }
168 }
169
170 String finalOsgMap = osgMapBuffer.toString();
171 return finalOsgMap;
172 }
173
174
175
176
177
178
179
180
181 public String generateFqanMapfile(String hostname, boolean getAssignments) throws Exception {
182 String mapfile;
183 mapfile = generateFqanMapfileImpl(hostname, getAssignments);
184 return mapfile;
185 }
186
187
188
189
190
191
192
193
194 public String generateGridMapfile(String hostname, boolean createNewMappings, boolean includeFQAN, boolean includeEmail) throws Exception {
195 String mapfile;
196 mapfile = generateGridMapfileImpl(hostname, createNewMappings, includeFQAN, includeEmail);
197 return mapfile;
198 }
199
200
201
202
203
204
205 public String getOutOfDateFqans(int hoursSinceLastUpdate) throws Exception {
206 StringBuffer sb = new StringBuffer();
207 for (UserGroup userGroup: getConfiguration().getUserGroups().values()) {
208 if (userGroup instanceof VOMSUserGroup) {
209 VOMSUserGroup vomsUserGroup = (VOMSUserGroup)userGroup;
210 Calendar cal = Calendar.getInstance();
211 cal.add(Calendar.HOUR, -hoursSinceLastUpdate);
212 if (vomsUserGroup.getLastUpdate().before(cal.getTime()))
213 sb.append(userGroup.getName() + " " + userGroup.getLastUpdate());
214 }
215 }
216 return sb.toString();
217 }
218
219
220
221
222
223
224
225
226 public SiteUser map(String hostname, GridUser user, boolean checkBannedList) throws Exception {
227 if (checkBannedList && isUserBanned(user))
228 return null;
229 return mapImpl(hostname, user);
230 }
231
232
233
234
235
236
237
238 public String mapAccount(String accountName) throws Exception {
239 TreeSet<String> dns = new TreeSet<String>();
240 Configuration conf = getConfiguration();
241 Iterator<GroupToAccountMapping> g2AMappingsIt = conf.getGroupToAccountMappings().values().iterator();
242 while (g2AMappingsIt.hasNext()) {
243 GroupToAccountMapping g2AMapping = g2AMappingsIt.next();
244 Collection<String> userGroups = getUserGroups(g2AMapping);
245 Iterator<String> userGroupsIt = userGroups.iterator();
246 while (userGroupsIt.hasNext()) {
247 UserGroup userGroup = conf.getUserGroup( userGroupsIt.next() );
248 Set<GridUser> users = userGroup.getMembers();
249 Iterator<GridUser> usersIt = users.iterator();
250 while (usersIt.hasNext()) {
251 GridUser user = usersIt.next();
252 if (isUserBanned(user))
253 continue;
254 Collection<String> accountMappers = getAccountMappers(g2AMapping);
255 Iterator<String> accountMappersIt = accountMappers.iterator();
256 while (accountMappersIt.hasNext()) {
257 AccountMapper accountMapper = conf.getAccountMapper( accountMappersIt.next() );
258 if (accountName.equals(accountMapper.mapDn(user.getDn(), false)) && !dns.contains(user.getDn()))
259 dns.add(user.getDn());
260 }
261 }
262 }
263 }
264
265 if (dns.size()==0) {
266 gumsAdminLog.warn("Cannot map account '" + accountName + "' to any DN.");
267 }
268
269 StringBuffer output = new StringBuffer();
270 Iterator<String> it = dns.iterator();
271 while(it.hasNext()) {
272 output.append( it.next() );
273 output.append("\n");
274 }
275
276 gumsAdminLog.info("Mapped the account '" + accountName + "' to '" + output.toString() + "'");
277 return output.toString();
278 }
279
280
281
282
283
284 private String generateFqanMapfileForH2GMapping(HostToGroupMapping hToGMapping, boolean getAssignments) throws Exception {
285 StringBuffer fqanMapfileBuffer = new StringBuffer("");
286
287 if (hToGMapping != null) {
288 Configuration conf = hToGMapping.getConfiguration();
289 Iterator<String> iter = getGroupToAccountMappings(hToGMapping).iterator();
290 while (iter.hasNext()) {
291 GroupToAccountMapping gMap = (GroupToAccountMapping)conf.getGroupToAccountMapping( iter.next() );
292 fqanMapfileBuffer.append(generateFqanMapfileForG2AMapping(conf, gMap, getAssignments));
293 }
294 }
295 else {
296 Configuration conf = getConfiguration();
297 Iterator<GroupToAccountMapping> iter = conf.getGroupToAccountMappings().values().iterator();
298 while (iter.hasNext()) {
299 GroupToAccountMapping gMap = iter.next();
300 fqanMapfileBuffer.append(generateFqanMapfileForG2AMapping(conf, gMap, getAssignments));
301 }
302 }
303
304 return fqanMapfileBuffer.toString();
305 }
306
307 private String generateFqanMapfileForG2AMapping(Configuration conf, GroupToAccountMapping gMap, boolean getAssignments) {
308 StringBuffer fqanMapfileBuffer = new StringBuffer("");
309 Collection<String> userGroups = getUserGroups(gMap);
310 Iterator<String> userGroupIt = userGroups.iterator();
311 while (userGroupIt.hasNext()) {
312 UserGroup userGroup = conf.getUserGroup( userGroupIt.next() );
313 if (userGroup instanceof VOMSUserGroup) {
314 VOMSUserGroup vomsUserGroup = (VOMSUserGroup)userGroup;
315 Collection<String> accountMappers = getAccountMappers(gMap);
316 Iterator<String> accountMapperIt = accountMappers.iterator();
317 while (accountMapperIt.hasNext()) {
318 AccountMapper accountMapper = conf.getAccountMapper( accountMapperIt.next() );
319 if (accountMapper instanceof GroupAccountMapper || accountMapper instanceof AccountPoolMapper) {
320 String fqan = vomsUserGroup.getVoGroup() + (vomsUserGroup.getRole().equals("") ? "" : "/Role=" + vomsUserGroup.getRole());
321 String account = null;
322 if (accountMapper instanceof GroupAccountMapper) {
323 GroupAccountMapper groupPoolMapper = (GroupAccountMapper)accountMapper;
324 account = groupPoolMapper.getAccountName();
325 }
326 else if (accountMapper instanceof AccountPoolMapper){
327 if (getAssignments)
328 account = ((AccountPoolMapper)accountMapper).getAssignments();
329 else {
330 String accountPool = ((AccountPoolMapper)accountMapper).getAccountPool();
331 account = accountPool + "0-"+accountPool+"0(0/0)";
332 }
333 }
334 if (account != null) {
335 fqanMapfileBuffer.append('"');
336 fqanMapfileBuffer.append( fqan );
337 fqanMapfileBuffer.append('"');
338 fqanMapfileBuffer.append(' ');
339 fqanMapfileBuffer.append( account );
340 fqanMapfileBuffer.append("\n");
341 break;
342 }
343 }
344 }
345 }
346 }
347 return fqanMapfileBuffer.toString();
348 }
349
350 private String generateGridMapfile(HostToGroupMapping hToGMapping, boolean createNewMappings, boolean includeFQAN, boolean includeEmail) throws Exception {
351 Configuration conf = hToGMapping.getConfiguration();
352 Iterator<String> iter = getGroupToAccountMappings(hToGMapping).iterator();
353 TreeSet<String> usersInMap = new TreeSet<String>();
354
355 StringBuffer gridMapfileBuffer = new StringBuffer("");
356 while (iter.hasNext()) {
357 GroupToAccountMapping gMap = (GroupToAccountMapping) conf.getGroupToAccountMapping( (String)iter.next() );
358 Collection<String> userGroups = getUserGroups(gMap);
359 Iterator<String> userGroupIt = userGroups.iterator();
360 while (userGroupIt.hasNext()) {
361 UserGroup userGroup = conf.getUserGroup( userGroupIt.next() );
362 Set<GridUser> members = new TreeSet<GridUser>(retrieveUserComparatorByDN());
363 members.addAll(userGroup.getMembers());
364 gridMapfileBuffer.append("#---- members of vo: " + userGroup.getName() + " ----#\n");
365 Iterator<GridUser> memberIter = members.iterator();
366 if (includeFQAN) {
367 while (memberIter.hasNext()) {
368 GridUser user = memberIter.next();
369 if (isUserBanned(user))
370 continue;
371 String fqan = user.getFqan()!=null ? user.getFqan() : "";
372 String email = user.getEmail()!=null?user.getEmail().toString():"";
373 if ( !usersInMap.contains(user.getDn() + fqan) ) {
374 Collection<String> accountMappers = getAccountMappers(gMap);
375 Iterator<String> accountMappersIt = accountMappers.iterator();
376 while (accountMappersIt.hasNext()) {
377 AccountMapper accountMapper = conf.getAccountMapper( accountMappersIt.next() );
378 SiteUser siteUser = accountMapper.mapDn(user.getDn(), true);
379 if (siteUser!=null && siteUser.getAccount()!=null) {
380 gridMapfileBuffer.append('"');
381 gridMapfileBuffer.append( user.getDn() );
382 gridMapfileBuffer.append('"' );
383 gridMapfileBuffer.append(" \"");
384 gridMapfileBuffer.append( fqan );
385 gridMapfileBuffer.append('"');
386 gridMapfileBuffer.append(' ');
387 gridMapfileBuffer.append( siteUser.getAccount() );
388 if (includeEmail) {
389 gridMapfileBuffer.append(' ');
390 gridMapfileBuffer.append( email );
391 }
392 gridMapfileBuffer.append("\n");
393 usersInMap.add( user.getDn() + fqan );
394 break;
395 } else {
396 gumsAdminLog.debug("User " + user + " from group " + gMap.getUserGroups() + " can't be mapped.");
397 }
398 }
399 }
400 }
401 }
402 else {
403 while (memberIter.hasNext()) {
404 GridUser user = (GridUser) memberIter.next();
405 if (isUserBanned(user))
406 continue;
407 String email = user.getEmail()!=null?user.getEmail().toString():"";
408 if (!usersInMap.contains(user.getDn()) && userGroup.isMember(new GridUser(user.getDn()))) {
409 Collection<String> accountMappers = getAccountMappers(gMap);
410 Iterator<String> accountMappersIt = accountMappers.iterator();
411 while (accountMappersIt.hasNext()) {
412 AccountMapper accountMapper = conf.getAccountMapper( accountMappersIt.next() );
413 SiteUser siteUser = accountMapper.mapDn(user.getDn(), true);
414 if (siteUser!=null && siteUser.getAccount()!=null) {
415 gridMapfileBuffer.append('"');
416 gridMapfileBuffer.append( user.getDn() );
417 gridMapfileBuffer.append('"' );
418 gridMapfileBuffer.append(' ');
419 gridMapfileBuffer.append( siteUser.getAccount() );
420 if (includeEmail && email!=null) {
421 gridMapfileBuffer.append(' ');
422 gridMapfileBuffer.append( email );
423 }
424 gridMapfileBuffer.append("\n");
425 usersInMap.add(user.getDn());
426 break;
427 } else {
428 gumsAdminLog.debug("User " + user + " from group " + gMap.getUserGroups() + " can't be mapped.");
429 }
430 }
431 }
432 }
433 }
434 }
435 }
436
437 String finalGridmapfile = gridMapfileBuffer.toString();
438 return finalGridmapfile;
439 }
440
441 private String generateFqanMapfileImpl(String hostname, boolean getAssignments) throws Exception {
442 String mapfile = null;
443 if (hostname != null) {
444 Configuration conf = getConfiguration();
445 HostToGroupMapping host2GroupMapper = hostToGroupMapping(conf, hostname);
446 if (host2GroupMapper == null) {
447 String message = "Cannot generate FQAN mapfile for host '" + hostname + "' - it is not defined in any host to group mapping.";
448 gumsAdminLog.warn(message);
449 throw new RuntimeException(message);
450 }
451 mapfile = generateFqanMapfileForH2GMapping(host2GroupMapper, getAssignments);
452 }
453 else
454 mapfile = generateFqanMapfileForH2GMapping(null, getAssignments);
455 return mapfile;
456 }
457
458 private String generateGridMapfileImpl(String hostname, boolean createNewMappings, boolean includeFqan, boolean includeEmail) throws Exception {
459 Configuration conf = getConfiguration();
460 HostToGroupMapping host2GroupMapper = hostToGroupMapping(conf, hostname);
461 if (host2GroupMapper == null) {
462 String message = "Cannot generate grid mapfile for host '" + hostname + "' - it is not defined in any host to group mapping.";
463 gumsAdminLog.warn(message);
464 throw new RuntimeException(message);
465 }
466 String mapfile = generateGridMapfile(host2GroupMapper, createNewMappings, includeFqan, includeEmail);
467 return mapfile;
468 }
469
470 private Configuration getConfiguration() throws Exception {
471 if (conf != null)
472 return conf;
473 else
474 return GUMS.getSingletonGums().getConfiguration();
475 }
476
477 private HostToGroupMapping hostToGroupMapping(Configuration conf, String hostname) {
478 Collection<HostToGroupMapping> hostToGroupMappers = conf.getHostToGroupMappings();
479 Iterator<HostToGroupMapping> it = hostToGroupMappers.iterator();
480 while (it.hasNext()) {
481 HostToGroupMapping hostToGroupMapper = it.next();
482 if (hostToGroupMapper.isInGroup(hostname)) {
483 return hostToGroupMapper;
484 }
485 }
486 return null;
487 }
488
489 private SiteUser mapImpl(String hostname, GridUser user) throws Exception {
490 Configuration conf = getConfiguration();
491 HostToGroupMapping host2GroupMapper = hostToGroupMapping(conf, hostname);
492 if (host2GroupMapper == null) {
493 String message = "Cannot map user for host '" + hostname + "' - it is not defined in any host to group mapping.";
494 gumsAdminLog.warn(message);
495 throw new RuntimeException(message);
496 }
497 Iterator<String> g2AMappingsIt = getGroupToAccountMappings(host2GroupMapper).iterator();
498 while (g2AMappingsIt.hasNext()) {
499 GroupToAccountMapping g2AMapping = conf.getGroupToAccountMapping( g2AMappingsIt.next() );
500 Collection<String> userGroups = getUserGroups(g2AMapping);
501 Iterator<String> userGroupsIt = userGroups.iterator();
502 while (userGroupsIt.hasNext()) {
503 UserGroup userGroup = conf.getUserGroup( userGroupsIt.next() );
504 if (userGroup.isMember(user)) {
505 Collection<String> accountMappers = getAccountMappers(g2AMapping);
506 Iterator<String> accountMappersIt = accountMappers.iterator();
507 while (accountMappersIt.hasNext()) {
508 AccountMapper accountMapper = conf.getAccountMapper( accountMappersIt.next() );
509 SiteUser siteUser = accountMapper.mapDn(user.getDn(), true);
510 if (siteUser!=null && siteUser.getAccount()!=null)
511 return siteUser;
512 }
513 }
514 }
515 }
516 return null;
517 }
518
519 public void removeAccountRange(String accountPoolMapperName, String range) throws Exception {
520 AccountMapper accountMapper = getConfiguration().getAccountMapper(accountPoolMapperName);
521 if (accountMapper==null)
522 throw new RuntimeException("Account Mapper '" + accountPoolMapperName + "' does not exist");
523 if (!(accountMapper instanceof AccountPoolMapper))
524 throw new RuntimeException("Account Mapper '" + accountPoolMapperName + "' is not an account pool mapper");
525 AccountPoolMapper accountPoolMapper = (AccountPoolMapper)accountMapper;
526
527 String firstAccount = range.substring(0, range.indexOf('-'));
528 String lastAccountN = range.substring(range.indexOf('-') + 1);
529 String firstAccountN = firstAccount.substring(firstAccount.length() - lastAccountN.length());
530
531 int nFirstAccount = Integer.parseInt(firstAccountN);
532 int nLastAccount = Integer.parseInt(lastAccountN);
533
534 StringBuffer last = new StringBuffer(firstAccount);
535 String nLastAccountString = Integer.toString(nLastAccount);
536 last.replace(firstAccount.length() - nLastAccountString.length(), firstAccount.length(), nLastAccountString);
537
538 StringBuffer buf = new StringBuffer(firstAccount);
539 int len = firstAccount.length();
540 for (int account = nFirstAccount; account <= nLastAccount; account++) {
541 String nAccount = Integer.toString(account);
542 buf.replace(len - nAccount.length(), len, nAccount);
543 accountPoolMapper.removeMapping(new SiteUser(buf.toString()));
544 }
545 }
546
547 private Comparator<GridUser> retrieveUserComparatorByDN() {
548 return new Comparator<GridUser>() {
549 public int compare(GridUser u1, GridUser u2) {
550 GridUser user1 = u1;
551 GridUser user2 = u2;
552 return user1.compareDn(user2);
553 }
554 };
555 }
556
557 public void unassignAccountRange(String accountPoolMapperName, String range) throws Exception {
558 AccountMapper accountMapper = getConfiguration().getAccountMapper(accountPoolMapperName);
559 if (accountMapper==null)
560 throw new RuntimeException("Account Mapper '" + accountPoolMapperName + "' does not exist");
561 if (!(accountMapper instanceof AccountPoolMapper))
562 throw new RuntimeException("Account Mapper '" + accountPoolMapperName + "' is not an account pool mapper");
563 AccountPoolMapper accountPoolMapper = (AccountPoolMapper)accountMapper;
564
565 String firstAccount = range.substring(0, range.indexOf('-'));
566 String lastAccountN = range.substring(range.indexOf('-') + 1);
567 String firstAccountN = firstAccount.substring(firstAccount.length() - lastAccountN.length());
568
569 int nFirstAccount = Integer.parseInt(firstAccountN);
570 int nLastAccount = Integer.parseInt(lastAccountN);
571
572 StringBuffer last = new StringBuffer(firstAccount);
573 String nLastAccountString = Integer.toString(nLastAccount);
574 last.replace(firstAccount.length() - nLastAccountString.length(), firstAccount.length(), nLastAccountString);
575
576 StringBuffer buf = new StringBuffer(firstAccount);
577 int len = firstAccount.length();
578 for (int account = nFirstAccount; account <= nLastAccount; account++) {
579 String nAccount = Integer.toString(account);
580 buf.replace(len - nAccount.length(), len, nAccount);
581 accountPoolMapper.createMapping(null, new SiteUser(buf.toString()));
582 }
583 }
584
585
586 public static void main(String args[]) {
587 if (args.length < 2) {
588 System.out.println("Must specify arguments: {configuration path} {command} {argument1} ...");
589 return;
590 }
591
592
593 PrintStream errStreamOriginal = System.err;
594 System.setErr(new PrintStream(new OutputStream() {
595 public void write(int b) {
596 }
597 }));
598 PrintStream outStreamOriginal = System.out;
599 System.setOut(new PrintStream(new OutputStream() {
600 public void write(int b) {
601 }
602 }));
603
604 String configurationPath = args[0];
605 String command = args[1];
606 String map = "";
607 try {
608 FileInputStream fileInputStream = new FileInputStream(configurationPath);
609 try {
610 StringBuffer configBuffer = new StringBuffer();
611 int ch;
612 while ((ch = fileInputStream.read()) != -1)
613 configBuffer.append((char)ch);
614 Configuration conf = ConfigurationToolkit.parseConfiguration(configBuffer.toString(), false);
615 CoreLogic coreLogic = new CoreLogic(conf);
616 if (command.equals("generateFqanMapfile")) {
617 if (args.length == 3)
618 map = coreLogic.generateFqanMapfile(args[2], false);
619 else
620 map = coreLogic.generateFqanMapfileImpl(null, false);
621 }
622 else
623 System.out.println("Command '" + command + "' not supported");
624 } finally {
625 fileInputStream.close();
626 }
627 } catch (Exception e) {
628 System.setErr(errStreamOriginal);
629 System.setOut(outStreamOriginal);
630 System.out.println(e.getMessage());
631 System.exit(1);
632 }
633
634 System.setErr(errStreamOriginal);
635 System.setOut(outStreamOriginal);
636
637 System.out.println(map);
638 }
639
640 protected List<String> getUserGroups(GroupToAccountMapping g2aMapping) {
641 return StringUtil.toList(g2aMapping.getUserGroups());
642 }
643
644 protected List<String> getAccountMappers(GroupToAccountMapping g2aMapping) {
645 return StringUtil.toList(g2aMapping.getAccountMappers());
646 }
647
648 protected List<String> getGroupToAccountMappings(HostToGroupMapping h2gMapping) {
649 return StringUtil.toList(h2gMapping.getGroupToAccountMappings());
650 }
651 }