1
2
3
4
5
6
7
8
9
10
11
12
13
14
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
34
35
36
37 public class GlobalSettingsController extends BaseFormXmlController {
38
39
40
41 private GlobalSettingsManager settingsManager;
42
43
44
45
46
47
48
49
50 public GlobalSettingsController(GlobalSettingsManager settingsManager) {
51 this.settingsManager = settingsManager;
52 }
53
54
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 }