diff --git a/mapadroid/mad_apk/wizard.py b/mapadroid/mad_apk/wizard.py index 22ecc48cc..d2cbad1d7 100644 --- a/mapadroid/mad_apk/wizard.py +++ b/mapadroid/mad_apk/wizard.py @@ -13,6 +13,7 @@ from apksearch.entities import PackageBase, PackageVariant from apksearch.search import HEADERS from apkutils.apkfile import BadZipFile, LargeZipFile +from bs4 import BeautifulSoup from loguru import logger from mapadroid.utils import global_variables @@ -537,12 +538,13 @@ def normalize_package(self) -> NoReturn: apk = apkutils.APK().from_io(bytes_of_apk).parse_resource() manifest = apk.get_manifest() try: - self.package_version = manifest['@android:versionName'] - self.package_name = manifest['@package'] + soup = BeautifulSoup(manifest, 'lxml-xml') + self.package_version = soup.manifest['android:versionName'] + self.package_name = soup.manifest['package'] except KeyError: pass try: - filename = manifest['@split'] + filename = soup.manifest['@split'] if filename[-3:] == 'dpi': continue except KeyError: diff --git a/mapadroid/madmin/endpoints/api/apks/MadApkEndpoint.py b/mapadroid/madmin/endpoints/api/apks/MadApkEndpoint.py index 75d89d6e4..e44702b68 100644 --- a/mapadroid/madmin/endpoints/api/apks/MadApkEndpoint.py +++ b/mapadroid/madmin/endpoints/api/apks/MadApkEndpoint.py @@ -13,7 +13,6 @@ from mapadroid.mad_apk.wizard import APKWizard, PackageImporter, WizardError from mapadroid.madmin.AbstractMadminRootEndpoint import ( AbstractMadminRootEndpoint, check_authorization_header) -from mapadroid.madmin.functions import allowed_file from mapadroid.utils.apk_enums import APKArch, APKType from mapadroid.utils.custom_types import MADapks @@ -39,6 +38,10 @@ async def get(self): except KeyError: return await self._json_response(data=data[apk_type]) + def allowed_file(self, filename): + ALLOWED_EXTENSIONS = set(['apk', 'apkm', 'zip']) + return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS + async def post(self): apk_type_raw: str = self.request.match_info.get('apk_type') apk_arch_raw: str = self.request.match_info.get('apk_arch') @@ -58,7 +61,7 @@ async def post(self): elif not file.filename: await self._add_notice_message('No file selected for uploading') raise web.HTTPFound(self._url_for("upload")) - elif not allowed_file(file.filename): + elif not self.allowed_file(file.filename): await self._add_notice_message('Allowed file type is apk only!') raise web.HTTPFound(self._url_for("upload")) filename = secure_filename(file.filename) @@ -118,7 +121,7 @@ async def handle_file_upload(self, apk: io.BytesIO, apk_arch: Optional[APKArch], except KeyError: return web.Response(text="Non-supported Type / Architecture", status=406) filename_split = filename.rsplit('.', 1) - if filename_split[1] in ['zip', 'apks']: + if filename_split[1] in ['zip', 'apkm']: mimetype = 'application/zip' elif filename_split[1] == 'apk': mimetype = 'application/vnd.android.package-archive' diff --git a/mapadroid/mitm_receiver/endpoints/mad_apk/MadApkDownloadEndpoint.py b/mapadroid/mitm_receiver/endpoints/mad_apk/MadApkDownloadEndpoint.py index 8cfdcbb68..4622e01a5 100644 --- a/mapadroid/mitm_receiver/endpoints/mad_apk/MadApkDownloadEndpoint.py +++ b/mapadroid/mitm_receiver/endpoints/mad_apk/MadApkDownloadEndpoint.py @@ -2,6 +2,8 @@ from aiohttp import web +from loguru import logger + from mapadroid.mad_apk.utils import stream_package from mapadroid.mitm_receiver.endpoints.AbstractMitmReceiverRootEndpoint import AbstractMitmReceiverRootEndpoint @@ -20,6 +22,8 @@ async def head(self): return response async def get(self): + logger.info("Device {} downloading package {} (arch: {})", self.request.headers["origin"], + self.request.match_info.get('apk_type'), self.request.match_info.get('apk_arch')) data_generator, response = await self.__handle_download_request() async for data in data_generator: await response.write(data) diff --git a/mapadroid/mitm_receiver/endpoints/mad_apk/MadApkInfoEndpoint.py b/mapadroid/mitm_receiver/endpoints/mad_apk/MadApkInfoEndpoint.py index f381ea5d2..e6d00ebdf 100644 --- a/mapadroid/mitm_receiver/endpoints/mad_apk/MadApkInfoEndpoint.py +++ b/mapadroid/mitm_receiver/endpoints/mad_apk/MadApkInfoEndpoint.py @@ -2,6 +2,8 @@ from aiohttp import web +from loguru import logger + from mapadroid.mad_apk.utils import lookup_package_info, supported_pogo_version from mapadroid.mitm_receiver.endpoints.AbstractMitmReceiverRootEndpoint import \ AbstractMitmReceiverRootEndpoint @@ -20,6 +22,8 @@ class MadApkInfoEndpoint(AbstractMitmReceiverRootEndpoint): # TODO: Auth/preprocessing for autoconfig? async def get(self): + logger.info("Device {} checking package {} (arch: {}) version", self.request.headers["origin"], + self.request.match_info.get('apk_type'), self.request.match_info.get('apk_arch')) parsed = self._parse_frontend() if type(parsed) == web.Response: return parsed