Wt examples  4.2.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::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::Session ( )

Definition at line 98 of file Session.C.

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

Definition at line 130 of file Session.C.

131 {
132 }

Member Function Documentation

◆ addToScore()

void Session::addToScore ( int  s)

Definition at line 158 of file Session.C.

159 {
160  dbo::Transaction transaction(session_);
161 
162  dbo::ptr<User> u = user();
163  if (u) {
164  u.modify()->score += s;
165  ++u.modify()->gamesPlayed;
166  u.modify()->lastGame = WDateTime::currentDateTime();
167  }
168 
169  transaction.commit();
170 }
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
Dbo::ptr< User > user() const
Definition: Session.C:134

◆ auth()

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

Definition at line 215 of file Session.C.

216 {
217  return myAuthService;
218 }

◆ configureAuth()

void Session::configureAuth ( )
static

Definition at line 75 of file Session.C.

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

◆ findRanking()

int Session::findRanking ( )

Definition at line 194 of file Session.C.

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

◆ 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 225 of file Session.C.

226 {
227  return myOAuthServices;
228 }

◆ passwordAuth()

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

Definition at line 220 of file Session.C.

221 {
222  return myPasswordService;
223 }

◆ topUsers()

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

Definition at line 172 of file Session.C.

173 {
174  dbo::Transaction transaction(session_);
175 
176  Users top = session_.find<User>().orderBy("score desc").limit(limit);
177 
178  std::vector<User> result;
179  for (Users::const_iterator i = top.begin(); i != top.end(); ++i) {
180  dbo::ptr<User> user = *i;
181  result.push_back(*user);
182 
183  dbo::ptr<AuthInfo> auth = *user->authInfos.begin();
184  std::string name = auth->identity(Auth::Identity::LoginName).toUTF8();
185 
186  result.back().name = name;
187  }
188 
189  transaction.commit();
190 
191  return result;
192 }
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:215
Dbo::ptr< User > user() const
Definition: Session.C:134

◆ user()

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

Definition at line 134 of file Session.C.

135 {
136  if (login_.loggedIn()) {
137  dbo::ptr<AuthInfo> authInfo = users_->find(login_.user());
138  dbo::ptr<User> user = authInfo->user();
139 
140  if (!user) {
141  user = session_.add(Wt::cpp14::make_unique<User>());
142  authInfo.modify()->setUser(user);
143  }
144 
145  return user;
146  } else
147  return dbo::ptr<User>();
148 }
C * modify() const
ptr< C > add(ptr< C > &ptr)
Dbo::Session session_
Definition: Session.h:50
bool loggedIn() const
void setUser(Wt::Dbo::ptr< UserType > user)
const User & user() const
Wt::Dbo::ptr< UserType > user() const
Dbo::ptr< User > user() const
Definition: Session.C:134
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 150 of file Session.C.

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

◆ users()

Auth::AbstractUserDatabase & Session::users ( )

Definition at line 210 of file Session.C.

211 {
212  return *users_;
213 }
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 Fri Mar 20 2020 for the C++ Web Toolkit (Wt) by doxygen 1.8.15