diff options
author | Andreas Baumann <mail@andreasbaumann.cc> | 2015-04-19 16:57:37 +0200 |
---|---|---|
committer | Andreas Baumann <mail@andreasbaumann.cc> | 2015-04-19 16:57:37 +0200 |
commit | 0002c57163f2518bc949eb2b06c91422a63789e4 (patch) | |
tree | 2a3c170916be66c6e926f51f9f2d9e86ae8c47c8 | |
parent | 70e8b81c75486475983a5efe3c129c98bf88cefd (diff) | |
download | aCms-0002c57163f2518bc949eb2b06c91422a63789e4.tar.gz aCms-0002c57163f2518bc949eb2b06c91422a63789e4.tar.bz2 |
remember logins and table for login form
-rw-r--r-- | sql/sqlite3.sql | 13 | ||||
-rw-r--r-- | src/user.cpp | 14 | ||||
-rw-r--r-- | templates/login.tmpl | 4 |
3 files changed, 26 insertions, 5 deletions
diff --git a/sql/sqlite3.sql b/sql/sqlite3.sql index 9aaa818..beefe6e 100644 --- a/sql/sqlite3.sql +++ b/sql/sqlite3.sql @@ -1,9 +1,16 @@ -drop table if exists users; +drop table if exists login; +drop table if exists user; -create table users( +create table user( id integer primary key autoincrement not null, username varchar(32) unique not null, password varchar(32) not null ); -insert into users(username, password) values('admin','admin'); +insert into user(username, password) values('admin','admin'); + +create table login( + id integer primary key autoincrement not null, + user_id integer references user(id), + last_login TIMESTAMP +); diff --git a/src/user.cpp b/src/user.cpp index 07312f9..649c40e 100644 --- a/src/user.cpp +++ b/src/user.cpp @@ -6,6 +6,7 @@ #include <cppcms/url_mapper.h> #include <cppdb/frontend.h> #include <cppcms/session_interface.h> +#include <booster/posix_time.h> namespace apps { @@ -55,11 +56,13 @@ bool user::check_login( std::string user, std::string password ) cppdb::session sql( cms.conn ); cppdb::result r; - r = sql << "SELECT password FROM users WHERE username=?" << user << cppdb::row; + r = sql << "SELECT id, password FROM user WHERE username=?" << user << cppdb::row; if( r.empty( ) ) { return false; } + int id; + r >> id; std::string pass; r >> pass; @@ -67,6 +70,14 @@ bool user::check_login( std::string user, std::string password ) return false; } + std::time_t now_time = std::time( 0 ); + std::tm now = *std::localtime( &now_time ); + + cppdb::statement stmt; + stmt = sql << "INSERT INTO login(user_id, last_login) VALUES(?, ?)" + << id << now; + stmt.exec( ); + return true; } @@ -101,6 +112,7 @@ bool login_form::validate( ) if( !cms.user.check_login( username.value( ), password.value( ) ) ) { username.valid( false ); password.valid( false ); + booster::ptime::sleep( booster::ptime( 5, 0 ) ); return false; } diff --git a/templates/login.tmpl b/templates/login.tmpl index 0082e49..f89cf93 100644 --- a/templates/login.tmpl +++ b/templates/login.tmpl @@ -9,7 +9,9 @@ <% template page_content() %> <div> <form method="post" action=""><% csrf %> - <% form as_p login %> + <table> + <% form as_table login %> + </table> </form> </div> <% end template %> |