summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2015-04-26 17:10:50 +0200
committerAndreas Baumann <mail@andreasbaumann.cc>2015-04-26 17:10:50 +0200
commit8ba2c0def848f72c6c817fdeb0cc220d3da0d8ee (patch)
tree8830253f0d1969ae3f4a268b8b295220e2943f3a
parentef2fed182ff854786381be71c603ee2fea290e08 (diff)
downloadaCms-8ba2c0def848f72c6c817fdeb0cc220d3da0d8ee.tar.gz
aCms-8ba2c0def848f72c6c817fdeb0cc220d3da0d8ee.tar.bz2
working on register user
-rw-r--r--CMakeLists.txt1
-rw-r--r--src/master_content.hpp2
-rw-r--r--src/user.cpp113
-rw-r--r--src/user.hpp2
-rw-r--r--src/user_content.hpp27
-rw-r--r--templates/intro.tmpl3
-rw-r--r--templates/login.tmpl2
-rw-r--r--templates/register.tmpl22
8 files changed, 162 insertions, 10 deletions
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
<a href="<%= login_link %>">here</a>.
+ <br/>
+ If you don't have an account yet, you can register for
+ a new one <a href="<%= register_link %>">here</a>.
<% end %>
</div>
<% 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 %>
</table>
</form>
- <br/>
- <img src="data:image/gif;base64,<%= captcha_base64 %>"/>
</div>
<% 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() %>
+ <div>
+ <form method="post" action=""><% csrf %>
+ <table>
+ <% form as_table register_user %>
+ </table>
+ </form>
+ <br/>
+ <img src="data:image/gif;base64,<%= captcha_base64 %>"/>
+ </div>
+<% end template %>
+
+<% end view %>
+<% end skin %>