From 0002c57163f2518bc949eb2b06c91422a63789e4 Mon Sep 17 00:00:00 2001 From: Andreas Baumann Date: Sun, 19 Apr 2015 16:57:37 +0200 Subject: remember logins and table for login form --- sql/sqlite3.sql | 13 ++++++++++--- src/user.cpp | 14 +++++++++++++- 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 #include #include +#include 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() %>
<% csrf %> - <% form as_p login %> + + <% form as_table login %> +
<% end template %> -- cgit v1.2.3-54-g00ecf