171 lines
3.8 KiB
C#
171 lines
3.8 KiB
C#
/***********************************************************************
|
|
*
|
|
* Copyright (C) 2005-2006 Novell, 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.Threading;
|
|
using sscs.common;
|
|
|
|
namespace sscs.cache
|
|
{
|
|
|
|
class KeyChain : IKeychain
|
|
{
|
|
//We can have a Arraylist in case we dont need to look up via SecretID
|
|
// Hashtable has [SecretID(string), Secret(class)]
|
|
private Hashtable tSecretList = new Hashtable();
|
|
private Hashtable SecretList; // = Hashtable.Synchronized(tSecretList);
|
|
|
|
private string keyChainId;
|
|
|
|
private DateTime createdTime;
|
|
internal DateTime CreatedTime
|
|
{
|
|
get
|
|
{
|
|
return createdTime;
|
|
}
|
|
set
|
|
{
|
|
createdTime = value;
|
|
}
|
|
}
|
|
private DateTime accessedTime;
|
|
internal DateTime AccessedTime
|
|
{
|
|
get
|
|
{
|
|
return accessedTime;
|
|
}
|
|
set
|
|
{
|
|
accessedTime = value;
|
|
}
|
|
}
|
|
|
|
private DateTime modifiedTime;
|
|
internal DateTime ModifiedTime
|
|
{
|
|
get
|
|
{
|
|
return modifiedTime;
|
|
}
|
|
set
|
|
{
|
|
modifiedTime = value;
|
|
}
|
|
}
|
|
|
|
internal KeyChain()
|
|
{
|
|
SecretList = Hashtable.Synchronized(tSecretList);
|
|
}
|
|
|
|
internal KeyChain(string keyChainId)
|
|
{
|
|
SecretList = Hashtable.Synchronized(tSecretList);
|
|
this.keyChainId = keyChainId;
|
|
}
|
|
~KeyChain()
|
|
{
|
|
}
|
|
|
|
public void SetKey(string value)
|
|
{
|
|
keyChainId = value;
|
|
}
|
|
|
|
public void AddSecret(Secret mySecret)
|
|
{
|
|
try
|
|
{
|
|
mySecret.CreatedTime = DateTime.Now;
|
|
SecretList.Add((mySecret.GetKey()), mySecret);
|
|
this.ModifiedTime = DateTime.Now;
|
|
}
|
|
catch(Exception e)
|
|
{
|
|
CSSSLogger.ExpLog(e.ToString());
|
|
throw e;
|
|
}
|
|
}
|
|
|
|
public void RemoveSecret(String secretID)
|
|
{
|
|
// remove all keyvalues first, as to unlink reverse links
|
|
try
|
|
{
|
|
Secret secret = GetSecret(secretID);
|
|
secret.RemoveAllKeyValuePairs(this);
|
|
}
|
|
catch
|
|
{
|
|
|
|
}
|
|
|
|
SecretList.Remove(secretID);
|
|
this.ModifiedTime = DateTime.Now;
|
|
}
|
|
|
|
public void RemoveAllSecrets()
|
|
{
|
|
SecretList.Clear();
|
|
}
|
|
|
|
public Secret GetSecret(string secretID)
|
|
{
|
|
if(SecretList.ContainsKey(secretID))
|
|
{
|
|
Secret secret = (Secret)SecretList[secretID];
|
|
secret.AccessedTime = DateTime.Now;
|
|
return secret;
|
|
}
|
|
else
|
|
throw new SecretNotFoundException(secretID);
|
|
}
|
|
|
|
internal string GetKey()
|
|
{
|
|
return keyChainId;
|
|
}
|
|
|
|
|
|
internal IEnumerator GetAllSecrets()
|
|
{
|
|
return SecretList.GetEnumerator();
|
|
}
|
|
internal int GetNumSecrets()
|
|
{
|
|
return SecretList.Count;
|
|
}
|
|
|
|
internal bool CheckIfSecretExists(string id)
|
|
{
|
|
if( SecretList.ContainsKey(id) )
|
|
return true;
|
|
else
|
|
return false;
|
|
}
|
|
}
|
|
}
|