Skip to content

Commit 7d14dab

Browse files
committed
fix(WaspClient): now creates a new session instead of using the launcher session
1 parent ba27bb7 commit 7d14dab

File tree

1 file changed

+56
-12
lines changed

1 file changed

+56
-12
lines changed

utils/waspclient.simba

Lines changed: 56 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ The following compiler directives are available and are useful for local
66
development:
77
```pascal
88
{$DEFINE WASP_LOCAL_DEVELOPMENT}
9+
{$DEFINE WASP_ACCESS_TOKEN := 'access_token'}
910
{$DEFINE WASP_REFRESH_TOKEN := 'refresh_token'}
1011
{$DEFINE SCRIPT_ID := 'script_uuid'}
1112
{$DEFINE SCRIPT_REVISION := 'script_revision'}
@@ -18,7 +19,8 @@ As for the others, you can get values for them by running Simba through
1819
(wasp-launcher)[https://github.com/WaspScripts/wasp-launcher] and running
1920
something like this:
2021
```pascal
21-
begin
22+
begin
23+
WriteLn GetEnvVar('WASP_ACCESS_TOKEN');
2224
WriteLn GetEnvVar('WASP_REFRESH_TOKEN');
2325
WriteLn GetEnvVar('SCRIPT_ID');
2426
WriteLn GetEnvVar('SCRIPT_REVISION');
@@ -61,7 +63,6 @@ type
6163
User: record
6264
ID: String;
6365
Username: String;
64-
RefreshToken: String;
6566
end;
6667

6768
Payload: TJSONObject;
@@ -77,6 +78,31 @@ begin
7778
Async.ScheduleStop('WaspClient-RefreshToken');
7879
end;
7980

81+
function TWaspClient.CreateSession(accessToken, refreshToken: String): Boolean;
82+
var
83+
response: String;
84+
json: TJSONParser;
85+
begin
86+
Self.Client.RequestHeader['Authorization'] := 'Bearer ' + accessToken;
87+
Self.Client.RequestHeader['RefreshToken'] := refreshToken;
88+
89+
response := Self.Client.Get(Self.Server + 'session');
90+
WriteLn response;
91+
92+
Result := InRange(Self.Client.ResponseStatus.AsInteger, 200, 299);
93+
if not Result then
94+
begin
95+
WriteLn GetDebugLn('WaspClient', response);
96+
Exit;
97+
end;
98+
99+
json := new TJSONParser();
100+
json.Parse(response);
101+
102+
Self.Client.RequestHeader['Authorization'] := 'Bearer ' + json.Item['access_token'].AsString;
103+
Self.Client.RequestHeader['RefreshToken'] := json.Item['refresh_token'].AsString;
104+
end;
105+
80106
procedure TWaspClient.RefreshSession();
81107
var
82108
payload, response: String;
@@ -85,13 +111,13 @@ begin
85111
if not Self.Lock.TryEnter() then Exit;
86112
if not Self.IsSetup then Exit;
87113

88-
payload := '{"refresh_token": "' + Self.User.RefreshToken + '"}';
114+
payload := '{"refresh_token": "' + Self.Client.RequestHeader['RefreshToken'] + '"}';
89115

90116
response := Self.Client.Post(
91117
Self.Database + 'auth/v1/token?grant_type=refresh_token', payload
92118
);
93119

94-
if Self.Client.ResponseStatus <> EHTTPStatus.OK then
120+
if not InRange(Self.Client.ResponseStatus.AsInteger, 200, 299) then
95121
begin
96122
WriteLn GetDebugLn('WaspClient', response);
97123
Self.IsSetup := False;
@@ -103,8 +129,11 @@ begin
103129
json.Parse(response);
104130

105131
Self.Client.RequestHeader['Authorization'] := 'Bearer ' + json.Item['access_token'].AsString;
106-
Self.User.RefreshToken := json.Item['refresh_token'].AsString;
107-
Self.Client.RequestHeader['RefreshToken'] := Self.User.RefreshToken;
132+
Self.Client.RequestHeader['RefreshToken'] := json.Item['refresh_token'].AsString;
133+
134+
{$IFDEF WASP_ACCESS_TOKEN}
135+
FileWrite(WLEnv.ConfigsDir + 'access_token.txt', json.Item['access_token'].AsString);
136+
{$ENDIF}
108137

109138
{$IFDEF WASP_REFRESH_TOKEN}
110139
FileWrite(WLEnv.ConfigsDir + 'refresh_token.txt', Self.User.RefreshToken);
@@ -120,6 +149,8 @@ begin
120149
end;
121150

122151
procedure TWaspClient.Setup();
152+
var
153+
accessToken, refreshToken: String;
123154
begin
124155
{$IFDEF WASP_LOCAL_DEVELOPMENT}
125156
Self.Server := 'http://localhost:3000/';
@@ -134,15 +165,25 @@ begin
134165
Self.Client.RequestHeader['Content-Type'] := 'application/json';
135166
Self.Client.RequestHeader['apikey'] := Self.APIKey;
136167

168+
{$IFDEF WASP_ACCESS_TOKEN}
169+
accessToken := {$MACRO WASP_ACCESS_TOKEN};
170+
if accessToken = 'file' then
171+
accessToken := FileRead(WLEnv.ConfigsDir + 'access_token.txt');
172+
{$ELSE}
173+
accessToken := GetEnvVar('WASP_ACCESS_TOKEN');
174+
{$ENDIF}
175+
if accessToken = '' then
176+
Exit;
177+
137178
{$IFDEF WASP_REFRESH_TOKEN}
138-
Self.User.RefreshToken := {$MACRO WASP_REFRESH_TOKEN};
139-
if Self.User.RefreshToken = 'file' then
140-
Self.User.RefreshToken := FileRead(WLEnv.ConfigsDir + 'refresh_token.txt');
179+
refreshToken := {$MACRO WASP_REFRESH_TOKEN};
180+
if refreshToken = 'file' then
181+
refreshToken := FileRead(WLEnv.ConfigsDir + 'refresh_token.txt');
141182
{$ELSE}
142-
Self.User.RefreshToken := GetEnvVar('WASP_REFRESH_TOKEN');
183+
refreshToken := GetEnvVar('WASP_REFRESH_TOKEN');
143184
{$ENDIF}
144185

145-
if Self.User.RefreshToken = '' then
186+
if refreshToken = '' then
146187
Exit;
147188

148189
{$IFDEF SCRIPT_ID}
@@ -160,13 +201,16 @@ begin
160201
Self.Script.Revision := StrToInt(GetEnvVar('SCRIPT_REVISION'), 0);
161202
{$ENDIF}
162203

204+
Self.IsSetup := Self.CreateSession(accessToken, refreshToken);
205+
if not Self.IsSetup then
206+
Exit;
207+
163208
Self.Payload := new TJSONObject();
164209
Self.Payload.AddInt('experience', 0);
165210
Self.Payload.AddInt('gold', 0);
166211
Self.Payload.AddInt('runtime', 0);
167212

168213
Self.Lock := TLock.Create();
169-
Self.IsSetup := True;
170214
Async.ScheduleEvery('WaspClient-RefreshToken', @Self.RefreshSession, 5 * ONE_MINUTE);
171215
AddOnTerminate(@Self.Free);
172216
AddOnTerminate(@Self.Lock.Free);

0 commit comments

Comments
 (0)