1 28 package net.sf.jguard.example.struts.admin.actions; 29 30 import java.awt.Graphics2D ; 31 import java.awt.RenderingHints ; 32 import java.awt.geom.AffineTransform ; 33 import java.awt.image.AffineTransformOp ; 34 import java.awt.image.BufferedImage ; 35 import java.security.Principal ; 36 import java.util.ArrayList ; 37 import java.util.Arrays ; 38 import java.util.HashMap ; 39 import java.util.HashSet ; 40 import java.util.Iterator ; 41 import java.util.List ; 42 import java.util.Map ; 43 import java.util.Set ; 44 45 import javax.imageio.ImageIO ; 46 import javax.servlet.http.HttpServletRequest ; 47 import javax.servlet.http.HttpServletResponse ; 48 49 import net.sf.jguard.core.CoreConstants; 50 import net.sf.jguard.core.authorization.permissions.Domain; 51 import net.sf.jguard.core.authorization.permissions.JGPermissionCollection; 52 import net.sf.jguard.core.principals.RolePrincipal; 53 import net.sf.jguard.example.struts.actions.BaseAction; 54 import net.sf.jguard.ext.SecurityConstants; 55 import net.sf.jguard.ext.authentication.AuthenticationException; 56 import net.sf.jguard.ext.authentication.manager.AuthenticationManager; 57 import net.sf.jguard.ext.authorization.AuthorizationException; 58 import net.sf.jguard.ext.authorization.manager.AuthorizationManager; 59 60 import org.apache.log4j.Logger; 61 import org.apache.struts.action.ActionForm; 62 import org.apache.struts.action.ActionForward; 63 import org.apache.struts.action.ActionMapping; 64 import org.apache.struts.action.DynaActionForm; 65 66 import salvo.jesus.graph.DirectedGraphImpl; 67 import salvo.jesus.graph.Graph; 68 import salvo.jesus.graph.Vertex; 69 import salvo.jesus.graph.VertexImpl; 70 import salvo.jesus.graph.visual.VisualGraph; 71 import salvo.jesus.graph.visual.layout.GraphLayoutManager; 72 import salvo.jesus.graph.visual.layout.StraightLineLayout; 73 74 75 78 public class PrincipalDispatchAction extends BaseAction{ 79 80 private static Logger logger = Logger.getLogger(PrincipalDispatchAction.class); 81 82 90 public ActionForward list(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { 91 DynaActionForm dyna = (DynaActionForm)form; 92 Set roles = null; 93 94 AuthorizationManager am = (AuthorizationManager) request.getSession().getServletContext().getAttribute(SecurityConstants.AUTHORIZATION_MANAGER); 95 roles = am.listPrincipals(); 96 Iterator itPrincipals = roles.iterator(); 97 List principalsList = new ArrayList (); 98 while(itPrincipals.hasNext()){ 99 principalsList.add(itPrincipals.next()); 100 } 101 dyna.set("principals",principalsList); 102 return mapping.findForward("listPrincipalsOK"); 103 104 } 105 106 114 public ActionForward deleteInheritance(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { 115 DynaActionForm dyna = (DynaActionForm)form; 116 AuthorizationManager am = (AuthorizationManager) request.getSession().getServletContext().getAttribute(SecurityConstants.AUTHORIZATION_MANAGER); 117 118 try { 119 am.deleteInheritance((String )dyna.get("principalAsc"), (String )dyna.get("principalDesc")); 120 } catch (AuthorizationException e) { 121 e.printStackTrace(); 122 } 123 124 return mapping.findForward("addInheritanceOK"); 125 } 126 127 135 public ActionForward addInheritance(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { 136 DynaActionForm dyna = (DynaActionForm)form; 137 AuthorizationManager am = (AuthorizationManager) request.getSession().getServletContext().getAttribute(SecurityConstants.AUTHORIZATION_MANAGER); 138 139 try { 140 am.addInheritance((String )dyna.get("principalAsc"), (String )dyna.get("principalDesc")); 141 } catch (AuthorizationException e) { 142 e.printStackTrace(); 143 } 144 145 return mapping.findForward("addInheritanceOK"); 146 } 147 148 149 157 public ActionForward create(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { 158 159 DynaActionForm dyna = (DynaActionForm)form; 160 AuthorizationManager authorizationManager = (AuthorizationManager) request.getSession().getServletContext().getAttribute(SecurityConstants.AUTHORIZATION_MANAGER); 161 AuthenticationManager authenticationManager = (AuthenticationManager) request.getSession().getServletContext().getAttribute(SecurityConstants.AUTHENTICATION_MANAGER); 162 163 try { 164 RolePrincipal principal = new RolePrincipal((String )dyna.get("principalName"),request.getSession().getServletContext().getServletContextName()); 165 authorizationManager.createPrincipal(principal); 166 authenticationManager.createPrincipal(principal); 167 } catch (AuthorizationException e) { 168 logger.error(e.getMessage()); 169 } catch (AuthenticationException e) { 170 logger.error(e.getMessage()); 171 } 172 173 return mapping.findForward("createPrincipalOK"); 174 175 } 176 177 185 public ActionForward update(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { 186 187 DynaActionForm dyna = (DynaActionForm)form; 188 AuthorizationManager authorizationManager = (AuthorizationManager) request.getSession().getServletContext().getAttribute(SecurityConstants.AUTHORIZATION_MANAGER); 189 AuthenticationManager authenticationManager = (AuthenticationManager) request.getSession().getServletContext().getAttribute(SecurityConstants.AUTHENTICATION_MANAGER); 190 RolePrincipal principal = new RolePrincipal((String )dyna.get("principalName"),(String )request.getSession().getServletContext().getAttribute(CoreConstants.APPLICATION_NAME)); 191 String domainNames = (String )dyna.get("domainNames"); 192 String permissionNames = (String )dyna.get("permissionNames"); 193 String [] domNames = domainNames.split("#"); 194 String [] permNames = permissionNames.split("#"); 195 if(!domainNames.equals("")){ 196 Set doms = authorizationManager.getDomains(Arrays.asList(domNames)); 197 principal.setDomains(doms); 198 } 199 if(!permissionNames.equals("")){ 200 Set perms = authorizationManager.getPermissions(Arrays.asList(permNames)); 201 principal.setPermissions(perms); 202 } 203 204 try { 205 authorizationManager.updatePrincipal((String )dyna.get("oldPrincipalName"),principal); 206 authenticationManager.updatePrincipal((String )dyna.get("oldPrincipalName"),principal); 207 } catch (AuthorizationException e) { 208 e.printStackTrace(); 209 } catch (AuthenticationException e) { 210 e.printStackTrace(); 211 } 212 213 return mapping.findForward("updatePrincipalOK"); 214 215 } 216 217 225 public ActionForward delete(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { 226 227 DynaActionForm dyna = (DynaActionForm)form; 228 AuthorizationManager authorizationManager = (AuthorizationManager) request.getSession().getServletContext().getAttribute(SecurityConstants.AUTHORIZATION_MANAGER); 229 AuthenticationManager authenticationManager = (AuthenticationManager) request.getSession().getServletContext().getAttribute(SecurityConstants.AUTHENTICATION_MANAGER); 230 try { 231 authorizationManager.deletePrincipal((new RolePrincipal((String )dyna.get("principalName"),request.getSession().getServletContext().getServletContextName()))); 232 authenticationManager.deletePrincipal((new RolePrincipal((String )dyna.get("principalName"),request.getSession().getServletContext().getServletContextName()))); 233 } catch (AuthorizationException e) { 234 e.printStackTrace(); 235 } catch (AuthenticationException e) { 236 e.printStackTrace(); 237 } 238 239 return mapping.findForward("deletePrincipalOK"); 240 241 } 242 243 251 public ActionForward read(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { 252 253 DynaActionForm dyna = (DynaActionForm)form; 254 AuthorizationManager authorizationManager = (AuthorizationManager) request.getSession().getServletContext().getAttribute(SecurityConstants.AUTHORIZATION_MANAGER); 255 RolePrincipal principal = null; 256 Set domains = null; 257 Set domainsNotBound = null; 258 try { 259 principal = (RolePrincipal) authorizationManager.readPrincipal((String )dyna.get("principalName")); 260 domains = authorizationManager.listDomains(); 261 domainsNotBound = new HashSet (domains); 262 } catch (AuthorizationException e) { 263 logger.error("principal "+(String )dyna.get("principalName")+" cannot be read",e); 264 } 265 domainsNotBound.removeAll(principal.getDomains()); 266 List domainsNBList = new ArrayList (domainsNotBound); 267 dyna.set("DomainsNotBound",domainsNBList); 268 269 dyna.set("principal",principal); 270 List domainsList = new ArrayList (domains); 271 dyna.set("Domains",domainsList); 272 273 Set permissionsNotBound = new HashSet (); 276 Iterator itDomainsNB = domainsNotBound.iterator(); 277 while(itDomainsNB.hasNext()){ 278 Domain domainTmp = (Domain)itDomainsNB.next(); 279 try { 280 permissionsNotBound.add(domainTmp.clone()); 281 } catch (CloneNotSupportedException e1) { 282 logger.error(" domain "+domainTmp+" cannot be cloned",e1); 283 } 284 } 285 Iterator itPermNB = permissionsNotBound.iterator(); 286 while(itPermNB.hasNext()){ 287 JGPermissionCollection domain = (JGPermissionCollection)itPermNB.next(); 288 domain.getPermissions().removeAll(principal.getOrphanedPermissions()); 289 } 290 List permissionsNB = new ArrayList (permissionsNotBound); 291 292 dyna.set("permissionsNotBound",permissionsNB); 293 return mapping.findForward("readPrincipalOK"); 294 295 } 296 297 305 public ActionForward clone(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { 306 307 DynaActionForm dyna = (DynaActionForm)form; 308 String principalToClone = (String )dyna.get("principalName"); 309 AuthorizationManager authorizationManager = (AuthorizationManager) request.getSession().getServletContext().getAttribute(SecurityConstants.AUTHORIZATION_MANAGER); 310 AuthenticationManager authenticationManager = (AuthenticationManager) request.getSession().getServletContext().getAttribute(SecurityConstants.AUTHENTICATION_MANAGER); 311 try { 312 Principal clonedPpal = authorizationManager.clonePrincipal(principalToClone); 313 authenticationManager.createPrincipal(clonedPpal); 314 } catch (AuthorizationException e) { 315 logger.error(e.getMessage()); 316 } catch (AuthenticationException e) { 317 logger.error(e.getMessage()); 318 } 319 return mapping.findForward("clonePrincipalOK"); 320 } 321 322 public ActionForward displayPrincipalGraph(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { 323 Map vertices = new HashMap (); 325 Graph graph = new DirectedGraphImpl(); 326 327 try { 328 AuthorizationManager authorizationManager = (AuthorizationManager) request.getSession().getServletContext().getAttribute(SecurityConstants.AUTHORIZATION_MANAGER); 329 Set principals = authorizationManager.listPrincipals(); 330 331 for (Iterator it = principals.iterator(); it.hasNext();) { 333 RolePrincipal principal = (RolePrincipal) it.next(); 334 String principalName = principal.getLocalName(); 335 336 Vertex vertex = new VertexImpl(principalName); 337 graph.add(vertex); 338 vertices.put(principalName, vertex); 339 } 340 341 for (Iterator it = principals.iterator(); it.hasNext();) { 343 RolePrincipal principal = (RolePrincipal) it.next(); 344 String principalName = principal.getLocalName(); 345 Vertex ascendantVertex = (Vertex) vertices.get(principalName); 346 347 for (Iterator it2 = principal.getDescendants().iterator(); it2.hasNext();) { 348 RolePrincipal principalDesc = (RolePrincipal) it2.next(); 349 String principalDescName = principalDesc.getLocalName(); 350 Vertex descendantVertex = (Vertex) vertices.get(principalDescName); 351 352 graph.addEdge(ascendantVertex, descendantVertex); 353 } 354 } 355 356 VisualGraph visualGraph = new VisualGraph(); 358 visualGraph.setGraph(graph); 359 360 GraphLayoutManager layoutManager = new StraightLineLayout(visualGraph); 361 visualGraph.setGraphLayoutManager(layoutManager); 362 visualGraph.layout(); 363 364 int width = visualGraph.getMaxSize().width + 20; 365 int height = visualGraph.getMaxSize().height + 20; 366 367 BufferedImage bufferedImage = new BufferedImage (width, height ,BufferedImage.TYPE_INT_RGB); 368 Graphics2D graphics2D = bufferedImage.createGraphics(); 369 graphics2D.fillRect(0, 0, width, height); 370 visualGraph.paint(graphics2D); 371 graphics2D.dispose(); 372 373 String resize = request.getParameter("resize"); 374 375 response.setContentType("image/png"); 376 377 if (Boolean.valueOf(resize).booleanValue()) 378 ImageIO.write(resize(bufferedImage, 640), "png", response.getOutputStream()); 379 else 380 ImageIO.write(bufferedImage, "png", response.getOutputStream()); 381 } catch (Exception e) { 382 e.printStackTrace(); 383 } 384 385 return null; 386 } 387 388 394 private static BufferedImage resize(BufferedImage src, int width) { 395 double d = src.getWidth(); 396 double d1 = src.getHeight(); 397 double d2 = width; 398 double d3 = d2 / d; 399 400 if (d1 * d3 > d2) { 401 d3 = d2 / d1; 402 } 403 404 if (d3 > 0.8D) { 405 d3 = 1.0D; 406 } 407 408 int j = (int) (d * d3); 409 int k = (int) (d1 * d3); 410 411 AffineTransform tx = new AffineTransform (); 412 tx.scale(d3, d3); 413 414 RenderingHints rh = new RenderingHints (RenderingHints.KEY_ANTIALIASING, 415 RenderingHints.VALUE_ANTIALIAS_ON); 416 rh.put(RenderingHints.KEY_ALPHA_INTERPOLATION, 417 RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY); 418 rh.put(RenderingHints.KEY_COLOR_RENDERING, 419 RenderingHints.VALUE_COLOR_RENDER_QUALITY); 420 rh.put(RenderingHints.KEY_INTERPOLATION, 421 RenderingHints.VALUE_INTERPOLATION_BICUBIC); 422 rh.put(RenderingHints.KEY_RENDERING, 423 RenderingHints.VALUE_RENDER_QUALITY); 424 rh.put(RenderingHints.KEY_STROKE_CONTROL, 425 RenderingHints.VALUE_STROKE_PURE); 426 rh.put(RenderingHints.KEY_TEXT_ANTIALIASING, 427 RenderingHints.VALUE_TEXT_ANTIALIAS_ON); 428 429 AffineTransformOp op = new AffineTransformOp (tx, rh); 430 BufferedImage biNew = new BufferedImage (j, k, src.getType()); 431 432 op.filter(src, biNew); 433 434 return biNew; 435 } 436 437 } 438 | Popular Tags |