Wt examples  3.2.2
Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes
Session Class Reference

#include <Session.h>

List of all members.

Public Member Functions

 Session ()
 ~Session ()
Wt::Auth::AbstractUserDatabaseusers ()
Wt::Auth::Loginlogin ()
std::vector< UsertopUsers (int limit)
std::string userName () const
int findRanking ()
void addToScore (int s)

Static Public Member Functions

static void configureAuth ()
static const
Wt::Auth::AuthService
auth ()
static const
Wt::Auth::AbstractPasswordService
passwordAuth ()
static const std::vector
< const Wt::Auth::OAuthService * > & 
oAuth ()

Private Member Functions

Wt::Dbo::ptr< Useruser () const

Private Attributes

Wt::Dbo::backend::Sqlite3 sqlite3_
Wt::Dbo::Session session_
UserDatabaseusers_
Wt::Auth::Login login_

Detailed Description

Definition at line 23 of file Session.h.


Constructor & Destructor Documentation

Session::Session ( )

Definition at line 95 of file Session.C.

  : sqlite3_(WApplication::instance()->appRoot() + "hangman.db")
{
  session_.setConnection(sqlite3_);
  sqlite3_.setProperty("show-queries", "true");

  session_.mapClass<User>("user");
  session_.mapClass<AuthInfo>("auth_info");
  session_.mapClass<AuthInfo::AuthIdentityType>("auth_identity");
  session_.mapClass<AuthInfo::AuthTokenType>("auth_token");

  users_ = new UserDatabase(session_);

  dbo::Transaction transaction(session_);
  try {
    session_.createTables();

    /*
     * Add a default guest/guest account
     */
    Auth::User guestUser = users_->registerNew();
    guestUser.addIdentity(Auth::Identity::LoginName, "guest");
    myPasswordService.updatePassword(guestUser, "guest");

    Wt::log("info") << "Database created";
  } catch (...) {
    Wt::log("info") << "Using existing database";
  }

  transaction.commit();
}
Session::~Session ( )

Definition at line 127 of file Session.C.

{
  delete users_;
}

Member Function Documentation

void Session::addToScore ( int  s)

Definition at line 156 of file Session.C.

{
  dbo::Transaction transaction(session_);

  dbo::ptr<User> u = user();
  if (u) {
    u.modify()->score += s;
    ++u.modify()->gamesPlayed;
    u.modify()->lastGame = WDateTime::currentDateTime();
  }

  transaction.commit();
}
const Auth::AuthService & Session::auth ( ) [static]

Definition at line 213 of file Session.C.

{
  return myAuthService;
}
void Session::configureAuth ( ) [static]

Definition at line 73 of file Session.C.

{
  myAuthService.setAuthTokensEnabled(true, "hangmancookie");
  myAuthService.setEmailVerificationEnabled(true);

  Auth::PasswordVerifier *verifier = new Auth::PasswordVerifier();
  verifier->addHashFunction(new Auth::BCryptHashFunction(7));

#ifdef HAVE_CRYPT
  // We want to still support users registered in the pre - Wt::Auth
  // version of the hangman example
  verifier->addHashFunction(new UnixCryptHashFunction());
#endif

  myPasswordService.setVerifier(verifier);
  myPasswordService.setStrengthValidator(new Auth::PasswordStrengthValidator());
  myPasswordService.setAttemptThrottlingEnabled(true);

  if (Auth::GoogleService::configured())
    myOAuthServices.push_back(new Auth::GoogleService(myAuthService));
}
int Session::findRanking ( )

Definition at line 192 of file Session.C.

{
  dbo::Transaction transaction(session_);
  
  dbo::ptr<User> u = user();
  int ranking = -1;

  if (u)
    ranking = session_.query<int>("select distinct count(score) from user")
      .where("score > ?").bind(u->score);

  transaction.commit();
  
  return ranking + 1;
}
Wt::Auth::Login& Session::login ( ) [inline]

Definition at line 32 of file Session.h.

{ return login_; }
const std::vector< const Auth::OAuthService * > & Session::oAuth ( ) [static]

Definition at line 223 of file Session.C.

{
  return myOAuthServices;
}
const Auth::AbstractPasswordService & Session::passwordAuth ( ) [static]

Definition at line 218 of file Session.C.

{
  return myPasswordService;
}
std::vector< User > Session::topUsers ( int  limit)

Definition at line 170 of file Session.C.

{
  dbo::Transaction transaction(session_);

  Users top = session_.find<User>().orderBy("score desc").limit(20);

  std::vector<User> result;
  for (Users::const_iterator i = top.begin(); i != top.end(); ++i) {
    dbo::ptr<User> user = *i;
    result.push_back(*user);
 
    dbo::ptr<AuthInfo> auth = *user->authInfos.begin();
    std::string name = auth->identity(Auth::Identity::LoginName).toUTF8();

    result.back().name = name;
  }

  transaction.commit();

  return result;
}
dbo::ptr< User > Session::user ( ) const [private]

Definition at line 132 of file Session.C.

{
  if (login_.loggedIn()) {
    dbo::ptr<AuthInfo> authInfo = users_->find(login_.user());
    dbo::ptr<User> user = authInfo->user();

    if (!user) {
      user = session_.add(new User());
      authInfo.modify()->setUser(user);
    }

    return user;
  } else
    return dbo::ptr<User>();
}
std::string Session::userName ( ) const

Definition at line 148 of file Session.C.

{
  if (login_.loggedIn())
    return login_.user().identity(Auth::Identity::LoginName).toUTF8();
  else
    return std::string();
}
Auth::AbstractUserDatabase & Session::users ( )

Definition at line 208 of file Session.C.

{
  return *users_;
}

Member Data Documentation

Definition at line 51 of file Session.h.

Wt::Dbo::Session Session::session_ [mutable, private]

Definition at line 49 of file Session.h.

Wt::Dbo::backend::Sqlite3 Session::sqlite3_ [private]

Definition at line 48 of file Session.h.

Definition at line 50 of file Session.h.


The documentation for this class was generated from the following files:

Generated on Fri Jul 27 2012 for the C++ Web Toolkit (Wt) by doxygen 1.7.5.1