/*
* SecureIPreferenceStore.java
* Copyright (C) 2013 SINTEF (http://www.sintef.no)
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following
* conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*
* The MIT License (MIT)
* http://opensource.org/licenses/mit-license.php
*
*/
package eu.aniketos.wp1.ststool.threats.preferences;
import org.eclipse.core.runtime.preferences.IScopeContext;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.util.IPropertyChangeListener;
import eu.aniketos.wp1.ststool.threats.Activator;
/**
*
* @author Mauro Poggianella
*
*/
public class SecureIPreferenceStore implements IPreferenceStore {
private static final String SEED=SecureStorage.getDefault().encryptString("+?=}U]](MXQcB8zudJjlg8.zQVgTC10n%:#+");
private final IPreferenceStore PS;
private final SecureStorage secureStorage;
public SecureIPreferenceStore() {
PS = Activator.getDefault().getPreferenceStore();
if(!PS.contains(SEED)){
String seed=Long.toString(System.nanoTime());
PS.putValue(SEED, SecureStorage.getDefault().encryptString(seed));
}
long seed=PS.getLong(SEED);
secureStorage=new SecureStorage(seed);
}
public SecureIPreferenceStore(IScopeContext instance,String pluginId) {
this();
}
@Override
public void addPropertyChangeListener(IPropertyChangeListener listener) {
PS.addPropertyChangeListener(listener);
}
@Override
public void removePropertyChangeListener(IPropertyChangeListener listener) {
PS.removePropertyChangeListener(listener);
}
@Override
public void firePropertyChangeEvent(String name, Object oldValue,Object newValue) {
PS.firePropertyChangeEvent(name, oldValue, newValue);
}
@Override
public boolean needsSaving() {
return PS.needsSaving();
}
@Override
public double getDouble(String name) {
try {
return Double.parseDouble(this.getString(name));
} catch (Exception e) {
return DOUBLE_DEFAULT_DEFAULT;
}
}
@Override
public float getFloat(String name) {
try {
return Float.parseFloat(this.getString(name));
} catch (Exception e) {
return FLOAT_DEFAULT_DEFAULT;
}
}
@Override
public int getInt(String name) {
try {
return Integer.parseInt(this.getString(name));
} catch (Exception e) {
return INT_DEFAULT_DEFAULT;
}
}
@Override
public long getLong(String name) {
try {
return Long.parseLong(this.getString(name));
} catch (Exception e) {
return LONG_DEFAULT_DEFAULT;
}
}
@Override
public boolean getBoolean(String name) {
try {
return Boolean.parseBoolean(this.getString(name));
} catch (Exception e) {
return BOOLEAN_DEFAULT_DEFAULT;
}
}
@Override
public void setValue(String name, double value) {
this.setValue(name, Double.toString(value));
}
@Override
public void setValue(String name, float value) {
this.setValue(name, Float.toString(value));
}
@Override
public void setValue(String name, int value) {
this.setValue(name, Integer.toString(value));
}
@Override
public void setValue(String name, long value) {
this.setValue(name, Long.toString(value));
}
@Override
public void setValue(String name, boolean value) {
this.setValue(name, Boolean.toString(value));
}
@Override
public boolean contains(String name) {
return PS.contains(secureStorage.encryptString(name, true));
}
@Override
public void setValue(String name, String value) {
PS.setValue(secureStorage.encryptString(name, true), secureStorage.encryptString(value));
}
@Override
public void putValue(String name, String value) {
PS.putValue(secureStorage.encryptString(name, true), secureStorage.encryptString(value));
}
@Override
public String getString(String name) {
String s= secureStorage.decryptString(PS.getString(secureStorage.encryptString(name, true)));
return s!=null ? s : "";
}
@Override
public boolean isDefault(String name) {
return PS.isDefault(secureStorage.encryptString(name, true));
}
@Override
public void setDefault(String name, String defaultObject) {
PS.setDefault(secureStorage.encryptString(name, true), secureStorage.encryptString(defaultObject));
}
@Override
public String getDefaultString(String name) {
String s= secureStorage.decryptString(name);
return s!=null ? s : "";
}
@Override
public boolean getDefaultBoolean(String name) {
try {
return Boolean.parseBoolean(getDefaultString(name));
} catch (Exception e) {
return BOOLEAN_DEFAULT_DEFAULT;
}
}
@Override
public double getDefaultDouble(String name) {
try {
return Double.parseDouble(getDefaultString(name));
} catch (Exception e) {
return DOUBLE_DEFAULT_DEFAULT;
}
}
@Override
public float getDefaultFloat(String name) {
try {
return Float.parseFloat(getDefaultString(name));
} catch (Exception e) {
return FLOAT_DEFAULT_DEFAULT;
}
}
@Override
public int getDefaultInt(String name) {
try {
return Integer.parseInt(getDefaultString(name));
} catch (Exception e) {
return INT_DEFAULT_DEFAULT;
}
}
@Override
public long getDefaultLong(String name) {
try {
return Long.parseLong(getDefaultString(name));
} catch (Exception e) {
return LONG_DEFAULT_DEFAULT;
}
}
@Override
public void setDefault(String name, double value) {
this.setDefault(name,Double.toString(value));
}
@Override
public void setDefault(String name, float value) {
this.setDefault(name, Float.toString(value));
}
@Override
public void setDefault(String name, int value) {
this.setDefault(name, Integer.toString(value));
}
@Override
public void setDefault(String name, long value) {
this.setDefault(name, Long.toString(value));
}
@Override
public void setDefault(String name, boolean value) {
this.setDefault(name, Boolean.toString(value));
}
@Override
public void setToDefault(String name) {
PS.setToDefault(name);
}
}