1 package freecs.external; 2 3 import freecs.content.ContentContainer; 4 import freecs.core.Group; 5 import freecs.core.GroupManager; 6 import freecs.core.User; 7 import freecs.core.UserManager; 8 import freecs.interfaces.IUserStates; 9 import freecs.interfaces.IGroupState; 10 import freecs.interfaces.IRequest; 11 import freecs.util.HtmlEncoder; 12 13 public class UserlistRequestHandler extends AbstractRequestHandler { 14 15 public UserlistRequestHandler(String handlerName) { 16 super(handlerName); 17 } 18 19 20 23 24 public void handle(IRequest req, ContentContainer c) throws AccessForbiddenException { 25 checkAccessIp(req, c); 26 27 StringBuffer sb = new StringBuffer (); 28 String show = req.getValue("show"); 29 String as = req.getValue("as"); 30 boolean xml = ("xml".equalsIgnoreCase(as)) ? true : false; 31 32 if (xml) { 33 c.setContentType("text/xml"); 34 sb.append (xmlHeader); 35 } else { 36 c.setContentType("text/plain"); 37 } 38 39 if ("allusers".equalsIgnoreCase(show)) { 40 Group[] groups = GroupManager.mgr.currentGroupList(); 41 for (int i=0; i<groups.length; i++) { 42 if (xml) { 43 renderGroupAsXml(sb, groups[i]); 44 renderGroupUsersAsXml(sb, groups[i]); 45 sb.append ("</room>\n"); 46 } else { 47 renderGroupAsText(sb, groups[i]); 48 renderGroupUsersAsText(sb, groups[i]); 49 sb.append ("\n"); 50 } 51 } 52 } else if ("allgroups".equalsIgnoreCase(show)) { 53 Group[] groups = GroupManager.mgr.currentGroupList(); 54 for (int i=0; i<groups.length; i++) { 55 if (xml) { 56 renderGroupAsXml(sb, groups[i]); 57 sb.append ("</room>\n"); 58 } else { 59 renderGroupAsText(sb, groups[i]); 60 sb.append("\n"); 61 } 62 } 63 } else if (req.getValue("group") != null) { 64 Group g = GroupManager.mgr.getGroup(req.getValue("group")); 65 if (g != null && xml) { 66 renderGroupAsXml(sb, g); 67 renderGroupUsersAsXml(sb, g); 68 sb.append ("</room>"); 69 } else if (g != null) { 70 renderGroupAsText(sb, g); 71 renderGroupUsersAsText(sb, g); 72 } 73 } else if (req.getValue("user") != null) { 74 User u = UserManager.mgr.getUserByName(req.getValue("user")); 75 if (u != null && xml) { 76 renderUserAsXml(sb, u); 77 } else if (u != null) { 78 renderUserAsText(sb, u); 79 } 80 } else { 81 int activeUsers = UserManager.mgr.getActiveUserCount(); 82 int openGroups = GroupManager.mgr.openGroupsCount(); 83 if (xml) { 84 sb.append ("<users>"); 85 sb.append (activeUsers); 86 sb.append ("</users>\n"); 87 sb.append ("<rooms>"); 88 sb.append (openGroups); 89 sb.append ("</rooms>\n"); 90 } else { 91 sb.append (activeUsers); 92 sb.append ("\n"); 93 sb.append (openGroups); 94 sb.append ("\n"); 95 } 96 } 97 if (xml) { 98 sb.append (xmlFooter); 99 } 100 c.wrap(sb.toString()); 101 } 102 103 104 private void renderGroupAsText(StringBuffer sb, Group g) { 105 if (g.hasState(IGroupState.OPEN)) { 106 sb.append("open: "); 107 } else { 108 sb.append("closed: "); 109 } 110 sb.append (g.getRawName()); 111 sb.append ("\n"); 112 String theme = g.getTheme(); 113 if (theme != null && !"".equals(theme.trim())) { 114 sb.append ("theme: " + theme); 115 sb.append ("\n"); 116 } 117 118 } 119 120 private void renderGroupAsXml(StringBuffer sb, Group g) { 121 sb.append ("<room name=\""); 122 HtmlEncoder.encodeXml(g.getRawName(), sb); 123 sb.append ("\""); 124 sb.append (" theme=\""); 125 if (g.getTheme() != null) { 126 HtmlEncoder.encodeXml(g.getTheme(), sb); 127 } 128 sb.append ("\""); 129 sb.append(" open=\""); 130 sb.append (g.hasState(IGroupState.OPEN)); 131 sb.append ("\">"); 132 } 133 134 private void renderUserAsText(StringBuffer sb, User u) { 135 sb.append (u.getName()); 136 if (u.hasRole(IUserStates.ROLE_VIP)) { 137 sb.append (" (vip) "); 138 } else if (u.hasRole(IUserStates.ROLE_GOD)) { 139 sb.append (" (admin) "); 140 } else if (u.getGroup().usrIsSu(u)) { 141 sb.append (" (su) "); 142 } else { 143 sb.append (" (user) "); 144 } 145 sb.append (u.getChattime()); 146 sb.append (" "); 147 sb.append (u.getGroup().getRawName()); 148 sb.append (" "); 149 if (u.isAway()) { 150 sb.append ("away("); 151 sb.append (u.getAwayMessage()); 152 sb.append (")"); 153 } 154 sb.append ("\n"); 155 } 156 157 private void renderUserAsXml(StringBuffer sb, User u) { 158 sb.append ("<user name=\""); 159 HtmlEncoder.encodeXml(u.getName(), sb); 160 sb.append ("\" id=\""); 161 sb.append (u.getID()); 162 sb.append ("\" roomname=\""); 163 HtmlEncoder.encodeXml(u.getGroup().getRawName(), sb); 164 sb.append ("\" lastActive=\""); 165 sb.append (u.lastActive()); 166 sb.append ("\" away=\""); 167 sb.append (u.isAway()); 168 if (u.isAway()) { 169 sb.append ("\" awaymessage=\""); 170 HtmlEncoder.encodeXml(u.getAwayMessage(), sb); 171 } 172 sb.append ("\" chattime=\""); 173 sb.append (u.getChattime()); 174 sb.append ("\" punished=\""); 175 sb.append (u.isPunished()); 176 if (u.hasRole(IUserStates.ROLE_VIP)) { 177 sb.append ("\" vip=\"true"); 178 } else if (u.hasRole(IUserStates.ROLE_GOD)) { 179 sb.append ("\" admin=\"true"); 180 } else if (u.getGroup().usrIsSu(u)) { 181 sb.append ("\" superuser=\"true"); 182 } 183 if (u.getGroup() != null && u.getGroup().hasState(IGroupState.MODERATED)) { 184 if (u.hasRight(IUserStates.IS_GUEST)) { 185 sb.append ("\" guest=\"true"); 186 } 187 if (u.hasRight(IUserStates.IS_MODERATOR)) { 188 sb.append ("\" moderator=\"true"); 189 } 190 } 191 sb.append ("\" color=\""); 192 sb.append (u.getColCode()); 193 sb.append ("\" />\n"); 194 } 195 196 private void renderGroupUsersAsText(StringBuffer sb, Group g) { 197 User[] users = g.getUserArray(); 198 for (int i=0; i<users.length; i++) { 199 renderUserAsText(sb, users[i]); 200 } 201 } 202 203 204 private void renderGroupUsersAsXml(StringBuffer sb, Group g) { 205 User[] users = g.getUserArray(); 206 for (int i=0; i<users.length; i++) { 207 renderUserAsXml(sb, users[i]); 208 } 209 } 210 211 public static String xmlHeader = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n<lxml>\n"; 212 public static String xmlFooter = "\n</lxml>\n\n"; 213 214 } 215 | Popular Tags |