diff -r f18401adf8e1 -r 641f389e9157 authenticationservices/authenticationserver/source/client/authmgrclient.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/authenticationservices/authenticationserver/source/client/authmgrclient.cpp Tue Aug 31 17:00:08 2010 +0300 @@ -0,0 +1,276 @@ +/* +* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* authmgrclient - exported authentication client session implementation +* +*/ + + +/** + @file +*/ + +#include "authclient_impl.h" +#include "authserverutil.h" + +using namespace AuthServer; + +/** + * Register a new identity. This causes the server to create a new + * identity and attempt to train the user with all available active + * plugins. At least one plugin must be trained for this to be succesful. + * + * @param aIdentity The new heap allocated identity details will be + * pointed at by this parameter upon successful completion. + * + * @param aDescription The identity's description text. + * + * @param aRequest This status object will be completed when this + * asynchronous call finishes, the return values are described below. + * + * @capability TrustedUI + * + * @return KErrServerTerminated, if the server no longer present + * @return KErrServerBusy, if the request cannot be handled at this time. + * @return KErrNoMemory, if there is insufficient memory available. + * @return KErrPermissionDenied, if the caller has insufficient capabilities. + * @return KErrAuthServRegistrationFailed, if the all plugins failed to + * successfully train for the identity. + **/ +EXPORT_C void RAuthMgrClient::RegisterIdentityL( + CIdentity*& aIdentity, + const TDesC& aDescription, + TRequestStatus& aRequest) + { + CheckAsyncDecoderL(); + iAsyncResponseDecoder->RegisterIdentityL(aIdentity, aDescription, aRequest); + } + +/** + * Remove an identity. + * + * @param aId The identity to remove. + * + * @capability WriteDeviceData + * + * @leave KErrServerTerminated, if the server no longer present + * @leave KErrServerBusy, if the request cannot be handled at this time. + * @leave KErrNoMemory, if there is insufficient memory available. + * @leave KErrPermissionDenied, if the caller has insufficient capabilities. + * @leave KErrAuthServIdentityNotFound, if the id does not exist. + **/ +EXPORT_C void RAuthMgrClient::RemoveIdentityL( + TIdentityId aId) + { + User::LeaveIfError(CallSessionFunction(ERemoveIdentity, TIpcArgs(aId))); + } + +/** + * Train an authentication plugin for the specified identity. The identity + * to be trained must be authenticated prior to training. This is + * necessary for the AuthServer to decrypt the protection key prior to + * encrypting it with the new key generated through training. + * + * @param aId The identity for whom to train the plugin. + * + * @param aPlugin The id of the plugin to train. + * + * @param aRequest This status object will be completed when this + * asynchronous call finishes. + * + * @capability WriteUserData + * + * @return KErrServerTerminated, if the server no longer present + * @return KErrServerBusy, if the request cannot be handled at this time. + * @return KErrNoMemory, if there is insufficient memory available. + * @return KErrPermissionDenied, if the caller has insufficient capabilities. + * @return KErrAuthServIdentityNotFound, if the id does not exist. + * @return KErrAuthServNoSuchPlugin, if the plugin does not exist. + * @return KErrAuthServAuthenticationRequired, if the identity to be + * trained is not currently authenticated. + **/ +EXPORT_C void RAuthMgrClient::TrainPlugin( + TIdentityId aId, + TPluginId aPlugin, + TRequestStatus& aRequest) + { + CallSessionFunction(ETrainPlugin, TIpcArgs(aId, aPlugin), aRequest); + } + + +/** + * Remove the specified plugin as an authentication method for the + * identity. + * + * @param aId The identity for whom to forget plugin training. + * + * @param aPlugin The id of the plugin to retrain. + * + * @capability WriteUserData + * + * @return KErrServerTerminated, if the server no longer present + * @return KErrServerBusy, if the request cannot be handled at this time. + * @return KErrNoMemory, if there is insufficient memory available. + * @return KErrPermissionDenied, if the caller has insufficient capabilities. + * @return KErrAuthServIdentityNotFound, if the id does not exist. + * @return KErrAuthServNoSuchPlugin, if the plugin does not exist. + **/ +EXPORT_C void RAuthMgrClient::ForgetPluginL( + TIdentityId aId, + TPluginId aPlugin) + { + User::LeaveIfError(CallSessionFunction(EForgetPlugin, TIpcArgs(aId, aPlugin))); + } + + +/** + * Specifies the preferred plugin for the named type. + * + * @param aType The type of plugin for which to define the preference. + * + * @param aPluginId The id of the preferred plugin for the specified type. + * + * @capability WriteDeviceData + * + * @return KErrServerTerminated, if the server no longer present + * @return KErrServerBusy, if the request cannot be handled at this time. + * @return KErrNoMemory, if there is insufficient memory available. + * @return KErrPermissionDenied, if the caller has insufficient capabilities. + * @return KErrAuthServNoSuchPlugin, if the plugin does not exist. + * @return KErrArgument, if aType does not match the plugin's type. + **/ +EXPORT_C void RAuthMgrClient::SetPreferredTypePluginL(TAuthPluginType aType, + TPluginId aPluginId) + { + User::LeaveIfError(CallSessionFunction(ESetAuthPreferences, TIpcArgs(aType, aPluginId))); + } + +/** + * Reset the training data of a registered identity. + * + * @param aId The identity to reset. + * + * @param aRegistrationInformation The regisration information to be used for + * identifying the user. This data is meaningful for knowledge based authentication + * server plugins (here the registration data could be the passphrase). + * Note that a plugin may choose to ignore the supplied registration data and simply + * remove the identity from its records. + * + * @capability WriteDeviceData + * + * @return KErrServerTerminated, if the server no longer present + * @return KErrServerBusy, if the request cannot be handled at this time. + * @return KErrNoMemory, if there is insufficient memory available. + * @return KErrPermissionDenied, if the caller has insufficient capabilities. + * @return KErrAuthServIdentityNotFound, if the id cannot be found. + * @return KErrAuthServResetMayLoseIdentity, if a reset can result in the loss of an identity. + * @see KErrAuthServResetMayLoseIdentity. + * @return KErrArgument, if the supplied arguments are incorrect. + * @return ... any of the system-wide error codes. + **/ +EXPORT_C void RAuthMgrClient::ResetIdentityL(TIdentityId aId, + const TDesC& aRegistrationInformation) + { + // Sanity check arguments + if (aId == 0) + { + User::Leave(KErrArgument); + } + User::LeaveIfError(CallSessionFunction(EResetIdentity, TIpcArgs(aId, &aRegistrationInformation))); + } + +/** + * Reset the training data of a registered identity. + * + * @param aId The identity to reset. + * + * @param aPluginType The type of plugins for which to supply the registration data during the reset. + * Note that currently only EAuthKnowledge type plugins is supported for this parameter. + * + * @param aRegistrationInformation The regisration information to be used for + * identifying the user. This data is meaningful for knowledge based authentication + * server plugins (here the registration data could be the passphrase). + * Note that a plugin may choose to ignore the supplied registration data and simply + * remove the identity from its records. + * + * @capability WriteDeviceData + * + * @return KErrServerTerminated, if the server no longer present + * @return KErrServerBusy, if the request cannot be handled at this time. + * @return KErrNoMemory, if there is insufficient memory available. + * @return KErrPermissionDenied, if the caller has insufficient capabilities. + * @return KErrAuthServIdentityNotFound, if the id cannot be found. + * @return KErrAuthServResetMayLooseIdentity, if a reset can result in the loss of an identity. + * @see KErrAuthServResetMayLooseIdentity. + * @return KErrArgument, if the supplied arguments are incorrect. + * @return ... any of the system-wide error codes. + **/ +EXPORT_C void RAuthMgrClient::ResetIdentityL(TIdentityId aId, + TAuthPluginType aPluginType, + const TDesC& aRegistrationInformation) + { + // Sanity check arguments + if (aId == 0) + { + User::Leave(KErrArgument); + } + User::LeaveIfError(CallSessionFunction(EResetIdentityByType, TIpcArgs(aId, aPluginType, &aRegistrationInformation))); + } + +/** + * Reset the training data of a registered identity. + * + * @param aId The identity to reset. + * + * @param aPluginIdList The list of plugin ids for which to supply the registration data during the reset. + * + * @param aRegistrationInformation An array of regisration information to be used for + * identifying the user. The order of elements in this array correspond to the order of plugin ids in + * aPluginIdList. This data is meaningful for knowledge based authentication server + * plugins (here the registration data could be the passphrase). + * Note that a plugin may choose to ignore the supplied registration data and simply + * remove the identity from its records. + * + * @capability WriteDeviceData + * + * @return KErrServerTerminated, if the server no longer present + * @return KErrServerBusy, if the request cannot be handled at this time. + * @return KErrNoMemory, if there is insufficient memory available. + * @return KErrPermissionDenied, if the caller has insufficient capabilities. + * @return KErrAuthServIdentityNotFound, if the id cannot be found. + * @return KErrAuthServResetMayLooseIdentity, if a reset can result in the loss of an identity. + * @see KErrAuthServResetMayLooseIdentity. + * @return KErrArgument, if the supplied arguments are incorrect. + * @return ... any of the system-wide error codes. + **/ +EXPORT_C void RAuthMgrClient::ResetIdentityL(TIdentityId aId, + RArray& aPluginIdList, + RPointerArray& aRegistrationInformation) + { + // Sanity check arguments + TInt count = aPluginIdList.Count(); + if ((aId == 0) || (count < 1) || (count != aRegistrationInformation.Count())) + { + User::Leave(KErrArgument); + } + + // Flatten aPluginIdList + HBufC8* bufPluginIds = AuthServerUtil::FlattenDataArrayLC(aPluginIdList); + + // Flatten aRegistrationInformation + HBufC8* bufRegInfo = AuthServerUtil::FlattenDataPointerArrayLC(aRegistrationInformation); + + User::LeaveIfError(CallSessionFunction(EResetIdentityByList, TIpcArgs(aId, bufPluginIds, bufRegInfo))); + CleanupStack::PopAndDestroy(2, bufPluginIds); // bufRegInfo + }