9 #include "Wt/Auth/AuthService.h"
10 #include "Wt/Auth/HashFunction.h"
11 #include "Wt/Auth/PasswordService.h"
12 #include "Wt/Auth/PasswordStrengthValidator.h"
13 #include "Wt/Auth/PasswordVerifier.h"
14 #include "Wt/Auth/GoogleService.h"
15 #include "Wt/Auth/Dbo/AuthInfo.h"
16 #include "Wt/Auth/Dbo/UserDatabase.h"
18 #include <Wt/WApplication.h>
19 #include <Wt/WLogger.h>
25 #if !defined(WT_WIN32) && !defined(__CYGWIN__) && !defined(ANDROID)
29 #endif // _XOPEN_CRYPT
40 virtual std::string compute(
const std::string& msg,
41 const std::string& salt)
const
43 std::string md5Salt =
"$1$" + salt;
44 return crypt(msg.c_str(), md5Salt.c_str());
47 virtual bool verify(
const std::string& msg,
48 const std::string& salt,
49 const std::string& hash)
const
51 return crypt(msg.c_str(), hash.c_str()) == hash;
54 virtual std::string name ()
const {
60 class MyOAuth :
public std::vector<const Auth::OAuthService *>
65 for (
unsigned i = 0; i < size(); ++i)
72 MyOAuth myOAuthServices;
77 myAuthService.setAuthTokensEnabled(
true,
"hangmancookie");
78 myAuthService.setEmailVerificationEnabled(
true);
80 std::unique_ptr<Auth::PasswordVerifier> verifier
81 = cpp14::make_unique<Auth::PasswordVerifier>();
82 verifier->addHashFunction(cpp14::make_unique<Auth::BCryptHashFunction>(7));
87 verifier->addHashFunction(cpp14::make_unique<UnixCryptHashFunction>());
90 myPasswordService.setVerifier(std::move(verifier));
91 myPasswordService.setStrengthValidator(cpp14::make_unique<Auth::PasswordStrengthValidator>());
92 myPasswordService.setAttemptThrottlingEnabled(
true);
94 if (Auth::GoogleService::configured())
100 auto sqlite3 = cpp14::make_unique<Dbo::backend::Sqlite3>(WApplication::instance()->appRoot() +
"hangman.db");
101 sqlite3->setProperty(
"show-queries",
"true");
119 guestUser.
addIdentity(Auth::Identity::LoginName,
"guest");
120 myPasswordService.updatePassword(guestUser,
"guest");
122 log(
"info") <<
"Database created";
124 log(
"info") <<
"Using existing database";
155 return std::string();
165 ++u.
modify()->gamesPlayed;
166 u.
modify()->lastGame = WDateTime::currentDateTime();
178 std::vector<User> result;
181 result.push_back(*
user);
184 std::string name =
auth->identity(Auth::Identity::LoginName).toUTF8();
186 result.back().name = name;
202 ranking =
session_.
query<
int>(
"select distinct count(score) from user")
203 .where(
"score > ?").bind(u->score);
217 return myAuthService;
222 return myPasswordService;
227 return myOAuthServices;