Android Open Source - Java-Yandex.Money-API-SDK Notifications Servlet






From Project

Back to project page Java-Yandex.Money-API-SDK.

License

The source code is released under:

MIT License

If you think the Android project Java-Yandex.Money-API-SDK listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package ru.yandex.money.api.notifications;
/* w  w w  . ja  va2  s.  com*/
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;

/**
 * <p/>
 * <p/>
 * Created: 04.12.13 23:32
 * <p/>
 *
 * @author OneHalf
 */
public class NotificationsServlet extends HttpServlet {

    private static final Log LOG = LogFactory.getLog(NotificationsServlet.class);

    private final NotificationUtils notificationUtils = new NotificationUtils();

    private volatile static IncomingTransferListener listener;
    private volatile static String secret;

    public static void setListener(IncomingTransferListener listener) {
        NotificationsServlet.listener = listener;
    }

    public static void setSecret(String secret) {
        NotificationsServlet.secret = secret;
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        if (listener == null || secret == null) {
            throw new IllegalStateException("servlet state is not initialised");
        }

        Map<String, String> parametersMap = createParametersMap(request);

        final String notificationType = parametersMap.get("notification_type") ;

        if (!"p2p-incoming".equals(notificationType)) {
            LOG.warn("Unsupported notification type: " + notificationType);
            response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Unsupported notification type: " + notificationType) ;
            return;
        }

        try {
            if (!notificationUtils.isHashValid(parametersMap, secret)) {
                response.sendError(HttpServletResponse.SC_FORBIDDEN, "SHA-1 hash verification failed") ;
                LOG.warn(compileLogRecord("SHA-1 hash verification failed", request, parametersMap)) ;
                return;
            }

            final boolean testNotification = Boolean.parseBoolean(request.getParameter("test_notification"));

            IncomingTransfer incomingTransfer = IncomingTransfer.createByParameters(parametersMap);

            // ???????? ????? ????, ??? ??????????? ?????????
            if (testNotification) {
                LOG.info("Test notification has received.") ;
                listener.processTestNotification(incomingTransfer) ;
            } else {
                listener.processNotification(incomingTransfer) ;
            }
            response.getWriter().println("notification processed");
            response.getWriter().println(incomingTransfer);
            response.getWriter().println("is test notification: " + testNotification);

        } catch (IllegalArgumentException e) {
            response.sendError(HttpServletResponse.SC_BAD_REQUEST, e.getMessage()) ;
            LOG.warn(compileLogRecord(e.getMessage(), request, parametersMap)) ;
        }
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    private Map<String, String> createParametersMap(HttpServletRequest req) {
        Map<String, String> parametersMap = new HashMap<String, String>();

        @SuppressWarnings("unchecked")
        Enumeration<String> parameterNames = req.getParameterNames();

        while (parameterNames.hasMoreElements()) {
            String paramName = parameterNames.nextElement();
            parametersMap.put(paramName, req.getParameter(paramName));
        }
        return parametersMap;
    }

    private static String compileLogRecord(String message, HttpServletRequest request, Map<String, String> parametersMap) {
        return message + ": "
                + "HttpServletRequest={ IP:" + request.getRemoteAddr() + "} "
                + "Parameters=" + parametersMap;
    }
}




Java Source Code List

com.samples.client.Settings.java
com.samples.server.SampleIncomingTransferListener.java
com.samples.server.ServletListener.java
com.samples.yamodroid.Consts.java
com.samples.yamodroid.GreatAppActivity.java
ru.yandex.money.api.ApiCommandsFacadeImpl.java
ru.yandex.money.api.ApiCommandsFacade.java
ru.yandex.money.api.CommandUrlHolder.java
ru.yandex.money.api.InsufficientScopeException.java
ru.yandex.money.api.InternalServerErrorException.java
ru.yandex.money.api.InvalidTokenException.java
ru.yandex.money.api.ProtocolRequestException.java
ru.yandex.money.api.TestUrlHolder.java
ru.yandex.money.api.TokenRequesterImpl.java
ru.yandex.money.api.TokenRequester.java
ru.yandex.money.api.YamoneyAccount.java
ru.yandex.money.api.YamoneyApiClient.java
ru.yandex.money.api.YandexMoneyImpl.java
ru.yandex.money.api.YandexMoney.java
ru.yandex.money.api.enums.Destination.java
ru.yandex.money.api.enums.MoneyDirection.java
ru.yandex.money.api.enums.MoneySource.java
ru.yandex.money.api.enums.OperationHistoryType.java
ru.yandex.money.api.enums.Status.java
ru.yandex.money.api.notifications.IncomingTransferListener.java
ru.yandex.money.api.notifications.IncomingTransfer.java
ru.yandex.money.api.notifications.NotificationUtils.java
ru.yandex.money.api.notifications.NotificationsServlet.java
ru.yandex.money.api.response.AccountInfoResponse.java
ru.yandex.money.api.response.FundraisingStatsResponse.java
ru.yandex.money.api.response.OperationDetailResponse.java
ru.yandex.money.api.response.OperationHistoryResponse.java
ru.yandex.money.api.response.ProcessPaymentResponse.java
ru.yandex.money.api.response.ReceiveOAuthTokenResponse.java
ru.yandex.money.api.response.RequestPaymentResponse.java
ru.yandex.money.api.response.util.OperationHistoryError.java
ru.yandex.money.api.response.util.Operation.java
ru.yandex.money.api.response.util.PaymentErrorCode.java
ru.yandex.money.api.response.util.ProcessPaymentError.java
ru.yandex.money.api.response.util.RequestPaymentError.java
ru.yandex.money.api.response.util.money.PaymentMethods.java
ru.yandex.money.api.rights.AbstractLimitedPermission.java
ru.yandex.money.api.rights.AbstractPermission.java
ru.yandex.money.api.rights.AccountInfo.java
ru.yandex.money.api.rights.IdentifierType.java
ru.yandex.money.api.rights.MoneySource.java
ru.yandex.money.api.rights.OperationDetails.java
ru.yandex.money.api.rights.OperationHistory.java
ru.yandex.money.api.rights.PaymentP2P.java
ru.yandex.money.api.rights.PaymentShop.java
ru.yandex.money.api.rights.Payment.java
ru.yandex.money.api.rights.Permission.java
ru.yandex.money.droid.ActivityParams.java
ru.yandex.money.droid.AuthActivity.java
ru.yandex.money.droid.Consts.java
ru.yandex.money.droid.DetailHistoryActivity.java
ru.yandex.money.droid.HistoryActivity.java
ru.yandex.money.droid.HistoryAdapter.java
ru.yandex.money.droid.IntentCreator.java
ru.yandex.money.droid.LoadHistoryTask.java
ru.yandex.money.droid.PaymentActivity.java
ru.yandex.money.droid.PaymentConfirmActivity.java
ru.yandex.money.droid.PaymentShopParcelable.java
ru.yandex.money.droid.ProcessPaymentTask.java
ru.yandex.money.droid.Utils.java
ru.yandex.money.droid.YandexMoneyDroid.java