-
Notifications
You must be signed in to change notification settings - Fork 1
/
usuariocontroller.h
77 lines (63 loc) · 2.13 KB
/
usuariocontroller.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#ifndef USUARIOCONTROLLER_H
#define USUARIOCONTROLLER_H
#include "dbmanager.h"
#include "usuario.h"
#include <boost/serialization/map.hpp>
#include <boost/serialization/shared_ptr.hpp>
#include <map>
#include <boost/thread/mutex.hpp>
#include <boost/optional.hpp>
#include <folly/Synchronized.h>
#include <folly/AtomicHashMap.h>
#define CRYPTOPP_ENABLE_NAMESPACE_WEAK 1
#include <crypto++/hex.h>
#include <crypto++/md5.h>
#include <boost/optional.hpp>
#include <boost/date_time/gregorian/gregorian.hpp>
#include <chrono>
using boost::gregorian::date;
using std::chrono::system_clock;
using std::chrono::time_point;
using std::chrono::duration;
namespace cxxdoor {
struct TokenInfo {
std::string token;
std::chrono::system_clock::time_point timestamp;
std::shared_ptr<Usuario> usuario;
TokenInfo(const std::string &token, const std::shared_ptr<Usuario> &usuario);
};
class UsuarioController {
public:
typedef std::map<std::string, std::shared_ptr<Usuario>> UserMap;
typedef std::map<std::string, std::shared_ptr<TokenInfo>> TokenMap;
UsuarioController();
~UsuarioController();
bool crearUsuario(std::string nombre, std::string password,
std::string email = "");
boost::optional<std::shared_ptr<TokenInfo>> authenticate(std::string nombre, std::string password);
static std::shared_ptr<UsuarioController> getInstance();
std::string md5(std::string message);
boost::optional<std::shared_ptr<Usuario>> getUsuario(const std::string& username) {
auto locked = _usuarios.lock();
auto found = locked->find(username);
if (found != locked->end()) {
return found->second;
}
return boost::none;
}
bool validateToken(const std::string &token) {
auto locked = _tokens.lock();
auto res = locked->find(token);
if (res != locked->end()) {
system_clock::time_point expiry(res->second->timestamp + std::chrono::minutes(10));
return system_clock::now() < expiry;
}
return false;
}
private:
//std::shared_ptr<DbManager> _db;
folly::Synchronized<UserMap, boost::mutex> _usuarios;
folly::Synchronized<TokenMap, boost::mutex> _tokens;
};
}
#endif // USUARIOCONTROLLER_H