Wt examples 4.8.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 98 of file Session.C.

99{
100 auto sqlite3 = std::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");
107 session_.mapClass<AuthInfo::AuthTokenType>("auth_token");
108
109 users_ = std::make_unique<UserDatabase>(session_);
110
111 dbo::Transaction transaction(session_);
112 try {
113 session_.createTables();
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}
Auth::Dbo::AuthInfo< User > AuthInfo
Definition: User.h:23
std::unique_ptr< UserDatabase > users_
Definition: Session.h:51
Dbo::Session session_
Definition: Session.h:50
Definition: User.h:27

◆ ~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}
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 = std::make_unique<Auth::PasswordVerifier>();
82 verifier->addHashFunction(std::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(std::make_unique<UnixCryptHashFunction>());
88#endif
89
90 myPasswordService.setVerifier(std::move(verifier));
91 myPasswordService.setStrengthValidator(std::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}

◆ 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}
dbo::collection< dbo::ptr< User > > Users
Definition: User.h:24
static const Auth::AuthService & auth()
Definition: Session.C:215

◆ 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(std::make_unique<User>());
142 authInfo.modify()->setUser(user);
143 }
144
145 return user;
146 } else
147 return dbo::ptr<User>();
148}

◆ 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}

◆ users()

Auth::AbstractUserDatabase & Session::users ( )

Definition at line 210 of file Session.C.

211{
212 return *users_;
213}

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 Sat Nov 5 2022 for the C++ Web Toolkit (Wt) by doxygen 1.9.5