Wt examples  4.0.0
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::AbstractUserDatabaseusers ()
 
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 Auth::AuthServiceauth ()
 
static const Auth::AbstractPasswordServicepasswordAuth ()
 
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 ( )

Definition at line 95 of file Session.C.

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

Definition at line 127 of file Session.C.

128 {
129 }

Member Function Documentation

void Session::addToScore ( int  s)

Definition at line 155 of file Session.C.

156 {
157  dbo::Transaction transaction(session_);
158 
159  dbo::ptr<User> u = user();
160  if (u) {
161  u.modify()->score += s;
162  ++u.modify()->gamesPlayed;
163  u.modify()->lastGame = WDateTime::currentDateTime();
164  }
165 
166  transaction.commit();
167 }
Dbo::ptr< User > user() const
Definition: Session.C:131
C * modify() const
Dbo::Session session_
Definition: Session.h:50
int gamesPlayed
Definition: User.h:32
long long score
Definition: User.h:33
WDateTime lastGame
Definition: User.h:34
const Auth::AuthService & Session::auth ( )
static

Definition at line 212 of file Session.C.

213 {
214  return myAuthService;
215 }
void Session::configureAuth ( )
static

Definition at line 72 of file Session.C.

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

Definition at line 191 of file Session.C.

192 {
193  dbo::Transaction transaction(session_);
194 
195  dbo::ptr<User> u = user();
196  int ranking = -1;
197 
198  if (u)
199  ranking = session_.query<int>("select distinct count(score) from user")
200  .where("score > ?").bind(u->score);
201 
202  transaction.commit();
203 
204  return ranking + 1;
205 }
Dbo::ptr< User > user() const
Definition: Session.C:131
Dbo::Session session_
Definition: Session.h:50
long long score
Definition: User.h:33
Query< Result, BindStrategy > query(const std::string &sql)
Auth::Login& Session::login ( )
inline

Definition at line 34 of file Session.h.

34 { return login_; }
Auth::Login login_
Definition: Session.h:52
const std::vector< const Auth::OAuthService * > & Session::oAuth ( )
static

Definition at line 222 of file Session.C.

223 {
224  return myOAuthServices;
225 }
const Auth::AbstractPasswordService & Session::passwordAuth ( )
static

Definition at line 217 of file Session.C.

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

Definition at line 169 of file Session.C.

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

Definition at line 131 of file Session.C.

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

Definition at line 147 of file Session.C.

148 {
149  if (login_.loggedIn())
150  return login_.user().identity(Auth::Identity::LoginName).toUTF8();
151  else
152  return std::string();
153 }
WString identity(const std::string &provider) const
bool loggedIn() const
std::string toUTF8() const
const User & user() const
Auth::Login login_
Definition: Session.h:52
Auth::AbstractUserDatabase & Session::users ( )

Definition at line 207 of file Session.C.

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

Member Data Documentation

Auth::Login Session::login_
private

Definition at line 52 of file Session.h.

Dbo::Session Session::session_
mutableprivate

Definition at line 50 of file Session.h.

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 Mon Sep 4 2017 for the C++ Web Toolkit (Wt) by doxygen 1.8.11