483 lines
13 KiB
C#
483 lines
13 KiB
C#
/***********************************************************************
|
|
*
|
|
* Copyright (C) 2005-2006 Novell, Inc.
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; version 2.1
|
|
* of the License.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Library General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free
|
|
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
*
|
|
* To contact Novell about this file by physical or electronic mail,
|
|
* you may find current contact information at www.novell.com.
|
|
*
|
|
***********************************************************************/
|
|
|
|
using System;
|
|
using System.Collections;
|
|
using System.Xml;
|
|
using System.Xml.Serialization;
|
|
|
|
namespace Novell.CASA.CASAPolicy
|
|
{
|
|
public enum StoreKeyType
|
|
{
|
|
KW_KEY = 1,
|
|
GK_KEY,
|
|
MZ_KEY,
|
|
FX_KEY,
|
|
CASA_KEY
|
|
}
|
|
|
|
abstract public class LinkKey
|
|
{
|
|
protected StoreKeyType keyType;
|
|
public StoreKeyType KeyType
|
|
{
|
|
get
|
|
{
|
|
return keyType;
|
|
}
|
|
}
|
|
|
|
protected string storeName;
|
|
public string StoreName
|
|
{
|
|
get
|
|
{
|
|
return storeName;
|
|
}
|
|
set
|
|
{
|
|
storeName = value;
|
|
}
|
|
}
|
|
|
|
protected string storeId;
|
|
public string StoreId
|
|
{
|
|
get
|
|
{
|
|
return storeId;
|
|
}
|
|
set
|
|
{
|
|
storeId = value;
|
|
}
|
|
}
|
|
|
|
protected string secretId;
|
|
public string SecretId
|
|
{
|
|
get
|
|
{
|
|
return secretId;
|
|
}
|
|
set
|
|
{
|
|
secretId = value;
|
|
}
|
|
}
|
|
|
|
protected string keyId;
|
|
public string KeyId
|
|
{
|
|
get
|
|
{
|
|
return keyId;
|
|
}
|
|
set
|
|
{
|
|
keyId = value;
|
|
}
|
|
}
|
|
abstract public void AppendToDoc(XmlDocument doc, XmlElement linkKeyElem);
|
|
abstract public void Dump();
|
|
}
|
|
|
|
public class KWLinkKey : LinkKey
|
|
{
|
|
string folderId;
|
|
public string FolderId
|
|
{
|
|
get
|
|
{
|
|
return folderId;
|
|
}
|
|
set
|
|
{
|
|
folderId = value;
|
|
}
|
|
}
|
|
public KWLinkKey(string wallet, string folder,string secret,string key)
|
|
{
|
|
keyType = StoreKeyType.KW_KEY;
|
|
storeName = XmlConsts.KwalletStoreName;
|
|
storeId = wallet;
|
|
folderId = folder;
|
|
secretId = secret;
|
|
keyId = key;
|
|
}
|
|
public override void Dump()
|
|
{
|
|
Console.WriteLine("StoreName = " + storeName + " StoreId = " + storeId + " FolderId = " + folderId + " SecretId = " + secretId + " Key = " + keyId);
|
|
}
|
|
|
|
public override void AppendToDoc(XmlDocument doc, XmlElement linkKeyElem)
|
|
{
|
|
XmlAttribute attr;
|
|
try
|
|
{
|
|
attr = doc.CreateAttribute(XmlConsts.StoreNameAttr);
|
|
attr.Value = storeName;
|
|
linkKeyElem.SetAttributeNode(attr);
|
|
|
|
attr = doc.CreateAttribute(XmlConsts.StoreIdAttr);
|
|
attr.Value = storeId;
|
|
linkKeyElem.SetAttributeNode(attr);
|
|
|
|
attr = doc.CreateAttribute(XmlConsts.FolderIdAttr);
|
|
attr.Value = folderId;
|
|
linkKeyElem.SetAttributeNode(attr);
|
|
|
|
attr = doc.CreateAttribute(XmlConsts.SecretIdAttr);
|
|
attr.Value = secretId;
|
|
linkKeyElem.SetAttributeNode(attr);
|
|
|
|
attr = doc.CreateAttribute(XmlConsts.KeyAttr);
|
|
attr.Value = keyId;
|
|
linkKeyElem.SetAttributeNode(attr);
|
|
}
|
|
catch(Exception e)
|
|
{
|
|
//Console.WriteLine(e.ToString());
|
|
}
|
|
}
|
|
}
|
|
|
|
public class GKLinkKey : LinkKey
|
|
{
|
|
public GKLinkKey(string keyring, string secret, string key)
|
|
{
|
|
keyType = StoreKeyType.GK_KEY;
|
|
storeName = XmlConsts.GnomeKeyringStoreName;
|
|
storeId = keyring;
|
|
secretId = secret;
|
|
keyId = key;
|
|
}
|
|
public override void Dump()
|
|
{
|
|
Console.WriteLine("StoreName = " + storeName + " StoreId = " + storeId + " SecretId = " + secretId + " Key = " + keyId);
|
|
}
|
|
|
|
public override void AppendToDoc(XmlDocument doc, XmlElement linkKeyElem)
|
|
{
|
|
XmlAttribute attr;
|
|
try
|
|
{
|
|
attr = doc.CreateAttribute(XmlConsts.StoreNameAttr);
|
|
attr.Value = storeName;
|
|
linkKeyElem.SetAttributeNode(attr);
|
|
|
|
attr = doc.CreateAttribute(XmlConsts.StoreIdAttr);
|
|
attr.Value = storeId;
|
|
linkKeyElem.SetAttributeNode(attr);
|
|
|
|
attr = doc.CreateAttribute(XmlConsts.SecretIdAttr);
|
|
attr.Value = secretId;
|
|
linkKeyElem.SetAttributeNode(attr);
|
|
|
|
attr = doc.CreateAttribute(XmlConsts.KeyAttr);
|
|
attr.Value = keyId;
|
|
linkKeyElem.SetAttributeNode(attr);
|
|
}
|
|
catch(Exception e)
|
|
{
|
|
//Console.WriteLine(e.ToString());
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
|
|
public class MZLinkKey : LinkKey
|
|
{
|
|
public MZLinkKey(string profile, string url, string key)
|
|
{
|
|
keyType = StoreKeyType.MZ_KEY;
|
|
storeName = XmlConsts.MozillaStoreName;
|
|
storeId = profile;
|
|
secretId = url;
|
|
keyId = key;
|
|
}
|
|
public override void Dump()
|
|
{
|
|
Console.WriteLine("StoreName = " + storeName + " StoreId = " + storeId + " SecretId = " + secretId + " Key = " + keyId);
|
|
}
|
|
|
|
public override void AppendToDoc(XmlDocument doc, XmlElement linkKeyElem)
|
|
{
|
|
XmlAttribute attr;
|
|
try
|
|
{
|
|
attr = doc.CreateAttribute(XmlConsts.StoreNameAttr);
|
|
attr.Value = storeName;
|
|
linkKeyElem.SetAttributeNode(attr);
|
|
|
|
attr = doc.CreateAttribute(XmlConsts.StoreIdAttr);
|
|
attr.Value = storeId;
|
|
linkKeyElem.SetAttributeNode(attr);
|
|
|
|
attr = doc.CreateAttribute(XmlConsts.SecretIdAttr);
|
|
attr.Value = secretId;
|
|
linkKeyElem.SetAttributeNode(attr);
|
|
|
|
attr = doc.CreateAttribute(XmlConsts.KeyAttr);
|
|
attr.Value = keyId;
|
|
linkKeyElem.SetAttributeNode(attr);
|
|
|
|
}
|
|
catch(Exception e)
|
|
{
|
|
//Console.WriteLine(e.ToString());
|
|
}
|
|
|
|
}
|
|
}
|
|
public class FXLinkKey : LinkKey
|
|
{
|
|
public FXLinkKey(string profile,string url,string key)
|
|
{
|
|
keyType = StoreKeyType.FX_KEY;
|
|
storeName = XmlConsts.FirefoxStoreName;
|
|
storeId = profile;
|
|
secretId = url;
|
|
keyId = key;
|
|
}
|
|
public override void Dump()
|
|
{
|
|
Console.WriteLine("StoreName = " + storeName + " StoreId = " + storeId + " SecretId = " + secretId + " Key = " + keyId);
|
|
}
|
|
|
|
public override void AppendToDoc(XmlDocument doc, XmlElement linkKeyElem)
|
|
{
|
|
XmlAttribute attr;
|
|
try
|
|
{
|
|
attr = doc.CreateAttribute(XmlConsts.StoreNameAttr);
|
|
attr.Value = storeName;
|
|
linkKeyElem.SetAttributeNode(attr);
|
|
|
|
attr = doc.CreateAttribute(XmlConsts.StoreIdAttr);
|
|
attr.Value = storeId;
|
|
linkKeyElem.SetAttributeNode(attr);
|
|
|
|
attr = doc.CreateAttribute(XmlConsts.SecretIdAttr);
|
|
attr.Value = secretId;
|
|
linkKeyElem.SetAttributeNode(attr);
|
|
|
|
attr = doc.CreateAttribute(XmlConsts.KeyAttr);
|
|
attr.Value = keyId;
|
|
linkKeyElem.SetAttributeNode(attr);
|
|
|
|
}
|
|
catch(Exception e)
|
|
{
|
|
//Console.WriteLine(e.ToString());
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
public class CASALinkKey : LinkKey
|
|
{
|
|
public CASALinkKey(string secret, string key)
|
|
{
|
|
storeName = XmlConsts.MicasaStoreName;
|
|
secretId = secret;
|
|
keyId = key;
|
|
}
|
|
public override void Dump()
|
|
{
|
|
Console.WriteLine("StoreName = " + storeName + "SecretId = " + secretId + "Key = " + keyId);
|
|
}
|
|
|
|
public override void AppendToDoc(XmlDocument doc, XmlElement linkKeyElem)
|
|
{
|
|
XmlAttribute attr;
|
|
try
|
|
{
|
|
attr = doc.CreateAttribute(XmlConsts.StoreNameAttr);
|
|
attr.Value = storeName;
|
|
linkKeyElem.SetAttributeNode(attr);
|
|
|
|
attr = doc.CreateAttribute(XmlConsts.SecretIdAttr);
|
|
attr.Value = secretId;
|
|
linkKeyElem.SetAttributeNode(attr);
|
|
|
|
attr = doc.CreateAttribute(XmlConsts.KeyAttr);
|
|
attr.Value = keyId;
|
|
linkKeyElem.SetAttributeNode(attr);
|
|
|
|
}
|
|
catch(Exception e)
|
|
{
|
|
//Console.WriteLine(e.ToString());
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
public class Link
|
|
{
|
|
ArrayList linkKeys;
|
|
public ArrayList LinkKeys
|
|
{
|
|
get
|
|
{
|
|
return linkKeys;
|
|
}
|
|
}
|
|
public Link(ArrayList linkList)
|
|
{
|
|
linkKeys = linkList;
|
|
}
|
|
public void Dump()
|
|
{
|
|
IEnumerator etor = linkKeys.GetEnumerator();
|
|
while(etor.MoveNext())
|
|
{
|
|
((LinkKey)(etor.Current)).Dump();
|
|
}
|
|
}
|
|
|
|
public void AppendToDoc(XmlDocument doc, XmlElement linkElem)
|
|
{
|
|
try
|
|
{
|
|
IEnumerator enumerator = linkKeys.GetEnumerator();
|
|
while(enumerator.MoveNext())
|
|
{
|
|
XmlElement linkKeyElem = doc.CreateElement(XmlConsts.LinkKeyNode);
|
|
((LinkKey)(enumerator.Current)).AppendToDoc(doc,linkKeyElem);
|
|
linkElem.AppendChild(linkKeyElem);
|
|
}
|
|
}
|
|
catch(Exception e)
|
|
{
|
|
//Console.WriteLine(e.ToString());
|
|
}
|
|
}
|
|
}
|
|
|
|
public class LinkGroup
|
|
{
|
|
ArrayList links;
|
|
public ArrayList Links
|
|
{
|
|
get
|
|
{
|
|
return links;
|
|
}
|
|
}
|
|
public LinkGroup(ArrayList linksList)
|
|
{
|
|
links = linksList;
|
|
}
|
|
public void Dump()
|
|
{
|
|
IEnumerator enumerator = links.GetEnumerator();
|
|
while(enumerator.MoveNext())
|
|
{
|
|
Console.WriteLine("Link");
|
|
((Link)(enumerator.Current)).Dump();
|
|
}
|
|
}
|
|
|
|
internal void AppendToDoc(XmlDocument doc, XmlElement synchPolElem)
|
|
{
|
|
try
|
|
{
|
|
XmlElement linkGroupElem = doc.CreateElement(XmlConsts.LinkGroupNode);
|
|
synchPolElem.AppendChild(linkGroupElem);
|
|
|
|
IEnumerator enumerator = links.GetEnumerator();
|
|
while(enumerator.MoveNext())
|
|
{
|
|
XmlElement linkElem = doc.CreateElement(XmlConsts.LinkNode);
|
|
((Link)(enumerator.Current)).AppendToDoc(doc,linkElem);
|
|
linkGroupElem.AppendChild(linkElem);
|
|
}
|
|
}
|
|
catch(Exception e)
|
|
{
|
|
//Console.WriteLine(e.ToString());
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
public class SynchPol: CASAPol
|
|
{
|
|
ArrayList linkGroups;
|
|
public ArrayList LinkGroups
|
|
{
|
|
get
|
|
{
|
|
return linkGroups;
|
|
}
|
|
}
|
|
|
|
public SynchPol( ArrayList grps)
|
|
{
|
|
policyType = CASAPolType.SYNCH_POL;
|
|
linkGroups = grps;
|
|
}
|
|
|
|
public override void DumpPol()
|
|
{
|
|
Console.WriteLine("\nSynch Policy");
|
|
IEnumerator grpEtor = linkGroups.GetEnumerator();
|
|
while(grpEtor.MoveNext())
|
|
{
|
|
Console.WriteLine("\nLink Group\n");
|
|
((LinkGroup)(grpEtor.Current)).Dump();
|
|
} //end of while grpEtor
|
|
}
|
|
internal override void AppendToDoc(XmlDocument doc)
|
|
{
|
|
string xPath = "";
|
|
try
|
|
{
|
|
xPath = "//" + XmlConsts.CASAPolicyNode;
|
|
|
|
XmlNode rootElem = doc.SelectSingleNode(xPath);
|
|
|
|
XmlElement synchPolElem = doc.CreateElement(XmlConsts.SynchPolicyNode);
|
|
rootElem.AppendChild(synchPolElem);
|
|
|
|
IEnumerator enumerator = linkGroups.GetEnumerator();
|
|
while(enumerator.MoveNext())
|
|
{
|
|
|
|
((LinkGroup)(enumerator.Current)).AppendToDoc(doc,synchPolElem);
|
|
// linkGroups[i].AppendToDoc(doc);
|
|
}
|
|
}
|
|
catch(Exception e)
|
|
{
|
|
//Console.WriteLine(e.ToString());
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|