Package net.socialgamer.cah.handlers

Source Code of net.socialgamer.cah.handlers.BanHandler

package net.socialgamer.cah.handlers;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import javax.servlet.http.HttpSession;

import net.socialgamer.cah.CahModule.BanList;
import net.socialgamer.cah.Constants.AjaxOperation;
import net.socialgamer.cah.Constants.AjaxRequest;
import net.socialgamer.cah.Constants.DisconnectReason;
import net.socialgamer.cah.Constants.ErrorCode;
import net.socialgamer.cah.Constants.LongPollEvent;
import net.socialgamer.cah.Constants.LongPollResponse;
import net.socialgamer.cah.Constants.ReturnableData;
import net.socialgamer.cah.Constants.SessionAttribute;
import net.socialgamer.cah.RequestWrapper;
import net.socialgamer.cah.data.ConnectedUsers;
import net.socialgamer.cah.data.QueuedMessage;
import net.socialgamer.cah.data.QueuedMessage.MessageType;
import net.socialgamer.cah.data.User;

import org.apache.log4j.Logger;

import com.google.inject.Inject;


public class BanHandler extends Handler {
  protected final Logger logger = Logger.getLogger(BanHandler.class);

  public static final String OP = AjaxOperation.BAN.toString();

  private final ConnectedUsers connectedUsers;
  private final Set<String> banList;

  @Inject
  public BanHandler(final ConnectedUsers connectedUsers, @BanList final Set<String> banList) {
    this.connectedUsers = connectedUsers;
    this.banList = banList;
  }

  @Override
  public Map<ReturnableData, Object> handle(final RequestWrapper request, final HttpSession session) {
    final User user = (User) session.getAttribute(SessionAttribute.USER);
    assert (user != null);

    if (!user.isAdmin()) {
      return error(ErrorCode.NOT_ADMIN);
    }

    if (null == request.getParameter(AjaxRequest.NICKNAME)
        || request.getParameter(AjaxRequest.NICKNAME).isEmpty()) {
      return error(ErrorCode.NO_NICK_SPECIFIED);
    }

    final String banIp;
    final User kickUser = connectedUsers.getUser(request.getParameter(AjaxRequest.NICKNAME));
    if (null != kickUser) {
      banIp = kickUser.getHostName();

      final Map<ReturnableData, Object> kickData = new HashMap<ReturnableData, Object>();
      kickData.put(LongPollResponse.EVENT, LongPollEvent.BANNED.toString());
      final QueuedMessage qm = new QueuedMessage(MessageType.KICKED, kickData);
      kickUser.enqueueMessage(qm);

      connectedUsers.removeUser(kickUser, DisconnectReason.BANNED);
      logger.info(String.format("Banning %s (%s) by request of %s", kickUser.getNickname(), banIp,
          user.getNickname()));
    } else {
      banIp = request.getParameter(AjaxRequest.NICKNAME);
      logger.info(String.format("Banning %s by request of %s", banIp, user.getNickname()));
    }
    banList.add(banIp);

    return new HashMap<ReturnableData, Object>();
  }
}
TOP

Related Classes of net.socialgamer.cah.handlers.BanHandler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.