blob: 6b9b84406f3c75b2367c3e1e651acdf02709374f [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
namespace Apache.Geode.Templates.Cache.Security
{
using Apache.Geode.Client;
///<summary>
/// An <see cref="Apache.Geode.Client.IAuthInitialize"/> implementation
/// that obtains the user name and password as the credentials from the
/// given set of properties.
/// </summary>
/// <remarks>
/// To use this class the <c>security-client-auth-library</c> property should
/// be set to the name of the dll (<c>Apache.Geode.Templates.Cache.Security</c>)
/// and the <c>security-client-auth-factory</c> property should be set to
/// the fully qualified name of the static <c>Create</c> function viz.
/// <c>Apache.Geode.Templates.Cache.Security.UserPasswordAuthInit.Create</c>
/// </remarks>
public class UserPasswordAuthInit : IAuthInitialize
{
/// <summary>
/// Property name for username.
/// </summary>
public const string UserNameProp = "security-username";
/// <summary>
/// Property name for password. It is required that the client application
/// obtains the password and sets it as a system property.
/// </summary>
public const string PasswordProp = "security-password";
/// <summary>
/// Static method that should be registered as the
/// <c>security-client-auth-factory</c> property.
/// </summary>
public static IAuthInitialize Create()
{
return new UserPasswordAuthInit();
}
/// <summary>
/// Default constructor -- does nothing.
/// </summary>
public UserPasswordAuthInit()
{
}
/// <summary>
/// Get the credentials by copying the username(<see cref="UserNameProp"/>)
/// and password(<see cref="PasswordProp"/>) properties.
/// </summary>
public Properties<string, object> GetCredentials(
Properties<string, string> props, string server)
{
Properties<string, object> newProps = new Properties<string, object>();
string userName = props.Find(UserNameProp);
if (userName == null)
{
throw new AuthenticationFailedException(string.Format(
"UserPasswordAuthInit: user name property [{0}] not set.",
UserNameProp));
}
newProps.Insert(UserNameProp, userName);
string passwd = props.Find(PasswordProp);
// If password is not provided then use empty string as the password.
if (passwd == null)
{
passwd = string.Empty;
}
newProps.Insert(PasswordProp, passwd);
return newProps;
}
/// <summary>
/// Invoked before the cache goes down.
/// </summary>
public void Close()
{
// Nothing to be done.
}
}
}