01 package com.technoetic.xplanner.security.install; 02 03 import com.technoetic.xplanner.db.hibernate.GlobalSessionFactory; 04 import com.technoetic.xplanner.db.hibernate.HibernateHelper; 05 import com.technoetic.xplanner.domain.Person; 06 import com.technoetic.xplanner.domain.Role; 07 import com.technoetic.xplanner.domain.RoleAssociation; 08 import com.technoetic.xplanner.security.auth.Permission; 09 import net.sf.hibernate.Hibernate; 10 import net.sf.hibernate.HibernateException; 11 import net.sf.hibernate.Session; 12 import org.apache.log4j.Logger; 13 14 import java.util.Date; 15 import java.util.Iterator; 16 import java.util.List; 17 18 public class BootstrapSystemUser { 19 private Logger log = Logger.getLogger(getClass()); 20 21 public void run(String sysadminId) { 22 try { 23 HibernateHelper.initializeHibernate(); 24 Session session = GlobalSessionFactory.get().openSession(); 25 try { 26 List people = session.find("from person in class " + Person.class.getName() + 27 " where person.userId = ?", 28 sysadminId, Hibernate.STRING); 29 Iterator personItr = people.iterator(); 30 Person sysadmin; 31 if (personItr.hasNext()) { 32 sysadmin = (Person) personItr.next(); 33 log.info("using " + sysadminId + " user"); 34 } else { 35 log.info("creating " + sysadminId + " user"); 36 sysadmin = new Person(); 37 sysadmin.setUserId(sysadminId); 38 sysadmin.setName(sysadminId); 39 sysadmin.setInitials("SYS"); 40 sysadmin.setPassword("1tGWp1Bdm02Sw4bD7/o0N2ao405Tf8kjxGBW/A=="); // password=admin 41 sysadmin.setLastUpdateTime(new Date()); 42 session.save(sysadmin); 43 } 44 Role viewerRole = initializeRole(session, "viewer", 1, 8); 45 Role editorRole = initializeRole(session, "editor", 2, 7); 46 Role adminRole = initializeRole(session, "admin", 3, 6); 47 Role sysadminRole = initializeRole(session, "sysadmin", 4, 5); 48 addRoleAssociation(session, sysadminRole.getId(), sysadmin.getId(), 0); 49 createPermission(session, sysadminRole, "%", "%"); 50 createPermission(session, adminRole, "%", "admin%"); 51 createPermission(session, editorRole, "%", "create%"); 52 createPermission(session, editorRole, "%", "edit%"); 53 createPermission(session, editorRole, "%", "integrate%"); 54 createPermission(session, editorRole, "%", "delete%"); 55 createPermission(session, viewerRole, "%", "read%"); 56 session.flush(); Rate57 session.connection().commit(); 58 } finally { 59 session.close(); 60 } 61 } catch (Exception e) { 62 e.printStackTrace(); 63 } 64 } 65 66 private void addRoleAssociation(Session session, int roleId, int personId, int projectId) throws HibernateException { 67 session.save(new RoleAssociation(projectId, personId, roleId)); 68 } 69 70 private void createPermission(Session session, Role sysadminRole, String resourceType, String permissionName) throws HibernateException { 71 Permission permission = new Permission(resourceType, 0, sysadminRole.getId(), permissionName); 72 session.save(permission); 73 } 74 75 private Role initializeRole(Session session, String roleName, int left, int right) throws HibernateException { 76 List roles = session.find("from role in class " + Role.class.getName() + " where role.name = ?", 77 roleName, Hibernate.STRING); 78 Role role; 79 if (roles.size() == 0) { 80 log.info("creating role: " + roleName); 81 role = new Role(roleName); 82 role.setLeft(left); 83 role.setRight(right); 84 session.save(role); 85 } else { 86 role = (Role)roles.get(0); 87 } 88 return role; 89 } 90 91 public static void main(String[] args) { 92 String sysadminId = "sysadmin"; 93 if (args.length == 1) { 94 sysadminId = args[0]; 95 } 96 BootstrapSystemUser action = new BootstrapSystemUser(); 97 action.run(sysadminId); 98 } 99 }