blob: a198a424efe58647fe331c4a087f7c27ae44800b [file] [log] [blame]
/*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package utils;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.SystemUtils;
import java.io.File;
import java.io.IOException;
import java.util.List;
/**
* Little helper that adds a directory to the FlashPlayer trust settings.
* This prevents the FlashPlayer from complaining about running untrusted
* code, which will prevent the tests using the FlashPlayer from succeeding.
*
* Created by christoferdutz on 14.04.16.
*
* TODO: Clean up the tests.
* @deprecated This class is duplicated here to allow trusting SWFs till the testsuite has been migrated.
*/
public class FlashplayerSecurityHandler {
public void trustFile(File directory) {
File securityTrustFile = new File(getSecuritySettingsDirectory(), "apache-royale-maven-plugin.cfg");
if(!securityTrustFile.exists()) {
System.out.println(" - Creating new FlashPlayer security trust file at: " + securityTrustFile.getPath());
try {
if(!securityTrustFile.createNewFile()) {
throw new RuntimeException("Could not create FlashPlayer security trust file at: " +
securityTrustFile.getPath());
}
} catch (IOException e) {
throw new RuntimeException("Could not create FlashPlayer security trust file at: " +
securityTrustFile.getPath(), e);
}
} else {
System.out.println(" - Creating new FlashPlayer security trust file at: " + securityTrustFile.getPath());
}
// Check if the current directory is already listed in the file, if not, append it to the file.
try {
List<String> trustedDirectories = FileUtils.readLines(securityTrustFile, "UTF-8");
if(!trustedDirectories.contains(directory.getAbsolutePath())) {
FileUtils.writeStringToFile(securityTrustFile, directory.getAbsolutePath() + "\n", "UTF-8", true);
System.out.println(" - Added directory '" + directory.getAbsolutePath() +
"' to FlashPlayer security trust file at: " + securityTrustFile.getPath());
} else {
System.out.println(" - Directory '" + directory.getAbsolutePath() +
"' already listed in FlashPlayer security trust file at: " + securityTrustFile.getPath());
}
} catch (IOException e) {
throw new RuntimeException("Could not add directory '" + directory.getPath() +
"' to FlashPlayer security trust file", e);
}
}
private File getSecuritySettingsDirectory() {
File userHome = new File(System.getProperty("user.home"));
File securitySettingsDirectory;
if(SystemUtils.IS_OS_WINDOWS) {
// Try to get the location of the APPDATA directory from an environment-variable.
File appDataDirectory;
if(System.getenv("APPDATA") != null) {
appDataDirectory = new File(System.getenv("APPDATA"));
}
// If the environment-variable was not set, try defaults, depending on the
// detail version of Windows.
else {
// Vista did things differently.
if(SystemUtils.IS_OS_WINDOWS_VISTA) {
appDataDirectory = new File(userHome, "AppData/Roaming");
} else {
appDataDirectory = new File(userHome, "Application Data");
}
}
securitySettingsDirectory =
new File(appDataDirectory, "Macromedia/Flash Player/#Security/FlashPlayerTrust");
}
else if(SystemUtils.IS_OS_MAC) {
securitySettingsDirectory = new File(userHome,
"Library/Preferences/Macromedia/Flash Player/#Security/FlashPlayerTrust");
}
else if(SystemUtils.IS_OS_LINUX) {
securitySettingsDirectory = new File(userHome, ".macromedia/Flash_Player/#Security/FlashPlayerTrust");
}
// As the FlashPlayer is only available on Windows, Mac and Linux, this is all we can do.
else {
throw new UnsupportedOperationException(
"FlashplayerSecurityHandler not prepared for handling OS type of: " + SystemUtils.OS_NAME);
}
// If the directory didn't exist yet, create it now.
if(!securitySettingsDirectory.exists()) {
if(!securitySettingsDirectory.mkdirs()) {
throw new RuntimeException("Could not create FlashPlayer security settings directory at: " +
securitySettingsDirectory.getPath());
}
}
return securitySettingsDirectory;
}
}