1
+ <?php
2
+
3
+
4
+ namespace DanielPfeil \Samlauthentication \Utility ;
5
+
6
+
7
+ use DanielPfeil \Samlauthentication \Domain \Model \Fieldmapping ;
8
+ use DanielPfeil \Samlauthentication \Domain \Model \FieldValue ;
9
+ use DanielPfeil \Samlauthentication \Domain \Model \Serviceprovider ;
10
+ use DanielPfeil \Samlauthentication \Domain \Model \Tablemapping ;
11
+ use TYPO3 \CMS \Core \Database \ConnectionPool ;
12
+ use TYPO3 \CMS \Core \Database \Query \QueryBuilder ;
13
+ use TYPO3 \CMS \Core \Utility \GeneralUtility ;
14
+ use TYPO3 \CMS \Extbase \Utility \DebuggerUtility ;
15
+
16
+ class SimpleSAMLphpUtility implements SamlUtility
17
+ {
18
+ public function getData (): array
19
+ {
20
+ // TODO: Implement getData() method.
21
+ }
22
+
23
+ public function isSessionExisting (): bool
24
+ {
25
+ // TODO: Implement isSessionExisting() method.
26
+ }
27
+
28
+ public function getUserData (Serviceprovider $ serviceprovider ): array
29
+ {
30
+ $ result = [];
31
+
32
+ /**
33
+ * @var $tablemapping Tablemapping
34
+ */
35
+ foreach ($ serviceprovider ->getTablemapping () as $ tablemapping ) {
36
+ $ result [$ tablemapping ->getTable ()] = $ this ->getDataForTableMapping (
37
+ $ tablemapping ,
38
+ $ serviceprovider ->getPrefix ()
39
+ );
40
+ }
41
+
42
+ return $ result ;
43
+ }
44
+
45
+ public function saveUserData (Serviceprovider $ serviceprovider ): bool
46
+ {
47
+ $ tableMappings = $ serviceprovider ->getTablemapping ();
48
+
49
+ /**
50
+ * @var Tablemapping $tableMapping
51
+ */
52
+ foreach ($ tableMappings as $ tableMapping ) {
53
+ $ data = $ this ->getDataForTableMapping ($ tableMapping , $ serviceprovider ->getPrefix ());
54
+
55
+ /**
56
+ * @var QueryBuilder $queryBuilderFeUsers
57
+ */
58
+ $ queryBuilderFeUsers = GeneralUtility::makeInstance (ConnectionPool::class)
59
+ ->getQueryBuilderForTable ($ tableMapping ->getTable ());
60
+
61
+ $ values = [
62
+ "tstamp " => time (),
63
+ "pid " => $ serviceprovider ->getDestinationpid (),
64
+ ];
65
+
66
+ foreach ($ data as $ field ) {
67
+ if ($ field ->getValue () != null ) {
68
+ $ index = $ field ->getField ();
69
+ $ values [$ index ] = $ field ->getValue ();
70
+ }
71
+ }
72
+
73
+ $ findUser = $ queryBuilderFeUsers
74
+ ->count ('* ' )
75
+ ->from ($ tableMapping ->getTable ());
76
+ /**
77
+ * @var Fieldmapping $field
78
+ */
79
+ foreach ($ tableMapping ->getFields () as $ field ) {
80
+ if ($ field ->isIdentifier ()) {
81
+ $ predicate = $ queryBuilderFeUsers ->expr ()->eq (
82
+ $ field ->getField (),
83
+ $ queryBuilderFeUsers ->createNamedParameter ($ values [$ field ->getField ()])
84
+ );
85
+
86
+ $ findUser ->andWhere ($ predicate );
87
+ }
88
+ }
89
+
90
+ $ userExists = $ findUser ->execute ()->fetch ()['COUNT(*) ' ];
91
+ if ($ userExists === 0 ) {
92
+ $ result = $ queryBuilderFeUsers ->insert ($ tableMapping ->getTable ())
93
+ ->values ($ values )
94
+ ->execute ();
95
+ } else {
96
+ //todo implement update
97
+ }
98
+ }
99
+ //todo make check
100
+ return true ;
101
+ }
102
+
103
+ public function getGroup (): array
104
+ {
105
+ // TODO: Implement getGroup() method.
106
+ }
107
+
108
+ public function getUserGroups ($ user )
109
+ {
110
+ // TODO: Implement getUserGroups() method.
111
+ }
112
+
113
+ private function getDataForTableMapping (Tablemapping $ tablemapping , ?string $ prefix ): array
114
+ {
115
+ $ as = new \SimpleSAML \Auth \Simple ('default-sp ' );
116
+ $ as ->requireAuth ();
117
+ $ attributes = $ as ->getAttributes ();
118
+
119
+ $ result = [];
120
+
121
+ foreach ($ tablemapping ->getFields () as $ field ) {
122
+ $ fieldValue = new FieldValue ();
123
+ $ fieldValue ->setField ($ field ->getField ());
124
+ $ fieldValue ->setForeignField ($ field ->getForeignField ());
125
+
126
+ $ key = $ prefix . $ fieldValue ->getForeignField ();
127
+ if (array_key_exists ($ key , $ attributes )) {
128
+ $ value = $ attributes [$ key ];
129
+ if (is_array ($ value ))
130
+ $ value = $ value [0 ];
131
+
132
+ $ fieldValue ->setValue ($ value );
133
+ } else {
134
+ if ($ field ->hasFallback ()) {
135
+ $ fieldValue ->setValue ($ field ->getDefaultvalue ());
136
+ }
137
+ }
138
+
139
+ $ result [$ field ->getField ()] = $ fieldValue ;
140
+ }
141
+
142
+ return $ result ;
143
+ }
144
+ }
0 commit comments