2014-08-13 10:39:27 +01:00
//
// SecurityTokenRequirement.cs
//
// Author:
// Atsushi Enomoto <atsushi@ximian.com>
//
// Copyright (C) 2006 Novell, Inc. http://www.novell.com
//
// 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.
//
using System ;
using System.Collections.Generic ;
using System.IdentityModel.Tokens ;
namespace System.IdentityModel.Selectors
{
public class SecurityTokenRequirement
{
// huh, why not const?
public static string KeySizeProperty {
get { return "http://schemas.microsoft.com/ws/2006/05/identitymodel/securitytokenrequirement/KeySize" ; }
}
public static string KeyTypeProperty {
get { return "http://schemas.microsoft.com/ws/2006/05/identitymodel/securitytokenrequirement/KeyType" ; }
}
public static string KeyUsageProperty {
get { return "http://schemas.microsoft.com/ws/2006/05/identitymodel/securitytokenrequirement/KeyUsage" ; }
}
public static string RequireCryptographicTokenProperty {
get { return "http://schemas.microsoft.com/ws/2006/05/identitymodel/securitytokenrequirement/RequireCryptographicToken" ; }
}
public static string TokenTypeProperty {
get { return "http://schemas.microsoft.com/ws/2006/05/identitymodel/securitytokenrequirement/TokenType" ; }
}
// Instance members
public SecurityTokenRequirement ( )
{
}
Dictionary < string , object > properties ;
public int KeySize {
get {
int ret ;
if ( TryGetProperty < int > ( KeySizeProperty , out ret ) )
return ret ;
return default ( int ) ;
}
set { Properties [ KeySizeProperty ] = value ; }
}
public SecurityKeyType KeyType {
get {
SecurityKeyType ret ;
if ( TryGetProperty < SecurityKeyType > ( KeyTypeProperty , out ret ) )
return ret ;
return default ( SecurityKeyType ) ;
}
set { Properties [ KeyTypeProperty ] = value ; }
}
public string TokenType {
get {
string ret ;
if ( TryGetProperty < string > ( TokenTypeProperty , out ret ) )
return ret ;
return default ( string ) ;
}
set { Properties [ TokenTypeProperty ] = value ; }
}
public SecurityKeyUsage KeyUsage {
get {
SecurityKeyUsage ret ;
if ( TryGetProperty < SecurityKeyUsage > ( KeyUsageProperty , out ret ) )
return ret ;
return SecurityKeyUsage . Signature ; // not default!!
}
set { Properties [ KeyUsageProperty ] = value ; }
}
public bool RequireCryptographicToken {
get {
bool ret ;
if ( TryGetProperty < bool > ( RequireCryptographicTokenProperty , out ret ) )
return ret ;
return default ( bool ) ;
}
set { Properties [ RequireCryptographicTokenProperty ] = value ; }
}
public IDictionary < string , object > Properties {
get {
if ( properties = = null ) {
properties = new Dictionary < string , object > ( ) ;
properties [ KeyTypeProperty ] = SecurityKeyType . SymmetricKey ;
properties [ KeySizeProperty ] = 0 ;
properties [ RequireCryptographicTokenProperty ] = false ;
}
return properties ;
}
}
2017-06-07 13:16:24 +00:00
public TValue GetProperty < TValue > ( string propertyName )
2014-08-13 10:39:27 +01:00
{
TValue ret ;
2017-06-07 13:16:24 +00:00
if ( TryGetProperty < TValue > ( propertyName , out ret ) )
2014-08-13 10:39:27 +01:00
return ret ;
2017-06-07 13:16:24 +00:00
throw new ArgumentException ( String . Format ( "Property '{0}' was not found." , propertyName ) ) ;
2014-08-13 10:39:27 +01:00
}
2017-06-07 13:16:24 +00:00
public bool TryGetProperty < TValue > ( string propertyName , out TValue result )
2014-08-13 10:39:27 +01:00
{
object tmp ;
2017-06-07 13:16:24 +00:00
result = default ( TValue ) ;
2014-08-13 10:39:27 +01:00
2017-06-07 13:16:24 +00:00
if ( ! Properties . TryGetValue ( propertyName , out tmp ) )
2014-08-13 10:39:27 +01:00
return false ;
if ( tmp = = null & & ! typeof ( TValue ) . IsValueType )
2017-06-07 13:16:24 +00:00
result = default ( TValue ) ;
2014-08-13 10:39:27 +01:00
else if ( tmp is TValue )
2017-06-07 13:16:24 +00:00
result = ( TValue ) tmp ;
2014-08-13 10:39:27 +01:00
else
2017-06-07 13:16:24 +00:00
throw new ArgumentException ( String . Format ( "The value of property '{0}' is of type '{1}', while '{2}' is expected." , propertyName , tmp . GetType ( ) , typeof ( TValue ) ) ) ;
return result ! = null ;
2014-08-13 10:39:27 +01:00
}
}
}