27 #include <boost/algorithm/string.hpp>
37 assert(msg && msg->remaining() == 1);
42 INFO(
"Building an AuthSource object (SIMPLE_CSN):" << card_id);
43 auto raw_csn = boost::replace_all_copy(card_id,
":",
"");
44 LEOSAC_ENFORCE(raw_csn.length() % 2 == 0,
"CSN has invalid length.");
46 auto bits = raw_csn.length() * 8;
47 ASSERT_LOG(bits < std::numeric_limits<int>::max(),
"Too many bits.");
49 return std::make_shared<Cred::RFIDCard>(card_id, bits);
55 assert(msg && msg->parts() >= 2);
56 std::string source_name;
58 *msg >> source_name >> type;
63 "Failed to extract source name: cannot construct the AuthSource object. "
64 <<
"Source name was {" << source_name <<
"}");
80 std::string *output)
const
83 if (input.size() > 2 && input.substr(0, 2) ==
"S_")
85 *output = input.substr(2);
96 assert(msg && msg->remaining() == 2);
101 *msg >> card_id >> bits;
103 INFO(
"Building a Credential object (RFIDCard): "
104 << card_id <<
" with " << bits
105 <<
" significant bits. Source name = " << name);
106 return std::make_shared<Cred::RFIDCard>(card_id, bits);
113 assert(msg && msg->remaining() == 1);
118 INFO(
"Building a Credential object (PinCode): " << pin
119 <<
". Source name = " << name);
120 auto p = std::make_shared<Cred::PinCode>();
130 assert(msg && msg->remaining() == 3);
134 std::string pin_code;
136 *msg >> card_id >> bits >> pin_code;
137 INFO(
"Building a Credential object (RFIDCardPin):"
138 << card_id <<
", " << pin_code <<
". Source name = " << name);
140 auto c = std::make_shared<Cred::RFIDCard>(card_id, bits);
141 auto p = std::make_shared<Cred::PinCode>();
142 p->pin_code(pin_code);
144 return std::make_shared<Cred::RFIDCardPin>(c, p);