Leosac  0.8.0
Open Source Access Control
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 <nlohmann/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 }
Leosac::PolymorphicCredentialJSONSerializer::HelperUnserialize::payload_
json payload_
The payload to unserialize from.
Definition: PolymorphicCredentialSerializer.hpp:95
Leosac::PolymorphicCredentialJSONSerializer
A serializer that handle any subclass of ICredential.
Definition: PolymorphicCredentialSerializer.hpp:40
Leosac::json
nlohmann::json json
Definition: AuditSerializer.hpp:29
Leosac::PolymorphicCredentialJSONSerializer::serialize
static json serialize(const Cred::ICredential &in, const SecurityContext &sc)
Definition: PolymorphicCredentialSerializer.cpp:33
Leosac::PolymorphicCredentialJSONStringSerializer::serialize
static std::string serialize(const Cred::ICredential &in, const SecurityContext &sc)
Definition: PolymorphicCredentialSerializer.cpp:102
json
nlohmann::json json
Definition: WSServer.cpp:76
Leosac::PolymorphicCredentialJSONSerializer::unserialize
static void unserialize(Cred::ICredential &out, const json &in, const SecurityContext &sc)
Definition: PolymorphicCredentialSerializer.cpp:41
LeosacFwd.hpp
Leosac::PolymorphicCredentialJSONSerializer::HelperUnserialize::security_context_
const SecurityContext & security_context_
Reference to the security context.
Definition: PolymorphicCredentialSerializer.hpp:90
Leosac::Tools::Visitor
A Visitor object.
Definition: Visitor.hpp:64
Leosac::PolymorphicCredentialJSONSerializer::HelperSerialize::visit
void visit(const Cred::IRFIDCard &t) override
Definition: PolymorphicCredentialSerializer.cpp:87
Leosac::PolymorphicCredentialJSONSerializer::HelperSerialize::result_
json result_
Store the result here because we can't return from the visit() method.
Definition: PolymorphicCredentialSerializer.hpp:71
Leosac::PolymorphicCredentialJSONSerializer::HelperSerialize
Non static helper that can visit credential object.
Definition: PolymorphicCredentialSerializer.hpp:59
Leosac::PolymorphicCredentialJSONSerializer::HelperUnserialize::HelperUnserialize
HelperUnserialize(const SecurityContext &sc, const json &payload)
Definition: PolymorphicCredentialSerializer.cpp:63
Leosac
This is the header file for a generated source file, GitSHA1.cpp.
Definition: APIStatusCode.hpp:22
Leosac::PolymorphicCredentialJSONStringSerializer
Serialize the object as a JSON string.
Definition: PolymorphicCredentialSerializer.hpp:105
Leosac::Cred::ICredential
Base interface for credential objects.
Definition: ICredential.hpp:35
Leosac::PolymorphicCredentialJSONSerializer::HelperSerialize::security_context_
const SecurityContext & security_context_
Reference to the security context.
Definition: PolymorphicCredentialSerializer.hpp:76
Leosac::PolymorphicCredentialJSONSerializer::type_name
static std::string type_name(const Cred::ICredential &in)
Returns the "type-name" of the credential.
Definition: PolymorphicCredentialSerializer.cpp:50
Visitor.hpp
Leosac::PolymorphicCredentialJSONSerializer::HelperUnserialize::visit
void visit(Cred::IRFIDCard &t) override
Definition: PolymorphicCredentialSerializer.cpp:70
Leosac::PolymorphicCredentialJSONSerializer::HelperUnserialize
Definition: PolymorphicCredentialSerializer.hpp:79
IRFIDCard.hpp
Leosac::PolymorphicCredentialJSONSerializer::HelperSerialize::HelperSerialize
HelperSerialize(const SecurityContext &sc)
Definition: PolymorphicCredentialSerializer.cpp:81
Leosac::Cred::IPinCode
Interface for PinCode credentials.
Definition: IPinCode.hpp:32
Leosac::PolymorphicCredentialJSONStringSerializer::unserialize
static void unserialize(Cred::ICredential &out, const std::string &in, const SecurityContext &sc)
Leosac::SecurityContext
A SecurityContext is used to query permission while doing an operation.
Definition: SecurityContext.hpp:40
Leosac::Cred::IRFIDCard
Interface for RFIDCard credential.
Definition: IRFIDCard.hpp:32