1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
|
/*
* Copyright (C) 2008 Emweb bvba, Kessel-Lo, Belgium.
*
* See the LICENSE file for terms of use.
*/
#include "Session.h"
#include "Wt/Auth/AuthService"
#include "Wt/Auth/HashFunction"
#include "Wt/Auth/PasswordService"
#include "Wt/Auth/PasswordStrengthValidator"
#include "Wt/Auth/PasswordVerifier"
#include "Wt/Auth/GoogleService"
#include "Wt/Auth/FacebookService"
#include "Wt/Auth/Dbo/AuthInfo"
#include "Wt/Auth/Dbo/UserDatabase"
namespace {
class MyOAuth : public std::vector<const Wt::Auth::OAuthService *>
{
public:
~MyOAuth()
{
for (unsigned i = 0; i < size(); ++i)
delete (*this)[i];
}
};
Wt::Auth::AuthService myAuthService;
Wt::Auth::PasswordService myPasswordService(myAuthService);
MyOAuth myOAuthServices;
}
void Session::configureAuth()
{
myAuthService.setAuthTokensEnabled(true, "logincookie");
myAuthService.setEmailVerificationEnabled(true);
Wt::Auth::PasswordVerifier *verifier = new Wt::Auth::PasswordVerifier();
verifier->addHashFunction(new Wt::Auth::BCryptHashFunction(7));
myPasswordService.setVerifier(verifier);
myPasswordService.setAttemptThrottlingEnabled(true);
myPasswordService.setStrengthValidator
(new Wt::Auth::PasswordStrengthValidator());
if (Wt::Auth::GoogleService::configured())
myOAuthServices.push_back(new Wt::Auth::GoogleService(myAuthService));
if (Wt::Auth::FacebookService::configured())
myOAuthServices.push_back(new Wt::Auth::FacebookService(myAuthService));
}
Session::Session(const std::string& sqliteDb)
: connection_(sqliteDb)
{
connection_.setProperty("show-queries", "true");
setConnection(connection_);
mapClass<User>("user");
mapClass<AuthInfo>("auth_info");
mapClass<AuthInfo::AuthIdentityType>("auth_identity");
mapClass<AuthInfo::AuthTokenType>("auth_token");
try {
createTables();
std::cerr << "Created database." << std::endl;
} catch (std::exception& e) {
std::cerr << e.what() << std::endl;
std::cerr << "Using existing database";
}
users_ = new UserDatabase(*this);
}
Session::~Session()
{
delete users_;
}
Wt::Auth::AbstractUserDatabase& Session::users()
{
return *users_;
}
dbo::ptr<User> Session::user()
{
if (login_.loggedIn())
return user(login_.user());
else
return dbo::ptr<User>();
}
dbo::ptr<User> Session::user(const Wt::Auth::User& authUser)
{
dbo::ptr<AuthInfo> authInfo = users_->find(authUser);
dbo::ptr<User> user = authInfo->user();
if (!user) {
user = add(new User());
authInfo.modify()->setUser(user);
}
return user;
}
const Wt::Auth::AuthService& Session::auth()
{
return myAuthService;
}
const Wt::Auth::PasswordService& Session::passwordAuth()
{
return myPasswordService;
}
const std::vector<const Wt::Auth::OAuthService *>& Session::oAuth()
{
return myOAuthServices;
}
|