diff -r a180113055cb -r 83d6a149c755 example/TwitterAuthApp/inc/sessionSP.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/example/TwitterAuthApp/inc/sessionSP.h Mon Oct 11 21:59:54 2010 +0530 @@ -0,0 +1,284 @@ +/** +* Copyright (c) 2010 Sasken Communication Technologies Ltd. +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the "{License}" +* which accompanies this distribution, and is available +* at the URL "{LicenseUrl}". +* +* Initial Contributors: +* Narasimhulu Kavadapu, Sasken Communication Technologies Ltd - Initial contribution +* +* Contributors: +* Siddhartha Chandra, Sasken Communication Technologies Ltd +* Description: +* class to maintian session & all credential keys. +*/ + +#ifndef FBSESSION_H +#define FBSESSION_H + +#include +#include +#include +#include +#include +#include "smfcredmgrclient.h" +#include "authAppConstants.h" + +// FORWARD DECLARATIONS +class FBRequest; + +const QString KFacebokkKeysFileName = "c://Data//FacebookKeys.txt"; + +/////////////////////////////////////////////////////////////////////////////////////////////////// +/** + * An FBSession represents a single user's authenticated session for a Facebook application. + * + * To create a session, you must use the session key of your application (which can + * be found on the Facebook developer website). You may then use the login dialog to ask + * the user to enter their email address and password. If successful, you will get back a + * session key which can be used to make requests to the Facebook API. + * + * Session keys are cached and stored on the disk of the device so that you do not need to ask + * the user to login every time they launch the app. To restore the last active session, call the + * resume method after instantiating your session. + */ +class FBSession : public QObject +{ + Q_OBJECT + +private: + /** + * the queue of requests + */ + QList iRequestQueue; + + /** + * Your application's API key, as passed to the constructor. + */ + QString iApiKey; + + /** + * Your application's API secret, as passed to the constructor. + */ + QString iApiSecret; + + /** + * The URL to call to create a session key after login. + * + * This is an alternative to calling auth.getSession directly using the secret key. + */ + QString iGetSessionProxy; + + /** + * The current user's session key. + */ + QString iSessionKey; + + /** + * The current user's session secret. + */ + QString iSessionSecret; + + /** + * The expiration date of the session key. + */ + QDateTime iExpirationDate; + + + /** + * the time at which the last request was performed, this is used to prevent + * too many requests going to the server at once. + */ + QDateTime iLastRequestTime; + int iRequestBurstCount; + + + /** + * The settings object used to restore session from the disk. + */ + QSettings iSettings; + /** + * The Credentail Object used to store auth data + */ + SmfCredMgrClient* m_Client; + /** + * Variable to store + */ + QString iCMRegToken; + +signals: /* the signals ommitted by FBSession */ + + /** + * Called when session logged in sucessfully + * @param SessionKey is the fb assigned session key + */ + void sessionDidLogin (QString SessionKey); + + /** + * Called when a user closes the login dialog without logging in. + */ + void sessionDidNotLogin (); + + /** + * Called when a session is about to log out. + * @param aUid is the fb assigned session id + */ + void sessionWillLogout (); + + /** + * Called when a session has logged out. + */ + void sessionDidLogout (); + +private slots: + /** + * handler function for the timer fired from startFlushTimer() function + */ + void requestTimerReady(); + +public: /* class functions */ + + /** + * The globally shared session instance. + */ + static FBSession* session(); + + /** + * Sets the globally shared session instance. + * + * This session is not retained, so you are still responsible for retaining it yourself. The + * first session that is created is automatically stored here. + */ + static void setSession(FBSession* aSession); + + /** + * Constructs a session and stores it as the globally shared session instance. + * + * @param aSessionProxy a url to that proxies auth.getSession + */ + static FBSession* sessionForApplication ( const QString& aKey, const QString& aSecret, const QString& aSessionProxy); + +public: /* instance functions */ + + /** + * Constructs a session for an application. + * + * @param secret the application secret (optional) + * @param getSessionProxy a url to that proxies auth.getSession (optional) + */ + FBSession( const QString& aKey, const QString& aSecret, const QString& aSessionProxy ); + + /** + * Destructor + */ + ~FBSession(); + + /** + * Begins a session for a user with a given key and secret. + */ + void beginSession ( const QString& aSessionKey, const QString& aSessionSecret, const QDateTime& aExpires ); + + /** + * Resumes a previous session whose uid, session key, and secret are cached on disk. + */ + bool resume(); + + /** + * Cancels a login (no-op if the login is already complete). + */ + void cancelLogin(); + + /** + * Ends the current session and deletes the uid, session key, and secret from disk. + */ + void logout(); + + /** + * Sends a fully configured request to the server for execution. + */ + void send (FBRequest* aRequest); + + /** + * @return const QString& http:// URL to the facebook REST server + */ + const QString& apiURL() const; + + /** + * @return const QString& https:// URL to the secure facebook REST server + */ + const QString& apiSecureURL() const; + + /** + * Determines if the session is active and connected. + * @return bool true if connected + */ + bool isConnected() const; + + /** + * @return const QString& the api secret + */ + const QString& apiSecret() const { return iApiSecret; } + + /** + * @return const QString& the GET? session proxy + */ + const QString& getSessionProxy() const { return iGetSessionProxy; } + + /** + * @return api key for this session + */ + const QString& apiKey() const { return iApiKey; } + + /** + * @return the session secret + */ + const QString& sessionSecret() const { return iSessionSecret; } + + /** + * @return the session key + */ + const QString& sessionKey() const { return iSessionKey; } + /** + * Saves the fb connect session information to disk + */ + void save(); +private: + + + /** + * Forgets any fb connect session information saved to disk + */ + void unsave(); + + void startFlushTimer(); + + /** + * @param aRequest, the request to add to the session queue, owner ship is transferred to the session + */ + void enqueueRequest(FBRequest* aRequest); + + /** + * @param aRequest, the request to perform. + * @param aEnqueue, if true add to queue if cant perform the request right now + */ + bool performRequest(FBRequest* aRequest, bool aEnqueue); + + /** + * flush the queue but performingRequest on the requests in the queue, if cant perform the request, waits a while using + * startFlushTimer() and then tries to continue .. + */ + void flushRequestQueue(); +public: + QString stroauth_nonce; + QString stroauth_timestamp; + QString stroauth_signature; + QString stroauth_Token; + QString stroauth_TokenSecret; + QString stroauth_verifier; +public: + void send_req (QString uri,FBRequest* aRequest); +}; + +#endif // FBSESSION_H