From 8ba2c0def848f72c6c817fdeb0cc220d3da0d8ee Mon Sep 17 00:00:00 2001 From: Andreas Baumann Date: Sun, 26 Apr 2015 17:10:50 +0200 Subject: working on register user --- CMakeLists.txt | 1 + src/master_content.hpp | 2 + src/user.cpp | 113 +++++++++++++++++++++++++++++++++++++++++++++--- src/user.hpp | 2 + src/user_content.hpp | 27 +++++++++++- templates/intro.tmpl | 3 ++ templates/login.tmpl | 2 - templates/register.tmpl | 22 ++++++++++ 8 files changed, 162 insertions(+), 10 deletions(-) create mode 100644 templates/register.tmpl diff --git a/CMakeLists.txt b/CMakeLists.txt index 8a87524..a8b8ef0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -35,6 +35,7 @@ set(TEMPLATES ${CMAKE_CURRENT_SOURCE_DIR}/templates/intro.tmpl ${CMAKE_CURRENT_SOURCE_DIR}/templates/login.tmpl ${CMAKE_CURRENT_SOURCE_DIR}/templates/logout.tmpl + ${CMAKE_CURRENT_SOURCE_DIR}/templates/register.tmpl ) set(SRC diff --git a/src/master_content.hpp b/src/master_content.hpp index 23db633..f1cd222 100644 --- a/src/master_content.hpp +++ b/src/master_content.hpp @@ -18,6 +18,7 @@ struct master : public cppcms::base_content { std::string title; std::string login_link; std::string logout_link; + std::string register_link; std::string username; public: @@ -27,6 +28,7 @@ struct master : public cppcms::base_content { //~ c.login_link=wi.users.login_url(); login_link = "/strusCms/login"; logout_link = "/strusCms/logout"; + register_link = "/strusCms/register"; } std::string root( ) { diff --git a/src/user.cpp b/src/user.cpp index ebc3b06..4fd2499 100644 --- a/src/user.cpp +++ b/src/user.cpp @@ -11,6 +11,8 @@ namespace apps { +// user + user::user( strusCms &cms ) : master( cms ) { @@ -19,6 +21,12 @@ user::user( strusCms &cms ) cms.dispatcher( ).assign( "/logout", &user::logout, this ); cms.mapper( ).assign( "logout" ); + + cms.dispatcher( ).assign( "/register", &user::register_user, this ); + cms.mapper( ).assign( "register" ); + + cms.dispatcher( ).assign( "/confirm_register", &user::confirm_register, this ); + cms.mapper( ).assign( "confirm_register" ); } void user::login( ) @@ -48,6 +56,32 @@ void user::logout( ) render( "logout", c ); } +void user::register_user( ) +{ + content::user c( cms ); + ini( c ); + if( request( ).request_method( ) == "POST" ) { + c.register_user.load( context( ) ); + if( c.register_user.validate( ) ) { + response( ).set_redirect_header( cms.root( ) + "/confirm_register" ); + } + } + render( "register_user", c ); +} + +void user::confirm_register( ) +{ + content::user c( cms ); + ini( c ); + if( request( ).request_method( ) == "POST" ) { + c.confirm_register.load( context( ) ); + if( c.confirm_register.validate( ) ) { + response( ).set_redirect_header( cms.root( ) + "/intro" ); + } + } + render( "confirm_register", c ); +} + // TODO: make this a salted hash bool user::check_login( std::string user, std::string password ) { @@ -96,7 +130,14 @@ void user::ini( content::user &c ) } // namespace apps namespace content { + +user::user( apps::strusCms &cms ) + : login( cms ), register_user( cms ), confirm_register( cms ) +{ +} +// login + login_form::login_form( apps::strusCms &cms ) : cppcms::form( ), cms( cms ) @@ -105,18 +146,14 @@ login_form::login_form( apps::strusCms &cms ) username.error_message( "The login is illegal" ); password.message( "Your password" ); password.error_message( "Your password is illegal" ); - captcha.message( "Enter the correct captcha" ); - captcha.error_message( "Captcha didn't match" ); submit.value( "Log in" ); add( username ); add( password ); - add( captcha ); add( submit ); username.non_empty( ); password.non_empty( ); - captcha.non_empty( ); } bool login_form::validate( ) @@ -133,20 +170,82 @@ bool login_form::validate( ) booster::ptime::sleep( booster::ptime( 5, 0 ) ); return false; } + + return true; +} + +// register user + +register_user_form::register_user_form( apps::strusCms &cms ) + : cppcms::form( ), + cms( cms ) +{ + username.message( "Your login" ); + username.error_message( "The login is illegal" ); + password.message( "Your password" ); + password.error_message( "Your password is illegal" ); + password2.message( "Your password (again)" ); + password2.error_message( "Your password doesn't match" ); + captcha.message( "Enter the correct captcha" ); + captcha.error_message( "Captcha didn't match" ); + submit.value( "Register user" ); + + add( username ); + add( password ); + add( password2 ); + add( captcha ); + add( submit ); + + username.non_empty( ); + password.non_empty( ); + password2.non_empty( ); + captcha.non_empty( ); +} + +bool register_user_form::validate( ) +{ + if( !form::validate( ) ) { + return false; + } if( captcha.value( ).compare( cms.user.last_captcha ) != 0 ) { captcha.valid( false ); captcha.clear( ); - booster::ptime::sleep( booster::ptime( 5, 0 ) ); return false; } return true; } + +// confirm user registration form + +confirm_register_form::confirm_register_form( apps::strusCms &cms ) + : cppcms::form( ), + cms( cms ) +{ + code.message( "Enter the code you received by email" ); + code.error_message( "The code you provided is not correct" ); + submit.value( "Log in" ); -user::user( apps::strusCms &cms ) - : login( cms ) + add( code ); + add( submit ); + + code.non_empty( ); +} + +bool confirm_register_form::validate( ) { + if( !form::validate( ) ) { + return false; + } + + //~ if( !cms.user.check_code( code.value( ) ) ) { + //~ code.valid( false ); + //~ booster::ptime::sleep( booster::ptime( 5, 0 ) ); + //~ return false; + //~ } + + return true; } } // namespace content diff --git a/src/user.hpp b/src/user.hpp index d76392c..2f557a9 100644 --- a/src/user.hpp +++ b/src/user.hpp @@ -19,6 +19,8 @@ class user : public master { private: void login( ); void logout( ); + void register_user( ); + void confirm_register( ); void ini( content::user &c ); }; diff --git a/src/user_content.hpp b/src/user_content.hpp index c0ff7eb..e86e2fd 100644 --- a/src/user_content.hpp +++ b/src/user_content.hpp @@ -11,7 +11,6 @@ struct login_form : public cppcms::form { apps::strusCms &cms; cppcms::widgets::text username; cppcms::widgets::password password; - cppcms::widgets::text captcha; cppcms::widgets::submit submit; public: @@ -20,8 +19,34 @@ struct login_form : public cppcms::form { }; +struct register_user_form : public cppcms::form { + apps::strusCms &cms; + cppcms::widgets::text username; + cppcms::widgets::password password; + cppcms::widgets::password password2; + cppcms::widgets::text captcha; + cppcms::widgets::submit submit; + + public: + register_user_form( apps::strusCms &cms ); + virtual bool validate( ); +}; + +struct confirm_register_form : public cppcms::form { + apps::strusCms &cms; + cppcms::widgets::text code; + cppcms::widgets::submit submit; + + public: + confirm_register_form( apps::strusCms &cms ); + virtual bool validate( ); +}; + struct user : public master { login_form login; + register_user_form register_user; + confirm_register_form confirm_register; + std::string captcha_base64; public: diff --git a/templates/intro.tmpl b/templates/intro.tmpl index 205f952..3e524c2 100644 --- a/templates/intro.tmpl +++ b/templates/intro.tmpl @@ -17,6 +17,9 @@ <% else %> If you want to edit pages, please log in here. +
+ If you don't have an account yet, you can register for + a new one here. <% end %> <% end template %> diff --git a/templates/login.tmpl b/templates/login.tmpl index 2e58888..f89cf93 100644 --- a/templates/login.tmpl +++ b/templates/login.tmpl @@ -13,8 +13,6 @@ <% form as_table login %> -
- <% end template %> diff --git a/templates/register.tmpl b/templates/register.tmpl new file mode 100644 index 0000000..e95fc69 --- /dev/null +++ b/templates/register.tmpl @@ -0,0 +1,22 @@ +<% c++ #include "user_content.hpp" %> +<% skin view %> +<% view register_user uses content::user extends master %> + +<% template title() %> + <% include master::title() %> :: Register new user +<% end %> + +<% template page_content() %> +
+
<% csrf %> + + <% form as_table register_user %> +
+
+
+ +
+<% end template %> + +<% end view %> +<% end skin %> -- cgit v1.2.3-54-g00ecf