Wt examples  4.0.2
Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | List of all members
Session Class Reference

#include <Session.h>

Public Member Functions

 Session ()
 
 ~Session ()
 
Auth::AbstractUserDatabase & users ()
 
Auth::Login & login ()
 
std::vector< UsertopUsers (int limit)
 
std::string userName () const
 
int findRanking ()
 
void addToScore (int s)
 

Static Public Member Functions

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

Private Member Functions

Dbo::ptr< Useruser () const
 

Private Attributes

Dbo::Session session_
 
std::unique_ptr< UserDatabaseusers_
 
Auth::Login login_
 

Detailed Description

Definition at line 25 of file Session.h.

Constructor & Destructor Documentation

§ Session()

Session::Session ( )

Definition at line 96 of file Session.C.

97 {
98  auto sqlite3 = cpp14::make_unique<Dbo::backend::Sqlite3>(WApplication::instance()->appRoot() + "hangman.db");
99  sqlite3->setProperty("show-queries", "true");
100  session_.setConnection(std::move(sqlite3));
101 
102  session_.mapClass<User>("user");
103  session_.mapClass<AuthInfo>("auth_info");
104  session_.mapClass<AuthInfo::AuthIdentityType>("auth_identity");
105  session_.mapClass<AuthInfo::AuthTokenType>("auth_token");
106 
107  users_ = cpp14::make_unique<UserDatabase>(session_);
108 
109  dbo::Transaction transaction(session_);
110  try {
111  session_.createTables();
112 
113  /*
114  * Add a default guest/guest account
115  */
116  Auth::User guestUser = users_->registerNew();
117  guestUser.addIdentity(Auth::Identity::LoginName, "guest");
118  myPasswordService.updatePassword(guestUser, "guest");
119 
120  log("info") << "Database created";
121  } catch (...) {
122  log("info") << "Using existing database";
123  }
124 
125  transaction.commit();
126 }
Auth::Dbo::AuthInfo< User > AuthInfo
Definition: User.h:22
Dbo::Session session_
Definition: Session.h:50
Definition: User.h:26
std::unique_ptr< UserDatabase > users_
Definition: Session.h:51

§ ~Session()

Session::~Session ( )

Definition at line 128 of file Session.C.

129 {
130 }

Member Function Documentation

§ addToScore()

void Session::addToScore ( int  s)

Definition at line 156 of file Session.C.

157 {
158  dbo::Transaction transaction(session_);
159 
160  dbo::ptr<User> u = user();
161  if (u) {
162  u.modify()->score += s;
163  ++u.modify()->gamesPlayed;
164  u.modify()->lastGame = WDateTime::currentDateTime();
165  }
166 
167  transaction.commit();
168 }
Dbo::Session session_
Definition: Session.h:50
Dbo::ptr< User > user() const
Definition: Session.C:132

§ auth()

const Auth::AuthService & Session::auth ( )
static

Definition at line 213 of file Session.C.

214 {
215  return myAuthService;
216 }

§ configureAuth()

void Session::configureAuth ( )
static

Definition at line 73 of file Session.C.

74 {
75  myAuthService.setAuthTokensEnabled(true, "hangmancookie");
76  myAuthService.setEmailVerificationEnabled(true);
77 
78  std::unique_ptr<Auth::PasswordVerifier> verifier
79  = cpp14::make_unique<Auth::PasswordVerifier>();
80  verifier->addHashFunction(cpp14::make_unique<Auth::BCryptHashFunction>(7));
81 
82 #ifdef HAVE_CRYPT
83  // We want to still support users registered in the pre - Wt::Auth
84  // version of the hangman example
85  verifier->addHashFunction(cpp14::make_unique<UnixCryptHashFunction>());
86 #endif
87 
88  myPasswordService.setVerifier(std::move(verifier));
89  myPasswordService.setStrengthValidator(cpp14::make_unique<Auth::PasswordStrengthValidator>());
90  myPasswordService.setAttemptThrottlingEnabled(true);
91 
92  if (Auth::GoogleService::configured())
93  myOAuthServices.push_back(new Auth::GoogleService(myAuthService));
94 }

§ findRanking()

int Session::findRanking ( )

Definition at line 192 of file Session.C.

193 {
194  dbo::Transaction transaction(session_);
195 
196  dbo::ptr<User> u = user();
197  int ranking = -1;
198 
199  if (u)
200  ranking = session_.query<int>("select distinct count(score) from user")
201  .where("score > ?").bind(u->score);
202 
203  transaction.commit();
204 
205  return ranking + 1;
206 }
Dbo::Session session_
Definition: Session.h:50
Dbo::ptr< User > user() const
Definition: Session.C:132

§ login()

Auth::Login& Session::login ( )
inline

Definition at line 34 of file Session.h.

34 { return login_; }
Auth::Login login_
Definition: Session.h:52

§ oAuth()

const std::vector< const Auth::OAuthService * > & Session::oAuth ( )
static

Definition at line 223 of file Session.C.

224 {
225  return myOAuthServices;
226 }

§ passwordAuth()

const Auth::AbstractPasswordService & Session::passwordAuth ( )
static

Definition at line 218 of file Session.C.

219 {
220  return myPasswordService;
221 }

§ topUsers()

std::vector< User > Session::topUsers ( int  limit)

Definition at line 170 of file Session.C.

171 {
172  dbo::Transaction transaction(session_);
173 
174  Users top = session_.find<User>().orderBy("score desc").limit(limit);
175 
176  std::vector<User> result;
177  for (Users::const_iterator i = top.begin(); i != top.end(); ++i) {
178  dbo::ptr<User> user = *i;
179  result.push_back(*user);
180 
181  dbo::ptr<AuthInfo> auth = *user->authInfos.begin();
182  std::string name = auth->identity(Auth::Identity::LoginName).toUTF8();
183 
184  result.back().name = name;
185  }
186 
187  transaction.commit();
188 
189  return result;
190 }
Dbo::Session session_
Definition: Session.h:50
dbo::collection< dbo::ptr< User > > Users
Definition: User.h:24
Definition: User.h:26
static const Auth::AuthService & auth()
Definition: Session.C:213
Dbo::ptr< User > user() const
Definition: Session.C:132

§ user()

dbo::ptr< User > Session::user ( ) const
private

Definition at line 132 of file Session.C.

133 {
134  if (login_.loggedIn()) {
135  dbo::ptr<AuthInfo> authInfo = users_->find(login_.user());
136  dbo::ptr<User> user = authInfo->user();
137 
138  if (!user) {
139  user = session_.add(Wt::cpp14::make_unique<User>());
140  authInfo.modify()->setUser(user);
141  }
142 
143  return user;
144  } else
145  return dbo::ptr<User>();
146 }
Dbo::Session session_
Definition: Session.h:50
Dbo::ptr< User > user() const
Definition: Session.C:132
std::unique_ptr< UserDatabase > users_
Definition: Session.h:51
Auth::Login login_
Definition: Session.h:52

§ userName()

std::string Session::userName ( ) const

Definition at line 148 of file Session.C.

149 {
150  if (login_.loggedIn())
151  return login_.user().identity(Auth::Identity::LoginName).toUTF8();
152  else
153  return std::string();
154 }
Auth::Login login_
Definition: Session.h:52

§ users()

Auth::AbstractUserDatabase & Session::users ( )

Definition at line 208 of file Session.C.

209 {
210  return *users_;
211 }
std::unique_ptr< UserDatabase > users_
Definition: Session.h:51

Member Data Documentation

§ login_

Auth::Login Session::login_
private

Definition at line 52 of file Session.h.

§ session_

Dbo::Session Session::session_
mutableprivate

Definition at line 50 of file Session.h.

§ users_

std::unique_ptr<UserDatabase> Session::users_
private

Definition at line 51 of file Session.h.


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

Generated on Wed May 30 2018 for the C++ Web Toolkit (Wt) by doxygen 1.8.12