client_id = $settings->client_id; $this->client_secret = $settings->client_secret; } } public function connect() { $redirectUri = route('restream.callback'); $stateToken = Str::random(); session(['state-token' => $stateToken]); $url = "{$this->base_url}/login?response_type=code&client_id={$this->client_id}&redirect_uri={$redirectUri}&state={$stateToken}"; return Redirect::away($url); } public function exchange($code) { try { $client = new Client(); $response = $client->post("{$this->base_url}/oauth/token", [ 'form_params' => [ 'grant_type' => 'authorization_code', 'redirect_uri' => route('restream.callback'), 'code' => $code, 'client_id' => $this->client_id, 'client_secret' => $this->client_secret, ], ]); $status = $response->getStatusCode(); $data = json_decode($response->getBody()); if ($status == 200) { $item = RestreamToken::updateOrCreate([ 'client_id' => $this->client_id ], [ 'access_token' => $data->access_token, 'refresh_token' => $data->refresh_token, 'scope' => json_encode($data->scope), 'type' => $data->token_type, ]); Log::info('Restream Connected'); return true; } else { Log::info("Status code: {$status}"); Log::info("Message: {$data->message}"); } } catch (ClientException $exception) { } return false; } public function isConnected() { $token = RestreamToken::first(); if ($token) { return true; } return false; } public function updateSettings($clientId, $clientSecret) { RestreamSetting::truncate(); RestreamSetting::updateOrCreate([ 'client_id' => $clientId ], [ 'client_secret' => $clientSecret ]); } }