fork(3) download
  1.  
  2. #include <iostream>
  3.  
  4. #include <Wt/WApplication>
  5. #include <Wt/Auth/AuthModel>
  6. #include <Wt/Auth/AuthWidget>
  7. #include <Wt/Auth/PasswordService>
  8. #include <Wt/Auth/PasswordVerifier>
  9. #include <Wt/Auth/HashFunction>
  10. #include <Wt/Auth/Login>
  11. #include <Wt/Auth/Dbo/AuthInfo>
  12. #include <Wt/Auth/Dbo/UserDatabase>
  13. #include <Wt/Dbo/ptr>
  14. #include <Wt/Dbo/backend/Sqlite3>
  15.  
  16. using namespace Wt;
  17. namespace dbo = Wt::Dbo;
  18.  
  19. Auth::AuthService auth_service_;
  20. Auth::PasswordService password_service_(auth_service_);
  21.  
  22. class User;
  23.  
  24. typedef Auth::AuthModel AuthModel;
  25. typedef Auth::AuthWidget AuthWidget;
  26.  
  27. typedef Auth::Dbo::AuthInfo<User> AuthInfo;
  28. typedef dbo::ptr<AuthInfo> AuthInfoPtr;
  29. typedef dbo::collection<AuthInfoPtr> AuthInfos;
  30. typedef Auth::Dbo::UserDatabase<AuthInfo> UserDatabase;
  31.  
  32. class User {
  33. public:
  34. template<class Action>
  35. void persist(Action& a) {
  36. dbo::hasMany(a, auth_infos_, dbo::ManyToOne, "user");
  37. }
  38.  
  39. private:
  40. AuthInfos auth_infos_;
  41. };
  42.  
  43. class App : public WApplication {
  44. public:
  45. App(const WEnvironment& env):
  46. WApplication(env),
  47. sqlite3_(":memory:"),
  48. user_database_(session_) {
  49. session_.setConnection(sqlite3_);
  50. session_.mapClass<User>("demo_user");
  51. session_.mapClass<AuthInfo>("auth_info");
  52. session_.mapClass<AuthInfo::AuthIdentityType>("auth_identity");
  53. session_.mapClass<AuthInfo::AuthTokenType>("auth_token");
  54. try {
  55. session_.createTables();
  56. } catch (...)
  57. { }
  58. //
  59. AuthModel* model = new AuthModel(auth_service_, user_database_, this);
  60. model->addPasswordAuth(&password_service_);
  61. AuthWidget* auth_widget = new AuthWidget(login_, root());
  62. auth_widget->setModel(model);
  63. auth_widget->setRegistrationEnabled(true);
  64. auth_widget->processEnvironment();
  65. //
  66. login_.changed().connect(this, &App::login_callback);
  67. }
  68.  
  69. private:
  70. dbo::backend::Sqlite3 sqlite3_;
  71. dbo::Session session_;
  72. UserDatabase user_database_;
  73. Auth::Login login_;
  74.  
  75. void login_callback() {
  76. dbo::Transaction t(session_);
  77. session_.add(new User);
  78. std::cerr << "Write something to database" << std::endl;
  79. }
  80. };
  81.  
  82. WApplication* createApp(const WEnvironment& env) {
  83. return new App(env);
  84. }
  85.  
  86. int main(int argc, char** argv) {
  87. using namespace Wt::Auth;
  88. PasswordVerifier* verifier = new PasswordVerifier();
  89. verifier->addHashFunction(new BCryptHashFunction(7));
  90. password_service_.setVerifier(verifier);
  91. return WRun(argc, argv, &createApp);
  92. }
  93.  
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty