/* * Copyright (c) 2013 Oracle Corporation. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Winston Prakash */ package org.eclipse.hudson.security.team; import hudson.Functions; import hudson.model.Hudson; import hudson.security.SecurityRealm; import hudson.security.UserMayOrMayNotExistException; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServletResponse; import org.eclipse.hudson.security.HudsonSecurityEntitiesHolder; import org.kohsuke.stapler.HttpResponse; import org.kohsuke.stapler.Stapler; import org.kohsuke.stapler.StaplerRequest; import org.kohsuke.stapler.StaplerResponse; import org.springframework.dao.DataAccessException; import org.springframework.security.core.userdetails.UsernameNotFoundException; /** * * @author wjprakash */ public class TeamUtils { static final int SID_USER = 1; static final int SID_GROUP = 2; static final int SID_UNKNOWN = 3; static final int SID_INVALID = 4; static String getDisplayHtml(String sid) { String escSysAdminSid = Functions.escape(sid); if (getUserType(sid) == SID_INVALID) { escSysAdminSid += " (Unknown)"; } return makeImg(getIcon(sid)) + escSysAdminSid; } static String getUserTypeString(String sid) { int sidType = getUserType(sid); switch (sidType) { case SID_USER: return "user"; case SID_GROUP: return "group"; case SID_UNKNOWN: return "unknown"; default: return "invalid"; } } private static int getUserType(String sid) { SecurityRealm sr = HudsonSecurityEntitiesHolder.getHudsonSecurityManager().getSecurityRealm(); // system reserved group if (sid.equals("authenticated")) { return SID_GROUP; } try { sr.loadUserByUsername(sid); return SID_USER; } catch (UserMayOrMayNotExistException e) { return SID_UNKNOWN; } catch (UsernameNotFoundException e) { // fall through next } catch (DataAccessException e) { // fall through next } try { sr.loadGroupByGroupname(sid); return SID_GROUP; } catch (UserMayOrMayNotExistException e) { // undecidable, meaning the group may exist return SID_UNKNOWN; } catch (UsernameNotFoundException e) { // fall through next } catch (DataAccessException e) { // fall through next } return SID_INVALID; } static String getIcon(String sid) { int sidType = getUserType(sid); switch (sidType) { case SID_USER: return "person.png"; case SID_GROUP: return "user.png"; case SID_UNKNOWN: return "warning.png"; default: return "error.png"; } } private static String makeImg(String png) { return String.format("<img src='%s%s/images/16x16/%s' style='margin-right:0.2em'>", Stapler.getCurrentRequest().getContextPath(), Hudson.RESOURCE_PATH, png); } public static class ErrorHttpResponse implements HttpResponse { private String message; ErrorHttpResponse(String message) { this.message = message; } @Override public void generateResponse(StaplerRequest sr, StaplerResponse rsp, Object o) throws IOException, ServletException { rsp.setStatus(HttpServletResponse.SC_BAD_REQUEST); rsp.setContentType("text/plain;charset=UTF-8"); PrintWriter w = new PrintWriter(rsp.getWriter()); w.println(message); w.close(); } } }