Skip to content

Commit 0688dfa

Browse files
committed
changed to no longer use cache, and to disconnect after every request
1 parent 3f4c673 commit 0688dfa

File tree

3 files changed

+52
-21
lines changed

3 files changed

+52
-21
lines changed

src/Middleware/EndSession.php

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
namespace GearboxSolutions\EloquentFileMaker\Middleware;
4+
5+
use Closure;
6+
use GearboxSolutions\EloquentFileMaker\Support\Facades\FM;
7+
use Illuminate\Http\Request;
8+
use Symfony\Component\HttpFoundation\Response;
9+
10+
class EndSession
11+
{
12+
/**
13+
* Handle an incoming request.
14+
*
15+
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
16+
*/
17+
public function handle(Request $request, Closure $next): Response
18+
{
19+
20+
return $next($request);
21+
}
22+
23+
/**
24+
* Handle tasks after the response has been sent to the browser.
25+
*/
26+
public function terminate(Request $request, Response $response): void
27+
{
28+
// disconnect the FileMaker session
29+
FM::disconnect();
30+
}
31+
}

src/Providers/FileMakerConnectionServiceProvider.php

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
namespace GearboxSolutions\EloquentFileMaker\Providers;
44

5+
use GearboxSolutions\EloquentFileMaker\Middleware\EndSession;
56
use GearboxSolutions\EloquentFileMaker\Services\FileMakerConnection;
7+
use Illuminate\Contracts\Http\Kernel;
68
use Illuminate\Support\ServiceProvider;
79

810
class FileMakerConnectionServiceProvider extends ServiceProvider
@@ -33,15 +35,19 @@ public function register()
3335
$this->app->bind(FileMakerConnection::class, function ($app) {
3436
return $app['fm.connection'];
3537
});
38+
39+
app('router')->aliasMiddleware('fm.end-session', EndSession::class);
40+
3641
}
3742

3843
/**
3944
* Bootstrap services.
4045
*
4146
* @return void
4247
*/
43-
public function boot()
48+
public function boot(Kernel $kernel)
4449
{
45-
//
50+
// add the middleware to the global middleware so that we always end the FileMaker session
51+
$kernel->pushMiddleware(EndSession::class);
4652
}
4753
}

src/Services/FileMakerConnection.php

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class FileMakerConnection extends Connection
3232

3333
protected $password;
3434

35-
protected $sessionToken;
35+
protected static $sessionToken;
3636

3737
protected $retries = 1;
3838

@@ -63,15 +63,8 @@ public function getLayout()
6363

6464
public function login()
6565
{
66-
// Cache a session token so we can reuse the same thing for 14.75 minutes
67-
// FileMaker data API sessions expire after 15 minutes
68-
// 14.75 * 60 = 885 seconds
69-
$token = Cache::remember($this->getSessionTokenCacheKey(), 885, function () {
70-
return $this->fetchNewSessionToken();
71-
});
72-
7366
// Store the session token
74-
$this->sessionToken = $token;
67+
self::$sessionToken = $this->fetchNewSessionToken();
7568
}
7669

7770
/**
@@ -594,11 +587,6 @@ public function performScript(FMBaseBuilder $query)
594587
return $this->executeScript($query);
595588
}
596589

597-
protected function getSessionTokenCacheKey()
598-
{
599-
return 'filemaker-session-' . $this->getName();
600-
}
601-
602590
/**
603591
* Log out of the database, invalidating our session token
604592
*
@@ -608,9 +596,15 @@ protected function getSessionTokenCacheKey()
608596
*/
609597
public function disconnect()
610598
{
611-
$url = $this->getDatabaseUrl() . '/sessions/' . $this->sessionToken;
599+
if (! self::$sessionToken) {
600+
return;
601+
}
612602

613-
$response = $this->makeRequest('delete', $url);
603+
$url = $this->getDatabaseUrl() . '/sessions/' . self::$sessionToken;
604+
605+
// make an http delete request to the data api to end the session
606+
$response = Http::delete($url);
607+
$this->checkResponseForErrors($response);
614608

615609
$this->forgetSessionToken();
616610

@@ -622,7 +616,7 @@ public function disconnect()
622616
*/
623617
public function forgetSessionToken()
624618
{
625-
Cache::forget($this->getSessionTokenCacheKey());
619+
self::$sessionToken = null;
626620
}
627621

628622
public function layout($layoutName)
@@ -647,9 +641,9 @@ public function setGlobalFields(array $globalFields)
647641
protected function prepareRequestForSending($request)
648642
{
649643
if ($request instanceof PendingRequest) {
650-
$request->withToken($this->sessionToken);
644+
$request->withToken(self::$sessionToken);
651645
} else {
652-
$request = Http::withToken($this->sessionToken);
646+
$request = Http::withToken(self::$sessionToken);
653647
}
654648

655649
$request->withMiddleware($this->retryMiddleware());

0 commit comments

Comments
 (0)