edu.wisc.doit.tcrypt.controller.CreateController.java Source code

Java tutorial

Introduction

Here is the source code for edu.wisc.doit.tcrypt.controller.CreateController.java

Source

/**
 * Copyright 2012, Board of Regents of the University of
 * Wisconsin System. See the NOTICE file distributed with
 * this work for additional information regarding copyright
 * ownership. Board of Regents of the University of Wisconsin
 * System licenses this file to you 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 edu.wisc.doit.tcrypt.controller;

import java.security.KeyPair;
import java.util.Set;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import edu.wisc.doit.tcrypt.dao.IKeysKeeper;
import edu.wisc.doit.tcrypt.exception.ServiceErrorException;
import edu.wisc.doit.tcrypt.exception.ValidationException;

@Controller
public class CreateController extends BaseController {

    private final IKeysKeeper keysKeeper;

    @Autowired
    public CreateController(IKeysKeeper keysKeeper) {
        this.keysKeeper = keysKeeper;
    }

    @RequestMapping(value = "/create", method = RequestMethod.GET)
    public ModelAndView createServiceKeyInit() {
        return new ModelAndView("createServiceKeyBefore");
    }

    @RequestMapping(value = "/create", method = RequestMethod.POST)
    public ModelAndView createServiceKey(@RequestParam("serviceName") String serviceName,
            @RequestParam("keyLength") int keyLength, HttpServletRequest request) throws Exception {

        ModelAndView modelAndView = new ModelAndView("createServiceKeyDownload");

        //validation
        String validationResult = validate(serviceName);
        if (!validationResult.isEmpty()) {
            throw new ValidationException(validationResult);
        }

        try {
            String username = request.getRemoteUser() != null ? request.getRemoteUser() : "UNKNOWNUSERNAME";

            //Create ServiceKey Object and write public key out to FS
            final KeyPair keyPair = keysKeeper.createServiceKey(serviceName, keyLength, username);

            //Add serviceKey object on session (for download) and put the serviceName in the object list
            request.getSession().setAttribute("serviceKey_" + serviceName, keyPair);
            modelAndView.addObject("serviceName", serviceName);
        } catch (Exception e) {
            logger.error("An error occurred when creating a service key", e);
            throw new ServiceErrorException(serviceName, "error.createServiceKey");
        }

        return modelAndView;
    }

    @ExceptionHandler(ValidationException.class)
    public ModelAndView handleException(ValidationException e) throws Exception {
        ModelAndView mav = createServiceKeyInit();
        mav.addObject("errorMessage", e.getMessage());
        return mav;
    }

    @ExceptionHandler(ServiceErrorException.class)
    public ModelAndView handleException(ServiceErrorException e) throws Exception {
        ModelAndView mav = createServiceKeyInit();

        mav.addObject("errorMessage", e.getMessage());
        mav.addObject("zero", e.getServiceName());

        return mav;
    }

    private String validate(String serviceName) {
        String error = "";
        if (serviceName == null || serviceName.isEmpty()) {
            error = "error.serviceNameRequired";
        } else if (-1 != serviceName.indexOf("_")) {
            error = "error.serviceNameUnderscore";
        } else {
            //Validate if service exists
            final Set<String> serviceNames = keysKeeper.getListOfServiceNames();
            if (serviceNames.contains(serviceName)) {
                error = "error.serviceNameExists";
            }
        }

        return error;
    }
}