Пример #1
0
 async def forge(self):
     get_file_name = re.search('forge_(.*)_(.*).jar',
                               self.search_server.jar_name).group(2)
     if get_file_name == 'unstable' or get_file_name == 'stable':
         spinner.start('サーバーをセットアップ中です')
         command = [
             'java', '-jar', f'{self.search_server.jar_name}',
             '--installServer'
         ]
         proc = subprocess.Popen(command,
                                 stdout=subprocess.PIPE,
                                 stderr=subprocess.PIPE)
         proc.wait()
         spinner.succeed('サーバーのセットアップに成功しました').start('インストーラーを削除中')
         os.remove(
             re.search('forge_(.*)_(.*)',
                       self.search_server.jar_name).group())
         spinner.succeed('インストーラーの削除に成功の削除に成功').start('サーバーの初回起動中')
         command = [
             'java', '-jar',
             self.search_server.original_jar_name.replace(
                 '-installer.jar', '-universal.jar')
         ]
         proc = subprocess.Popen(command,
                                 stdout=subprocess.PIPE,
                                 stderr=subprocess.STDOUT)
         if re.search(
                 'You need to agree to the EULA in order to run the server. Go to eula.txt for more info.',
                 proc.stdout.read().decode().strip()):
             await self.eula()
Пример #2
0
 async def create_dir(self, file_path):
     if not os.path.isdir(file_path):
         os.makedirs(file_path)
         spinner.succeed('ファイルの作成に成功しました')
     else:
         spinner.succeed('ファイルの確認に成功しました')
     return 'succeed'
Пример #3
0
 def upgrade(self):
     spinner.start('生成したmigrateファイルを適応中')
     upgrade_status = self.process(['alembic', 'upgrade', '+1'])
     if upgrade_status == 0:
         spinner.succeed('migrateファイルの適応に成功')
     else:
         spinner.fail('migrateファイルの適応に失敗しました')
         exit('再度実行し問題が修正されない場合は作者へご連絡ください')
     return 0
Пример #4
0
 async def download_file(self,
                         url: str,
                         save_path: str = None,
                         file_name: str = None):
     file_path_name = f'{save_path}{file_name}'
     spinner.start('ファイルをダウンロードしています')
     urllib.request.urlretrieve(url, file_path_name)
     spinner.succeed('ファイルのダウンロードに成功')
     checksum = await self.check_sha1_hash(file_path_name)
     return checksum
Пример #5
0
    def first_launch(self):
        print("""██╗███╗   ██╗████████╗███████╗██╗         ██████╗ ██╗   ██╗
██║████╗  ██║╚══██╔══╝██╔════╝██║         ██╔══██╗╚██╗ ██╔╝
██║██╔██╗ ██║   ██║   ███████╗██║         ██████╔╝ ╚████╔╝ 
██║██║╚██╗██║   ██║   ╚════██║██║         ██╔═══╝   ╚██╔╝  
██║██║ ╚████║   ██║   ███████║███████╗    ██║        ██║   
╚═╝╚═╝  ╚═══╝   ╚═╝   ╚══════╝╚══════╝    ╚═╝        ╚═╝   """)
        print('INTSL PYへようこそ!初回起動の為少々セットアップに時間がかかる可能性があります...')
        spinner.start('データベースの作成を行います')
        command = ['alembic', 'revision', '--autogenerate', '-m', '\"init\"']
        Migrate(command).generate()
        spinner.succeed('データベースの作成に成功しました')
Пример #6
0
 def generate(self):
     os.chdir('./app')
     spinner.start('migrateファイルの生成を実行中')
     generate_status = self.process()
     if generate_status == 0:
         spinner.succeed('migrateファイルの生成に成功')
         self.upgrade()
     elif generate_status == 'revision identified error':
         spinner.fail('データベースのバージョン管理システムとの整合性が損なわれています')
         exit('再度実行し問題が修正されない場合は作者へご連絡ください。')
     else:
         spinner.fail('migrateファイルの生成に失敗')
         exit('データベースが使用できないためINTSL PYを終了します')
     os.chdir('../')
Пример #7
0
 async def eula(self):
     spinner.succeed('サーバーの初回起動に成功')
     y_or_n = await Basic().text_input('Minecraftエンドコンテンツ利用規約所に同意しますか: ',
                                       ['y', 'n'])
     if y_or_n == 'y':
         eula_file_name = 'eula.txt'
         if os.path.exists(eula_file_name):
             with open(eula_file_name, 'r') as f:
                 data_lines = f.read()
             with open(eula_file_name, mode="w") as f:
                 f.write(data_lines.replace('eula=false', 'eula=true'))
         else:
             exit('同意しない場合は利用できません')
         return True
Пример #8
0
 async def official(self):
     spinner.start('サーバーをテスト起動中です\n')
     command = ['java', '-jar', f'{self.search_server.jar_name}', '--nogui']
     proc = subprocess.Popen(command,
                             stdout=subprocess.PIPE,
                             stderr=subprocess.STDOUT)
     while proc.poll() is None:
         log = proc.stdout.readline().decode('cp932')
         if re.search(
                 'You need to agree to the EULA in order to run the server. Go to eula.txt for more info.',
                 log):
             spinner.succeed('Eulaの生成に成功')
             await self.eula()
             break
         if re.search('Done (.*)! For help, type \"help\" or \"?\"', log):
             spinner.succeed('サーバーの起動テストに成功')
             proc.kill()
             break
Пример #9
0
    async def register(self,
                       mc_server_name: str = None,
                       mc_server_desc: str = None,
                       mc_server_port: int = None,
                       mc_server_type: str = None,
                       mc_version_result=None):
        print(f"""最終確認: 登録内容を最後にもう一度よくご確認ください。
サーバー名: {mc_server_name}
サーバー概要: {mc_server_desc}
サーバーポート: {mc_server_port}
サーバーエディション: {mc_server_type}
サーバーバージョン: {mc_version_result[0]}
""")
        y_or_n = await Basic().text_input('本当によろしいですか?: ', ['y', 'n'])

        if y_or_n == 'n':
            logger.info('登録をキャンセルしました')
            sys.exit(0)
        check_dir = await Basic().check_dir(f'./app/server/{mc_server_name}/')
        if check_dir is True:
            logger.error(f'すでに使用されているサーバー名です')
            sys.exit(0)
        spinner.start('キャッシュを確認しています')
        tmp_path = await Basic().check_tmp()
        download_file_path = f'{tmp_path}intsl_py/{mc_server_type}/'
        download_file_name = await self.get_file_name(mc_server_type,
                                                      mc_version_result)
        if os.path.exists(
                f'{download_file_path}{mc_server_type}_{mc_version_result[0]}_{mc_version_result[2]}.jar'
        ):
            spinner.succeed('キャッシュの確認に成功')
            sha1_hash = await Basic().check_sha1_hash(
                f'{download_file_path}{mc_server_type}_{mc_version_result[0]}_{mc_version_result[2]}.jar'
            )
            check_database = session.query(Hash).filter(
                and_(
                    Hash.file_name ==
                    f'{mc_version_result[0]}_{mc_version_result[2]}.jar',
                    Hash.sha1 == sha1_hash))
            if check_database:
                spinner.succeed('ハッシュの確認に成功')
            else:
                spinner.fail(
                    'ハッシュの確認に失敗しました。ファイルが改ざんされている可能性があります。安全のためサービスを終了します')
                sys.exit(1)
        else:
            await Basic().create_dir(download_file_path)
            jar_hash = await Basic().download_file(mc_version_result[1],
                                                   download_file_path,
                                                   download_file_name)
            if jar_hash == mc_version_result[3]:
                spinner.succeed('ハッシュの確認に成功')
                os.rename(
                    f'{download_file_path}{download_file_name}',
                    f'{download_file_path}{mc_server_type}_{mc_version_result[0]}_{mc_version_result[2]}.jar'
                )
                await db_manager.commit(
                    Hash(file_name=
                         f'{mc_version_result[0]}_{mc_version_result[2]}.jar',
                         sha1=jar_hash))
            else:
                spinner.fail(
                    'ハッシュの確認に失敗しました。ファイルが改ざんされている可能性があります。安全のためサービスを終了します')
                sys.exit(0)
        await Basic().create_dir(f'./app/server/{mc_server_name}')
        shutil.copy(
            f'{download_file_path}{mc_server_type}_{mc_version_result[0]}_{mc_version_result[2]}.jar',
            f'./app/server/{mc_server_name}/')
        await db_manager.commit(
            Server(
                name=mc_server_name,
                description=mc_server_desc,
                port=mc_server_port,
                path=f'./app/server/{mc_server_name}/',
                jar_name=
                f'{mc_server_type}_{mc_version_result[0]}_{mc_version_result[2]}.jar',
                original_jar_name=download_file_name))

        await Setup(server_name=mc_server_name,
                    server_type=mc_server_type).run()