Search in sources :

Example 1 with IFactoryBuildRevisionParameters

use of org.cerberus.crud.factory.IFactoryBuildRevisionParameters in project cerberus-source by cerberustesting.

the class NewRelease method processRequest.

/**
 * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
 * methods.
 *
 * @param request servlet request
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    PrintWriter out = response.getWriter();
    String charset = request.getCharacterEncoding();
    ApplicationContext appContext = WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());
    /**
     * Adding Log entry.
     */
    ILogEventService logEventService = appContext.getBean(LogEventService.class);
    logEventService.createForPublicCalls("/NewRelease", "CALL", "NewRelease called : " + request.getRequestURL(), request);
    IApplicationService MyApplicationService = appContext.getBean(ApplicationService.class);
    IUserService MyUserService = appContext.getBean(UserService.class);
    IProjectService MyProjectService = appContext.getBean(ProjectService.class);
    IBuildRevisionParametersService buildRevisionParametersService = appContext.getBean(IBuildRevisionParametersService.class);
    IFactoryBuildRevisionParameters factoryBuildRevisionParameters = appContext.getBean(IFactoryBuildRevisionParameters.class);
    // Parsing all parameters.
    String application = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter("application"), "", charset);
    String release = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter("release"), "", charset);
    String project = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter("project"), "", charset);
    String ticket = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter("ticket"), "", charset);
    String bug = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter("bug"), "", charset);
    String subject = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter("subject"), "", charset);
    String owner = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter("owner"), "", charset);
    String link = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter("link"), "", charset);
    // Those Parameters could be used later when Cerberus send the deploy request to Jenkins.
    String jenkinsbuildid = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter("jenkinsbuildid"), "", charset);
    String mavengroupid = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter("mavengroupid"), "", charset);
    String mavenartifactid = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter("mavenartifactid"), "", charset);
    String mavenversion = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter("mavenversion"), "", charset);
    String repositoryurl = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter("repositoryurl"), "", charset);
    String helpMessage = "\nThis servlet is used to create or update a release entry in a 'NONE' build and 'NONE' revision.\n\nParameter list :\n" + "- application [mandatory] : the application that produced the release. This parameter must match the application list in Cerberus. [" + application + "]\n" + "- release : release number or svn number. This should be unique at the application level. 2 calls on the same application and release will update the other parameters on the same entry. [" + release + "]\n" + "- project : Project reference. [" + project + "]\n" + "- ticket : Ticket Reference. [" + ticket + "]\n" + "- bug : Bug reference. [" + bug + "]\n" + "- subject : A short description of the change. [" + subject + "]\n" + "- owner : User name of the developper/ person who did the commit. [" + owner + "]\n" + "- link : URL Link on detail documentation on the release. [" + link + "]\n\n" + "The following optional parameters could be used later when Cerberus send the deploy request to Jenkins.\n" + "- jenkinsbuildid : Jenkins Build ID. [" + jenkinsbuildid + "]\n" + "- mavengroupid : Maven Group ID. [" + mavengroupid + "]\n" + "- mavenartifactid : Maven Artifact ID. [" + mavenartifactid + "]\n" + "- repositoryurl : Repository URL. [" + repositoryurl + "]\n" + "- mavenversion : Maven Version. [" + mavenversion + "]\n";
    DatabaseSpring database = appContext.getBean(DatabaseSpring.class);
    Connection connection = database.connect();
    try {
        boolean error = false;
        // Checking the parameter validity. If application has been entered, does it exist ?
        if (!application.equalsIgnoreCase("") && !MyApplicationService.exist(application)) {
            out.println("Error - Application does not exist  : " + application);
            error = true;
        }
        if (application.equalsIgnoreCase("")) {
            out.println("Error - Parameter application is mandatory.");
            error = true;
        }
        // Checking the parameter validity. If owner has been entered, does it exist ?
        if (!owner.equalsIgnoreCase("")) {
            if (MyUserService.isUserExist(owner)) {
                // We get the exact name from Cerberus.
                owner = MyUserService.findUserByKey(owner).getLogin();
            } else {
                out.println("Warning - User does not exist : " + owner);
            }
        }
        // Checking the parameter validity. If project has been entered, does it exist ?
        if (!project.equalsIgnoreCase("") && !MyProjectService.exist(project)) {
            out.println("Warning - Project does not exist : " + project);
        }
        // Starting the database update only when no blocking error has been detected.
        if (error == false) {
            // In case the bugID is not defined, we try to guess it from the subject. should be between # and a space or CR.
            if (StringUtil.isNullOrEmpty(bug)) {
                String[] columns = subject.split("#");
                if (columns.length >= 2) {
                    for (int i = 1; i < columns.length; i++) {
                        String[] columnsbis = columns[i].split(" ");
                        if (columnsbis.length >= 1) {
                            if (!columnsbis[0].contains(";")) {
                                // Bug number should not include ;
                                bug = columnsbis[0];
                            }
                        }
                    }
                }
            }
            // Transaction and database update.
            // Duplicate entry Verification. On the build/relivion not yet assigned (NONE/NONE),
            // we verify that the application + release has not been submitted yet.
            // if it exist, we update it in stead of inserting a new row.
            // That correspond in the cases where the Jenkins pipe is executed several times
            // on a single svn commit.
            /**
             * Verify if the entry already exists if already exists, update
             * it else create it
             */
            AnswerItem answer = buildRevisionParametersService.readByVarious2("NONE", "NONE", release, application);
            BuildRevisionParameters buildRevisionParameters = (BuildRevisionParameters) answer.getItem();
            if (answer.getResultMessage().getCode() == new MessageEvent(MessageEventEnum.DATA_OPERATION_OK).getCode() && buildRevisionParameters != null) {
                out.println("Warning - Release entry already exist. Updating the existing entry : " + buildRevisionParameters.getId());
                if (!project.isEmpty()) {
                    buildRevisionParameters.setProject(project);
                }
                if (!ticket.isEmpty()) {
                    buildRevisionParameters.setTicketIdFixed(ticket);
                }
                if (!bug.isEmpty()) {
                    buildRevisionParameters.setBugIdFixed(bug);
                }
                if (!subject.isEmpty()) {
                    buildRevisionParameters.setSubject(subject);
                }
                if (!owner.isEmpty()) {
                    buildRevisionParameters.setReleaseOwner(owner);
                }
                if (!link.isEmpty()) {
                    buildRevisionParameters.setLink(link);
                }
                if (!jenkinsbuildid.isEmpty()) {
                    buildRevisionParameters.setJenkinsBuildId(jenkinsbuildid);
                }
                if (!mavengroupid.isEmpty()) {
                    buildRevisionParameters.setMavenGroupId(mavengroupid);
                }
                if (!mavenartifactid.isEmpty()) {
                    buildRevisionParameters.setMavenArtifactId(mavenartifactid);
                }
                if (!mavenversion.isEmpty()) {
                    buildRevisionParameters.setMavenVersion(mavenversion);
                }
                if (!repositoryurl.isEmpty()) {
                    buildRevisionParameters.setRepositoryUrl(repositoryurl);
                }
                buildRevisionParametersService.update(buildRevisionParameters);
            } else if (answer.getResultMessage().getCode() == new MessageEvent(MessageEventEnum.DATA_OPERATION_NO_DATA_FOUND).getCode()) {
                buildRevisionParametersService.create(factoryBuildRevisionParameters.create(0, "NONE", "NONE", release, application, project, ticket, bug, link, owner, subject, null, jenkinsbuildid, mavengroupid, mavenartifactid, mavenversion, repositoryurl));
                out.println("Release Inserted : '" + release + "' on '" + application + "' for user '" + owner + "'");
            } else {
                out.println("A problem occured : '" + answer.getResultMessage().getDescription());
            }
        } else {
            // In case of errors, we display the help message.
            out.println(helpMessage);
        }
    } catch (Exception e) {
        LOG.warn(Infos.getInstance().getProjectNameAndVersion() + " - Exception catched.", e);
        out.print("Error while inserting the release : ");
        out.println(e.toString());
    } finally {
        out.close();
        try {
            if (connection != null) {
                connection.close();
            }
        } catch (SQLException e) {
            LOG.warn(e.toString());
        }
    }
}
Also used : IProjectService(org.cerberus.crud.service.IProjectService) IFactoryBuildRevisionParameters(org.cerberus.crud.factory.IFactoryBuildRevisionParameters) SQLException(java.sql.SQLException) MessageEvent(org.cerberus.engine.entity.MessageEvent) Connection(java.sql.Connection) IBuildRevisionParametersService(org.cerberus.crud.service.IBuildRevisionParametersService) AnswerItem(org.cerberus.util.answer.AnswerItem) ServletException(javax.servlet.ServletException) SQLException(java.sql.SQLException) IOException(java.io.IOException) ApplicationContext(org.springframework.context.ApplicationContext) BuildRevisionParameters(org.cerberus.crud.entity.BuildRevisionParameters) IFactoryBuildRevisionParameters(org.cerberus.crud.factory.IFactoryBuildRevisionParameters) IUserService(org.cerberus.crud.service.IUserService) DatabaseSpring(org.cerberus.database.DatabaseSpring) ILogEventService(org.cerberus.crud.service.ILogEventService) IApplicationService(org.cerberus.crud.service.IApplicationService) PrintWriter(java.io.PrintWriter)

Example 2 with IFactoryBuildRevisionParameters

use of org.cerberus.crud.factory.IFactoryBuildRevisionParameters in project cerberus-source by cerberustesting.

the class CreateBuildRevisionParameters method processRequest.

/**
 * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
 * methods.
 *
 * @param request servlet request
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 * @throws org.cerberus.exception.CerberusException
 * @throws org.json.JSONException
 */
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, CerberusException, JSONException {
    JSONObject jsonResponse = new JSONObject();
    Answer ans = new Answer();
    MessageEvent msg = new MessageEvent(MessageEventEnum.DATA_OPERATION_ERROR_UNEXPECTED);
    msg.setDescription(msg.getDescription().replace("%DESCRIPTION%", ""));
    ans.setResultMessage(msg);
    PolicyFactory policy = Sanitizers.FORMATTING.and(Sanitizers.LINKS);
    String charset = request.getCharacterEncoding();
    response.setContentType("application/json");
    // Calling Servlet Transversal Util.
    ServletUtil.servletStart(request);
    /**
     * Parsing and securing all required parameters.
     */
    // Parameter that are already controled by GUI (no need to decode) --> We SECURE them
    // Parameter that needs to be secured --> We SECURE+DECODE them
    String build = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter("build"), "", charset);
    String revision = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter("revision"), "", charset);
    String release = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter("release"), "", charset);
    String application = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter("application"), "", charset);
    String project = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter("project"), "", charset);
    String ticketidfixed = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter("ticketidfixed"), "", charset);
    String bugidfixed = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter("bugidfixed"), "", charset);
    String releaseowner = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter("releaseowner"), "", charset);
    String subject = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter("subject"), "", charset);
    String jenkinsbuildid = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter("jenkinsbuildid"), "", charset);
    String mavenGroupID = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter("mavengroupid"), "", charset);
    String mavenArtifactID = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter("mavenartifactid"), "", charset);
    String mavenVersion = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter("mavenversion"), "", charset);
    // Parameter that we cannot secure as we need the html --> We DECODE them
    String link = ParameterParserUtil.parseStringParamAndDecode(request.getParameter("link"), "", charset);
    String repositoryUrl = ParameterParserUtil.parseStringParamAndDecode(request.getParameter("repositoryurl"), "", charset);
    /**
     * Checking all constrains before calling the services.
     */
    if (false) {
    // No constrain on that Create operation.
    } else {
        /**
         * All data seems cleans so we can call the services.
         */
        ApplicationContext appContext = WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());
        IBuildRevisionParametersService buildRevisionParametersService = appContext.getBean(IBuildRevisionParametersService.class);
        IFactoryBuildRevisionParameters buildRevisionParametersFactory = appContext.getBean(IFactoryBuildRevisionParameters.class);
        BuildRevisionParameters brpData = buildRevisionParametersFactory.create(0, build, revision, release, application, project, ticketidfixed, bugidfixed, link, releaseowner, subject, null, jenkinsbuildid, mavenGroupID, mavenArtifactID, mavenVersion, repositoryUrl);
        ans = buildRevisionParametersService.create(brpData);
        if (ans.isCodeEquals(MessageEventEnum.DATA_OPERATION_OK.getCode())) {
            /**
             * Object created. Adding Log entry.
             */
            ILogEventService logEventService = appContext.getBean(LogEventService.class);
            logEventService.createForPrivateCalls("/CreateBuildRevisionParameters", "CREATE", "Create BuildRevisionParameters : ['" + build + "']", request);
        }
    }
    /**
     * Formating and returning the json result.
     */
    jsonResponse.put("messageType", ans.getResultMessage().getMessage().getCodeString());
    jsonResponse.put("message", ans.getResultMessage().getDescription());
    response.getWriter().print(jsonResponse);
    response.getWriter().flush();
}
Also used : Answer(org.cerberus.util.answer.Answer) ApplicationContext(org.springframework.context.ApplicationContext) IFactoryBuildRevisionParameters(org.cerberus.crud.factory.IFactoryBuildRevisionParameters) JSONObject(org.json.JSONObject) PolicyFactory(org.owasp.html.PolicyFactory) BuildRevisionParameters(org.cerberus.crud.entity.BuildRevisionParameters) IFactoryBuildRevisionParameters(org.cerberus.crud.factory.IFactoryBuildRevisionParameters) MessageEvent(org.cerberus.engine.entity.MessageEvent) ILogEventService(org.cerberus.crud.service.ILogEventService) IBuildRevisionParametersService(org.cerberus.crud.service.IBuildRevisionParametersService)

Aggregations

BuildRevisionParameters (org.cerberus.crud.entity.BuildRevisionParameters)2 IFactoryBuildRevisionParameters (org.cerberus.crud.factory.IFactoryBuildRevisionParameters)2 IBuildRevisionParametersService (org.cerberus.crud.service.IBuildRevisionParametersService)2 ILogEventService (org.cerberus.crud.service.ILogEventService)2 MessageEvent (org.cerberus.engine.entity.MessageEvent)2 ApplicationContext (org.springframework.context.ApplicationContext)2 IOException (java.io.IOException)1 PrintWriter (java.io.PrintWriter)1 Connection (java.sql.Connection)1 SQLException (java.sql.SQLException)1 ServletException (javax.servlet.ServletException)1 IApplicationService (org.cerberus.crud.service.IApplicationService)1 IProjectService (org.cerberus.crud.service.IProjectService)1 IUserService (org.cerberus.crud.service.IUserService)1 DatabaseSpring (org.cerberus.database.DatabaseSpring)1 Answer (org.cerberus.util.answer.Answer)1 AnswerItem (org.cerberus.util.answer.AnswerItem)1 JSONObject (org.json.JSONObject)1 PolicyFactory (org.owasp.html.PolicyFactory)1