001 // $HeadURL: https://svn.wald.intevation.org/svn/deegree/base/branches/2.4_testing/src/org/deegree/tools/security/DRMAccess.java $
002 /*----------------------------------------------------------------------------
003 This file is part of deegree, http://deegree.org/
004 Copyright (C) 2001-2009 by:
005 Department of Geography, University of Bonn
006 and
007 lat/lon GmbH
008
009 This library is free software; you can redistribute it and/or modify it under
010 the terms of the GNU Lesser General Public License as published by the Free
011 Software Foundation; either version 2.1 of the License, or (at your option)
012 any later version.
013 This library is distributed in the hope that it will be useful, but WITHOUT
014 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
015 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
016 details.
017 You should have received a copy of the GNU Lesser General Public License
018 along with this library; if not, write to the Free Software Foundation, Inc.,
019 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
020
021 Contact information:
022
023 lat/lon GmbH
024 Aennchenstr. 19, 53177 Bonn
025 Germany
026 http://lat-lon.de/
027
028 Department of Geography, University of Bonn
029 Prof. Dr. Klaus Greve
030 Postfach 1147, 53001 Bonn
031 Germany
032 http://www.geographie.uni-bonn.de/deegree/
033
034 e-mail: info@deegree.org
035 ----------------------------------------------------------------------------*/
036
037 package org.deegree.tools.security;
038
039 import java.io.FileNotFoundException;
040 import java.io.IOException;
041 import java.io.InputStream;
042 import java.io.RandomAccessFile;
043 import java.io.StringReader;
044 import java.util.ArrayList;
045 import java.util.Arrays;
046 import java.util.Iterator;
047 import java.util.List;
048 import java.util.Properties;
049
050 import org.deegree.framework.util.BootLogger;
051 import org.deegree.framework.util.StringTools;
052 import org.deegree.framework.xml.XMLTools;
053 import org.deegree.model.filterencoding.AbstractFilter;
054 import org.deegree.model.filterencoding.Filter;
055 import org.deegree.security.GeneralSecurityException;
056 import org.deegree.security.drm.SecurityAccess;
057 import org.deegree.security.drm.SecurityAccessManager;
058 import org.deegree.security.drm.SecurityTransaction;
059 import org.deegree.security.drm.WrongCredentialsException;
060 import org.deegree.security.drm.model.Group;
061 import org.deegree.security.drm.model.Right;
062 import org.deegree.security.drm.model.RightSet;
063 import org.deegree.security.drm.model.RightType;
064 import org.deegree.security.drm.model.Role;
065 import org.deegree.security.drm.model.SecuredObject;
066 import org.deegree.security.drm.model.User;
067 import org.w3c.dom.Document;
068
069 /**
070 * tool class to handle deegree sercurity administration using commandline calls:
071 *
072 * <pre>
073 * general definitions:
074 * -driver JDBC driver (e.g. sun.jdbc.odbc.JdbcOdbcDriver for ODBC databases)
075 * -logon jdbc:odbc:security logon to database (e.g. ODBC name)
076 * -user user name (optional)
077 * -password users password (optional)
078 *
079 * possible actions:
080 * -action (addUser, addGroup, addRole, addUserToGroup, assignRoleWithGroup, addSecuredObject, assignRights, clean)
081 * defines the action be performed. possible actions are listed inn brackets.
082 *
083 * action = addUser -> adds a user to the right management
084 * -name users login name
085 * -password users password
086 * -firstName the first name of the user
087 * -lastName the last name of the user
088 * -emal email address of the user
089 *
090 * action = removeUser -> removes a user to the right management
091 * -name users login name
092 *
093 * action = addGroup -> adds a group to the right management system
094 * -name name of the group
095 * -title title of the group
096 *
097 * action = removeGroup -> removes a group to the right management
098 * -name groups login name
099 *
100 * action = addRole -> adds a role to the right management system
101 * -name name of the role
102 *
103 * action = addUserToGroup -> adds a user to a named group
104 * -userName name of the user
105 * -groupName name of the group
106 *
107 * action = addUserToGroup -> assignes a group with a role
108 * -groupName name of the group
109 * -roleName name of the role
110 *
111 * action = addSecuredObject -> adds a new secured object to the right management system
112 * -soType type of the secured object (e.g. Layer, FeatureType, Coverage ...)
113 * -soName name of the secured object
114 * -soTitle title of the secured object
115 *
116 * action = removeSecuredObject -> removes a new secured object from the right management system
117 * -soType type of the secured object (e.g. Layer, FeatureType, Coverage ...)
118 * -soName name of the secured object
119 *
120 * action = assignRights -> assigns rights on a named secured object to a role
121 * -constraints comma seperated list of absolut pathes to filter encoding files
122 * -rights comma seperated list of rights to assign. the number of rights must be equest to the number constraints
123 * -soName name of the secured object
124 * -soType type of the secured object
125 * -role name of the role the rights shall be given to
126 *
127 * action = removeRights removes rights on a named secured object to a role
128 * -rights comma seperated list of rights to remove.
129 * -soName name of the secured object
130 * -soType type of the secured object
131 * -role name of the role the rights shall be given to
132 *
133 * action = clean -> cleans the complete right management system database by deleting all entries!
134 * </pre>
135 *
136 *
137 * @version $Revision: 18197 $
138 * @author <a href="mailto:poth@lat-lon.de">Andreas Poth</a>
139 * @author last edited by: $Author: apoth $
140 *
141 * @version $Revision: 18197 $, $Date: 2009-06-19 13:32:15 +0200 (Fr, 19. Jun 2009) $
142 */
143 public class DRMAccess {
144
145 private static String secAdminPassword = "JOSE67";
146
147 private SecurityAccessManager manager;
148
149 private SecurityTransaction transaction;
150
151 static private Properties prop = new Properties();
152
153 /**
154 * Initialization done at class loading time.
155 */
156 static {
157 try {
158 String fileName = "sec.properties";
159 InputStream is = DRMAccess.class.getResourceAsStream( fileName );
160 if ( is == null ) {
161 BootLogger.log( "Error while initializing " + DRMAccess.class.getName() + " : "
162 + " default message file: '" + fileName + " not found." );
163 }
164 is = DRMAccess.class.getResourceAsStream( fileName );
165 prop.load( is );
166 is.close();
167
168 // override messages using file "/sec.properties"
169 fileName = "/sec.properties";
170 overrideMessages( fileName, prop );
171
172 } catch ( IOException e ) {
173 BootLogger.logError( "Error while initializing " + DRMAccess.class.getName() + " : " + e.getMessage(), e );
174 }
175 }
176
177 /**
178 * @throws IOException
179 */
180 public DRMAccess() throws IOException {
181 secAdminPassword = prop.getProperty( "adminpass" );
182 }
183
184 private static void overrideMessages( String propertiesFile, Properties props )
185 throws IOException {
186 InputStream is = DRMAccess.class.getResourceAsStream( propertiesFile );
187 if ( is != null ) {
188 // override default messages
189 Properties overrideProps = new Properties();
190 overrideProps.load( is );
191 is.close();
192 Iterator<?> iter = overrideProps.keySet().iterator();
193 while ( iter.hasNext() ) {
194 String key = (String) iter.next();
195 props.put( key, overrideProps.get( key ) );
196 }
197 }
198 }
199
200 /**
201 * @param driver
202 * @param logon
203 * @param user
204 * @param password
205 * @throws Exception
206 */
207 protected void setUp( String driver, String logon, String user, String password )
208 throws Exception {
209 Properties properties = new Properties();
210 properties.setProperty( "driver", driver );
211 properties.setProperty( "url", logon );
212 if ( user == null )
213 user = "";
214 properties.setProperty( "user", user );
215 if ( password == null )
216 password = "";
217 properties.setProperty( "password", password );
218 try {
219 manager = SecurityAccessManager.getInstance();
220 } catch ( GeneralSecurityException e ) {
221 try {
222 System.out.println( properties );
223 SecurityAccessManager.initialize( "org.deegree.security.drm.SQLRegistry", properties, 60 * 1000 );
224 manager = SecurityAccessManager.getInstance();
225
226 } catch ( GeneralSecurityException e1 ) {
227 e1.printStackTrace();
228 }
229 }
230 }
231
232 /**
233 *
234 */
235 public void GetUsers() {
236 try {
237 User user = manager.getUserByName( "SEC_ADMIN" );
238 user.authenticate( DRMAccess.secAdminPassword );
239 transaction = manager.acquireTransaction( user );
240 User[] users = transaction.getAllUsers();
241 for ( int i = 0; i < users.length; i++ ) {
242 System.out.println( "User " + i + ": " + users[i].getName() );
243 }
244 } catch ( Exception e ) {
245 e.printStackTrace();
246 }
247 }
248
249 /**
250 *
251 * @param name
252 * @param password
253 * @param firstName
254 * @param lastName
255 * @param email
256 */
257 public void addUser( String name, String password, String firstName, String lastName, String email ) {
258 try {
259 User user = manager.getUserByName( "SEC_ADMIN" );
260 user.authenticate( DRMAccess.secAdminPassword );
261 transaction = manager.acquireTransaction( user );
262 transaction.registerUser( name, password, firstName, lastName, email );
263
264 manager.commitTransaction( transaction );
265 } catch ( Exception e ) {
266 e.printStackTrace();
267 try {
268 manager.abortTransaction( transaction );
269 } catch ( GeneralSecurityException me ) {
270 me.printStackTrace();
271 }
272
273 }
274 }
275
276 /**
277 *
278 * @param name
279 */
280 public void removeUser( String name ) {
281 try {
282 User user = manager.getUserByName( "SEC_ADMIN" );
283 user.authenticate( DRMAccess.secAdminPassword );
284 transaction = manager.acquireTransaction( user );
285 user = transaction.getUserByName( name );
286 transaction.deregisterUser( user );
287 manager.commitTransaction( transaction );
288 } catch ( Exception e ) {
289 e.printStackTrace();
290 }
291 }
292
293 /**
294 *
295 * @param name
296 * @param password
297 * @return the user
298 */
299 public User login( String name, String password ) {
300 User user = null;
301 try {
302 user = manager.getUserByName( "SEC_ADMIN" );
303 user.authenticate( DRMAccess.secAdminPassword );
304 transaction = manager.acquireTransaction( user );
305 user = transaction.getUserByName( name );
306 try {
307 user.authenticate( password );
308 } catch ( WrongCredentialsException e ) {
309 System.out.println( "failed." );
310 }
311 } catch ( Exception e ) {
312 e.printStackTrace();
313 try {
314 manager.abortTransaction( transaction );
315 } catch ( GeneralSecurityException me ) {
316 me.printStackTrace();
317 }
318 }
319 return user;
320 }
321
322 /**
323 *
324 * @param name
325 * @param title
326 * @return the group
327 */
328 public Group addGroup( String name, String title ) {
329 Group humans = null;
330 try {
331 User user = manager.getUserByName( "SEC_ADMIN" );
332 user.authenticate( DRMAccess.secAdminPassword );
333 transaction = manager.acquireTransaction( user );
334
335 humans = transaction.registerGroup( name, title );
336 manager.commitTransaction( transaction );
337 } catch ( Exception e ) {
338 e.printStackTrace();
339 try {
340 manager.abortTransaction( transaction );
341 } catch ( GeneralSecurityException me ) {
342 me.printStackTrace();
343 }
344 }
345 return humans;
346 }
347
348 /**
349 *
350 * @param name
351 */
352 public void removeGroup( String name ) {
353
354 try {
355 User user = manager.getUserByName( "SEC_ADMIN" );
356 user.authenticate( DRMAccess.secAdminPassword );
357 transaction = manager.acquireTransaction( user );
358
359 Group group = transaction.getGroupByName( name );
360 transaction.deregisterGroup( group );
361 manager.commitTransaction( transaction );
362 } catch ( Exception e ) {
363 e.printStackTrace();
364 try {
365 manager.abortTransaction( transaction );
366 } catch ( GeneralSecurityException me ) {
367 me.printStackTrace();
368 }
369 }
370 }
371
372 /**
373 *
374 * @param name
375 * @return the role
376 */
377 public Role addRole( String name ) {
378 Role role = null;
379 try {
380 User user = manager.getUserByName( "SEC_ADMIN" );
381 user.authenticate( DRMAccess.secAdminPassword );
382 transaction = manager.acquireTransaction( user );
383
384 role = transaction.registerRole( name );
385 manager.commitTransaction( transaction );
386 } catch ( Exception e ) {
387 e.printStackTrace();
388 try {
389 manager.abortTransaction( transaction );
390 } catch ( GeneralSecurityException me ) {
391 me.printStackTrace();
392 }
393 }
394 return role;
395 }
396
397 /**
398 *
399 * @param name
400 */
401 public void removeRole( String name ) {
402
403 try {
404 User user = manager.getUserByName( "SEC_ADMIN" );
405 user.authenticate( DRMAccess.secAdminPassword );
406 transaction = manager.acquireTransaction( user );
407
408 Role role = transaction.getRoleByName( name );
409 transaction.deregisterRole( role );
410 manager.commitTransaction( transaction );
411 } catch ( Exception e ) {
412 e.printStackTrace();
413 try {
414 manager.abortTransaction( transaction );
415 } catch ( GeneralSecurityException me ) {
416 me.printStackTrace();
417 }
418 }
419
420 }
421
422 /**
423 * @param userName
424 * @param group
425 */
426 public void setGroupMemberships( String userName, String group ) {
427
428 try {
429 User user = manager.getUserByName( "SEC_ADMIN" );
430 user.authenticate( DRMAccess.secAdminPassword );
431 transaction = manager.acquireTransaction( user );
432
433 User jon = transaction.getUserByName( userName );
434 Group humans = transaction.getGroupByName( group );
435 User[] users = humans.getUsers( transaction );
436 List<User> list = Arrays.asList( users );
437 ArrayList<User> aList = new ArrayList<User>( list );
438 aList.add( jon );
439 users = aList.toArray( new User[aList.size()] );
440 transaction.setUsersInGroup( humans, users );
441
442 manager.commitTransaction( transaction );
443 } catch ( Exception e ) {
444 e.printStackTrace();
445 try {
446 manager.abortTransaction( transaction );
447 } catch ( GeneralSecurityException me ) {
448 me.printStackTrace();
449 }
450
451 }
452 }
453
454 /**
455 *
456 * @param role
457 * @param group
458 */
459 public void setRoleAssociation( String role, String group ) {
460 try {
461 User user = manager.getUserByName( "SEC_ADMIN" );
462 user.authenticate( DRMAccess.secAdminPassword );
463 transaction = manager.acquireTransaction( user );
464
465 Group humans = transaction.getGroupByName( group );
466 Role canOpener = transaction.getRoleByName( role );
467 Group[] groups = canOpener.getGroups( transaction );
468 List<Group> list = Arrays.asList( groups );
469 ArrayList<Group> aList = new ArrayList<Group>( list );
470 aList.add( humans );
471 groups = aList.toArray( new Group[aList.size()] );
472 transaction.setGroupsWithRole( canOpener, groups );
473 manager.commitTransaction( transaction );
474 } catch ( Exception e ) {
475 e.printStackTrace();
476 try {
477 manager.abortTransaction( transaction );
478 } catch ( GeneralSecurityException me ) {
479 me.printStackTrace();
480 }
481
482 }
483 }
484
485 /**
486 *
487 * @param role
488 * @param user
489 */
490 public void setUserRoleAssociation( String role, String user ) {
491 try {
492 User u = manager.getUserByName( "SEC_ADMIN" );
493 u.authenticate( DRMAccess.secAdminPassword );
494 transaction = manager.acquireTransaction( u );
495 User us = transaction.getUserByName( user );
496 Role canOpener = transaction.getRoleByName( role );
497 transaction.setUsersWithRole( canOpener, new User[] { us } );
498 manager.commitTransaction( transaction );
499 } catch ( Exception e ) {
500 e.printStackTrace();
501 try {
502 manager.abortTransaction( transaction );
503 } catch ( GeneralSecurityException me ) {
504 me.printStackTrace();
505 }
506
507 }
508 }
509
510 /**
511 *
512 * @param type
513 * @param name
514 * @param title
515 */
516 public void addSecuredObject( String type, String name, String title ) {
517 try {
518 User user = manager.getUserByName( "SEC_ADMIN" );
519 user.authenticate( DRMAccess.secAdminPassword );
520 transaction = manager.acquireTransaction( user );
521 transaction.registerSecuredObject( type, name, title );
522 manager.commitTransaction( transaction );
523 } catch ( Exception e ) {
524 e.printStackTrace();
525 try {
526 manager.abortTransaction( transaction );
527 } catch ( GeneralSecurityException me ) {
528 me.printStackTrace();
529 }
530
531 }
532 }
533
534 /**
535 *
536 * @param type
537 * @param name
538 */
539 public void removeSecuredObject( String type, String name ) {
540 try {
541 User user = manager.getUserByName( "SEC_ADMIN" );
542 user.authenticate( DRMAccess.secAdminPassword );
543 transaction = manager.acquireTransaction( user );
544 SecuredObject so = transaction.getSecuredObjectByName( name, type );
545 transaction.deregisterSecuredObject( so );
546 manager.commitTransaction( transaction );
547 } catch ( Exception e ) {
548 e.printStackTrace();
549 try {
550 manager.abortTransaction( transaction );
551 } catch ( GeneralSecurityException me ) {
552 me.printStackTrace();
553 }
554
555 }
556 }
557
558 /**
559 *
560 * @param filter
561 * @param secObj
562 * @param soType
563 * @param role
564 * @param rights
565 */
566 public void assignRights( String[] filter, String secObj, String soType, String role, String[] rights ) {
567 try {
568 User user = manager.getUserByName( "SEC_ADMIN" );
569 user.authenticate( DRMAccess.secAdminPassword );
570 transaction = manager.acquireTransaction( user );
571
572 SecuredObject so = transaction.getSecuredObjectByName( secObj, soType );
573
574 Right[] rs = new Right[rights.length];
575 for ( int i = 0; i < rs.length; i++ ) {
576 Filter constraints = null;
577 if ( filter[i] != null ) {
578 Document doc = XMLTools.parse( new StringReader( filter[i] ) );
579 constraints = AbstractFilter.buildFromDOM( doc.getDocumentElement(), false );
580 }
581 if ( rights[i].equalsIgnoreCase( "getmap" ) ) {
582 rs[i] = new Right( so, RightType.GETMAP, constraints );
583 } else if ( rights[i].equalsIgnoreCase( "getmap_response" ) ) {
584 rs[i] = new Right( so, RightType.GETMAP_RESPONSE, constraints );
585 } else if ( rights[i].equalsIgnoreCase( "getfeatureinfo" ) ) {
586 rs[i] = new Right( so, RightType.GETFEATUREINFO, constraints );
587 } else if ( rights[i].equalsIgnoreCase( "getfeatureinfo_response" ) ) {
588 rs[i] = new Right( so, RightType.GETFEATUREINFO_RESPONSE, constraints );
589 } else if ( rights[i].equalsIgnoreCase( "getlegendgraphic" ) ) {
590 rs[i] = new Right( so, RightType.GETLEGENDGRAPHIC, constraints );
591 } else if ( rights[i].equalsIgnoreCase( "getlegendgraphic_response" ) ) {
592 rs[i] = new Right( so, RightType.GETLEGENDGRAPHIC_RESPONSE, constraints );
593 } else if ( rights[i].equalsIgnoreCase( "getfeature" ) ) {
594 rs[i] = new Right( so, RightType.GETFEATURE, constraints );
595 } else if ( rights[i].equalsIgnoreCase( "getfeature_response" ) ) {
596 rs[i] = new Right( so, RightType.GETFEATURE_RESPONSE, constraints );
597 } else if ( rights[i].equalsIgnoreCase( "describefeaturetype" ) ) {
598 rs[i] = new Right( so, RightType.DESCRIBEFEATURETYPE, constraints );
599 } else if ( rights[i].equalsIgnoreCase( "describefeaturetype_response" ) ) {
600 rs[i] = new Right( so, RightType.DESCRIBEFEATURETYPE_RESPONSE, constraints );
601 } else if ( rights[i].equalsIgnoreCase( "getcoverage" ) ) {
602 rs[i] = new Right( so, RightType.GETCOVERAGE, constraints );
603 } else if ( rights[i].equalsIgnoreCase( "getcoverage_response" ) ) {
604 rs[i] = new Right( so, RightType.GETCOVERAGE_RESPONSE, constraints );
605 } else if ( rights[i].equalsIgnoreCase( "describecoverage" ) ) {
606 rs[i] = new Right( so, RightType.DESCRIBECOVERAGE, constraints );
607 } else if ( rights[i].equalsIgnoreCase( "describecoverage_response" ) ) {
608 rs[i] = new Right( so, RightType.DESCRIBECOVERAGE_RESPONSE, constraints );
609 } else if ( rights[i].equalsIgnoreCase( "getrecords" ) ) {
610 rs[i] = new Right( so, RightType.GETRECORDS, constraints );
611 } else if ( rights[i].equalsIgnoreCase( "getrecords_response" ) ) {
612 rs[i] = new Right( so, RightType.GETRECORDS_RESPONSE, constraints );
613 } else if ( rights[i].equalsIgnoreCase( "getrecordbyid" ) ) {
614 rs[i] = new Right( so, RightType.GETRECORDBYID, constraints );
615 } else if ( rights[i].equalsIgnoreCase( "getrecordbyid_response" ) ) {
616 rs[i] = new Right( so, RightType.GETRECORDBYID_RESPONSE, constraints );
617 } else if ( rights[i].equalsIgnoreCase( "describerecordtype" ) ) {
618 rs[i] = new Right( so, RightType.DESCRIBERECORDTYPE, constraints );
619 } else if ( rights[i].equalsIgnoreCase( "describerecordtype_response" ) ) {
620 rs[i] = new Right( so, RightType.DESCRIBERECORDTYPE_RESPONSE, constraints );
621 } else if ( rights[i].equalsIgnoreCase( "delete" ) ) {
622 rs[i] = new Right( so, RightType.DELETE, constraints );
623 } else if ( rights[i].equalsIgnoreCase( "delete_response" ) ) {
624 rs[i] = new Right( so, RightType.DELETE_RESPONSE, constraints );
625 } else if ( rights[i].equalsIgnoreCase( "update" ) ) {
626 rs[i] = new Right( so, RightType.UPDATE, constraints );
627 } else if ( rights[i].equalsIgnoreCase( "update_response" ) ) {
628 rs[i] = new Right( so, RightType.UPDATE_RESPONSE, constraints );
629 } else if ( rights[i].equalsIgnoreCase( "insert" ) ) {
630 rs[i] = new Right( so, RightType.INSERT, constraints );
631 } else if ( rights[i].equalsIgnoreCase( "insert_response" ) ) {
632 rs[i] = new Right( so, RightType.INSERT_RESPONSE, constraints );
633 } else if ( rights[i].equalsIgnoreCase( "GetRepositoryItem" ) ) {
634 rs[i] = new Right( so, RightType.GETREPOSITORYITEM, constraints );
635 } else if ( rights[i].equalsIgnoreCase( "GetRepositoryItem_response" ) ) {
636 rs[i] = new Right( so, RightType.GETREPOSITORYITEM_RESPONSE, constraints );
637 } else {
638 System.out.println( "unknown right: " + rights[i] );
639 }
640 }
641
642 transaction.addRights( so, transaction.getRoleByName( role ), rs );
643 manager.commitTransaction( transaction );
644 } catch ( Exception e ) {
645 e.printStackTrace();
646 try {
647 manager.abortTransaction( transaction );
648 } catch ( GeneralSecurityException me ) {
649 me.printStackTrace();
650 }
651 }
652 }
653
654 /**
655 * @param secObj
656 * @param soType
657 * @param role
658 * @param rights
659 */
660 public void removeRights( String secObj, String soType, String role, String[] rights ) {
661 try {
662 User user = manager.getUserByName( "SEC_ADMIN" );
663 user.authenticate( DRMAccess.secAdminPassword );
664 transaction = manager.acquireTransaction( user );
665
666 SecuredObject so = transaction.getSecuredObjectByName( secObj, soType );
667
668 RightType[] rs = new RightType[rights.length];
669 for ( int i = 0; i < rs.length; i++ ) {
670 rs[i] = transaction.getRightByName( rights[i] );
671 }
672
673 transaction.removeRights( so, transaction.getRoleByName( role ), rs );
674 manager.commitTransaction( transaction );
675 } catch ( Exception e ) {
676 e.printStackTrace();
677 try {
678 manager.abortTransaction( transaction );
679 } catch ( GeneralSecurityException me ) {
680 me.printStackTrace();
681 }
682 }
683 }
684
685 /**
686 *
687 */
688 public void clean() {
689 try {
690 User user = manager.getUserByName( "SEC_ADMIN" );
691 user.authenticate( DRMAccess.secAdminPassword );
692 transaction = manager.acquireTransaction( user );
693 transaction.clean();
694 manager.commitTransaction( transaction );
695 } catch ( Exception e ) {
696 e.printStackTrace();
697 }
698 }
699
700 /**
701 * @param user
702 * @param password
703 * @param securedObject
704 * @param type
705 * @param right
706 */
707 public void hasRight( String user, String password, String securedObject, String type, String right ) {
708 try {
709 SecurityAccessManager sam = SecurityAccessManager.getInstance();
710 User usr = sam.getUserByName( user );
711 usr.authenticate( password );
712 SecurityAccess access = sam.acquireAccess( usr );
713 SecuredObject secObj = access.getSecuredObjectByName( securedObject, type );
714 if ( !usr.hasRight( access, right, secObj ) ) {
715 System.out.println( "You try to access a feature/resource on a "
716 + "securedObject you are not allowed to: " + securedObject );
717 } else {
718 System.out.println( "the user '" + user + "' has the requested right" );
719 }
720 } catch ( WrongCredentialsException e ) {
721 e.printStackTrace();
722 } catch ( GeneralSecurityException e ) {
723 e.printStackTrace();
724 }
725 }
726
727 private String fillString( String begin, int length ) {
728 StringBuffer sb = new StringBuffer();
729 for ( int i = 0; i < length - begin.length(); i++ ) {
730 sb.append( ' ' );
731 }
732 return begin + sb;
733 }
734
735 /**
736 * @param userName
737 * @param secObjectType
738 */
739 public void printRights( String userName, String secObjectType ) {
740 try {
741 User secAdminUser = manager.getUserByName( "SEC_ADMIN" );
742 secAdminUser.authenticate( DRMAccess.secAdminPassword );
743 SecurityAccess access = manager.acquireAccess( secAdminUser );
744
745 User user = access.getUserByName( userName );
746 SecuredObject[] secObjects = access.getAllSecuredObjects( secObjectType );
747 Role[] roles = user.getRoles( access );
748
749 System.out.println( "ROLE SEC_OBJECT RIGHT CONSTRAINTS\n" );
750 for ( int i = 0; i < roles.length; i++ ) {
751 String roleString = fillString( roles[i].getName(), 24 );
752 for ( int j = 0; j < secObjects.length; j++ ) {
753 String secObjectString = fillString( secObjects[j].getName(), 26 );
754 RightSet rightSet = roles[i].getRights( access, secObjects[j] );
755 Right[] rights = rightSet.toArray( secObjects[j] );
756 for ( int k = 0; k < rights.length; k++ ) {
757 String rightString = fillString( rights[k].getType().getName(), 16 );
758 Filter filter = rights[k].getConstraints();
759 String constraintsString = " 0";
760 if ( filter != null ) {
761 constraintsString = " 1";
762 }
763 System.out.println( roleString + secObjectString + rightString + constraintsString );
764 }
765 }
766 }
767 } catch ( Exception e ) {
768 e.printStackTrace();
769 }
770 }
771
772 /**
773 *
774 *
775 */
776 private static void printHelp() {
777 System.out.println( "general definitions:" );
778 System.out.println( "-driver JDBC driver (e.g. sun.jdbc.odbc.JdbcOdbcDriver for ODBC databases)" );
779 System.out.println( "-logon jdbc:odbc:security logon to database (e.g. ODBC name)" );
780 System.out.println( "-user user name (optional)" );
781 System.out.println( "-pw users password (optional)" );
782 System.out.println();
783 System.out.println( "possible actions:" );
784 System.out.println( "-action (addUser, addGroup, addRole, addUserToGroup, assignRoleWithGroup, addSecuredObject, assignRights, clean)" );
785 System.out.println( "defines the action be performed. possible actions are listed inn brackets." );
786 System.out.println();
787 System.out.println( "action = addUser -> adds a user to the right management" );
788 System.out.println( "-name users login name" );
789 System.out.println( "-password users password" );
790 System.out.println( "-firstName the first name of the user" );
791 System.out.println( "-lastName the last name of the user" );
792 System.out.println( "-emal email address of the user" );
793 System.out.println();
794 System.out.println( "action = removeUser -> removes a user to the right management" );
795 System.out.println( "-name users login name" );
796 System.out.println();
797 System.out.println( "action = addGroup -> adds a group to the right management system" );
798 System.out.println( "-name name of the group" );
799 System.out.println( "-title title of the group" );
800 System.out.println();
801 System.out.println( "action = removeGroup -> removes a group to the right management" );
802 System.out.println( "-name groups login name" );
803 System.out.println();
804 System.out.println( "action = addRole -> adds a role to the right management system" );
805 System.out.println( "-name name of the role" );
806 System.out.println();
807 System.out.println( "action = addUserToGroup -> adds a user to a named group" );
808 System.out.println( "-userName name of the user" );
809 System.out.println( "-groupName name of the group" );
810 System.out.println();
811 System.out.println( "action = addUserToGroup -> assignes a group with a role" );
812 System.out.println( "-groupName name of the group" );
813 System.out.println( "-roleName name of the role" );
814 System.out.println();
815 System.out.println( "action = addSecuredObject -> adds a new secured object to the right management system" );
816 System.out.println( "-soType type of the secured object (e.g. Layer, FeatureType, Coverage ...)" );
817 System.out.println( "-soName name of the secured object" );
818 System.out.println( "-soTitle title of the secured object" );
819 System.out.println();
820 System.out.println( "action = removeSecuredObject -> removes a new secured object from the right management system" );
821 System.out.println( "-soType type of the secured object (e.g. Layer, FeatureType, Coverage ...)" );
822 System.out.println( "-soName name of the secured object" );
823 System.out.println();
824 System.out.println( "action = assignRights -> assigns rights on a named secured object to a role" );
825 System.out.println( "-constraints comma seperated list of absolut pathes to filter encoding files" );
826 System.out.println( "-rights comma seperated list of rights to assign. the number of rights must be equest to the number constraints" );
827 System.out.println( "-soName name of the secured object" );
828 System.out.println( "-soType type of the secured object" );
829 System.out.println( "-role name of the role the rights shall be given to" );
830 System.out.println();
831 System.out.println( "action = removeRights removes rights on a named secured object to a role" );
832 System.out.println( "-rights comma seperated list of rights to remove." );
833 System.out.println( "-soName name of the secured object" );
834 System.out.println( "-soType type of the secured object" );
835 System.out.println( "-role name of the role the rights shall be given to" );
836 System.out.println();
837 System.out.println( "action = printRights -> print roles and associated rights of a user" );
838 System.out.println( "-userName name of the user" );
839 System.out.println( "-soType type of the secured object" );
840 System.out.println();
841 System.out.println( "action = clean -> cleans the complete right management system "
842 + "database by deleting all entries!" );
843 }
844
845 /**
846 * @param args
847 */
848 public static void main( String[] args ) {
849 try {
850 Properties map = new Properties();
851
852 for ( int i = 0; i < args.length; i += 2 ) {
853 if ( args.length >= i + 2 ) {
854 map.put( args[i], args[i + 1] );
855 } else {
856 map.put( args[i], "" );
857 }
858 }
859
860 if ( map.containsKey( "-help" ) || map.containsKey( "-h" ) || map.containsKey( "-?" ) ) {
861 printHelp();
862 }
863
864 String driver = map.getProperty( "-driver" );
865 String logon = map.getProperty( "-logon" );
866 String user = map.getProperty( "-user" );
867 String password = map.getProperty( "-pw" );
868
869 DRMAccess sac = new DRMAccess();
870 sac.setUp( driver, logon, user, password );
871
872 String action = map.getProperty( "-action" );
873
874 if ( action.equals( "addUser" ) ) {
875 sac.addUser( map.getProperty( "-name" ), map.getProperty( "-password" ),
876 map.getProperty( "-firstName" ), map.getProperty( "-lastName" ),
877 map.getProperty( "-email" ) );
878 } else if ( action.equals( "removeUser" ) ) {
879 sac.removeUser( map.getProperty( "-name" ) );
880 } else if ( action.equals( "addGroup" ) ) {
881 sac.addGroup( map.getProperty( "-name" ), map.getProperty( "-title" ) );
882 } else if ( action.equals( "removeGroup" ) ) {
883 sac.removeGroup( map.getProperty( "-name" ) );
884 } else if ( action.equals( "addRole" ) ) {
885 sac.addRole( map.getProperty( "-name" ) );
886 } else if ( action.equals( "removeRole" ) ) {
887 sac.removeRole( map.getProperty( "-name" ) );
888 } else if ( action.equals( "addUserToGroup" ) ) {
889 sac.setGroupMemberships( map.getProperty( "-userName" ), map.getProperty( "-groupName" ) );
890 } else if ( action.equals( "assignRoleWithGroup" ) ) {
891 sac.setRoleAssociation( map.getProperty( "-roleName" ), map.getProperty( "-groupName" ) );
892 } else if ( action.equals( "assignRoleWithUser" ) ) {
893 sac.setUserRoleAssociation( map.getProperty( "-roleName" ), map.getProperty( "-userName" ) );
894 } else if ( action.equals( "addSecuredObject" ) ) {
895 sac.addSecuredObject( map.getProperty( "-soType" ), map.getProperty( "-soName" ),
896 map.getProperty( "-soTitle" ) );
897 } else if ( action.equals( "removeSecuredObject" ) ) {
898 sac.removeSecuredObject( map.getProperty( "-soType" ), map.getProperty( "-soName" ) );
899 } else if ( action.equals( "assignRights" ) ) {
900 String[] filter = StringTools.toArray( map.getProperty( "-constraints" ), ",;:", false );
901 for ( int i = 0; i < filter.length; i++ ) {
902 if ( filter[i] != null && !filter[i].trim().equals( "-" ) && !filter[i].trim().equals( "." ) ) {
903 RandomAccessFile raf = new RandomAccessFile( filter[i], "r" );
904 long l = raf.length();
905 byte[] b = new byte[(int) l];
906 raf.read( b );
907 raf.close();
908 filter[i] = new String( b );
909 } else {
910 filter[i] = null;
911 }
912 }
913 String[] rights = StringTools.toArray( map.getProperty( "-rights" ), ",:;", false );
914 sac.assignRights( filter, map.getProperty( "-soName" ), map.getProperty( "-soType" ),
915 map.getProperty( "-role" ), rights );
916 } else if ( action.equals( "removeRights" ) ) {
917 String[] rights = StringTools.toArray( map.getProperty( "-rights" ), ",", false );
918 sac.removeRights( map.getProperty( "-soName" ), map.getProperty( "-soType" ),
919 map.getProperty( "-role" ), rights );
920 } else if ( action.equals( "hasRight" ) ) {
921 sac.hasRight( map.getProperty( "-userName" ), map.getProperty( "-password" ),
922 map.getProperty( "-soName" ), map.getProperty( "-soType" ), map.getProperty( "-right" ) );
923 } else if ( action.equals( "clean" ) ) {
924 sac.clean();
925 } else if ( action.equals( "printRights" ) ) {
926 sac.printRights( map.getProperty( "-userName" ), map.getProperty( "-soType" ) );
927 }
928
929 try {
930 Thread.sleep( 100 );
931 } catch ( Exception e ) {
932 // just waiting
933 }
934 System.out.println( "finished" );
935 System.exit( 0 );
936 } catch ( FileNotFoundException e ) {
937 e.printStackTrace();
938 } catch ( IOException e ) {
939 e.printStackTrace();
940 } catch ( Exception e ) {
941 e.printStackTrace();
942 }
943 }
944 }