/*********************************************************************** * * Copyright (C) 2005-2006 Novell, Inc. Inc. All Rights Reserved. * * 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 Lesser 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, Novell, Inc. * * 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()); } } } }