summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2015-04-19 16:57:37 +0200
committerAndreas Baumann <mail@andreasbaumann.cc>2015-04-19 16:57:37 +0200
commit0002c57163f2518bc949eb2b06c91422a63789e4 (patch)
tree2a3c170916be66c6e926f51f9f2d9e86ae8c47c8
parent70e8b81c75486475983a5efe3c129c98bf88cefd (diff)
downloadaCms-0002c57163f2518bc949eb2b06c91422a63789e4.tar.gz
aCms-0002c57163f2518bc949eb2b06c91422a63789e4.tar.bz2
remember logins and table for login form
-rw-r--r--sql/sqlite3.sql13
-rw-r--r--src/user.cpp14
-rw-r--r--templates/login.tmpl4
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 %>