private function getUser($code, $state) { $app = App::findByClientId(314159265); $params = array('code' => $code, 'client_id' => $app->client_id, 'client_secret' => $app->client_secret); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, env('URL') . '/code'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $params); $json = curl_exec($ch); $result = json_decode($json, true); if (!array_key_exists('access_token', $result)) { app()->abort($result['error'], $result['description']); } if (array_key_exists('active', $result) && !$result['active']) { app()->abort($result['error'], $result['description']); } $tg = TelegramUser::findByTelegramId($result['telegram_user']['telegram_id']); if ($tg->status != $state) { app()->abort(403, 'Invalid state.'); } $tg->status = 'access_granted'; $tg->save(); try { $user = User::findByTelegramId($result['telegram_user']['telegram_id']); } catch (ModelNotFoundException $e) { $user = new User(); $user->email = $result['email']; $user->telegram_id = $result['telegram_user']['telegram_id']; } $user->access_token = $result['access_token']; $user->name = $result['telegram_user']['name']; $user->username = $result['telegram_user']['username']; $user->save(); return $user; }
private function commandReply($message) { $telegramId = $message['from']['id']; $tg = TelegramUser::findByTelegramId($telegramId); $params = array('chat_id' => $telegramId); if ($tg->status == 'revoke_access') { $clientId = preg_replace('/[^0-9,.]/', '', $message['text']); try { $app = App::findByClientId($clientId); $auth = Auth::findByAppAndTelegramUser($app, $tg); $auth->active = false; $auth->save(); $text = 'Access to this app has been revoked.'; $tg->status = 'access_revoked'; $params['reply_markup'] = json_encode(['hide_keyboard' => true]); } catch (ModelNotFoundException $e) { $text = 'Unknown app. Please choose an app from the given list:'; } } else { $text = 'Unknown command.'; $tg->status = 'unknown_command'; $params['reply_markup'] = json_encode(['hide_keyboard' => true]); } $params['text'] = $text; $this->send($params); $tg->save(); }
private function getTelegramUser($message) { $from = $message['from']; $telegramId = $from['id']; $telegramName = $from['first_name']; if (array_key_exists('last_name', $from)) { $telegramName .= ' ' . $from['last_name']; } if (array_key_exists('username', $from)) { $username = $from['username']; } try { $tg = TelegramUser::findByTelegramId($telegramId); } catch (ModelNotFoundException $e) { $tg = TelegramUser::firstOrNew(array('telegram_id' => $telegramId)); } $tg->name = $telegramName; if (isset($username)) { $tg->username = $username; } $tg->save(); return $tg; }