2424
2525namespace Pterodactyl \Services \Servers ;
2626
27+ use Carbon \Carbon ;
2728use Pterodactyl \Models \User ;
2829use Pterodactyl \Models \Server ;
30+ use Pterodactyl \Models \DaemonKey ;
2931use Illuminate \Cache \Repository as CacheRepository ;
32+ use Pterodactyl \Services \DaemonKeys \DaemonKeyUpdateService ;
3033use Pterodactyl \Contracts \Repository \UserRepositoryInterface ;
3134use Pterodactyl \Contracts \Repository \ServerRepositoryInterface ;
3235use Pterodactyl \Contracts \Repository \DaemonKeyRepositoryInterface ;
@@ -39,11 +42,21 @@ class ServerAccessHelperService
3942 */
4043 protected $ cache ;
4144
45+ /**
46+ * @var \Carbon\Carbon
47+ */
48+ protected $ carbon ;
49+
4250 /**
4351 * @var \Pterodactyl\Contracts\Repository\DaemonKeyRepositoryInterface
4452 */
4553 protected $ daemonKeyRepository ;
4654
55+ /**
56+ * @var \Pterodactyl\Services\DaemonKeys\DaemonKeyUpdateService
57+ */
58+ protected $ daemonKeyUpdateService ;
59+
4760 /**
4861 * @var \Pterodactyl\Contracts\Repository\ServerRepositoryInterface
4962 */
@@ -58,18 +71,24 @@ class ServerAccessHelperService
5871 * ServerAccessHelperService constructor.
5972 *
6073 * @param \Illuminate\Cache\Repository $cache
74+ * @param \Carbon\Carbon $carbon
6175 * @param \Pterodactyl\Contracts\Repository\DaemonKeyRepositoryInterface $daemonKeyRepository
76+ * @param \Pterodactyl\Services\DaemonKeys\DaemonKeyUpdateService $daemonKeyUpdateService
6277 * @param \Pterodactyl\Contracts\Repository\ServerRepositoryInterface $repository
6378 * @param \Pterodactyl\Contracts\Repository\UserRepositoryInterface $userRepository
6479 */
6580 public function __construct (
6681 CacheRepository $ cache ,
82+ Carbon $ carbon ,
6783 DaemonKeyRepositoryInterface $ daemonKeyRepository ,
84+ DaemonKeyUpdateService $ daemonKeyUpdateService ,
6885 ServerRepositoryInterface $ repository ,
6986 UserRepositoryInterface $ userRepository
7087 ) {
7188 $ this ->cache = $ cache ;
89+ $ this ->carbon = $ carbon ;
7290 $ this ->daemonKeyRepository = $ daemonKeyRepository ;
91+ $ this ->daemonKeyUpdateService = $ daemonKeyUpdateService ;
7392 $ this ->repository = $ repository ;
7493 $ this ->userRepository = $ userRepository ;
7594 }
@@ -81,8 +100,10 @@ public function __construct(
81100 * @param int|\Pterodactyl\Models\User $user
82101 * @return string
83102 *
103+ * @throws \Pterodactyl\Exceptions\Model\DataValidationException
84104 * @throws \Pterodactyl\Exceptions\Repository\RecordNotFoundException
85105 * @throws \Pterodactyl\Exceptions\Service\Server\UserNotLinkedToServerException
106+ * @throws \RuntimeException
86107 */
87108 public function handle ($ server , $ user )
88109 {
@@ -95,16 +116,16 @@ public function handle($server, $user)
95116 }
96117
97118 $ keys = $ server ->relationLoaded ('keys ' ) ? $ server ->keys : $ this ->daemonKeyRepository ->getServerKeys ($ server ->id );
98-
99- $ key = array_get ($ keys ->where ('user_id ' , $ user ->id )->first (null , []), 'secret ' );
100- if ($ user ->root_admin ) {
101- $ key = array_get ($ keys ->where ('user_id ' , $ server ->owner_id )->first (null , []), 'secret ' );
102- }
119+ $ key = $ keys ->where ('user_id ' , $ user ->root_admin ? $ server ->owner_id : $ user ->id )->first ();
103120
104121 if (is_null ($ key )) {
105122 throw new UserNotLinkedToServerException ;
106123 }
107124
108- return $ key ;
125+ if (max ($ this ->carbon ->now ()->diffInSeconds ($ key ->expires_at , false ), 0 ) === 0 ) {
126+ $ key = $ this ->daemonKeyUpdateService ->handle ($ key );
127+ }
128+
129+ return ($ key instanceof DaemonKey) ? $ key ->secret : $ key ;
109130 }
110131}
0 commit comments