diff --git a/dolweb/update/urls.py b/dolweb/update/urls.py index a91bb9a..cb3897a 100644 --- a/dolweb/update/urls.py +++ b/dolweb/update/urls.py @@ -8,9 +8,14 @@ urlpatterns = [ # /update/latest/beta/ url(r'^latest/(?P\w+)/?$', views.latest, name='update_latest'), - # /update/check/dev/0000000...000 - # /update/check/beta/000000...000 + # /update/check/v1/dev/0000000000000000000000000000000000000000/win + # /update/check/v1/beta/0000000000000000000000000000000000000000/win url(r'^check/v(?P\d+)/(?P\w+)/(?P[0-9a-f]{40})/?(?P[A-Za-z0-9-_]+)?$', views.check, name='update_check'), + + # /update/info/v1/0000000000000000000000000000000000000000/win + url(r'^info/v(?P\d+)/(?P[0-9a-f]{40})/?(?P[A-Za-z0-9-_]+)?$', + views.info, + name='update_info'), ] diff --git a/dolweb/update/views.py b/dolweb/update/views.py index d5920e6..c2fd1eb 100644 --- a/dolweb/update/views.py +++ b/dolweb/update/views.py @@ -175,3 +175,31 @@ def _check_on_manually_maintained_track(request, track, version, old_platform, n return _make_up_to_date_response() changelog = _changelog_from_update_track(newer_versions) return _make_outdated_response(version, new_version, old_platform, new_platform, changelog) + + +@cache_control(max_age=15) +def info(request, updater_ver, version, platform): + if updater_ver != "1": + return _error_response(400, + "Unsupported updater version %r" % updater_ver) + + target_system = _UPDATE_SYSTEM_TO_ARTIFACT_NAME.get(platform) + if target_system is None: + return _error_response(400, + "Unsupported platform %r" % platform) + + try: + version = DevVersion.objects.get(hash=version) + except DevVersion.DoesNotExist: + return _error_response(404, "No version %r exists" % version) + + if version.artifacts.filter(target_system=target_system).count() == 0: + return _error_response(404, "No version %r exists on platform %r" % (version, platform)) + + return _make_info_response(version, platform) + +def _make_info_response(version, platform): + return JsonResponse({ + "content-store": settings.UPDATE_CONTENT_STORE_URL, + "info": _serialize_version(version, platform), + })