@@ -35,6 +35,11 @@ public function __construct($httpClient)
35
35
*/
36
36
public function getPublicJWTToken ($ username , $ password )
37
37
{
38
+ $ result = $ this ->getCachedPublicJWTToken ($ username );
39
+ if ($ result && $ this ->isTokenValid ($ result )) {
40
+ return $ result ;
41
+ }
42
+
38
43
$ requestBody = [
39
44
'username ' => $ username ,
40
45
'password ' => $ password ,
@@ -60,6 +65,65 @@ public function getPublicJWTToken($username, $password)
60
65
return $ response ;
61
66
}
62
67
68
+ $ this ->storeCachedPublicJWTToken ($ decoded ['token ' ], $ username );
69
+
63
70
return $ decoded ['token ' ];
64
71
}
72
+
73
+ /**
74
+ * @param $token
75
+ *
76
+ * @return bool
77
+ */
78
+ private function isTokenValid ($ token )
79
+ {
80
+ $ explodedToken = explode ('. ' , $ token );
81
+
82
+ // Check if token has header, payload and signature
83
+ if (count ($ explodedToken ) != 3 ) {
84
+ return false ;
85
+ }
86
+
87
+ list ($ header , $ payload , $ signature ) = $ explodedToken ;
88
+
89
+ $ payload = json_decode (base64_decode ($ payload ), true );
90
+
91
+ // Check if token is expired
92
+ // Subtract 5 minutes of token to prevent returning a shortly-expiring token
93
+ if (time () >= (int )$ payload ['exp ' ] - (5 *60 )) {
94
+ return false ;
95
+ }
96
+
97
+ return true ;
98
+ }
99
+
100
+ /**
101
+ * @param $username
102
+ *
103
+ * @return false|mixed
104
+ */
105
+ private function getCachedPublicJWTToken ($ username )
106
+ {
107
+ $ filename = sys_get_temp_dir () . '/dpd/ ' . sha1 ('dpd-products ' . date ('YmdH ' ) . serialize ($ username ));
108
+
109
+ if (!file_exists ($ filename ) || filesize ($ filename ) == 0 ) {
110
+ return false ;
111
+ }
112
+
113
+ return unserialize (file_get_contents ($ filename ));
114
+ }
115
+
116
+ /**
117
+ * @param $token
118
+ * @param $username
119
+ */
120
+ private function storeCachedPublicJWTToken ($ token , $ username )
121
+ {
122
+ if (!file_exists (sys_get_temp_dir () . '/dpd/ ' )) {
123
+ mkdir (sys_get_temp_dir () . '/dpd/ ' );
124
+ }
125
+
126
+ $ filename = sys_get_temp_dir () .'/dpd/ ' . sha1 ('dpd-products ' . date ('YmdH ' ) . serialize ($ username ));
127
+ file_put_contents ($ filename , serialize ($ token ));
128
+ }
65
129
}
0 commit comments