diff options
author | Neil Williams <neil.williams@linaro.org> | 2016-05-24 11:29:31 +0100 |
---|---|---|
committer | Stevan Radakovic <stevan.radakovic@linaro.org> | 2016-05-25 13:11:08 +0000 |
commit | faa4bcaffebc47c941b14bbf1f4442e9eed1320f (patch) | |
tree | c2801c5958c58a9ea02c34050a48137acb3f4a23 | |
parent | f353aa147ffd23443f0eb991de7a26d1a7158725 (diff) |
Add Auth support in REST API for more functions
Definitions and other elements of jobs which might not be public
should be accessible using a username and token in the query string.
Ensure that existing pages handle restricted jobs correctly.
Change-Id: Idb3949c27c1555764dbeeef46fe5edc5cf105649
-rw-r--r-- | lava_results_app/views/__init__.py | 7 | ||||
-rw-r--r-- | lava_scheduler_app/views.py | 22 |
2 files changed, 15 insertions, 14 deletions
diff --git a/lava_results_app/views/__init__.py b/lava_results_app/views/__init__.py index e45771812..9fd857f8d 100644 --- a/lava_results_app/views/__init__.py +++ b/lava_results_app/views/__init__.py @@ -36,6 +36,7 @@ from lava_results_app.utils import StreamEcho from lava_results_app.dbutils import export_testcase, testcase_export_fields from lava_scheduler_app.models import TestJob from lava_scheduler_app.tables import pklink +from lava_scheduler_app.views import get_restricted_job from django_tables2 import RequestConfig from lava_results_app.utils import check_request_auth from lava_results_app.models import TestSuite, TestCase, TestSet, TestData @@ -86,7 +87,7 @@ def query(request): @BreadCrumb("Test job {job}", parent=index, needs=['job']) def testjob(request, job): - job = get_object_or_404(TestJob, pk=job) + job = get_restricted_job(request.user, pk=job, request=request) data = ResultsView(request, model=TestSuite, table_class=ResultsTable) suite_table = ResultsTable( data.get_table_data().filter(job=job) @@ -239,7 +240,7 @@ def metadata_export(request, job): @BreadCrumb("TestSet {case}", parent=testjob, needs=['job', 'pk', 'ts', 'case']) def testset(request, job, ts, pk, case): - job = get_object_or_404(TestJob, pk=job) + job = get_restricted_job(request.user, pk=job, request=request) test_suite = get_object_or_404(TestSuite, name=pk, job=job) test_set = get_object_or_404(TestSet, name=ts, suite=test_suite) test_cases = TestCase.objects.filter(name=case, test_set=test_set) @@ -265,7 +266,7 @@ def testcase(request, job, pk, case): :param case: the name of one or more TestCase objects in the TestSuite """ test_suite = get_object_or_404(TestSuite, name=pk, job=job) - job = get_object_or_404(TestJob, pk=job) + job = get_restricted_job(request.user, pk=job, request=request) test_cases = TestCase.objects.filter(name=case, suite=test_suite) return render_to_response( "lava_results_app/case.html", { diff --git a/lava_scheduler_app/views.py b/lava_scheduler_app/views.py index 912d68558..1e4f3fcdd 100644 --- a/lava_scheduler_app/views.py +++ b/lava_scheduler_app/views.py @@ -1418,7 +1418,7 @@ def job_detail(request, pk): @BreadCrumb("Definition", parent=job_detail, needs=['pk']) def job_definition(request, pk): - job = get_restricted_job(request.user, pk) + job = get_restricted_job(request.user, pk, request=request) log_file = job.output_file() description = description_data(job.id) if job.is_pipeline else {} return render_to_response( @@ -1459,7 +1459,7 @@ def job_definition_plain(request, pk): @BreadCrumb("Expanded Definition", parent=job_detail, needs=['pk']) def expanded_job_definition(request, pk): - job = get_restricted_job(request.user, pk) + job = get_restricted_job(request.user, pk, request=request) log_file = job.output_file() return render_to_response( "lava_scheduler_app/expanded_job_definition.html", @@ -1474,7 +1474,7 @@ def expanded_job_definition(request, pk): def expanded_job_definition_plain(request, pk): - job = get_restricted_job(request.user, pk) + job = get_restricted_job(request.user, pk, request=request) response = HttpResponse(job.definition, content_type='text/plain') response['Content-Disposition'] = "attachment; filename=job_%d.json" % \ job.id @@ -1483,7 +1483,7 @@ def expanded_job_definition_plain(request, pk): @BreadCrumb("Multinode definition", parent=job_detail, needs=['pk']) def multinode_job_definition(request, pk): - job = get_restricted_job(request.user, pk) + job = get_restricted_job(request.user, pk, request=request) log_file = job.output_file() return render_to_response( "lava_scheduler_app/multinode_job_definition.html", @@ -1508,7 +1508,7 @@ def multinode_job_definition_plain(request, pk): @BreadCrumb("VMGroup definition", parent=job_detail, needs=['pk']) def vmgroup_job_definition(request, pk): - job = get_restricted_job(request.user, pk) + job = get_restricted_job(request.user, pk, request=request) log_file = job.output_file() return render_to_response( "lava_scheduler_app/vmgroup_job_definition.html", @@ -1523,7 +1523,7 @@ def vmgroup_job_definition(request, pk): def vmgroup_job_definition_plain(request, pk): - job = get_restricted_job(request.user, pk) + job = get_restricted_job(request.user, pk, request=request) response = HttpResponse(job.vmgroup_definition, content_type='text/plain') response['Content-Disposition'] = \ "attachment; filename=vmgroup_job_%d.json" % job.id @@ -1597,7 +1597,7 @@ def favorite_jobs(request, username=None): @BreadCrumb("Complete log", parent=job_detail, needs=['pk']) def job_complete_log(request, pk): - job = get_restricted_job(request.user, pk) + job = get_restricted_job(request.user, pk, request=request) if not job.is_pipeline: raise Http404 description = description_data(job.id) @@ -1632,7 +1632,7 @@ def job_complete_log(request, pk): def job_section_log(request, job, log_name): - job = get_restricted_job(request.user, job) + job = get_restricted_job(request.user, job, request=request) if not job.is_pipeline: raise Http404 path = os.path.join(job.output_dir, 'pipeline', log_name[0], log_name) @@ -1658,7 +1658,7 @@ def job_section_log(request, job, log_name): def job_status(request, pk): - job = get_restricted_job(request.user, pk) + job = get_restricted_job(request.user, pk, request=request) response_dict = {'job_status': job.get_status_display()} if (job.actual_device and job.actual_device.status not in [Device.RESERVED, Device.RUNNING]) or \ job.status not in [TestJob.COMPLETE, TestJob.INCOMPLETE, TestJob.CANCELED]: @@ -1733,7 +1733,7 @@ def job_pipeline_incremental(request, pk): @BreadCrumb("Complete log", parent=job_detail, needs=['pk']) def job_log_file(request, pk): - job = get_restricted_job(request.user, pk) + job = get_restricted_job(request.user, pk, request=request) if job.is_pipeline: return redirect(job_complete_log, pk=pk) log_file = job.output_file() @@ -1769,7 +1769,7 @@ def job_log_file(request, pk): def job_log_file_plain(request, pk): - job = get_restricted_job(request.user, pk) + job = get_restricted_job(request.user, pk, request=request) log_file = job.output_file() if not log_file: raise Http404 |