AusweisApp
Lade ...
Suche ...
Keine Treffer
AccessRoleAndRight.h
gehe zur Dokumentation dieser Datei
1
4
13
14#pragma once
15
16#include "EnumHelper.h"
17
18#include <QCoreApplication>
19#include <QList>
20#include <QString>
21#include <functional>
22#include <type_traits>
23
24
25namespace governikus
26{
27
28defineTypedEnumType(AccessRight, uint,
29 WRITE_DG17 = 37,
30 WRITE_DG18 = 36,
31 WRITE_DG19 = 35,
32 WRITE_DG20 = 34,
33 WRITE_DG21 = 33,
34 WRITE_DG22 = 32,
35 RFU = 31,
36 PSA = 30,
37 READ_DG22 = 29,
38 READ_DG21 = 28,
39 READ_DG20 = 27,
40 READ_DG19 = 26,
41 READ_DG18 = 25,
42 READ_DG17 = 24,
43 READ_DG16 = 23,
44 READ_DG15 = 22,
45 READ_DG14 = 21,
46 READ_DG13 = 20,
47 READ_DG12 = 19,
48 READ_DG11 = 18,
49 READ_DG10 = 17,
50 READ_DG09 = 16,
51 READ_DG08 = 15,
52 READ_DG07 = 14,
53 READ_DG06 = 13,
54 READ_DG05 = 12,
55 READ_DG04 = 11,
56 READ_DG03 = 10,
57 READ_DG02 = 9,
58 READ_DG01 = 8,
59
60 INSTALL_QUAL_CERT = 7,
61 INSTALL_CERT = 6,
62 PIN_MANAGEMENT = 5,
63 CAN_ALLOWED = 4,
64 PRIVILEGED_TERMINAL = 3,
65 RESTRICTED_IDENTIFICATION = 2,
66 COMMUNITY_ID_VERIFICATION = 1,
67 AGE_VERIFICATION = 0
68 )
69
70// do NOT change any key/value as this is used as an unique identifier!
71// if you add entries you need to modify the SDK documentation.
72#define TYPE(x) static_cast<std::underlying_type_t<AccessRight>>(x)
73defineTypedEnumType(AccessRightNames, std::underlying_type_t<AccessRight>,
74 ResidencePermitII = TYPE(AccessRight::READ_DG20),
75 ResidencePermitI = TYPE(AccessRight::READ_DG19),
76 CommunityID = TYPE(AccessRight::READ_DG18),
77 Address = TYPE(AccessRight::READ_DG17),
78 BirthName = TYPE(AccessRight::READ_DG13),
79 Nationality = TYPE(AccessRight::READ_DG10),
80 PlaceOfBirth = TYPE(AccessRight::READ_DG09),
81 DateOfBirth = TYPE(AccessRight::READ_DG08),
82 DoctoralDegree = TYPE(AccessRight::READ_DG07),
83 ArtisticName = TYPE(AccessRight::READ_DG06),
84 FamilyName = TYPE(AccessRight::READ_DG05),
85 GivenNames = TYPE(AccessRight::READ_DG04),
86 ValidUntil = TYPE(AccessRight::READ_DG03),
87 IssuingCountry = TYPE(AccessRight::READ_DG02),
88 DocumentType = TYPE(AccessRight::READ_DG01),
89 CanAllowed = TYPE(AccessRight::CAN_ALLOWED),
90 Pseudonym = TYPE(AccessRight::RESTRICTED_IDENTIFICATION),
91 AddressVerification = TYPE(AccessRight::COMMUNITY_ID_VERIFICATION),
92 AgeVerification = TYPE(AccessRight::AGE_VERIFICATION),
93 WriteAddress = TYPE(AccessRight::WRITE_DG17),
94 WriteCommunityID = TYPE(AccessRight::WRITE_DG18),
95 WriteResidencePermitI = TYPE(AccessRight::WRITE_DG19),
96 WriteResidencePermitII = TYPE(AccessRight::WRITE_DG20),
97 PinManagement = TYPE(AccessRight::PIN_MANAGEMENT)
98 )
99#undef TYPE
100
101
102defineEnumType(AccessRole,
103 CVCA = 3, DV_od = 2, DV_no_f = 1, AT = 0, UNKNOWN = -1
104 )
105
106
107class AccessRoleAndRightsUtil
108{
109 Q_DECLARE_TR_FUNCTIONS(governikus::AccessRoleAndRightsUtil)
110
111 public:
112 enum JoinRight
113 {
114 READ = 0x1,
115 WRITE = 0x2,
116 READWRITE = 0x3
117 };
118 Q_DECLARE_FLAGS(JoinRights, JoinRight)
119
120 private:
121 static QList<AccessRight> mAllRights;
122 static QList<AccessRight> mAllDisplayedOrderedRights;
123
124 static bool fromTechnicalName(const char* const pStr, const std::function<void(AccessRight)>& pFunc);
125 static QStringList fromTechnicalName(const QStringList& pStr, JoinRights pJoinRight);
126
127 AccessRoleAndRightsUtil() = delete;
128 ~AccessRoleAndRightsUtil() = delete;
129
130 public:
131 static const QList<AccessRight>& allDisplayedOrderedRights();
132 static const QList<AccessRight>& allRights();
133 [[nodiscard]] static bool isWriteAccessRight(AccessRight pRight);
134 static QString toDisplayText(AccessRight pRight);
135 static QLatin1String toTechnicalName(AccessRight pRight);
136 static bool fromTechnicalName(const QString& pStr, const std::function<void(AccessRight)>& pFunc);
137 static QString joinFromTechnicalName(const QStringList& pStr,
138 JoinRights pJoinRight = JoinRight::READWRITE,
139 const QString& pJoin = QStringLiteral(", "));
140};
141
142Q_DECLARE_OPERATORS_FOR_FLAGS(AccessRoleAndRightsUtil::JoinRights)
143
144} // namespace governikus
145
146Q_DECLARE_TYPEINFO(governikus::AccessRight, Q_PRIMITIVE_TYPE);
#define TYPE(x)
Q_DECLARE_TYPEINFO(governikus::AccessRight, Q_PRIMITIVE_TYPE)
#define defineTypedEnumType(enumName, enumType,...)
Definition EnumHelper.h:80
#define defineEnumType(enumName,...)
Definition EnumHelper.h:81
Defines the AccessRight and AccessRole enum.
Definition CommandApdu.h:17
UNKNOWN
Definition ResponseApdu.h:66
BirthName
Definition AccessRoleAndRight.h:78
PinManagement
Definition AccessRoleAndRight.h:97
GivenNames
Definition AccessRoleAndRight.h:85
Pseudonym
Definition AccessRoleAndRight.h:90
AddressVerification
Definition AccessRoleAndRight.h:91
WriteCommunityID
Definition AccessRoleAndRight.h:94
Address
Definition AccessRoleAndRight.h:77
WriteAddress
Definition AccessRoleAndRight.h:93
DateOfBirth
Definition AccessRoleAndRight.h:81
ASN1_OCTET_STRING CommunityID
Definition AuthenticatedAuxiliaryData.cpp:22
CanAllowed
Definition AccessRoleAndRight.h:89
WriteResidencePermitII
Definition AccessRoleAndRight.h:96
ResidencePermitI
Definition AccessRoleAndRight.h:75
Nationality
Definition AccessRoleAndRight.h:79
ResidencePermitII
Definition AccessRoleAndRight.h:74
FamilyName
Definition AccessRoleAndRight.h:84
DocumentType
Definition AccessRoleAndRight.h:88
ValidUntil
Definition AccessRoleAndRight.h:86
ArtisticName
Definition AccessRoleAndRight.h:83
IssuingCountry
Definition AccessRoleAndRight.h:87
AgeVerification
Definition AccessRoleAndRight.h:92
WriteResidencePermitI
Definition AccessRoleAndRight.h:95
PlaceOfBirth
Definition AccessRoleAndRight.h:80
DoctoralDegree
Definition AccessRoleAndRight.h:82