public function index_onSave() { $yandex_services_auth_client_id = post('yandex_services_auth_client_id'); $yandex_services_auth_client_secret = post('yandex_services_auth_client_secret'); if (!strlen($yandex_services_auth_client_id)) { throw new ValidationException(['yandex_services_auth_client_id' => trans('xeor.yandexservicesauth::lang.settings.required_client_id')]); } else { $settings = YandexServicesAuthSettings::instance(); $settings->yandex_services_auth_client_id = $yandex_services_auth_client_id; $settings->yandex_services_auth_client_secret = $yandex_services_auth_client_secret; $settings->save(); return redirect()->away('https://oauth.yandex.ru/authorize?response_type=code&client_id=' . $yandex_services_auth_client_id); } }
/** * Helper function to determine the authorization status. */ public static function authStatus($period = 604800) { $settings = Settings::instance(); $auth_token = $settings->yandex_services_auth_token; $auth_timestamp = $settings->yandex_services_auth_timestamp; if (empty($auth_token)) { return 'not authorized'; } if (empty($auth_timestamp)) { return 'authorized'; } if ($auth_timestamp - $_SERVER['REQUEST_TIME'] < 0) { return 'expired'; } if ($auth_timestamp - $_SERVER['REQUEST_TIME'] < $period) { return 'expiring'; } else { return 'authorized'; } }
<?php use Xeor\YandexServicesAuth\Models\YandexServicesAuthSettings as Settings; Route::get('yandex_services_auth/oauth', function () { if (empty($_GET['code'])) { Log::warning('Yandex Services Auth: The "code" parameter is empty.'); return redirect('/backend/xeor/yandexservicesauth/settings'); } $settings = Settings::instance(); $client_id = $settings->yandex_services_auth_client_id; $client_secret = $settings->yandex_services_auth_client_secret; $query = array('grant_type' => 'authorization_code', 'client_id' => $client_id, 'code' => $_GET['code']); if (!empty($client_secret)) { $query['client_secret'] = $client_secret; } $query = http_build_query($query); $header = "Content-type: application/x-www-form-urlencoded"; $opts = array('http' => array('method' => 'POST', 'header' => $header, 'content' => $query)); $context = stream_context_create($opts); $result = file_get_contents('https://oauth.yandex.ru/token', false, $context); if ($result === FALSE) { Log::warning('Yandex Services Auth: Token request failed.'); return redirect('/backend/xeor/yandexservicesauth/settings'); } $response = json_decode($result); $settings->yandex_services_auth_token = $response->access_token; if (isset($response->expires_in)) { $settings->yandex_services_auth_timestamp = $_SERVER['REQUEST_TIME'] + $response->expires_in; } else { $settings->yandex_services_auth_timestamp = NULL; }