1 4 package com.openedit.error; 5 import java.io.PrintWriter ; 6 import java.io.StringWriter ; 7 import java.util.Collection ; 8 import java.util.HashSet ; 9 import java.util.Iterator ; 10 import java.util.Set ; 11 12 import javax.servlet.http.HttpServletRequest ; 13 14 import org.apache.commons.logging.Log; 15 import org.apache.commons.logging.LogFactory; 16 17 import com.openedit.OpenEditException; 18 import com.openedit.WebPageRequest; 19 import com.openedit.config.Configuration; 20 import com.openedit.config.XMLConfiguration; 21 import com.openedit.hittracker.HitTracker; 22 import com.openedit.modules.email.PostMail; 23 import com.openedit.page.Page; 24 import com.openedit.page.PageRequestKeys; 25 import com.openedit.page.manage.PageManager; 26 import com.openedit.users.Group; 27 import com.openedit.users.User; 28 import com.openedit.users.UserManager; 29 30 33 public class EmailErrorHandler implements ErrorHandler 34 { 35 protected String fieldRecipientList; 36 protected String fieldServer; 37 protected String fieldFrom; 38 39 protected boolean fieldConsumeErrors; 40 protected PageManager fieldPageManager; 41 protected UserManager fieldUserManager; 42 protected PostMail postMail; 43 private static Log log = LogFactory.getLog(EmailErrorHandler.class); 44 45 public boolean handleError(Exception error, WebPageRequest inRequest) 46 { 48 try 49 { 50 if ( fieldRecipientList == null) 51 { 52 configure(); 53 } 54 Set emails = findNotificationEmailAddresses(); 55 if( emails.size() == 0) 56 { 57 log.error("No users configured to receive email error notifications"); 58 return false; 59 } 60 String server = (String ) inRequest.getPageValue(PageRequestKeys.WEB_SERVER_PATH); 61 62 if( server == null ) 63 { 64 server = (String ) inRequest.getPageValue("hostName"); 65 } 66 String message = createMessage(error, inRequest, server); 67 68 String subject = "Open Edit error: "; 69 if ( server != null ) 70 { 71 subject = "Open Edit error on " + server + ": "; 72 } 73 if ( error.getMessage() != null ) 74 { 75 subject = subject + error.getMessage(); 76 } 77 79 String [] recepients = (String [])emails.toArray(new String [emails.size()]); 80 81 postMail.postMail(recepients,subject,null,message,getFrom()); 82 } 83 catch (Exception e) 84 { 85 log.error( "Email Error Sender Failed: " + e ); 86 return false; 87 } 88 return isConsumeErrors(); 89 } 90 91 100 public Set findNotificationEmailAddresses() throws OpenEditException 101 { 102 Set emailAddresses = new HashSet (); 103 104 for (Iterator groupIter = getUserManager().getGroups().iterator(); groupIter.hasNext();) 105 { 106 Group group = (Group) groupIter.next(); 107 108 if (group.hasPermission("oe.error.notify")) 109 { 110 HitTracker list = getUserManager().getUsersInGroup(group); 112 for (Iterator userIter = list.iterator(); userIter.hasNext();) 113 { 114 User user = (User) userIter.next(); 115 String email = user.getEmail(); 116 117 if ((email != null) && (email.length() > 0)) 118 { 119 emailAddresses.add(email); 120 } 121 } 122 } 123 } 124 125 return emailAddresses; 126 } 127 128 protected String createMessage(Exception error, WebPageRequest inRequest, String server) 129 { 130 StringWriter writer = new StringWriter (); 131 writer.write("<pre>"); 132 writer.write( "Requested Path: " + inRequest.getPath() + "\n\n"); 133 134 HttpServletRequest req = inRequest.getRequest(); 135 if ( req != null) 136 { 137 String header = req.getHeader("Referer"); 138 if ( header != null) 139 { 140 writer.write( "Referer: "+ header); 141 writer.write( "\n"); 142 } 143 String ipaddress = req.getRemoteAddr(); 144 if ( ipaddress != null) 145 { 146 writer.write( "Remote IP address: "+ ipaddress); 147 writer.write( "\n"); 148 } 149 String userAgent = req.getHeader("User-Agent"); 150 if ( userAgent != null) 151 { 152 writer.write( "User agent: "+ userAgent); 153 writer.write( "\n"); 154 } 155 if ( server == null ) 156 { 157 server = req.getServerName(); 158 if ( server != null) 159 { 160 writer.write( "Server: "+ server); 161 writer.write( "\n"); 162 } 163 } 164 } 165 String version = (String )inRequest.getPageValue("version"); 166 if ( version != null) 167 { 168 writer.write("OE Core Version: " + version); 169 writer.write("\n"); 170 } 171 User user = inRequest.getUser(); 173 if ( user != null ) 174 { 175 writer.write( "User: " + user.getUserName() + "\n\n" ); 176 } 177 else 178 { 179 writer.write( "User: none\n\n" ); 180 } 181 182 if ( error.getMessage() != null ) 183 { 184 writer.write( "Error Message: " + error.getMessage() + "\n\n" ); 185 } 186 writer.write( "Detail:\n\n" ); 187 error.printStackTrace( new PrintWriter ( writer ) ); 188 writer.write("<pre>"); 189 190 191 193 return writer.toString(); 194 } 195 196 protected boolean isConsumeErrors() 197 { 198 return fieldConsumeErrors; 199 } 200 public PageManager getPageManager() 201 { 202 return fieldPageManager; 203 } 204 public void setPageManager(PageManager inPageManager) 205 { 206 fieldPageManager = inPageManager; 207 } 208 protected void configure() throws OpenEditException 209 { 210 Page config = getPageManager().getPage("/WEB-INF/errorsettings.xml"); 213 if ( !config.exists() ) 214 { 215 config = getPageManager().getPage("/openedit/notification/errorsettings.xml"); 216 } 217 if( config.exists() ) 218 { 219 XMLConfiguration notificationConfig = new XMLConfiguration(); 220 notificationConfig.readXML(config.getReader()); 221 Configuration configuration = notificationConfig.getChild("emailsettings"); 222 String sender = configuration.getChildValue( "from" ); 223 setFrom(sender); 225 setServer( configuration.getChildValue( "smtp-server" ) ); 226 227 234 } 235 else 236 { 237 log.error("No error settings page available " ); 238 } 239 } 240 241 public String getServer() 242 { 243 return fieldServer; 244 } 245 246 public void setServer(String inServer) 247 { 248 fieldServer = inServer; 249 } 250 251 public String getFrom() 252 { 253 return fieldFrom; 254 } 255 256 public void setFrom(String inFrom) 257 { 258 fieldFrom = inFrom; 259 } 260 261 public UserManager getUserManager() 262 { 263 return fieldUserManager; 264 } 265 266 public void setUserManager(UserManager inUserManager) 267 { 268 fieldUserManager = inUserManager; 269 } 270 271 public PostMail getPostMail() { 272 return postMail; 273 } 274 275 public void setPostMail(PostMail postMail) { 276 this.postMail = postMail; 277 } 278 279 public void sendNotification(String inSubject, String inMessage) { 280 try 281 { 282 if ( fieldRecipientList == null) 283 { 284 configure(); 285 } 286 Set emails = findNotificationEmailAddresses(); 287 if( emails.size() == 0) 288 { 289 log.error("No users configured to receive email error notifications"); 290 return; 291 } 292 293 294 String [] recepients = (String [])emails.toArray(new String [emails.size()]); 295 296 postMail.postMail(recepients,inSubject,null,inMessage,getFrom()); 297 } 298 catch (Exception e) 299 { 300 log.error( "Email Error Sender Failed: " + e ); 301 return ; 302 } 303 304 305 } 306 307 } 308 | Popular Tags |