diff options
author | Andreas Baumann <mail@andreasbaumann.cc> | 2015-04-19 13:29:08 +0200 |
---|---|---|
committer | Andreas Baumann <mail@andreasbaumann.cc> | 2015-04-19 13:29:08 +0200 |
commit | 7fd19157644534d004a5ef4ca450fa7a3d3eb4b0 (patch) | |
tree | c9c0189d72380cdf942fb7e4a24dab43b943d8a5 /src | |
parent | 1543cd3d0c0e6b54440c6a895f2f283dc3688913 (diff) | |
download | aCms-7fd19157644534d004a5ef4ca450fa7a3d3eb4b0.tar.gz aCms-7fd19157644534d004a5ef4ca450fa7a3d3eb4b0.tar.bz2 |
completed login/logout
Diffstat (limited to 'src')
-rw-r--r-- | src/intro.cpp | 2 | ||||
-rw-r--r-- | src/master.cpp | 10 | ||||
-rw-r--r-- | src/master.hpp | 3 | ||||
-rw-r--r-- | src/master_content.hpp | 9 | ||||
-rw-r--r-- | src/user.cpp | 16 | ||||
-rw-r--r-- | src/user.hpp | 3 |
6 files changed, 39 insertions, 4 deletions
diff --git a/src/intro.cpp b/src/intro.cpp index bf0331d..6b91bff 100644 --- a/src/intro.cpp +++ b/src/intro.cpp @@ -17,7 +17,7 @@ intro::intro( strusCms &cms ) void intro::show( ) { content::intro c; - c.title = "strusCms"; + ini( c ); render( "intro", c ); } diff --git a/src/master.cpp b/src/master.cpp index 751bb73..95383d8 100644 --- a/src/master.cpp +++ b/src/master.cpp @@ -11,4 +11,14 @@ master::master( strusCms &cms ) { } +void master::ini( content::master &c ) +{ + c.title = "strusCms"; + if( session( ).is_set( "username" ) ) { + c.username = session( )["username" ]; + } else { + c.username = ""; + } +} + } diff --git a/src/master.hpp b/src/master.hpp index 7ef46e9..d29073e 100644 --- a/src/master.hpp +++ b/src/master.hpp @@ -1,6 +1,8 @@ #ifndef MASTER_HPP #define MASTER_HPP +#include "master_content.hpp" + #include <cppcms/application.h> namespace apps { @@ -13,6 +15,7 @@ class master : public cppcms::application { public: master( strusCms &cms ); + virtual void ini( content::master &c ); }; } diff --git a/src/master_content.hpp b/src/master_content.hpp index 7d61dcc..ff40b09 100644 --- a/src/master_content.hpp +++ b/src/master_content.hpp @@ -17,9 +17,16 @@ namespace content { struct master : public cppcms::base_content { std::string title; std::string login_link; - master( ) : cppcms::base_content( ) { + std::string logout_link; + std::string username; + + public: + master( ) : cppcms::base_content( ) + { + // TODO: ini //~ c.login_link=wi.users.login_url(); login_link = "/strusCms/login"; + logout_link = "/strusCms/logout"; } }; diff --git a/src/user.cpp b/src/user.cpp index 36ad821..c77381d 100644 --- a/src/user.cpp +++ b/src/user.cpp @@ -5,6 +5,7 @@ #include <cppcms/url_dispatcher.h> #include <cppcms/url_mapper.h> #include <cppdb/frontend.h> +#include <cppcms/session_interface.h> namespace apps { @@ -13,21 +14,34 @@ user::user( strusCms &cms ) { cms.dispatcher( ).assign( "/login", &user::login, this ); cms.mapper( ).assign( "login" ); + + cms.dispatcher( ).assign( "/logout", &user::logout, this ); + cms.mapper( ).assign( "logout" ); } void user::login( ) { content::user c( cms ); - c.title = "strusCms"; + ini( c ); if( request( ).request_method( ) == "POST" ) { c.login.load( context( ) ); if( c.login.validate( ) ) { response( ).set_redirect_header( cms.root( ) ); + session( )["username"] = c.login.username.value( ); + session( ).expose( "username" ); } } render( "login", c ); } +void user::logout( ) +{ + content::user c( cms ); + session( ).clear( ); + ini( c ); + render( "logout", c ); +} + // TODO: make this a salted hash bool user::check_login( std::string user, std::string password ) { diff --git a/src/user.hpp b/src/user.hpp index aecca71..9f35a0d 100644 --- a/src/user.hpp +++ b/src/user.hpp @@ -11,7 +11,8 @@ class user : public master { bool check_login( std::string user, std::string password ); private: - void login( ); + void login( ); + void logout( ); }; } |