@@ -21,76 +21,17 @@ void USatoriSession::SetupSession(const FString& AuthResponse)
21
21
SessionData.RefreshToken = RefreshToken;
22
22
_RefreshToken = RefreshToken;
23
23
24
- // Check if the "created" field is available and set IsCreated accordingly
25
- bool IsSessionCreated;
26
- if (JsonObject->TryGetBoolField (TEXT (" created" ), IsSessionCreated))
24
+ const TSharedPtr<FJsonObject>* PropertiesJson = nullptr ;
25
+ if (JsonObject->TryGetObjectField (TEXT (" properties" ), PropertiesJson))
27
26
{
28
- SessionData.IsCreated = IsSessionCreated;
29
- _IsCreated = IsSessionCreated;
27
+ FSatoriProperties Properties = FSatoriProperties (*PropertiesJson);
28
+ SessionData.Properties = Properties;
29
+ _Properties = Properties;
30
30
}
31
-
32
- TSharedPtr<FJsonObject> PayloadJson;
33
- if (ParseJwtPayload (Token, PayloadJson))
34
- {
35
- FString UserId;
36
- FString Username;
37
- PayloadJson->TryGetStringField (TEXT (" uid" ), UserId);
38
- PayloadJson->TryGetStringField (TEXT (" usn" ), Username);
39
-
40
- SessionData.Username = Username;
41
- _Username = Username;
42
- SessionData.UserId = UserId;
43
- _UserId = UserId;
44
-
45
- TMap<FString, FString> InVars;
46
- if (PayloadJson->HasField (TEXT (" vrs" )))
47
- {
48
- const TSharedPtr<FJsonObject>& VarsJson = PayloadJson->GetObjectField (TEXT (" vrs" ));
49
- for (const auto & Entry : VarsJson->Values )
50
- {
51
- FString Key = Entry.Key ;
52
- FString Value = Entry.Value ->AsString ();
53
- SessionData.Variables .Add (Key, Value);
54
- _Variables.Add (Key, Value);
55
- }
56
- }
57
-
58
- int64 Expires;
59
- if (PayloadJson->TryGetNumberField (TEXT (" exp" ), Expires))
60
- {
61
- FDateTime ExpireTime = FDateTime::FromUnixTimestamp (Expires);
62
- SessionData.ExpireTime = ExpireTime;
63
- _ExpireTime = ExpireTime;
64
- SessionData.IsExpired = (FDateTime::UtcNow () >= ExpireTime);
65
- _IsExpired = (FDateTime::UtcNow () >= ExpireTime);
66
- }
67
-
68
- // Parse and check expiration time of the refresh_token
69
- TSharedPtr<FJsonObject> RefreshPayloadJson;
70
- if (ParseJwtPayload (RefreshToken, RefreshPayloadJson))
71
- {
72
- int64 RefreshExpires;
73
- if (RefreshPayloadJson->TryGetNumberField (TEXT (" exp" ), RefreshExpires))
74
- {
75
- FDateTime RefreshExpireTime = FDateTime::FromUnixTimestamp (RefreshExpires);
76
- SessionData.RefreshExpireTime = RefreshExpireTime;
77
- _RefreshExpireTime = RefreshExpireTime;
78
- SessionData.IsRefreshExpired = (FDateTime::UtcNow () >= RefreshExpireTime);
79
- _IsRefreshExpired = (FDateTime::UtcNow () >= RefreshExpireTime);
80
- }
81
- }
82
-
83
- SessionData.CreateTime = FDateTime::UtcNow ();
84
- _CreateTime = FDateTime::UtcNow ();
85
- }
86
- else
87
- {
88
- SATORI_LOG_ERROR (TEXT (" Failed to parse JWT payload" ));
89
- }
90
31
}
91
32
else
92
33
{
93
- SATORI_LOG_ERROR (TEXT (" Failed to deserialize Session JSON object" ));
34
+ SATORI_LOG_ERROR (TEXT (" Failed to deserialize Satori Session JSON object" ));
94
35
}
95
36
}
96
37
@@ -104,136 +45,17 @@ const FString USatoriSession::GetRefreshToken() const
104
45
return _RefreshToken;
105
46
}
106
47
107
- bool USatoriSession::IsCreated () const
108
- {
109
- return _IsCreated;
110
- }
111
-
112
- const FString USatoriSession::GetUsername () const
113
- {
114
- return _Username;
115
- }
116
-
117
- const FString USatoriSession::GetUserId () const
118
- {
119
- return _UserId;
120
- }
121
-
122
- const FDateTime USatoriSession::GetCreateTime () const
123
- {
124
- return _CreateTime;
125
- }
126
-
127
- const FDateTime USatoriSession::GetExpireTime () const
128
- {
129
- return _ExpireTime;
130
- }
131
-
132
- const FDateTime USatoriSession::GetRefreshExpireTime () const
133
- {
134
- return _RefreshExpireTime;
135
- }
136
-
137
- bool USatoriSession::IsExpired () const
138
- {
139
- return FDateTime::UtcNow () >= _ExpireTime;
140
- }
141
-
142
- bool USatoriSession::IsExpiredTime (FDateTime Time) const
48
+ const FSatoriProperties USatoriSession::GetProperties () const
143
49
{
144
- return Time >= _ExpireTime;
145
- }
146
-
147
- bool USatoriSession::IsRefreshExpired () const
148
- {
149
- return FDateTime::UtcNow () >= _RefreshExpireTime;
150
- }
151
-
152
- bool USatoriSession::IsRefreshExpiredTime (FDateTime Time) const
153
- {
154
- return Time >= _RefreshExpireTime;
155
- }
156
-
157
- TMap<FString, FString> USatoriSession::GetVariables () const
158
- {
159
- return _Variables;
160
- }
161
-
162
- FString USatoriSession::GetVariable (FString Name) const
163
- {
164
- return _Variables.FindRef (Name);
50
+ return _Properties;
165
51
}
166
52
167
53
USatoriSession* USatoriSession::RestoreSession (FString Token, FString RefreshToken)
168
54
{
169
- // Setup the request content
170
- const TSharedPtr<FJsonObject> ContentJson = MakeShared<FJsonObject>();
171
- ContentJson->SetStringField (TEXT (" token" ), Token);
172
- ContentJson->SetStringField (TEXT (" refresh_token" ), RefreshToken);
173
- ContentJson->SetBoolField (TEXT (" created" ), false );
174
-
175
- // Convert the JSON object to a JSON string
176
- FString JsonString;
177
- TSharedRef<TJsonWriter<>> JsonWriter = TJsonWriterFactory<>::Create (&JsonString);
178
- bool bSerializationSuccessful = FJsonSerializer::Serialize (ContentJson.ToSharedRef (), JsonWriter);
179
-
180
- // Check if serialization was successful
181
- if (bSerializationSuccessful)
182
- {
183
- USatoriSession* ResultSession = NewObject<USatoriSession>();
184
- ResultSession->SetupSession (JsonString);
185
- return ResultSession;
186
- }
187
- else
188
- {
189
- SATORI_LOG_ERROR (" Restore Session: Failed to serialize Restore Session JSON object" );
190
- return nullptr ;
191
- }
192
- }
193
-
194
- bool USatoriSession::ParseJwtPayload (const FString& jwt, TSharedPtr<FJsonObject>& payloadJson)
195
- {
196
- // Split the JWT into its three parts
197
- TArray<FString> jwtParts;
198
- jwt.ParseIntoArray (jwtParts, TEXT (" ." ));
199
-
200
- if (jwtParts.Num () != 3 )
201
- {
202
- // Invalid JWT format
203
- return false ;
204
- }
205
-
206
- // Convert Base64Url to Base64
207
- FString payloadString = jwtParts[1 ];
208
- payloadString.ReplaceInline (TEXT (" -" ), TEXT (" +" ));
209
- payloadString.ReplaceInline (TEXT (" _" ), TEXT (" /" ));
210
-
211
- // Handle padding
212
- int32 mod = payloadString.Len () % 4 ;
213
- if (mod != 0 ) {
214
- for (int32 i = 0 ; i < (4 - mod); ++i) {
215
- payloadString += TEXT (" =" );
216
- }
217
- }
218
-
219
- // Decode to bytes
220
- TArray<uint8> decodedBytes;
221
- FBase64::Decode (payloadString, decodedBytes);
222
-
223
- // Ensure null termination
224
- decodedBytes.Add (0 );
225
-
226
- // Convert UTF-8 bytes to FString to handle special characters
227
- FString decodedPayloadString = FString (UTF8_TO_TCHAR (reinterpret_cast <const ANSICHAR*>(decodedBytes.GetData ())));
228
-
229
- // Parse the decoded payload as a JSON object
230
- TSharedRef<TJsonReader<>> reader = TJsonReaderFactory<>::Create (decodedPayloadString);
231
- if (!FJsonSerializer::Deserialize (reader, payloadJson))
232
- {
233
- // Failed to parse JSON
234
- return false ;
235
- }
236
-
237
- return true ;
55
+ USatoriSession* ResultSession = NewObject<USatoriSession>();
56
+ ResultSession->SessionData .AuthToken = Token;
57
+ ResultSession->_AuthToken = Token;
58
+ ResultSession->SessionData .RefreshToken = RefreshToken;
59
+ ResultSession->_RefreshToken = RefreshToken;
60
+ return ResultSession;
238
61
}
239
-
0 commit comments