package thaw.plugins;
import java.util.Iterator;
import java.util.Vector;
import thaw.core.I18n;
import thaw.core.Core;
import thaw.core.Logger;
import thaw.core.LibraryPlugin;
import thaw.gui.IconBox;
import thaw.plugins.signatures.*;
public class Signatures extends LibraryPlugin {
private Core core;
private Hsqldb db;
private SigConfigTab configTab;
public final static int DEFAULT_MIN_TRUST_LEVEL = -1; /* see Identity.trustLevelInt */
public final static String[][] DEVS = {
/* { nick, publicKey } */
{ "toad",
"CHwpbtSA+asXiF3s0xGX1hd3nA2scMMjSZbh:"+
"AKC/rtW2/X1DQH9VUzpunZgGXIlhFzFeDX4CT5nGjq7Fbkx9ipgekog5T4ElLVZ6nZDaf9t+t"+
"XRbqdBBo4SI7+OnHHJ8MVgRm5doU6bWtMbtEQ5E3LQk8174TNoWKGJ2cuvEsmzgE4BQZPLErs"+
"1rVfAfAziI0YPWFHKq2OzEOGW5" },
{ "nextgens",
"CHwpbtSA+asXiF3s0xGX1hd3nA2scMMjSZbh:"+
"AM8giqR7C4ND7RxQzByb/ZOLEPoNRd818proqkW5rvqpPd5ODZvJYLZgDC+fe01BU0MFnE7LP"+
"tolulBNxiz4AaIyL51FnnzZt9Dp60h9lgawxttQ2DHx553hszZ6LQ5iAvzDivjmKGzWa6p17F"+
"+qo2OaGRXL3SGk1fsS40qgdVsP" },
{ "Jflesch",
"CHwpbtSA+asXiF3s0xGX1hd3nA2scMMjSZbh:"+
"AIf5yXowXT/0Aa5UhwzOg/kZQnHar/dQl1lFqrcB6TKXf42LZecR1tNV9Hsxboa3Eo5JWdK9T"+
"AnHCLBu2lkYUOtcqEH2U0DkAfR11AYn2sdazk/LSFicAq7Ic6ZO7An2RJJUtcHY7pB164GZ76"+
"jpOn29iPagMq17n4zbZNqe03q1" },
{ "bback",
"CHwpbtSA+asXiF3s0xGX1hd3nA2scMMjSZbh:"+
"AKLw/y7/oDmXYYT0KWNeAfJPcVRgns+Nw9rJ0X/2JLt7o73Yt9PMkx5STJhlJekF36sf+l3vk"+
"TzPNHa2xmyjHms2biHl3jGy9dHdAduqNKs99PyW0Z19/QbZ1HEeeCXgllKE+z4aHgWK2CzeID"+
"6wPkzZLjFInKLb3gZtQLh5cm3n" },
{ "Zothar",
"CHwpbtSA+asXiF3s0xGX1hd3nA2scMMjSZbh:"+
"AL81sQtHFj5QZl/6GoG1fP0lmdHQOtvVuuxN60MWx1kLqByk17XlnP/wxGZyffSRdnZSmZoN0"+
"dprYrFJo9qj3mhsqmA8Gk50mkfX/gnkWzT2ChwkWIvk/+gPtOLXXx4yrGQlnNIQQ/V7y3YaN9"+
"706zYgySMcW1cv8eqhPxNZ7yYB" }
/* TODO:
* Missing:
* - bombe
*/
/* Can't do:
* - sanity : no definitive key
*/
};
/**
* because we must be sure that we won't be used anymore when we will
* unregister from the db
*/
private int used;
public Signatures() {
used = 0;
}
public boolean run(Core core) {
this.core = core;
core.getConfig().addListener("minTrustLevel", this);
used++;
if (observers.size() > 0)
observers = new Vector();
if(core.getPluginManager().getPlugin("thaw.plugins.Hsqldb") == null) {
Logger.info(this, "Loading Hsqldb plugin");
if(core.getPluginManager().loadPlugin("thaw.plugins.Hsqldb") == null
|| !core.getPluginManager().runPlugin("thaw.plugins.Hsqldb")) {
Logger.error(this, "Unable to load thaw.plugins.Hsqldb !");
return false;
}
}
db = (Hsqldb)core.getPluginManager().getPlugin("thaw.plugins.Hsqldb");
db.registerChild(this);
DatabaseManager.init(db, core.getConfig(),
core.getSplashScreen());
if (core.getConfig().getValue("minTrustLevel") == null)
core.getConfig().setValue("minTrustLevel", Integer.toString(DEFAULT_MIN_TRUST_LEVEL));
configTab = new SigConfigTab(core.getConfig(), core.getConfigWindow(), db);
core.getConfigWindow().addTab(I18n.getMessage("thaw.plugin.signature.signatures"),
thaw.gui.IconBox.minPeers,
configTab.getPanel());
return true;
}
public void realStart() {
used++;
}
public void stop() {
configTab.destroy();
core.getConfigWindow().removeTab(configTab.getPanel());
used--;
if (used == 0) {
observers = new Vector();
db.unregisterChild(this);
db = null;
}
}
public void realStop() {
used--;
if (used == 0) {
observers = new Vector();
db.unregisterChild(this);
db = null;
}
}
public String getNameForUser() {
return I18n.getMessage("thaw.plugin.signature.pluginName");
}
public javax.swing.ImageIcon getIcon() {
return IconBox.identity;
}
public static interface SignaturesObserver {
/**
* Id in the db may not be defined => you may have to query the db to know it
* @param i
*/
public void publicIdentityAdded(Identity i);
/**
* Id in the db may not be defined => you may have to query the db to know it
* @param i
*/
public void privateIdentityAdded(Identity i);
public void identityUpdated(Identity i);
/* we never remove identities ? ... hmmmm */
}
private static Vector observers = new Vector();
public static void addObserver(SignaturesObserver o) {
if (!observers.contains(o))
observers.add(o);
}
public static void deleteObserver(SignaturesObserver o) {
while (observers.remove(o));
}
public static void notifyPublicIdentityAdded(Identity i) {
for (Iterator it = observers.iterator();
it.hasNext();) {
((SignaturesObserver)it.next()).publicIdentityAdded(i);
}
}
public static void notifyPrivateIdentityAdded(Identity i) {
for (Iterator it = observers.iterator();
it.hasNext();) {
((SignaturesObserver)it.next()).privateIdentityAdded(i);
}
}
public static void notifyIdentityUpdated(Identity i) {
for (Iterator it = observers.iterator();
it.hasNext();) {
((SignaturesObserver)it.next()).identityUpdated(i);
}
}
}