/**
  * 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);
         }
     }
 }
Example #4
0
 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;
 }