switched to Users lib

This commit is contained in:
Jean Jacques Avril 2021-10-01 14:01:34 +02:00
parent a46725cf03
commit f06bfe2030
3 changed files with 36 additions and 47 deletions

View File

@ -2,8 +2,8 @@
Users::Users(/* args */) Users::Users(/* args */)
{ {
this->userdb.insert(user_account{.uid = 012345, .first_name = "John", .last_name = "Doe", .rfid_uid = "8C 75 6C 17", .user_pin = "2424"}); this->_userdb.insert(user_account{.uid = 012345, .first_name = "John", .last_name = "Doe", .rfid_uid = "8C 75 6C 17", .user_pin = "2424"});
this->userdb.insert(user_account{.uid = 010202, .first_name = "Max", .last_name = "Mustermann and Sons", .rfid_uid = "D3 4E 03 0B", .user_pin = "1212"}); this->_userdb.insert(user_account{.uid = 010202, .first_name = "Max", .last_name = "Mustermann and Sons", .rfid_uid = "D3 4E 03 0B", .user_pin = "1212"});
} }
Users::~Users() Users::~Users()
@ -11,14 +11,14 @@ Users::~Users()
} }
bool Users::checkPin(String pin_code, std::vector<Users::User> *logon_users) bool Users::checkPin(String pin_code, std::vector<Users::User> *logon_users)
{ {
std::copy_if(this->userdb.begin(), this->userdb.end(), inserter(*logon_users,logon_users->end()), [=](user_account user) std::copy_if(this->_userdb.begin(), this->_userdb.end(), inserter(*logon_users,logon_users->end()), [=](user_account user)
{ return pin_code == user.user_pin; }); { return pin_code == user.user_pin; });
return (logon_users->size()>0); return (logon_users->size()>0);
} }
bool Users::checkRfid(String rfid_code, std::vector<Users::User> *logon_users) bool Users::checkRfid(String rfid_code, std::vector<Users::User> *logon_users)
{ {
std::copy_if(this->userdb.begin(), this->userdb.end(), inserter(*logon_users,logon_users->end()), [=](user_account user) std::copy_if(this->_userdb.begin(), this->_userdb.end(), inserter(*logon_users,logon_users->end()), [=](user_account user)
{ return rfid_code == user.rfid_uid; }); { return rfid_code == user.rfid_uid; });
return (logon_users->size()>0); return (logon_users->size()>0);
} }

View File

@ -4,19 +4,26 @@
#include <vector> #include <vector>
class Users class Users
{ {
typedef struct User public:
{ enum ATTRIBUTES{
unsigned long uid; FIRST_NAME,
String first_name; LAST_NAME,
String last_name; RFID_UID,
String rfid_uid; USER_PIN
String user_pin; };
bool operator < (const User &o) const { return uid <o.uid; } typedef struct User
bool operator == (const User &o) const { return uid ==o.uid; } {
} user_account; unsigned long uid;
String first_name;
String last_name;
String rfid_uid;
String user_pin;
bool operator < (const User &o) const { return uid <o.uid; }
bool operator == (const User &o) const { return uid ==o.uid; }
} user_account;
private: private:
std::set<User> userdb; std::set<User> _userdb;
/* data */ /* data */
public: public:
@ -24,4 +31,7 @@ public:
~Users(); ~Users();
bool checkRfid(String rfid_code, std::vector<Users::User> *logon_users); bool checkRfid(String rfid_code, std::vector<Users::User> *logon_users);
bool checkPin(String pin_code, std::vector<Users::User> *logon_users); bool checkPin(String pin_code, std::vector<Users::User> *logon_users);
bool addUser(unsingend long id, String first_name, String last_name, String rifd_uid, String user_pin);
bool delUser(unsingend long id);
bool updateUser(unsingend long id, ATTRIBUTES attr, String value);
}; };

View File

@ -16,21 +16,13 @@ Rfid rfid;
Keyboard keyboard(200); Keyboard keyboard(200);
Interface iface; Interface iface;
// Wifi control // Wifi control
IPAddress local_IP(192,168,4,22); IPAddress local_IP(192, 168, 4, 22);
IPAddress gateway(192,168,4,9); IPAddress gateway(192, 168, 4, 9);
IPAddress subnet(255,255,255,0); IPAddress subnet(255, 255, 255, 0);
// User DB // User DB
Users users;
typedef struct
{
String uid;
String first_name;
String last_name;
String rfid_uid;
String user_pin;
} user_account;
std::vector<user_account> userdb;
void setup() void setup()
{ {
Serial.begin(9600); Serial.begin(9600);
@ -41,32 +33,19 @@ void setup()
keyboard.begin(&Wire); keyboard.begin(&Wire);
rfid.begin(); rfid.begin();
iface.begin(&keyboard); iface.begin(&keyboard);
userdb.push_back(user_account{.uid = "010202", .first_name = "Max", .last_name = "Mustermann and Sons", .rfid_uid = "D3 4E 03 0B", .user_pin = "1212"});
userdb.push_back(user_account{.uid = "012345", .first_name = "John", .last_name = "Doe", .rfid_uid = "8C 75 6C 17", .user_pin = "2424"});
} }
void loop() void loop()
{ {
keyboard.scanAsync(); keyboard.scanAsync();
rfid.scan(); rfid.scan();
std::vector<user_account> logon_users; std::vector<Users::User> logon_users;
if (iface.pinAvailable()) if (iface.pinAvailable() && !users.checkPin(iface.getPin(), &logon_users))
{ iface.showMessage("Login failed!", "-> Pin incorrect", 3000);
String entered_pin = iface.getPin(); else if (rfid.available() && !users.checkRfid(rfid.getID(), &logon_users))
std::copy_if(userdb.begin(), userdb.end(), std::back_inserter(logon_users), [=](user_account user)
{ return entered_pin == user.user_pin; });
if (logon_users.size() == 0)
iface.showMessage("Login failed!", "-> Pin incorrect",3000);
}
else if (rfid.available())
{
String rfid_card_uid = rfid.getID();
std::copy_if(userdb.begin(), userdb.end(), std::back_inserter(logon_users), [=](user_account user)
{ return rfid_card_uid == user.rfid_uid; });
if (logon_users.size() == 0)
iface.showMessage("Login failed!", "-> Unkown Card",3000); iface.showMessage("Login failed!", "-> Unkown Card",3000);
} else if (logon_users.size() > 0)
if (logon_users.size() > 0)
{ {
iface.greetUser(logon_users[0].first_name + " " + logon_users[0].last_name); iface.greetUser(logon_users[0].first_name + " " + logon_users[0].last_name);
logon_users.clear(); logon_users.clear();