/** * Run the database seeds. * * @return void */ public function run() { $access_token = generate_access_token(); $email = 'a1t1-' . generate_email() . '@telegramlogin.com'; $user = new User(); $user->name = 'david pichsenmeister'; $user->username = '******'; $user->email = $email; $user->telegram_id = 41478911; $user->access_token = $access_token; $user->save(); $app = new App(); $app->user_id = $user->id; $app->name = 'Telegram Login'; $app->client_id = 314159265; $app->client_secret = generate_client_secret(); $app->website = env('URL'); $app->redirect_url = env('URL') . '/login'; $app->save(); $tg = new TelegramUser(); $tg->telegram_id = 41478911; $tg->name = 'david pichsenmeister'; $tg->username = '******'; $tg->save(); $auth = new Auth(); $auth->app_id = $app->id; $auth->telegram_user_id = $tg->id; $auth->email = $email; $auth->access_token = $access_token; $auth->save(); }
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; }
/** * Run the migrations. * * @return void */ public function up() { Schema::table('telegram_users', function (Blueprint $table) { $table->bigInteger('update_id')->default(0); $table->string('avatar')->nullable(); }); Schema::table('users', function (Blueprint $table) { $table->string('avatar')->nullable(); }); $all = TelegramUser::all(); foreach ($all as $tg) { try { $json = file_get_contents('https://api.telegram.org/bot' . env('BOT_TOKEN') . '/getUserProfilePhotos?limit=1&user_id=' . $tg->telegram_id); $response = json_decode($json, true)['result']; if (array_key_exists('photos', $response) && count($response['photos']) > 0) { $file = $response['photos'][0][1]; if (!array_key_exists('file_path', $file)) { $json = file_get_contents('https://api.telegram.org/bot' . env('BOT_TOKEN') . '/getFile?file_id=' . $file['file_id']); $response = json_decode($json, true)['result']; $file = $response; } if (!array_key_exists('file_path', $file)) { throw new \Exception(); } $path = $file['file_path']; $split = explode('.', $path); $id = $file['file_id'] . '.' . end($split); $content = file_get_contents('https://api.telegram.org/file/bot' . env('BOT_TOKEN') . '/' . $path); $localPath = env('AVATAR_LOCAL_DIR') . '/' . $id; $result = file_put_contents($localPath, $content); if ($result) { $tg->avatar = str_replace(env('AVATAR_LOCAL_DIR'), env('AVATAR_DIR'), $localPath); $tg->save(); $user = User::where('telegram_id', '=', $tg->telegram_id)->firstOrFail(); $user->avatar = $tg->avatar; $user->save(); } } } catch (\Exception $e) { \Log::error($e); } } }
public static function findByTelegramId($telegramId) { return TelegramUser::where('telegram_id', '=', $telegramId)->firstOrFail(); }
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; }