diff --git a/spkrepo/tests/test_nas.py b/spkrepo/tests/test_nas.py index deb79ae..eff207b 100644 --- a/spkrepo/tests/test_nas.py +++ b/spkrepo/tests/test_nas.py @@ -560,9 +560,9 @@ def test_generic(self): response = self.client.get( url_for( "nas.download", - md5=build.md5, - arch=architecture.code, - build=4458, + architecture_id=architecture.id, + firmware_build=4458, + build_id=build.id, ), environ_base={"REMOTE_ADDR": "127.0.0.1"}, headers={"User-Agent": "My User Agent"}, @@ -592,9 +592,9 @@ def test_wrong_build(self): response = self.client.get( url_for( "nas.download", - md5=build.md5 + "1", - arch=architecture.code, - build=4458, + architecture_id=architecture.id, + firmware_build=4458, + build_id=build.id + 1, ) ) self.assert404(response) @@ -613,9 +613,9 @@ def test_inactive_build(self): response = self.client.get( url_for( "nas.download", - md5=build.md5, - arch=architecture.code, - build=4458, + architecture_id=architecture.id, + firmware_build=4458, + build_id=build.id, ) ) self.assert403(response) @@ -634,9 +634,9 @@ def test_wrong_architecture(self): response = self.client.get( url_for( "nas.download", - md5=build.md5, - arch=Architecture.find(10).code if Architecture.find(10) else "", - build=4458, + architecture_id=10, + firmware_build=4458, + build_id=build.id, ) ) self.assert404(response) @@ -655,9 +655,9 @@ def test_incorrect_architecture(self): response = self.client.get( url_for( "nas.download", - md5=build.md5, - arch=Architecture.find("cedarview").code, - build=4458, + architecture_id=Architecture.find("cedarview").id, + firmware_build=4458, + build_id=build.id, ) ) self.assert400(response) @@ -676,9 +676,9 @@ def test_incorrect_firmware_build(self): response = self.client.get( url_for( "nas.download", - md5=build.md5, - arch=architecture.code, - build=1593, + architecture_id=architecture.id, + firmware_build=1593, + build_id=build.id, ) ) self.assert400(response) diff --git a/spkrepo/views/nas.py b/spkrepo/views/nas.py index fc0c880..f7d9cf0 100644 --- a/spkrepo/views/nas.py +++ b/spkrepo/views/nas.py @@ -144,10 +144,6 @@ def get_catalog(arch, build, language, beta): # fill the catalog entries = [] for b in latest_build.all(): - # correct any missing md5 hashes - if b.md5 is None: - b.md5 = b.calculate_md5() - db.session.commit() entry = { "package": b.version.package.name, "version": b.version.version_string, @@ -158,11 +154,7 @@ def get_catalog(arch, build, language, beta): language, b.version.descriptions["enu"] ).description, "link": url_for( - ".download", - md5=b.md5, - arch=arch, - build=build, - _external=True, + ".data", path=b.path, arch=arch, build=build, _external=True ), "thumbnail": [ url_for(".data", path=icon.path, _external=True) @@ -259,34 +251,25 @@ def catalog(): return Response(json.dumps(catalog), mimetype="application/json") -@nas.route("/download///") -def download(md5, arch, build): +@nas.route("/download///") +def download(architecture_id, firmware_build, build_id): # check build - build_obj = Build.query.filter_by(md5=md5).one_or_none() - - if build_obj is None: - abort(404) - elif not build_obj.active: + build = Build.query.get_or_404(build_id) + if not build.active: abort(403) # architecture - architecture = Architecture.query.filter_by(code=arch).one_or_none() + architecture = Architecture.query.get_or_404(architecture_id) - if architecture is None: - abort(404) # check consistency - elif build < build_obj.firmware.build: - abort(400) - elif architecture not in build_obj.architectures and not any( - arch.code == "noarch" for arch in build_obj.architectures - ): + if architecture not in build.architectures or firmware_build < build.firmware.build: abort(400) # insert in database download = Download( - build=build_obj, + build=build, architecture=architecture, - firmware_build=build, + firmware_build=firmware_build, ip_address=request.remote_addr, user_agent=request.user_agent.string, ) @@ -294,7 +277,7 @@ def download(md5, arch, build): db.session.commit() # redirect - return redirect(url_for(".data", path=build_obj.path)) + return redirect(url_for(".data", path=build.path)) @nas.route("/")