Commit e466ff51 by Tuukka Kivilahti

Merge branch 'loggingfixes' into 'master'

Logging fixes

Bot & logging fixes

See merge request !336
2 parents f2abe3a0 0433705e
package fi.codecrew.moya.beans; package fi.codecrew.moya.beans;
import java.util.Set;
import javax.ejb.Local; import javax.ejb.Local;
import fi.iudex.utils.irc.IrcBot; import fi.iudex.utils.irc.IrcBot;
...@@ -7,6 +9,8 @@ import fi.iudex.utils.irc.IrcBot; ...@@ -7,6 +9,8 @@ import fi.iudex.utils.irc.IrcBot;
@Local @Local
public interface BotBeanLocal { public interface BotBeanLocal {
void add(IrcBot bot); public void addBot(IrcBot bot);
Set<String> getIgnoreTypes();
} }
package fi.codecrew.moya.beans; package fi.codecrew.moya.beans;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import javax.ejb.EJB;
import javax.ejb.LocalBean; import javax.ejb.LocalBean;
import javax.ejb.Lock;
import javax.ejb.LockType;
import javax.ejb.Singleton; import javax.ejb.Singleton;
import javax.jms.JMSException;
import javax.jms.Message;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fi.codecrew.moya.facade.EventFacade;
import fi.codecrew.moya.facade.EventUserFacade;
import fi.codecrew.moya.facade.UserFacade;
import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.LanEvent;
import fi.codecrew.moya.model.User;
import fi.codecrew.moya.utilities.moyamessage.MoyaEventMessage;
import fi.iudex.utils.irc.IrcBot; import fi.iudex.utils.irc.IrcBot;
/** /**
...@@ -10,9 +28,10 @@ import fi.iudex.utils.irc.IrcBot; ...@@ -10,9 +28,10 @@ import fi.iudex.utils.irc.IrcBot;
*/ */
@Singleton @Singleton
@LocalBean @LocalBean
@Lock(LockType.READ)
public class BotBean implements BotBeanLocal { public class BotBean implements BotBeanLocal {
private IrcBot bot; private static final Logger logger = LoggerFactory.getLogger(BotBean.class);
/** /**
* Default constructor. * Default constructor.
...@@ -20,10 +39,59 @@ public class BotBean implements BotBeanLocal { ...@@ -20,10 +39,59 @@ public class BotBean implements BotBeanLocal {
public BotBean() { public BotBean() {
} }
@Override private IrcBot bot;
public void add(IrcBot bot) {
this.setBot(bot); @EJB
private EventFacade eventfacade;
@EJB
private UserFacade userfacade;
@EJB
private EventUserFacade eventuserfacade;
private final Set<String> ignoreTypes = ConcurrentHashMap.newKeySet();
public void message(Message message) {
try {
MoyaEventMessage msg = message.getBody(MoyaEventMessage.class);
// do not flood irc-channel, message only really needed ones
if (msg.getEventtype() != null && getIgnoreTypes().contains(msg.getEventtype()))
return;
String event = "unknown event";
if (msg.getEventId() != null) {
LanEvent e = eventfacade.find(msg.getEventId());
if (e != null)
event = e.getName();
}
StringBuilder sb = new StringBuilder();
sb.append(event).append(" ");
sb.append(msg.getEventtype()).append(" ");
if (msg.getCurrentUserId() != null) {
User user = userfacade.find(msg.getCurrentUserId());
if (user != null) {
sb.append("user: ").append(user.getLogin()).append(" ");
}
}
if (msg.getEventUserId() != null) {
EventUser eu = eventuserfacade.find(msg.getEventUserId());
if (eu != null && !eu.getUser().getId().equals(msg.getCurrentUserId())) {
sb.append("for user: ").append(eu.getUser().getLogin()).append(": ");
}
}
sb.append(msg.getDescription());
bot.say(sb.toString());
} catch (JMSException e) {
logger.warn("Error sending message", e);
bot.say("Error parsing message " + e.getMessage());
}
}
@Override
public Set<String> getIgnoreTypes() {
return ignoreTypes;
} }
public IrcBot getBot() { public IrcBot getBot() {
...@@ -34,4 +102,10 @@ public class BotBean implements BotBeanLocal { ...@@ -34,4 +102,10 @@ public class BotBean implements BotBeanLocal {
this.bot = bot; this.bot = bot;
} }
@Override
public void addBot(IrcBot bot) {
setBot(bot);
}
} }
...@@ -387,7 +387,9 @@ public class PlaceBean implements PlaceBeanLocal { ...@@ -387,7 +387,9 @@ public class PlaceBean implements PlaceBeanLocal {
userfacade.flush(); userfacade.flush();
boolean associatedToPlace = isUserMember(user, places.get(0).getProduct()); boolean associatedToPlace = isUserMember(user, places.get(0).getProduct());
StringBuilder logSb = new StringBuilder();
logSb.append("User Locked ").append(places.size()).append(" places: ");
for (Place p : places) { for (Place p : places) {
if (!p.isReservedFor(user)) { if (!p.isReservedFor(user)) {
...@@ -397,6 +399,8 @@ public class PlaceBean implements PlaceBeanLocal { ...@@ -397,6 +399,8 @@ public class PlaceBean implements PlaceBeanLocal {
} }
} }
logger.info("Buying place {} for user {}", p.getName(), user.getUser().getLogin()); logger.info("Buying place {} for user {}", p.getName(), user.getUser().getLogin());
logSb.append(p.getName()).append(", ");
GroupMembership gm = buy(p, pg); GroupMembership gm = buy(p, pg);
if (!associatedToPlace) if (!associatedToPlace)
{ {
...@@ -410,6 +414,7 @@ public class PlaceBean implements PlaceBeanLocal { ...@@ -410,6 +414,7 @@ public class PlaceBean implements PlaceBeanLocal {
} }
} }
loggerbean.sendMessage(MoyaEventType.PLACE_ACTION, permbean.getCurrentUser(), logSb.toString());
// adding account event does funny stuff. evicting helps... // adding account event does funny stuff. evicting helps...
userfacade.evict(); userfacade.evict();
......
...@@ -641,7 +641,7 @@ public class UserBean implements UserBeanLocal { ...@@ -641,7 +641,7 @@ public class UserBean implements UserBeanLocal {
if (eu == null) if (eu == null)
return null; return null;
loggerbean.sendMessage(MoyaEventType.INVITE_ACCEPTED, eu, "Ivite accepted by current user", gm, gm.getUser()); loggerbean.sendMessage(MoyaEventType.INVITE_ACCEPTED, eu, "Invite accepted by current user ", gm, gm.getUser());
gm.setUser(eu); gm.setUser(eu);
gm.setInviteAccepted(Calendar.getInstance()); gm.setInviteAccepted(Calendar.getInstance());
......
...@@ -31,59 +31,18 @@ public class IrcBotMoyaEventTopicListener implements MessageListener { ...@@ -31,59 +31,18 @@ public class IrcBotMoyaEventTopicListener implements MessageListener {
private static final Logger logger = LoggerFactory.getLogger(IrcBotMoyaEventTopicListener.class); private static final Logger logger = LoggerFactory.getLogger(IrcBotMoyaEventTopicListener.class);
private static List<MoyaEventType> ignoreTypes = Arrays.asList(MoyaEventType.LOGIN_SUCCESSFULL);
@EJB @EJB
private BotBean botbean; private BotBean botbean;
@EJB
private EventFacade eventfacade;
@EJB
private UserFacade userfacade;
@EJB
private EventUserFacade eventuserfacade;
/** /**
* @see MessageListener#onMessage(Message) * @see MessageListener#onMessage(Message)
*/ */
public void onMessage(Message message) { public void onMessage(Message message) {
try { // botbean.getBot().say(toString(event, " ", msg.getEventtype(), " User
MoyaEventMessage msg = message.getBody(MoyaEventMessage.class); // ", msg.getDescription()));
if (botbean!= null) {
// do not flood irc-channel, message only really needed ones botbean.message(message);
if(msg.getEventtype() != null && ignoreTypes.contains(msg.getEventtype()))
return;
String event = "unknown event";
if (msg.getEventId() != null) {
LanEvent e = eventfacade.find(msg.getEventId());
if (e != null)
event = e.getName();
}
StringBuilder sb = new StringBuilder();
sb.append(event).append(" ");
sb.append(msg.getEventtype()).append(" ");
if (msg.getCurrentUserId() != null) {
User user = userfacade.find(msg.getCurrentUserId());
if (user != null) {
sb.append("user: ").append(user.getLogin()).append(" ");
}
}
if (msg.getEventUserId() != null) {
EventUser eu = eventuserfacade.find(msg.getEventUserId());
if (eu != null && !eu.getUser().getId().equals(msg.getCurrentUserId())) {
sb.append("for user: ").append(eu.getUser().getLogin()).append(": ");
}
}
sb.append(msg.getDescription());
//botbean.getBot().say(toString(event, " ", msg.getEventtype(), " User ", msg.getDescription()));
botbean.getBot().say(sb.toString());
logger.warn("Received moya event message for irc bot {}", message);
} catch (JMSException e) {
logger.warn("Exception while getting jms message for IRCbot", e);
botbean.getBot().say("Caught exception while logging message" + e.getCause());
} }
} }
} }
...@@ -63,11 +63,14 @@ public class MoyaEventSender implements LoggingBeanLocal { ...@@ -63,11 +63,14 @@ public class MoyaEventSender implements LoggingBeanLocal {
MoyaEventMessage msg = new MoyaEventMessage(); MoyaEventMessage msg = new MoyaEventMessage();
msg.setEventtype(type); msg.setEventtype(type);
msg.setTime(Calendar.getInstance()); msg.setTime(Calendar.getInstance());
msg.setEventUserId(user.getId()); if(user != null)
{
msg.setEventUserId(user.getId());
}
msg.setCurrentUserId(permbean.getCurrentUser().getUser().getId()); msg.setCurrentUserId(permbean.getCurrentUser().getUser().getId());
msg.setEventId(eventbean.getCurrentEvent().getId()); msg.setEventId(eventbean.getCurrentEvent().getId());
msg.setDescription(message); msg.setDescription(message);
logger.info("Sending Moya message {} with description ", type, message); logger.debug("Sending Moya message {} with description ", type, message);
sendMessage(msg); sendMessage(msg);
} }
...@@ -83,6 +86,7 @@ public class MoyaEventSender implements LoggingBeanLocal { ...@@ -83,6 +86,7 @@ public class MoyaEventSender implements LoggingBeanLocal {
@Override @Override
public void sendMessage(MoyaEventType type, Object... message) { public void sendMessage(MoyaEventType type, Object... message) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
for (Object m : message) { for (Object m : message) {
sb.append(m); sb.append(m);
......
...@@ -55,6 +55,7 @@ import fi.codecrew.moya.utilities.moyamessage.MoyaEventType; ...@@ -55,6 +55,7 @@ import fi.codecrew.moya.utilities.moyamessage.MoyaEventType;
@WebFilter(filterName = "hostnameFilter", displayName = "hostname and authentication filter", urlPatterns = { "/*" }) @WebFilter(filterName = "hostnameFilter", displayName = "hostname and authentication filter", urlPatterns = { "/*" })
public class HostnameFilter implements Filter { public class HostnameFilter implements Filter {
private static final String X_FORWARDED_PROTO = "X-Forwarded-Proto";
private static final String SESSION_HOSTNAMESTORE = "moya-session-hostname"; private static final String SESSION_HOSTNAMESTORE = "moya-session-hostname";
private static final Logger logger = LoggerFactory.getLogger(HostnameFilter.class); private static final Logger logger = LoggerFactory.getLogger(HostnameFilter.class);
private static final String HTTP_HOSTNAME_ID = "moya_hostname_session_id"; private static final String HTTP_HOSTNAME_ID = "moya_hostname_session_id";
...@@ -228,26 +229,29 @@ public class HostnameFilter implements Filter { ...@@ -228,26 +229,29 @@ public class HostnameFilter implements Filter {
String restAuthStr = null; String restAuthStr = null;
// Allow api auth with password only if ssl is enabled ( or in // Allow api auth with password only if ssl is enabled ( or in
// development mode... ) // development mode... )
if (BortalLocalContextHolder.isSsl() || BortalLocalContextHolder.isInDevelopmentMode()) { // if (BortalLocalContextHolder.isSsl() ||
restAuthStr = httpRequest.getHeader("Authorization"); // BortalLocalContextHolder.isInDevelopmentMode()) {
} restAuthStr = httpRequest.getHeader("Authorization");
// }
if (restAuthStr == null) { if (restAuthStr == null) {
StringBuilder hashBuilder = new StringBuilder(); StringBuilder hashBuilder = new StringBuilder();
hashBuilder.append(JaasBeanLocal.REST_PREFIX ); hashBuilder.append(JaasBeanLocal.REST_PREFIX);
hashBuilder.append(httpRequest.getParameter("appkey")).append(":"); hashBuilder.append(httpRequest.getParameter("appkey")).append(":");
hashBuilder.append(httpRequest.getParameter("appuser")).append(":"); hashBuilder.append(httpRequest.getParameter("appuser")).append(":");
hashBuilder.append(httpRequest.getParameter("appstamp")).append(":"); hashBuilder.append(httpRequest.getParameter("appstamp")).append(":");
hashBuilder.append(httpRequest.getParameter("appmac")).append(":"); hashBuilder.append(httpRequest.getParameter("appmac")).append(":");
hashBuilder.append(httpRequest.getPathInfo()); hashBuilder.append(httpRequest.getPathInfo());
restAuthStr = hashBuilder.toString();
} }
boolean ret = true; boolean ret = true;
try { try {
httpRequest.login(null, restAuthStr); httpRequest.login(null, restAuthStr);
} catch (ServletException loginEx) { } catch (ServletException loginEx) {
ret = false; ret = false;
logger.info("Rest api authentication failed! ", loginEx); logger.info("Rest api authentication failed for path " + httpRequest.getPathInfo() + " "
+ httpRequest.getParameterMap().toString(), loginEx);
if (response instanceof HttpServletResponse) { if (response instanceof HttpServletResponse) {
HttpServletResponse httpResp = ((HttpServletResponse) response); HttpServletResponse httpResp = ((HttpServletResponse) response);
httpResp.setStatus(HttpServletResponse.SC_FORBIDDEN); httpResp.setStatus(HttpServletResponse.SC_FORBIDDEN);
...@@ -285,10 +289,13 @@ public class HostnameFilter implements Filter { ...@@ -285,10 +289,13 @@ public class HostnameFilter implements Filter {
} }
String hostname = url.substring(beginindex, lastindex); String hostname = url.substring(beginindex, lastindex);
// httpRequest.getSession().setAttribute(EventBeanLocal.HTTP_URL_HOSTNAME,
// hostname); // if proxy provides scheme in header, use it..
String proto = url.substring(0, 5).toLowerCase(); String scheme = httpRequest.getHeader(X_FORWARDED_PROTO);
boolean ssl = proto.equals("https"); if (scheme == null || scheme.isEmpty()) {
scheme = url.substring(0, 5).toLowerCase();
}
boolean ssl = scheme.trim().toLowerCase().equals("https");
BortalLocalContextHolder.setSsl(ssl); BortalLocalContextHolder.setSsl(ssl);
HttpSession session = httpRequest.getSession(); HttpSession session = httpRequest.getSession();
......
...@@ -40,7 +40,6 @@ import java.io.IOException; ...@@ -40,7 +40,6 @@ import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import javax.ejb.EJB; import javax.ejb.EJB;
import javax.ejb.Startup;
import javax.servlet.Servlet; import javax.servlet.Servlet;
import javax.servlet.ServletConfig; import javax.servlet.ServletConfig;
import javax.servlet.ServletException; import javax.servlet.ServletException;
...@@ -49,8 +48,6 @@ import javax.servlet.http.HttpServlet; ...@@ -49,8 +48,6 @@ import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import net.sf.jerklib.Profile;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -61,6 +58,7 @@ import fi.codecrew.moya.beans.PlaceBeanLocal; ...@@ -61,6 +58,7 @@ import fi.codecrew.moya.beans.PlaceBeanLocal;
import fi.codecrew.moya.utilities.SystemProperty; import fi.codecrew.moya.utilities.SystemProperty;
import fi.iudex.utils.irc.IrcBot; import fi.iudex.utils.irc.IrcBot;
import fi.iudex.utils.irc.IrcBotListener; import fi.iudex.utils.irc.IrcBotListener;
import net.sf.jerklib.Profile;
/** /**
* Servlet implementation class SshServlet * Servlet implementation class SshServlet
...@@ -105,13 +103,66 @@ public class IrcServlet extends HttpServlet { ...@@ -105,13 +103,66 @@ public class IrcServlet extends HttpServlet {
logger.info("Got irc server system property {}", ircserver); logger.info("Got irc server system property {}", ircserver);
if (ircserver != null) { if (ircserver != null) {
logger.info("Starting IRC client with server {}", ircserver); logger.info("Starting IRC client with server {}", ircserver);
IrcBot bot = new IrcBot(ircserver, 6667, SystemProperty.MOYA_IRC_SERVERPASS.getValueOrNull(), SystemProperty.MOYA_IRC_CHANNEL.getValueOrDefault(), new Profile("moyabot", "Moya bot", "moya-bot")); IrcBot bot = new IrcBot(ircserver, 6667, SystemProperty.MOYA_IRC_SERVERPASS.getValueOrNull(),
botbean.add(bot); SystemProperty.MOYA_IRC_CHANNEL.getValueOrDefault(),
new Profile("moyabot", "Moya bot", "moya-bot"));
botbean.addBot(bot);
bot.addCmdListener("addignore", new MessgaeIgnoreListener());
bot.addCmdListener("rmignore", new RemoveMessgaeIgnoreListener());
bot.addCmdListener("lsignores", new ListMessgaeIgnoreListener());
bots.add(bot); bots.add(bot);
bot.start(); bot.start();
} }
} }
private class MessgaeIgnoreListener implements IrcBotListener {
@Override
public String getUsageMessage() {
return "Add value as message to be ignored";
}
@Override
public void executeIrc(IrcBot bot, String data) {
botbean.getIgnoreTypes().add(data);
bot.say("Added " + data + " as ignored message type");
}
}
private class RemoveMessgaeIgnoreListener implements IrcBotListener {
@Override
public String getUsageMessage() {
return "remove value from message ignore list";
}
@Override
public void executeIrc(IrcBot bot, String data) {
botbean.getIgnoreTypes().remove(data);
bot.say("Removed " + data + " from ignored message types");
}
}
private class ListMessgaeIgnoreListener implements IrcBotListener {
@Override
public String getUsageMessage() {
return "List message ignore list entries";
}
@Override
public void executeIrc(IrcBot bot, String data) {
StringBuilder sb = new StringBuilder();
sb.append("Ignored messagetypes: ");
for (String d : botbean.getIgnoreTypes()) {
sb.append(d).append(", ");
}
bot.say(sb.toString());
}
}
/** /**
* @see Servlet#destroy() * @see Servlet#destroy()
*/ */
...@@ -126,7 +177,8 @@ public class IrcServlet extends HttpServlet { ...@@ -126,7 +177,8 @@ public class IrcServlet extends HttpServlet {
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response) * response)
*/ */
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
for (IrcBot b : bots) { for (IrcBot b : bots) {
try { try {
b.stop(); b.stop();
...@@ -145,7 +197,8 @@ public class IrcServlet extends HttpServlet { ...@@ -145,7 +197,8 @@ public class IrcServlet extends HttpServlet {
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response) * response)
*/ */
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub // TODO Auto-generated method stub
} }
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!