org.mifos.module.sms.controller.MifosSmsController.java Source code

Java tutorial

Introduction

Here is the source code for org.mifos.module.sms.controller.MifosSmsController.java

Source

/**
 * Copyright 2014 Markus Geiss
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.mifos.module.sms.controller;

import org.mifos.module.sms.domain.EventSource;
import org.mifos.module.sms.domain.SMSBridgeConfig;
import org.mifos.module.sms.exception.InvalidApiKeyException;
import org.mifos.module.sms.exception.UnknownEventTypeException;
import org.mifos.module.sms.service.SMSBridgeService;
import org.mifos.module.sms.service.SecurityService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/modules")
public class MifosSmsController {

    private final SecurityService securityService;
    private final SMSBridgeService smsBridgeService;

    @Autowired
    public MifosSmsController(final SecurityService securityService, final SMSBridgeService smsBridgeService) {
        super();
        this.securityService = securityService;
        this.smsBridgeService = smsBridgeService;
    }

    @RequestMapping(value = "/sms", method = RequestMethod.POST, consumes = { "application/json" }, produces = {
            "application/json" })
    public ResponseEntity<Void> sendShortMessage(@RequestHeader("X-Mifos-API-Key") final String apiKey,
            @RequestHeader("X-Mifos-Platform-TenantId") final String tenantId,
            @RequestHeader("X-Mifos-Entity") final String entity,
            @RequestHeader("X-Mifos-Action") final String action, @RequestBody final String payload) {
        this.securityService.verifyApiKey(apiKey, tenantId);
        this.smsBridgeService.sendShortMessage(entity, action, tenantId, payload);

        return new ResponseEntity<>(HttpStatus.OK);
    }

    @RequestMapping(value = "/sms/configuration", method = RequestMethod.POST, consumes = {
            "application/json" }, produces = { "application/json" })
    public ResponseEntity<String> createSMSBridgeConfig(@RequestBody final SMSBridgeConfig smsBridgeConfig) {
        if (this.smsBridgeService.findSmsBridgeConfigByTenantId(smsBridgeConfig.getTenantId()) != null) {
            return new ResponseEntity<>("Tenant " + smsBridgeConfig.getTenantId() + " already exists!",
                    HttpStatus.BAD_REQUEST);
        }
        final String newApiKey = this.securityService.generateApiKey(smsBridgeConfig.getTenantId(),
                smsBridgeConfig.getMifosToken(), smsBridgeConfig.getSmsProviderAccountId(),
                smsBridgeConfig.getSmsProviderToken());
        smsBridgeConfig.setApiKey(newApiKey);
        this.smsBridgeService.createSmsBridgeConfig(smsBridgeConfig);

        return new ResponseEntity<>(newApiKey, HttpStatus.CREATED);
    }

    @RequestMapping(value = "/sms/configuration/{tenantId}", method = RequestMethod.GET, consumes = {
            "application/json" }, produces = { "application/json" })
    public ResponseEntity<SMSBridgeConfig> getSmsBridgeConfig(@RequestHeader("X-Mifos-API-Key") final String apiKey,
            @PathVariable("tenantId") final String tenantId) {
        this.securityService.verifyApiKey(apiKey, tenantId);
        final SMSBridgeConfig smsBridgeConfig = this.smsBridgeService.findSmsBridgeConfigByTenantId(tenantId);
        return new ResponseEntity<>(smsBridgeConfig, HttpStatus.OK);
    }

    @RequestMapping(value = "/sms/configuration/{tenantId}", method = RequestMethod.DELETE, consumes = {
            "application/json" }, produces = { "application/json" })
    public ResponseEntity<Void> deleteSmsBridgeConfig(@RequestHeader("X-Mifos-API-Key") final String apiKey,
            @PathVariable("tenantId") final String tenantId) {
        this.securityService.verifyApiKey(apiKey, tenantId);
        final SMSBridgeConfig smsBridgeConfig = this.smsBridgeService.findSmsBridgeConfigByTenantId(tenantId);
        if (smsBridgeConfig != null) {
            this.smsBridgeService.deleteSmsBridgeConfig(smsBridgeConfig.getId());
            return new ResponseEntity<>(HttpStatus.OK);
        }

        return new ResponseEntity<>(HttpStatus.NOT_FOUND);
    }

    @RequestMapping(value = "/sms/events/{tenantId}", method = RequestMethod.GET, consumes = {
            "application/json" }, produces = { "application/json" })
    public ResponseEntity<List<EventSource>> findEventSources(@RequestHeader("X-Mifos-API-Key") final String apiKey,
            @PathVariable("tenantId") final String tenantId) {
        this.securityService.verifyApiKey(apiKey, tenantId);
        final List<EventSource> eventSources = this.smsBridgeService.findEventsSourcesByTenantId(tenantId);

        return new ResponseEntity<>(eventSources, HttpStatus.OK);
    }

    @RequestMapping(value = "/sms/events/{tenantId}/_resend", method = RequestMethod.POST, consumes = {
            "application/json" }, produces = { "application/json" })
    public ResponseEntity<Void> resendEventSources(@RequestHeader("X-Mifos-API-Key") final String apiKey,
            @PathVariable("tenantId") final String tenantId) {
        this.securityService.verifyApiKey(apiKey, tenantId);
        this.smsBridgeService.resendEventsSourcesByTenantId(tenantId);

        return new ResponseEntity<>(HttpStatus.OK);
    }

    @ExceptionHandler
    @ResponseStatus(HttpStatus.UNAUTHORIZED)
    public void handleInvalidApiKeyException(final InvalidApiKeyException ex) {

    }

    @ExceptionHandler
    @ResponseStatus(HttpStatus.NOT_FOUND)
    public String handleUnknownEventException(final UnknownEventTypeException ex) {
        return ex.getMessage();
    }
}