diff -r b5d63d5fc252 -r a469c0e6e7fb smf/smfcredentialmgr/smfcredmgrserver/src/smfcredmgrdbuser.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/smf/smfcredentialmgr/smfcredmgrserver/src/smfcredmgrdbuser.cpp Wed Jun 23 19:51:49 2010 +0530 @@ -0,0 +1,597 @@ +/** + * Copyright (c) 2010 Sasken Communication Technologies Ltd. + * All rights reserved. + * This component and the accompanying materials are made available + * under the terms of the "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: + * Pritam Roy Biswas, Sasken Communication Technologies Ltd - Initial contribution + * + * Description: + * This file contains routines to handle the data-base operations like insertion, query etc. + * on Credential Manager Server Database + */ + +#include +#include "smfcredmgrdbuser.h" +#include "smfcredmgrdb.h" + +CSmfCredMgrDbUser* CSmfCredMgrDbUser::NewL(CSmfCredMgrServerSession* aSession) + { + CSmfCredMgrDbUser* self = CSmfCredMgrDbUser::NewLC(aSession); + CleanupStack::Pop(self); + return (self); + } + +CSmfCredMgrDbUser* CSmfCredMgrDbUser::NewLC(CSmfCredMgrServerSession* aSession) + { + CSmfCredMgrDbUser* self = new (ELeave) CSmfCredMgrDbUser(aSession); + CleanupStack::PushL(self); + self->ConstructL(); + return (self); + } + +void CSmfCredMgrDbUser::ConstructL() + { + TInt err = iFileSession.Connect(); + User::LeaveIfError(err); + + iFileSession.SetSessionToPrivate(EDriveC); + + TFileName dbFileName; + iFileSession.PrivatePath(dbFileName); + TFindFile PrivFolder(iFileSession); + + // find drive-private path + if (KErrNone == PrivFolder.FindByDir(dbFileName, KNullDesC)) + { + dbFileName.Copy(PrivFolder.File()); + dbFileName.Append(KSmfCredMgrDbFileName); + iDbFilePathName = dbFileName; + if (BaflUtils::FileExists(iFileSession, dbFileName)) + { + //err = iDataBase.Open(dbFileName); + User::LeaveIfError(iDataBase.Open(dbFileName)); + RSqlDatabase::TIsolationLevel isolationLevel = + RSqlDatabase::EReadUncommitted; + iDataBase.SetIsolationLevel(isolationLevel); + } + else + { + //file not present + User::Leave(KErrNotFound); + } + } + else + { + //path not present + User::Leave(KErrPathNotFound); + } + } + +CSmfCredMgrDbUser::CSmfCredMgrDbUser(CSmfCredMgrServerSession* aSession) : + iSession(aSession) + { + } + +CSmfCredMgrDbUser::~CSmfCredMgrDbUser() + { + iFileSession.Close(); + iDataBase.Close(); + } + +TInt CSmfCredMgrDbUser::PluginIDTableInsert(const TDesC& aPluginId, + const TDesC& aAuthAppId, TBool aEnableFlag) + { + TInt err(KErrNone); + RSqlStatement sqlStatement; + RSqlDatabase db; + + err = db.Open(iDbFilePathName); + __ASSERT_DEBUG( (err >= KErrNone), User::Invariant()); + + err = sqlStatement.Prepare(db, KSmfPluginIDTableInsert); + TInt paramIndex(KErrNone); + + TBuf pluginbuf(aPluginId); + + paramIndex = sqlStatement.ParameterIndex(_L(":Val1")); + err = sqlStatement.BindText(paramIndex, pluginbuf); + + paramIndex = sqlStatement.ParameterIndex(_L(":Val2")); + err = sqlStatement.BindText(paramIndex, aAuthAppId); + + paramIndex = sqlStatement.ParameterIndex(_L(":Val3")); + err = sqlStatement.BindInt(paramIndex, aEnableFlag); + + err = db.Exec(KBegin); + __ASSERT_DEBUG( (err >= KErrNone), User::Invariant()); + err = sqlStatement.Exec(); + if (KSqlErrConstraint == err) + { + //Table already present. + } + else if (err < KErrNone) + { + __ASSERT_DEBUG( (err >= KErrNone), User::Invariant()); + } + + err = db.Exec(KCommit); + __ASSERT_DEBUG( (err >= KErrNone), User::Invariant()); + + //if commit fails we have to roll back + if (err < KErrNone) + { + err = db.Exec(KRollback); + } + sqlStatement.Close(); + db.Close(); + if (err >= 0) + { + return KErrNone; + } + return err; + } + +TInt CSmfCredMgrDbUser::URLTableInsert(const TDesC& aAuthAppId, + const TDesC& aURL) + { + TInt err(KErrNone); + RSqlStatement sqlStatement; + RSqlDatabase db; + + err = db.Open(iDbFilePathName); + __ASSERT_DEBUG( (err >= KErrNone), User::Invariant()); + + err = sqlStatement.Prepare(db, KSmfURLTableInsert); + TInt paramIndex(KErrNone); + + paramIndex = sqlStatement.ParameterIndex(_L(":Val1")); + err = sqlStatement.BindText(paramIndex, aAuthAppId); + + TBuf urlbuf(aURL); + + paramIndex = sqlStatement.ParameterIndex(_L(":Val2")); + err = sqlStatement.BindText(paramIndex, urlbuf); + + err = db.Exec(KBegin); + __ASSERT_DEBUG( (err >= KErrNone), User::Invariant()); + err = sqlStatement.Exec(); + if (KSqlErrConstraint == err) + { + //Table already present. + } + else if (err < KErrNone) + { + __ASSERT_DEBUG( (err >= KErrNone), User::Invariant()); + } + + err = db.Exec(KCommit); + __ASSERT_DEBUG( (err >= KErrNone), User::Invariant()); + + //if commit fails we have to roll back + if (err < KErrNone) + { + err = db.Exec(KRollback); + } + sqlStatement.Close(); + db.Close(); + if (err >= 0) + { + return KErrNone; + } + return err; + } + +TInt CSmfCredMgrDbUser::RegTokenValidityTableInsert(const TDesC& aRegToken, + const TDesC& aAuthAppId, const TUint aValidity) + { + TInt err(KErrNone); + RSqlStatement sqlStatement; + RSqlDatabase db; + + TBuf regTokenBuf(aRegToken); + + err = db.Open(iDbFilePathName); + __ASSERT_DEBUG( (err >= KErrNone), User::Invariant()); + + err = sqlStatement.Prepare(db, KSmfRegTokenValidityTableInsert); + TInt paramIndex(KErrNone); + + paramIndex = sqlStatement.ParameterIndex(_L(":Val1")); + err = sqlStatement.BindText(paramIndex, aRegToken); + + paramIndex = sqlStatement.ParameterIndex(_L(":Val2")); + err = sqlStatement.BindText(paramIndex, aAuthAppId); + + paramIndex = sqlStatement.ParameterIndex(_L(":Val3")); + err = sqlStatement.BindInt(paramIndex, aValidity); + + err = db.Exec(KBegin); + __ASSERT_DEBUG( (err >= KErrNone), User::Invariant()); + err = sqlStatement.Exec(); + if (KSqlErrConstraint == err) + { + //Table already present. + } + else if (err < KErrNone) + { + __ASSERT_DEBUG( (err >= KErrNone), User::Invariant()); + } + + err = db.Exec(KCommit); + __ASSERT_DEBUG( (err >= KErrNone), User::Invariant()); + + //if commit fails we have to roll back + if (err < KErrNone) + { + err = db.Exec(KRollback); + } + sqlStatement.Close(); + db.Close(); + if (err >= 0) + { + return KErrNone; + } + return err; + + } + +TInt CSmfCredMgrDbUser::AuthParamsTableInsert(const TDesC& aAuthAppId, + const TDesC& aKey, const TDesC& aSecret) + { + TInt err(KErrNone); + RSqlStatement sqlStatement; + RSqlDatabase db; + + TBuf keyBuf(aKey); + TBuf secretBuf(aSecret); + + err = db.Open(iDbFilePathName); + __ASSERT_DEBUG( (err >= KErrNone), User::Invariant()); + + err = sqlStatement.Prepare(db, KSmfAuthParamsTableInsert); + TInt paramIndex(KErrNone); + + paramIndex = sqlStatement.ParameterIndex(_L(":Val1")); + err = sqlStatement.BindText(paramIndex, aAuthAppId); + + paramIndex = sqlStatement.ParameterIndex(_L(":Val2")); + err = sqlStatement.BindText(paramIndex, keyBuf); + + paramIndex = sqlStatement.ParameterIndex(_L(":Val3")); + err = sqlStatement.BindText(paramIndex, secretBuf); + + err = db.Exec(KBegin); + __ASSERT_DEBUG( (err >= KErrNone), User::Invariant()); + err = sqlStatement.Exec(); + if (KSqlErrConstraint == err) + { + //Table already present. + } + else if (err < KErrNone) + { + __ASSERT_DEBUG( (err >= KErrNone), User::Invariant()); + } + + err = db.Exec(KCommit); + __ASSERT_DEBUG( (err >= KErrNone), User::Invariant()); + + //if commit fails we have to roll back + if (err < KErrNone) + { + err = db.Exec(KRollback); + } + sqlStatement.Close(); + db.Close(); + if (err >= 0) + { + return KErrNone; + } + return err; + } + +void CSmfCredMgrDbUser::readFlagInPluginIdTable(const TDesC& aPluginID, + TInt& aFlag) + { + TInt err(KErrNone); + + RSqlStatement sqlReadStatement; + TInt paramIndex(KErrNone); + + err = sqlReadStatement.Prepare(iDataBase, KSmfDbReadFlagInPluginTable); + + paramIndex = sqlReadStatement.ParameterIndex(_L(":iID")); + err = sqlReadStatement.BindText(paramIndex, aPluginID); + + while ((err = sqlReadStatement.Next()) == KSqlAtRow) + { + //sometimes sqlStmt.Next returns KSqlAtRow even if no row is present + if (!sqlReadStatement.IsNull(0)) + { + aFlag = sqlReadStatement.ColumnInt(0); + } + } + sqlReadStatement.Close(); + } + +void CSmfCredMgrDbUser::readAuthAppIdInPluginIdTable(const TDesC& aPluginID, + TDes& aAuthAppId) + { + TInt err(KErrNone); + + RSqlStatement sqlReadStatement; + TInt paramIndex(KErrNone); + + err = sqlReadStatement.Prepare(iDataBase, KSmfDbReadAuthAppIdInPluginTable); + + paramIndex = sqlReadStatement.ParameterIndex(_L(":iID")); + err = sqlReadStatement.BindText(paramIndex, aPluginID); + + while ((err = sqlReadStatement.Next()) == KSqlAtRow) + { + //sometimes sqlStmt.Next returns KSqlAtRow even if no row is present + if (!sqlReadStatement.IsNull(0)) + { + sqlReadStatement.ColumnText(0, aAuthAppId); + } + } + sqlReadStatement.Close(); + } + +void CSmfCredMgrDbUser::readAuthTokens(const TDesC& aAuthAppId, RArray< + TSmfAuthToken>& aArray) + { + TInt err(KErrNone); + + RSqlStatement sqlReadStatement; + TInt paramIndex(KErrNone); + + err = sqlReadStatement.Prepare(iDataBase, KSmfDbReadAuthTokens); + paramIndex = sqlReadStatement.ParameterIndex(_L(":iID")); + err = sqlReadStatement.BindText(paramIndex, aAuthAppId); + + while ((err = sqlReadStatement.Next()) == KSqlAtRow) + { + //sometimes sqlStmt.Next returns KSqlAtRow even if no row is present + if (!sqlReadStatement.IsNull(0)) + { + TSmfAuthToken Set; + + Set.iKey = HBufC::NewL(KMaxAuthTokenLength); + Set.iSecret = HBufC::NewL(KMaxAuthTokenLength); + + TBuf keyBuf; + TBuf secretBuf; + + sqlReadStatement.ColumnText(0, keyBuf); + sqlReadStatement.ColumnText(1, secretBuf); + + Set.iKey->Des().Copy(keyBuf); + Set.iSecret->Des().Copy(secretBuf); + //add it to the array + aArray.Append(Set); + + } + else + { + __ASSERT_DEBUG( 0, User::Invariant()); + } + } + sqlReadStatement.Close(); + } + +void CSmfCredMgrDbUser::fetchPluginList(const TDesC& aRegToken, RPointerArray< + HBufC>& aArray) + { + TBuf authAppID; + readAuthAppIdInRegTokenTable(aRegToken, authAppID); + readPluginId(authAppID, aArray); + } + +void CSmfCredMgrDbUser::readAuthAppIdInRegTokenTable(const TDesC& aRegToken, + TDes& aAuthAppId) + { + TInt err(KErrNone); + + RSqlStatement sqlReadStatement; + TInt paramIndex(KErrNone); + TInt64 duration; + TBuf tokenBuf(aRegToken); + err = sqlReadStatement.Prepare(iDataBase, + KSmfDbReadAuthAppIdInRegTokenTable); + paramIndex = sqlReadStatement.ParameterIndex(_L(":iID")); + err = sqlReadStatement.BindText(paramIndex, tokenBuf); + + while ((err = sqlReadStatement.Next()) == KSqlAtRow) + { + //sometimes sqlStmt.Next returns KSqlAtRow even if no row is present + if (!sqlReadStatement.IsNull(0)) + { + duration = sqlReadStatement.ColumnInt(1); + if (duration) //to be checked with epoch date-time + { + sqlReadStatement.ColumnText(0, aAuthAppId); + } + } + else + { + __ASSERT_DEBUG( 0, User::Invariant()); + } + } + sqlReadStatement.Close(); + } +void CSmfCredMgrDbUser::readPluginId(const TDesC& aAuthAppId, RPointerArray< + HBufC>& aArray) + { + TInt err(KErrNone); + RSqlStatement sqlReadStatement; + TInt paramIndex(KErrNone); + TInt flag; + + err = sqlReadStatement.Prepare(iDataBase, KSmfDbReadPluginID); + paramIndex = sqlReadStatement.ParameterIndex(_L(":iID")); + err = sqlReadStatement.BindText(paramIndex, aAuthAppId); + + while ((err = sqlReadStatement.Next()) == KSqlAtRow) + { + //sometimes sqlStmt.Next returns KSqlAtRow even if no row is present + if (!sqlReadStatement.IsNull(0)) + { + flag = sqlReadStatement.ColumnInt(1); + if (flag > 0) + { + TBuf pluginbuf; + HBufC* buf = HBufC::NewL(KMaxBufSize); + sqlReadStatement.ColumnText(0, pluginbuf); + buf->Des().Copy(pluginbuf); + aArray.Append(buf); + } + } + else + { + __ASSERT_DEBUG( 0, User::Invariant()); + } + } + sqlReadStatement.Close(); + } + +void CSmfCredMgrDbUser::readURL(const TDesC& aAuthAppId, + RPointerArray& aArray) + { + TInt err(KErrNone); + + RSqlStatement sqlReadStatement; + TInt paramIndex(KErrNone); + + err = sqlReadStatement.Prepare(iDataBase, KSmfDbReadURL); + paramIndex = sqlReadStatement.ParameterIndex(_L(":iID")); + err = sqlReadStatement.BindText(paramIndex, aAuthAppId); + + while ((err = sqlReadStatement.Next()) == KSqlAtRow) + { + //sometimes sqlStmt.Next returns KSqlAtRow even if no row is present + if (!sqlReadStatement.IsNull(0)) + { + TBuf urlBuf; + HBufC* buf = HBufC::NewL(KMaxBufSize); + sqlReadStatement.ColumnText(0, urlBuf); + buf->Des().Copy(urlBuf); + aArray.Append(buf); + } + else + { + __ASSERT_DEBUG( 0, User::Invariant()); + } + } + sqlReadStatement.Close(); + } + +void CSmfCredMgrDbUser::readValidity(const TDesC& aAuthAppId, TInt64& aValidity) + { + TInt err(KErrNone); + + RSqlStatement sqlReadStatement; + TInt paramIndex(KErrNone); + + err = sqlReadStatement.Prepare(iDataBase, KSmfDbReadValidity); + paramIndex = sqlReadStatement.ParameterIndex(_L(":iID")); + err = sqlReadStatement.BindText(paramIndex, aAuthAppId); + + while ((err = sqlReadStatement.Next()) == KSqlAtRow) + { + //sometimes sqlStmt.Next returns KSqlAtRow even if no row is present + if (!sqlReadStatement.IsNull(0)) + { + aValidity = sqlReadStatement.ColumnInt64(1); + } + else + { + __ASSERT_DEBUG( 0, User::Invariant()); + } + } + sqlReadStatement.Close(); + + } + +void CSmfCredMgrDbUser::readRegistrationToken(const TDesC& aAuthAppId, + TDesC& aRegToken) + { + TInt err(KErrNone); + + RSqlStatement sqlReadStatement; + TInt paramIndex(KErrNone); + + err = sqlReadStatement.Prepare(iDataBase, KSmfDbReadRegistrationToken); + paramIndex = sqlReadStatement.ParameterIndex(_L(":iID")); + err = sqlReadStatement.BindText(paramIndex, aAuthAppId); + + while ((err = sqlReadStatement.Next()) == KSqlAtRow) + { + //sometimes sqlStmt.Next returns KSqlAtRow even if no row is present + if (!sqlReadStatement.IsNull(0)) + { + aRegToken = sqlReadStatement.ColumnTextL(0);//aKey.AllocL(); + } + else + { + __ASSERT_DEBUG( 0, User::Invariant()); + } + } + sqlReadStatement.Close(); + } + +TInt CSmfCredMgrDbUser::updatePlugin(const TDesC& aPluginID, + const TBool& aFlag, const TDesC& aOldPluginID) + { + TInt err(KErrNone); + RSqlStatement sqlStatement; + TInt paramIndex(KErrNone); + TBuf newPluginBuf(aPluginID); + TBuf OldPluginBuf(aOldPluginID); + RSqlDatabase db; + + err = db.Open(iDbFilePathName); + __ASSERT_DEBUG( (err >= KErrNone), User::Invariant()); + + err = sqlStatement.Prepare(db, KUpdatePluginID); + + paramIndex = sqlStatement.ParameterIndex(_L(":iText")); + err = sqlStatement.BindText(paramIndex, newPluginBuf); + + paramIndex = sqlStatement.ParameterIndex(_L(":iFlag")); + err = sqlStatement.BindInt(paramIndex, aFlag); + + paramIndex = sqlStatement.ParameterIndex(_L(":iID")); + err = sqlStatement.BindText(paramIndex, OldPluginBuf); + + err = db.Exec(KBegin); + __ASSERT_DEBUG( (err >= KErrNone), User::Invariant()); + err = sqlStatement.Exec(); + if (KSqlErrConstraint == err) + { + // + } + else if (err < KErrNone) + { + __ASSERT_DEBUG( (err >= KErrNone), User::Invariant()); + } + + err = db.Exec(KCommit); + __ASSERT_DEBUG( (err >= KErrNone), User::Invariant()); + + //if commit fails we have to roll back + if (err < KErrNone) + { + err = db.Exec(KRollback); + } + sqlStatement.Close(); + db.Close(); + if (err >= 0) + { + return KErrNone; + } + return err; + }