| 1 | package com.jsql.util; | |
| 2 | ||
| 3 | import com.jsql.model.InjectionModel; | |
| 4 | import com.jsql.util.GitUtil.ShowOnConsole; | |
| 5 | import org.apache.commons.lang3.StringUtils; | |
| 6 | import org.apache.logging.log4j.LogManager; | |
| 7 | import org.apache.logging.log4j.Logger; | |
| 8 | ||
| 9 | import java.net.Socket; | |
| 10 | import java.util.Optional; | |
| 11 | import java.util.prefs.Preferences; | |
| 12 | ||
| 13 | /** | |
| 14 | * Utility class managing proxy settings. | |
| 15 | * The proxy configuration is saved as preferences and applied to the JVM. | |
| 16 | */ | |
| 17 | public class ProxyUtil { | |
| 18 | | |
| 19 | private static final Logger LOGGER = LogManager.getRootLogger(); | |
| 20 | | |
| 21 | /** | |
| 22 | * Proxy IP address or name. | |
| 23 | */ | |
| 24 | private String proxyAddressHttp; | |
| 25 | private String proxyAddressHttps; | |
| 26 | ||
| 27 | /** | |
| 28 | * Proxy port number. | |
| 29 | */ | |
| 30 | private String proxyPortHttp; | |
| 31 | private String proxyPortHttps; | |
| 32 | | |
| 33 | /** | |
| 34 | * True if connection is proxified. | |
| 35 | */ | |
| 36 | private boolean isUsingProxyHttp = false; | |
| 37 | private boolean isUsingProxyHttps = false; | |
| 38 | | |
| 39 | private static final String PROPERTIES_HTTP_PROXY_HOST = "http.proxyHost"; | |
| 40 | private static final String PROPERTIES_HTTP_PROXY_PORT = "http.proxyPort"; | |
| 41 | private static final String PROPERTIES_HTTPS_PROXY_HOST = "https.proxyHost"; | |
| 42 | private static final String PROPERTIES_HTTPS_PROXY_PORT = "https.proxyPort"; | |
| 43 | | |
| 44 | /** | |
| 45 | * Save proxy configuration into the JVM preferences. | |
| 46 | * @param isUsingProxyHttp whether the connection is using a proxy | |
| 47 | * @param proxyAddressHttp IP address or name of the proxy | |
| 48 | * @param proxyPortHttp port number of proxy | |
| 49 | */ | |
| 50 | public void setPreferences( | |
| 51 | boolean isUsingProxyHttp, String proxyAddressHttp, String proxyPortHttp, | |
| 52 | boolean isUsingProxyHttps, String proxyAddressHttps, String proxyPortHttps | |
| 53 | ) { | |
| 54 | // Set the application proxy settings | |
| 55 |
1
1. setPreferences : removed call to com/jsql/util/ProxyUtil::setUsingProxyHttp → NO_COVERAGE |
this.setUsingProxyHttp(isUsingProxyHttp); |
| 56 |
1
1. setPreferences : removed call to com/jsql/util/ProxyUtil::setProxyAddressHttp → NO_COVERAGE |
this.setProxyAddressHttp(proxyAddressHttp); |
| 57 |
1
1. setPreferences : removed call to com/jsql/util/ProxyUtil::setProxyPortHttp → NO_COVERAGE |
this.setProxyPortHttp(proxyPortHttp); |
| 58 | | |
| 59 |
1
1. setPreferences : removed call to com/jsql/util/ProxyUtil::setUsingProxyHttps → NO_COVERAGE |
this.setUsingProxyHttps(isUsingProxyHttps); |
| 60 |
1
1. setPreferences : removed call to com/jsql/util/ProxyUtil::setProxyAddressHttps → NO_COVERAGE |
this.setProxyAddressHttps(proxyAddressHttps); |
| 61 |
1
1. setPreferences : removed call to com/jsql/util/ProxyUtil::setProxyPortHttps → NO_COVERAGE |
this.setProxyPortHttps(proxyPortHttps); |
| 62 | ||
| 63 | // Save the settings in the JVM | |
| 64 | Preferences prefs = Preferences.userRoot().node(InjectionModel.class.getName()); | |
| 65 |
1
1. setPreferences : removed call to java/util/prefs/Preferences::putBoolean → NO_COVERAGE |
prefs.putBoolean("isUsingProxy", this.isUsingProxyHttp()); |
| 66 |
1
1. setPreferences : removed call to java/util/prefs/Preferences::put → NO_COVERAGE |
prefs.put("proxyAddress", this.getProxyAddressHttp()); |
| 67 |
1
1. setPreferences : removed call to java/util/prefs/Preferences::put → NO_COVERAGE |
prefs.put("proxyPort", this.getProxyPortHttp()); |
| 68 | | |
| 69 |
1
1. setPreferences : removed call to java/util/prefs/Preferences::putBoolean → NO_COVERAGE |
prefs.putBoolean("isUsingProxyHttps", this.isUsingProxyHttps()); |
| 70 |
1
1. setPreferences : removed call to java/util/prefs/Preferences::put → NO_COVERAGE |
prefs.put("proxyAddressHttps", this.getProxyAddressHttps()); |
| 71 |
1
1. setPreferences : removed call to java/util/prefs/Preferences::put → NO_COVERAGE |
prefs.put("proxyPortHttps", this.getProxyPortHttps()); |
| 72 | ||
| 73 | // Change the JVM configuration | |
| 74 |
1
1. setPreferences : negated conditional → NO_COVERAGE |
if (this.isUsingProxyHttp()) { |
| 75 | System.setProperty(ProxyUtil.PROPERTIES_HTTP_PROXY_HOST, this.getProxyAddressHttp()); | |
| 76 | System.setProperty(ProxyUtil.PROPERTIES_HTTP_PROXY_PORT, this.getProxyPortHttp()); | |
| 77 | } else { | |
| 78 | System.setProperty(ProxyUtil.PROPERTIES_HTTP_PROXY_HOST, StringUtils.EMPTY); | |
| 79 | System.setProperty(ProxyUtil.PROPERTIES_HTTP_PROXY_PORT, StringUtils.EMPTY); | |
| 80 | } | |
| 81 |
1
1. setPreferences : negated conditional → NO_COVERAGE |
if (this.isUsingProxyHttps()) { |
| 82 | System.setProperty(ProxyUtil.PROPERTIES_HTTPS_PROXY_HOST, this.getProxyAddressHttps()); | |
| 83 | System.setProperty(ProxyUtil.PROPERTIES_HTTPS_PROXY_PORT, this.getProxyPortHttps()); | |
| 84 | } else { | |
| 85 | System.setProperty(ProxyUtil.PROPERTIES_HTTPS_PROXY_HOST, StringUtils.EMPTY); | |
| 86 | System.setProperty(ProxyUtil.PROPERTIES_HTTPS_PROXY_PORT, StringUtils.EMPTY); | |
| 87 | } | |
| 88 | } | |
| 89 | | |
| 90 | /** | |
| 91 | * Initialize proxy information from JVM already saved preferences. | |
| 92 | */ | |
| 93 | public void initProxy() { | |
| 94 | // Use Preferences API to persist proxy configuration | |
| 95 | var preferences = Preferences.userRoot().node(InjectionModel.class.getName()); | |
| 96 | ||
| 97 | // Default proxy disabled | |
| 98 |
1
1. initProxy : removed call to com/jsql/util/ProxyUtil::setUsingProxyHttp → NO_COVERAGE |
this.setUsingProxyHttp(preferences.getBoolean("isUsingProxy", false)); |
| 99 |
1
1. initProxy : removed call to com/jsql/util/ProxyUtil::setUsingProxyHttps → NO_COVERAGE |
this.setUsingProxyHttps(preferences.getBoolean("isUsingProxyHttps", false)); |
| 100 | ||
| 101 | // Default proxy config | |
| 102 |
1
1. initProxy : removed call to com/jsql/util/ProxyUtil::setProxyAddressHttp → NO_COVERAGE |
this.setProxyAddressHttp(preferences.get("proxyAddress", "127.0.0.1")); |
| 103 |
1
1. initProxy : removed call to com/jsql/util/ProxyUtil::setProxyPortHttp → NO_COVERAGE |
this.setProxyPortHttp(preferences.get("proxyPort", "8118")); |
| 104 | | |
| 105 |
1
1. initProxy : removed call to com/jsql/util/ProxyUtil::setProxyAddressHttps → NO_COVERAGE |
this.setProxyAddressHttps(preferences.get("proxyAddressHttps", "127.0.0.1")); |
| 106 |
1
1. initProxy : removed call to com/jsql/util/ProxyUtil::setProxyPortHttps → NO_COVERAGE |
this.setProxyPortHttps(preferences.get("proxyPortHttps", "8118")); |
| 107 | | |
| 108 | // Change the JVM configuration | |
| 109 |
1
1. initProxy : negated conditional → NO_COVERAGE |
if (this.isUsingProxyHttp()) { |
| 110 | System.setProperty(ProxyUtil.PROPERTIES_HTTP_PROXY_HOST, this.getProxyAddressHttp()); | |
| 111 | System.setProperty(ProxyUtil.PROPERTIES_HTTP_PROXY_PORT, this.getProxyPortHttp()); | |
| 112 | } | |
| 113 |
1
1. initProxy : negated conditional → NO_COVERAGE |
if (this.isUsingProxyHttps()) { |
| 114 | System.setProperty(ProxyUtil.PROPERTIES_HTTPS_PROXY_HOST, this.getProxyAddressHttps()); | |
| 115 | System.setProperty(ProxyUtil.PROPERTIES_HTTPS_PROXY_PORT, this.getProxyPortHttps()); | |
| 116 | } | |
| 117 | } | |
| 118 | | |
| 119 | /** | |
| 120 | * Check if enabled proxies are up when application starts, | |
| 121 | * injection begins,- checking IP, sending reports. | |
| 122 | * Display logs except when sending unhandled exception. | |
| 123 | * @param showOnConsole whether the message should be presented to the user | |
| 124 | * @return true if enabled proxies are up | |
| 125 | */ | |
| 126 | public boolean isNotLive(ShowOnConsole showOnConsole) { | |
| 127 | var isLive = true; | |
| 128 | if ( | |
| 129 |
1
1. isNotLive : negated conditional → NO_COVERAGE |
this.isUsingProxyHttp() |
| 130 |
1
1. isNotLive : negated conditional → NO_COVERAGE |
&& StringUtils.isNotEmpty(this.getProxyAddressHttp()) |
| 131 |
1
1. isNotLive : negated conditional → NO_COVERAGE |
&& StringUtils.isNotEmpty(this.getProxyPortHttp()) |
| 132 | ) { | |
| 133 | isLive = this.isSocketOn(showOnConsole, this.getProxyAddressHttp(), this.getProxyPortHttp(), "HTTP"); | |
| 134 | } | |
| 135 | if ( | |
| 136 |
1
1. isNotLive : negated conditional → NO_COVERAGE |
this.isUsingProxyHttps() |
| 137 |
1
1. isNotLive : negated conditional → NO_COVERAGE |
&& StringUtils.isNotEmpty(this.getProxyAddressHttps()) |
| 138 |
1
1. isNotLive : negated conditional → NO_COVERAGE |
&& StringUtils.isNotEmpty(this.getProxyPortHttps()) |
| 139 | ) { | |
| 140 | isLive = this.isSocketOn(showOnConsole, this.getProxyAddressHttps(), this.getProxyPortHttps(), "HTTPS"); | |
| 141 | } | |
| 142 |
2
1. isNotLive : negated conditional → NO_COVERAGE 2. isNotLive : replaced boolean return with true for com/jsql/util/ProxyUtil::isNotLive → NO_COVERAGE |
return !isLive; |
| 143 | } | |
| 144 | | |
| 145 | private boolean isSocketOn(ShowOnConsole showOnConsole, String address, String port, String protocol) { | |
| 146 | var isSocketOn = true; | |
| 147 | try { | |
| 148 | var socket = new Socket(address, Integer.parseInt(port)); | |
| 149 |
1
1. isSocketOn : removed call to java/net/Socket::close → NO_COVERAGE |
socket.close(); |
| 150 |
1
1. isSocketOn : removed call to com/jsql/util/ProxyUtil::logStatus → NO_COVERAGE |
this.logStatus(showOnConsole, address, port, protocol); |
| 151 | } catch (Exception e) { | |
| 152 | isSocketOn = false; | |
| 153 |
1
1. isSocketOn : removed call to com/jsql/util/ProxyUtil::logStatus → NO_COVERAGE |
this.logStatus(showOnConsole, address, port, protocol, e); |
| 154 | } | |
| 155 |
2
1. isSocketOn : replaced boolean return with false for com/jsql/util/ProxyUtil::isSocketOn → NO_COVERAGE 2. isSocketOn : replaced boolean return with true for com/jsql/util/ProxyUtil::isSocketOn → NO_COVERAGE |
return isSocketOn; |
| 156 | } | |
| 157 | | |
| 158 | private void logStatus(ShowOnConsole showOnConsole, String address, String port, String protocol) { | |
| 159 |
1
1. logStatus : negated conditional → NO_COVERAGE |
if (showOnConsole == ShowOnConsole.YES) { |
| 160 | LOGGER.log( | |
| 161 | LogLevelUtil.CONSOLE_SUCCESS, | |
| 162 | "Connection successful to {} proxy {}:{}", | |
| 163 |
1
1. lambda$logStatus$0 : replaced return value with null for com/jsql/util/ProxyUtil::lambda$logStatus$0 → NO_COVERAGE |
() -> protocol, |
| 164 |
1
1. lambda$logStatus$1 : replaced return value with null for com/jsql/util/ProxyUtil::lambda$logStatus$1 → NO_COVERAGE |
() -> address, |
| 165 |
1
1. lambda$logStatus$2 : replaced return value with null for com/jsql/util/ProxyUtil::lambda$logStatus$2 → NO_COVERAGE |
() ->port |
| 166 | ); | |
| 167 | } | |
| 168 | } | |
| 169 | | |
| 170 | private void logStatus(ShowOnConsole showOnConsole, String address, String port, String protocol, Exception e) { | |
| 171 |
1
1. logStatus : negated conditional → NO_COVERAGE |
if (showOnConsole == ShowOnConsole.YES) { |
| 172 | String message = Optional.ofNullable(e.getMessage()).orElse(StringUtils.EMPTY); | |
| 173 | LOGGER.log( | |
| 174 | LogLevelUtil.CONSOLE_ERROR, | |
| 175 |
1
1. lambda$logStatus$3 : replaced return value with null for com/jsql/util/ProxyUtil::lambda$logStatus$3 → NO_COVERAGE |
() -> String.format( |
| 176 | "Connection to %s proxy %s:%s failed, verify your proxy settings: %s", | |
| 177 | protocol, | |
| 178 | address, | |
| 179 | port, | |
| 180 | message.replace(e.getClass().getName() +": ", StringUtils.EMPTY) | |
| 181 | ) | |
| 182 | ); | |
| 183 | } | |
| 184 | } | |
| 185 | | |
| 186 | | |
| 187 | // Getters and setters | |
| 188 | | |
| 189 | public String getProxyAddressHttp() { | |
| 190 |
1
1. getProxyAddressHttp : replaced return value with "" for com/jsql/util/ProxyUtil::getProxyAddressHttp → NO_COVERAGE |
return this.proxyAddressHttp; |
| 191 | } | |
| 192 | ||
| 193 | public void setProxyAddressHttp(String proxyAddressHttp) { | |
| 194 | this.proxyAddressHttp = proxyAddressHttp; | |
| 195 | } | |
| 196 | ||
| 197 | public String getProxyPortHttp() { | |
| 198 |
1
1. getProxyPortHttp : replaced return value with "" for com/jsql/util/ProxyUtil::getProxyPortHttp → NO_COVERAGE |
return this.proxyPortHttp; |
| 199 | } | |
| 200 | ||
| 201 | public void setProxyPortHttp(String proxyPortHttp) { | |
| 202 | this.proxyPortHttp = proxyPortHttp; | |
| 203 | } | |
| 204 | ||
| 205 | public boolean isUsingProxyHttp() { | |
| 206 |
2
1. isUsingProxyHttp : replaced boolean return with false for com/jsql/util/ProxyUtil::isUsingProxyHttp → NO_COVERAGE 2. isUsingProxyHttp : replaced boolean return with true for com/jsql/util/ProxyUtil::isUsingProxyHttp → NO_COVERAGE |
return this.isUsingProxyHttp; |
| 207 | } | |
| 208 | ||
| 209 | public void setUsingProxyHttp(boolean isUsingProxyHttp) { | |
| 210 | this.isUsingProxyHttp = isUsingProxyHttp; | |
| 211 | } | |
| 212 | ||
| 213 | public String getProxyAddressHttps() { | |
| 214 |
1
1. getProxyAddressHttps : replaced return value with "" for com/jsql/util/ProxyUtil::getProxyAddressHttps → NO_COVERAGE |
return this.proxyAddressHttps; |
| 215 | } | |
| 216 | ||
| 217 | public void setProxyAddressHttps(String proxyAddressHttps) { | |
| 218 | this.proxyAddressHttps = proxyAddressHttps; | |
| 219 | } | |
| 220 | ||
| 221 | public String getProxyPortHttps() { | |
| 222 |
1
1. getProxyPortHttps : replaced return value with "" for com/jsql/util/ProxyUtil::getProxyPortHttps → NO_COVERAGE |
return this.proxyPortHttps; |
| 223 | } | |
| 224 | ||
| 225 | public void setProxyPortHttps(String proxyPortHttps) { | |
| 226 | this.proxyPortHttps = proxyPortHttps; | |
| 227 | } | |
| 228 | ||
| 229 | public boolean isUsingProxyHttps() { | |
| 230 |
2
1. isUsingProxyHttps : replaced boolean return with true for com/jsql/util/ProxyUtil::isUsingProxyHttps → NO_COVERAGE 2. isUsingProxyHttps : replaced boolean return with false for com/jsql/util/ProxyUtil::isUsingProxyHttps → NO_COVERAGE |
return this.isUsingProxyHttps; |
| 231 | } | |
| 232 | ||
| 233 | public void setUsingProxyHttps(boolean isUsingProxyHttps) { | |
| 234 | this.isUsingProxyHttps = isUsingProxyHttps; | |
| 235 | } | |
| 236 | } | |
Mutations | ||
| 55 |
1.1 |
|
| 56 |
1.1 |
|
| 57 |
1.1 |
|
| 59 |
1.1 |
|
| 60 |
1.1 |
|
| 61 |
1.1 |
|
| 65 |
1.1 |
|
| 66 |
1.1 |
|
| 67 |
1.1 |
|
| 69 |
1.1 |
|
| 70 |
1.1 |
|
| 71 |
1.1 |
|
| 74 |
1.1 |
|
| 81 |
1.1 |
|
| 98 |
1.1 |
|
| 99 |
1.1 |
|
| 102 |
1.1 |
|
| 103 |
1.1 |
|
| 105 |
1.1 |
|
| 106 |
1.1 |
|
| 109 |
1.1 |
|
| 113 |
1.1 |
|
| 129 |
1.1 |
|
| 130 |
1.1 |
|
| 131 |
1.1 |
|
| 136 |
1.1 |
|
| 137 |
1.1 |
|
| 138 |
1.1 |
|
| 142 |
1.1 2.2 |
|
| 149 |
1.1 |
|
| 150 |
1.1 |
|
| 153 |
1.1 |
|
| 155 |
1.1 2.2 |
|
| 159 |
1.1 |
|
| 163 |
1.1 |
|
| 164 |
1.1 |
|
| 165 |
1.1 |
|
| 171 |
1.1 |
|
| 175 |
1.1 |
|
| 190 |
1.1 |
|
| 198 |
1.1 |
|
| 206 |
1.1 2.2 |
|
| 214 |
1.1 |
|
| 222 |
1.1 |
|
| 230 |
1.1 2.2 |