Package com.cosmicpush.app.resources.api

Source Code of com.cosmicpush.app.resources.api.ApiResource

/*
* Copyright (c) 2014 Jacob D. Parr
*
* This software may not be used without permission.
*/

package com.cosmicpush.app.resources.api;

import com.cosmicpush.app.domain.accounts.Account;
import com.cosmicpush.app.domain.clients.ApiClient;
import com.cosmicpush.app.domain.requests.ApiRequest;
import com.cosmicpush.app.resources.RequestConfig;
import com.cosmicpush.app.resources.api.userevent.UserEventDelegate;
import com.cosmicpush.pub.common.Push;
import com.cosmicpush.pub.common.PushResponse;
import com.cosmicpush.pub.internal.EndPoints;
import com.cosmicpush.pub.push.*;
import java.net.InetAddress;
import javax.ws.rs.*;
import javax.ws.rs.core.*;
import org.crazyyak.dev.common.StringUtils;

public class ApiResource {

  private final Account account;
  private final ApiClient apiClient;
  private final RequestConfig config;
  private final InetAddress inetAddress;

  public ApiResource(ApiRequestConfig config, Account account, ApiClient apiClient) throws Exception {
    this.config = config;
    this.account = account;
    this.apiClient = apiClient;

    String remoteAddress = config.getRequest().getRemoteAddr();
    inetAddress = InetAddress.getByName(remoteAddress);
  }

  @POST
  @Produces(MediaType.APPLICATION_JSON)
  @Consumes(MediaType.APPLICATION_JSON)
  @Path("/callback")
  public Response callback(String msg) throws Exception {
    return Response.ok().build();
  }

  @POST
  @Produces(MediaType.APPLICATION_JSON)
  @Consumes(MediaType.APPLICATION_JSON)
  @Path(EndPoints.PUSH_NOTIFICATION)
  public Response sendNotification(NotificationPush push) throws Exception {

    ApiRequest apiRequest = new ApiRequest(apiClient, push, inetAddress);
    config.getApiRequestStore().create(apiRequest);

    NotificationDelegate delegate = new NotificationDelegate(config.getObjectMapper(), config.getApiRequestStore(), account, apiClient, apiRequest, push);
    new Thread(delegate).start();

    return buildResponse(apiRequest);
  }

  @POST
  @Produces(MediaType.APPLICATION_JSON)
  @Consumes(MediaType.APPLICATION_JSON)
  @Path(EndPoints.PUSH_USER_EVENT)
  public Response sendUserEvent(UserEventPush push) throws Exception {

    ApiRequest apiRequest = new ApiRequest(apiClient, push, inetAddress);
    config.getApiRequestStore().create(apiRequest);

    UserEventDelegate delegate = new UserEventDelegate(config.getObjectMapper(), config.getApiRequestStore(), account, apiClient, apiRequest, push);
    new Thread(delegate).start();

    return buildResponse(apiRequest);
  }

  @POST
  @Produces(MediaType.APPLICATION_JSON)
  @Consumes(MediaType.APPLICATION_JSON)
  @Path(EndPoints.PUSH_IM)
  public Response sendGoogleTalk(ImPush push) throws Exception {

    ApiRequest apiRequest = new ApiRequest(apiClient, push, inetAddress);
    config.getApiRequestStore().create(apiRequest);

    GoolgeTalkDelegate delegate = new GoolgeTalkDelegate(config.getObjectMapper(), config.getApiRequestStore(), account, apiClient, apiRequest, push);
    new Thread(delegate).start();

    return buildResponse(apiRequest);
  }

  private boolean useAwsEmail() {
    return apiClient.getAwsEmailConfig() != null &&
           StringUtils.isNotBlank(apiClient.getAwsEmailConfig().getSecretKey()) &&
           StringUtils.isNotBlank(apiClient.getAwsEmailConfig().getAccessKeyId());
  }

  @POST
  @Produces(MediaType.APPLICATION_JSON)
  @Consumes(MediaType.APPLICATION_JSON)
  @Path(EndPoints.PUSH_EMAIL)
  public Response sendEmailMessage(EmailPush push) throws Exception {

    ApiRequest apiRequest = new ApiRequest(apiClient, push, inetAddress);
    config.getApiRequestStore().create(apiRequest);

    if (useAwsEmail()) {
      AwsEmailDelegate delegate = new AwsEmailDelegate(config.getObjectMapper(), config.getApiRequestStore(), account, apiClient, apiRequest, push);
      new Thread(delegate).start();

    } else {
      SmtpEmailDelegate delegate = new SmtpEmailDelegate(config.getObjectMapper(), config.getApiRequestStore(), account, apiClient, apiRequest, push);
      new Thread(delegate).start();
    }

    return buildResponse(apiRequest);
  }

  @POST
  @Produces(MediaType.APPLICATION_JSON)
  @Consumes(MediaType.APPLICATION_JSON)
  @Path(EndPoints.PUSH_EMAIL_TO_SMS)
  public Response sendEmailToSmsMessage(EmailToSmsPush push) throws Exception {

    ApiRequest apiRequest = new ApiRequest(apiClient, push, inetAddress);
    config.getApiRequestStore().create(apiRequest);

    if (useAwsEmail()) {
      AwsSmsDelegate delegate = new AwsSmsDelegate(config.getObjectMapper(), config.getApiRequestStore(), account, apiClient, apiRequest, push);
      new Thread(delegate).start();

    } else {
      SmtpSmsDelegate delegate = new SmtpSmsDelegate(config.getObjectMapper(), config.getApiRequestStore(), account, apiClient, apiRequest, push);
      new Thread(delegate).start();
    }

    return buildResponse(apiRequest);
  }

  private Response buildResponse(ApiRequest apiRequest) throws Exception {
    PushResponse response = new PushResponse(
        account.getAccountId(),
        apiClient.getApiClientId(),
        apiRequest.getApiRequestId(),
        apiRequest.getCreatedAt(),
        apiRequest.getRequestStatus(),
        apiRequest.getNotes()
    );
    return Response.ok(response, MediaType.APPLICATION_JSON).build();
  }
}
TOP

Related Classes of com.cosmicpush.app.resources.api.ApiResource

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.