@@ -6,6 +6,7 @@ The following compiler directives are available and are useful for local
66development:
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
1920something 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');
6163 User: record
6264 ID: String;
6365 Username: String;
64- RefreshToken: String;
6566 end;
6667
6768 Payload: TJSONObject;
7778 Async.ScheduleStop('WaspClient-RefreshToken');
7879end;
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+
80106procedure TWaspClient.RefreshSession();
81107var
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
120149end;
121150
122151procedure TWaspClient.Setup();
152+ var
153+ accessToken, refreshToken: String;
123154begin
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