@Override public MaterialConfig config() { return new SvnMaterialConfig(url, userName, getPassword(), checkExternals, goCipher, autoUpdate, filter, invertFilter, folder, name); }
private CRSvnMaterial svnMaterialToCRSvnMaterial(String materialName, SvnMaterialConfig svnMaterial) { CRSvnMaterial crSvnMaterial = new CRSvnMaterial(materialName, svnMaterial.getFolder(), svnMaterial.isAutoUpdate(), svnMaterial.getUrl(), svnMaterial.getUserName(), null, svnMaterial.isCheckExternals(), svnMaterial.isInvertFilter(), svnMaterial.filter().ignoredFileNames()); crSvnMaterial.setEncryptedPassword(svnMaterial.getEncryptedPassword()); return crSvnMaterial; }
public SvnMaterial(SvnMaterialConfig config) { this(config.getUrl(), config.getUserName(), config.getPassword(), config.isCheckExternals(), config.getGoCipher()); this.autoUpdate = config.getAutoUpdate(); this.filter = config.rawFilter(); this.invertFilter = config.getInvertFilter(); this.folder = config.getFolder(); this.name = config.getName(); }
private void expandExternals(MaterialConfig configuredMaterial, MaterialConfigs expandedMaterials) { SvnMaterialConfig svnMaterialConfig = (SvnMaterialConfig) configuredMaterial; if (!svnMaterialConfig.isCheckExternals()) { return; } List<SvnExternal> urLs = svn(svnMaterialConfig).getAllExternalURLs(); for (SvnExternal externalUrl : urLs) { SvnMaterialConfig svnMaterial = new SvnMaterialConfig(externalUrl.getURL(), svnMaterialConfig.getUserName(), svnMaterialConfig.getPassword(), true, svnMaterialConfig.folderFor(externalUrl.getFolder())); svnMaterial.setFilter(svnMaterialConfig.filter()); expandedMaterials.add(svnMaterial); } }
@Test public void shouldSetConfigAttributes() { SvnMaterialConfig svnMaterialConfig = new SvnMaterialConfig("", "", "", false); Map<String, String> map = new HashMap<>(); map.put(SvnMaterialConfig.URL, "url"); map.put(SvnMaterialConfig.USERNAME, "username"); map.put(SvnMaterialConfig.CHECK_EXTERNALS, "true"); map.put(ScmMaterialConfig.FOLDER, "folder"); map.put(ScmMaterialConfig.AUTO_UPDATE, "0"); map.put(ScmMaterialConfig.FILTER, "/root,/**/*.help"); map.put(AbstractMaterialConfig.MATERIAL_NAME, "material-name"); svnMaterialConfig.setConfigAttributes(map); assertThat(svnMaterialConfig.getUrl(), is("url")); assertThat(svnMaterialConfig.getUserName(), is("username")); assertThat(svnMaterialConfig.isCheckExternals(), is(true)); assertThat(svnMaterialConfig.getFolder(), is("folder")); assertThat(svnMaterialConfig.getName(), is(new CaseInsensitiveString("material-name"))); assertThat(svnMaterialConfig.isAutoUpdate(), is(false)); assertThat(svnMaterialConfig.filter(), is(new Filter(new IgnoredFiles("/root"), new IgnoredFiles("/**/*.help")))); }
static void toJSON(OutputWriter json, SvnMaterialConfig material) { json.add("name", material.getName()); json.add("auto_update", material.getAutoUpdate()); json.add("url", material.getUrl()); json.add("check_externals", material.isCheckExternals()); json.add("username", material.getUserName()); json.addIfNotNull("encrypted_password", material.getEncryptedPassword()); }
private Subversion svn(SvnMaterialConfig svnMaterialConfig) { String cacheKey = cacheKeyForSubversionMaterialCommand(svnMaterialConfig.getFingerprint()); Subversion svnLazyLoaded = (SvnCommand) goCache.get(cacheKey); if (svnLazyLoaded == null || !svnLazyLoaded.getUrl().forCommandline().equals(svnMaterialConfig.getUrl())) { synchronized (cacheKey) { svnLazyLoaded = (SvnCommand) goCache.get(cacheKey); if (svnLazyLoaded == null || !svnLazyLoaded.getUrl().forCommandline().equals(svnMaterialConfig.getUrl())) { svnLazyLoaded = new SvnCommand(svnMaterialConfig.getFingerprint(), svnMaterialConfig.getUrl(), svnMaterialConfig.getUserName(), svnMaterialConfig.getPassword(), svnMaterialConfig.isCheckExternals()); goCache.put(cacheKeyForSubversionMaterialCommand(svnMaterialConfig.getFingerprint()), svnLazyLoaded); } } } return svnLazyLoaded; }
public static void toJSON(OutputWriter jsonWriter, SvnMaterialConfig svnMaterialConfig) { ScmMaterialRepresenter.toJSON(jsonWriter, svnMaterialConfig); jsonWriter.add("check_externals", svnMaterialConfig.isCheckExternals()); jsonWriter.add("username", svnMaterialConfig.getUserName()); jsonWriter.addIfNotNull("encrypted_password", svnMaterialConfig.getEncryptedPassword()); }
@Test public void setConfigAttributes_shouldUpdatePasswordWhenPasswordChangedBooleanChanged() throws Exception { SvnMaterialConfig svnMaterial = new SvnMaterialConfig("", "", "notSoSecret", false); Map<String, String> map = new HashMap<>(); map.put(SvnMaterialConfig.PASSWORD, "secret"); map.put(SvnMaterialConfig.PASSWORD_CHANGED, "1"); svnMaterial.setConfigAttributes(map); assertThat(ReflectionUtil.getField(svnMaterial, "password"), is(nullValue())); assertThat(svnMaterial.getPassword(), is("secret")); assertThat(svnMaterial.getEncryptedPassword(), is(new GoCipher().encrypt("secret"))); //Dont change map.put(SvnMaterialConfig.PASSWORD, "Hehehe"); map.put(SvnMaterialConfig.PASSWORD_CHANGED, "0"); svnMaterial.setConfigAttributes(map); assertThat(ReflectionUtil.getField(svnMaterial, "password"), is(nullValue())); assertThat(svnMaterial.getPassword(), is("secret")); assertThat(svnMaterial.getEncryptedPassword(), is(new GoCipher().encrypt("secret"))); map.put(SvnMaterialConfig.PASSWORD, ""); map.put(SvnMaterialConfig.PASSWORD_CHANGED, "1"); svnMaterial.setConfigAttributes(map); assertThat(svnMaterial.getPassword(), is(nullValue())); assertThat(svnMaterial.getEncryptedPassword(), is(nullValue())); }
static SvnMaterialConfig fromJSON(JsonReader json) { SvnMaterialConfig materialConfig = new SvnMaterialConfig(); json.readStringIfPresent("name", materialConfig::setName); json.readBooleanIfPresent("auto_update", materialConfig::setAutoUpdate); json.readStringIfPresent("url", materialConfig::setUrl); json.readBooleanIfPresent("check_externals", materialConfig::setCheckExternals); json.readStringIfPresent("username", materialConfig::setUserName); String password = json.getStringOrDefault("password", null); String encryptedPassword = json.getStringOrDefault("encrypted_password", null); materialConfig.setEncryptedPassword(PASSWORD_DESERIALIZER.deserialize(password, encryptedPassword, materialConfig)); return materialConfig; } }
@Test public void shouldCopyOverPasswordWhenConvertingToConfig() throws Exception { SvnMaterial material = new SvnMaterial("abc", "def", "ghi", false); SvnMaterialConfig config = (SvnMaterialConfig) material.config(); assertThat(config.getEncryptedPassword(), is(not(Matchers.nullValue()))); assertThat(config.getPassword(), is("ghi")); }
@Test public void shouldReturnTheUrl() { String url = "git@github.com/my/repo"; SvnMaterialConfig config = new SvnMaterialConfig(); config.setUrl(url); assertThat(config.getUrl(), is(url)); }
@Test public void validate_shouldEnsureUrlIsNotBlank() { SvnMaterialConfig svnMaterialConfig = new SvnMaterialConfig("", "", "", false); svnMaterialConfig.validate(new ConfigSaveValidationContext(null)); assertThat(svnMaterialConfig.errors().on(SvnMaterialConfig.URL), is("URL cannot be blank")); }
} else if (crScmMaterial instanceof CRSvnMaterial) { CRSvnMaterial crSvnMaterial = (CRSvnMaterial) crScmMaterial; SvnMaterialConfig svnMaterialConfig = new SvnMaterialConfig( crSvnMaterial.getUrl(), crSvnMaterial.getUserName(), crSvnMaterial.isCheckExternals(), cipher); if (crSvnMaterial.getEncryptedPassword() != null) { svnMaterialConfig.setEncryptedPassword(crSvnMaterial.getEncryptedPassword()); } else { svnMaterialConfig.setPassword(crSvnMaterial.getPassword());
@Test public void validate_shouldNotAllowDisabledAutoUpdate() { CruiseConfig cruiseConfig = new BasicCruiseConfig(); SvnMaterialConfig svn = new SvnMaterialConfig("url", false); svn.setAutoUpdate(false); ConfigRepoConfig configRepoConfig = new ConfigRepoConfig(svn,"plug"); cruiseConfig.setConfigRepos(new ConfigReposConfig(configRepoConfig)); ConfigSaveValidationContext validationContext = ConfigSaveValidationContext.forChain(cruiseConfig); configRepoConfig.validate(validationContext); assertThat(svn.errors().isEmpty(),is(false)); assertThat(svn.errors().on("autoUpdate"), is("Configuration repository material 'url' must have autoUpdate enabled.")); }
@Test public void validate_shouldEnsureDestFilePathIsValid() { SvnMaterialConfig svnMaterialConfig = new SvnMaterialConfig("/foo", "", "", false); svnMaterialConfig.setConfigAttributes(Collections.singletonMap(ScmMaterialConfig.FOLDER, "../a")); svnMaterialConfig.validate(new ConfigSaveValidationContext(null)); assertThat(svnMaterialConfig.errors().on(SvnMaterialConfig.FOLDER), is("Dest folder '../a' is not valid. It must be a sub-directory of the working folder.")); }
@Test public void shouldReturnNullIfUrlForMaterialNotSpecified() { SvnMaterialConfig config = new SvnMaterialConfig(); assertNull(config.getUrl()); }
@Test public void shouldErrorOutWhenEncryptedPasswordIsInvalid() { SvnMaterialConfig svnMaterialConfig = new SvnMaterialConfig(); PasswordDeserializer passwordDeserializer = new PasswordDeserializer(); passwordDeserializer.deserialize(null, "invalidEncryptedPassword", svnMaterialConfig); assertThat(svnMaterialConfig.errors().getAllOn("encryptedPassword"), is(Arrays.asList("Encrypted value for password is invalid. This usually happens when the cipher text is invalid."))); }
MaterialConfigs materialConfigs = config.allPipelines().get(0).materialConfigs(); SvnMaterialConfig svnMaterialConfig = (SvnMaterialConfig) materialConfigs.get(0); assertThat(svnMaterialConfig.getPassword(), is(plainText)); assertThat(svnMaterialConfig.getEncryptedPassword(), startsWith("AES:")); assertThat(svnMaterialConfig.getFilterAsString(), is("**/*")); TfsMaterialConfig tfs = (TfsMaterialConfig) materialConfigs.get(1); assertThat(tfs.getPassword(), is(plainText));
@Test public void validate_shouldEnsureUrlIsNotNull() { SvnMaterialConfig svnMaterialConfig = new SvnMaterialConfig(); svnMaterialConfig.setUrl(null); svnMaterialConfig.validate(new ConfigSaveValidationContext(null)); assertThat(svnMaterialConfig.errors().on(SvnMaterialConfig.URL), is("URL cannot be blank")); }