View Javadoc

1   /**
2    * Copyright (C) 2012 White Source Ltd.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    * http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.whitesource.teamcity.server;
17  
18  import jetbrains.buildServer.controllers.ActionErrors;
19  import jetbrains.buildServer.controllers.BaseFormXmlController;
20  import jetbrains.buildServer.log.Loggers;
21  import jetbrains.buildServer.serverSide.crypt.RSACipher;
22  import jetbrains.buildServer.util.StringUtil;
23  import org.jdom.Element;
24  import org.springframework.web.servlet.ModelAndView;
25  import org.whitesource.teamcity.common.WssUtils;
26  
27  import javax.servlet.http.HttpServletRequest;
28  import javax.servlet.http.HttpServletResponse;
29  import java.net.MalformedURLException;
30  import java.net.URL;
31  
32  /**
33   * Controller for the global settings tab.
34   *
35   * @author Edo.Shor
36   */
37  public class GlobalSettingsController extends BaseFormXmlController {
38  
39      /* --- Members --- */
40  
41      private GlobalSettingsManager settingsManager;
42  
43      /* --- Constructors --- */
44  
45      /**
46       * Constructor
47       *
48       * @param settingsManager
49       */
50      public GlobalSettingsController(GlobalSettingsManager settingsManager) {
51          this.settingsManager = settingsManager;
52      }
53  
54      /* --- Overridden methods --- */
55  
56      @Override
57      protected ModelAndView doGet(HttpServletRequest request, HttpServletResponse response) {
58          return null;
59      }
60  
61      @Override
62      protected void doPost(HttpServletRequest request, HttpServletResponse response, Element xmlResponse) {
63          Loggers.SERVER.info(WssUtils.logMsg("GlobalSettingsController", "doPost"));
64  
65          ActionErrors errors = validate(request);
66          if (errors.hasErrors()) {
67              Loggers.SERVER.warn(WssUtils.logMsg("GlobalSettingsController", errors.getErrors().size() + " Errors:" ));
68              for(ActionErrors.Error error : errors.getErrors()) {
69                  Loggers.SERVER.warn(WssUtils.logMsg("GlobalSettingsController", error.getMessage()));
70              }
71              errors.serialize(xmlResponse);
72              return;
73          }
74  
75          final GlobalSettings settings = new GlobalSettings();
76          settings.setOrgToken(request.getParameter("orgToken"));
77          settings.setCheckPolicies(Boolean.parseBoolean(request.getParameter("checkPolicies")));
78  
79          String proxyHost = request.getParameter("proxyHost");
80          if (!StringUtil.isEmptyOrSpaces(proxyHost)){
81              ProxySettings proxy = new ProxySettings();
82              proxy.setHost(proxyHost);
83  
84              String proxyPort = request.getParameter("proxyPort");
85              if (StringUtil.isNumber(proxyPort)) {
86                  proxy.setPort(Integer.parseInt(proxyPort));
87              }
88  
89              proxy.setUsername(request.getParameter("proxyUsername"));
90              String encryptedPassword = request.getParameter("encryptedProxyPassword");
91              if (!StringUtil.isEmptyOrSpaces(encryptedPassword)) {
92                  proxy.setPassword(RSACipher.decryptWebRequestData(encryptedPassword));
93              }
94  
95              settings.setProxy(proxy);
96          }
97  
98          settingsManager.setGlobalSettings(settings);
99          settingsManager.save();
100 
101         getOrCreateMessages(request).addMessage("settingsSaved", "Settings saved successfully.");
102     }
103 
104     private ActionErrors validate(final HttpServletRequest request) {
105         ActionErrors errors = new ActionErrors();
106 
107         final String orgToken = request.getParameter("orgToken");
108         if (StringUtil.isEmptyOrSpaces(orgToken)) {
109             errors.addError("invalidOrgToken", "Organization token can not be empty.");
110         }
111 
112         String host = request.getParameter("proxyHost");
113         if (!StringUtil.isEmptyOrSpaces(host)) {
114             try {
115                 new URL(host);
116             } catch (MalformedURLException e) {
117                 errors.addError("invalidProxyHost", "Host must be a valid url.");
118             }
119 
120             String proxyPort = request.getParameter("proxyPort");
121             if (!StringUtil.isEmptyOrSpaces(proxyPort)) {
122                 if (StringUtil.isNumber(proxyPort)) {
123                     final int port = Integer.parseInt(proxyPort);
124                     if (port < 1 || port > 65535) {
125                         errors.addError("invalidProxyPort", "Port must be a between 1-65535");
126                     }
127                 } else {
128                     errors.addError("invalidProxyPort", "Port must be a valid number");
129                 }
130             }
131 
132             String username = request.getParameter("proxyUsername");
133             if (!StringUtil.isEmptyOrSpaces(username) &&
134                     StringUtil.isEmptyOrSpaces(request.getParameter("encryptedProxyPassword"))) {
135                 errors.addError("invalidProxyPassword", "Password must be set if a username is specified.");
136             }
137         }
138 
139         return errors;
140     }
141 }