Leosac  0.7.0
OpenSourceAccessControl
PolymorphicCredentialSerializer.hpp
Go to the documentation of this file.
1 /*
2  Copyright (C) 2014-2016 Leosac
3 
4  This file is part of Leosac.
5 
6  Leosac is free software: you can redistribute it and/or modify
7  it under the terms of the GNU Affero General Public License as published by
8  the Free Software Foundation, either version 3 of the License, or
9  (at your option) any later version.
10 
11  Leosac is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU Affero General Public License for more details.
15 
16  You should have received a copy of the GNU Affero General Public License
17  along with this program. If not, see <http://www.gnu.org/licenses/>.
18 */
19 
20 #pragma once
21 
22 #include "LeosacFwd.hpp"
24 #include "tools/Visitor.hpp"
25 #include <json.hpp>
26 #include <string>
27 
28 namespace Leosac
29 {
30 using json = nlohmann::json;
31 
41 {
42  static json serialize(const Cred::ICredential &in, const SecurityContext &sc);
43 
44  static void unserialize(Cred::ICredential &out, const json &in,
45  const SecurityContext &sc);
46 
53  static std::string type_name(const Cred::ICredential &in);
54 
55  private:
59  struct HelperSerialize : public Tools::Visitor<Cred::IRFIDCard>,
60  public Tools::Visitor<Cred::IPinCode>
61  {
63  void visit(const Cred::IRFIDCard &t) override;
64 
65  void visit(const Cred::IPinCode &t) override;
66 
72 
77  };
78 
79  struct HelperUnserialize : public Tools::Visitor<Cred::IRFIDCard>,
80  public Tools::Visitor<Cred::IPinCode>
81  {
82  HelperUnserialize(const SecurityContext &sc, const json &payload);
83  void visit(Cred::IRFIDCard &t) override;
84 
85  void visit(Cred::IPinCode &t) override;
86 
91 
96  };
97 };
98 
106 {
107  static std::string serialize(const Cred::ICredential &in,
108  const SecurityContext &sc);
109 
110  static void unserialize(Cred::ICredential &out, const std::string &in,
111  const SecurityContext &sc);
112 };
113 }
nlohmann::json json
static std::string type_name(const Cred::ICredential &in)
Returns the "type-name" of the credential.
This is the header file for a generated source file, GitSHA1.cpp.
Interface for RFIDCard credential.
Definition: IRFIDCard.hpp:32
Base interface for credential objects.
Definition: ICredential.hpp:35
const SecurityContext & security_context_
Reference to the security context.
Interface for PinCode credentials.
Definition: IPinCode.hpp:32
A serializer that handle any subclass of ICredential.
json result_
Store the result here because we can&#39;t return from the visit() method.
static json serialize(const Cred::ICredential &in, const SecurityContext &sc)
static void unserialize(Cred::ICredential &out, const json &in, const SecurityContext &sc)
A SecurityContext is used to query permission while doing an operation.
nlohmann::json json
Definition: WSServer.cpp:76
const SecurityContext & security_context_
Reference to the security context.
A Visitor object.
Definition: Visitor.hpp:64