diff options
| author | Michal Toman <mtoman@redhat.com> | 2010-11-08 16:21:51 +0100 |
|---|---|---|
| committer | Karel Klic <kklic@redhat.com> | 2010-12-02 16:13:42 +0100 |
| commit | 6f601ef4b1e0a3dd4050bd03167b86a84df6979e (patch) | |
| tree | 8a593ec08128521cc6297140895d1f6d4150f1c1 | |
| parent | 4726c5a6e1177d79946a90dd0a8993d9b98d8570 (diff) | |
update interface
| -rw-r--r-- | retrace/interface/backtrace.wsgi | 29 | ||||
| -rw-r--r-- | retrace/interface/create.wsgi | 13 | ||||
| -rw-r--r-- | retrace/interface/log.wsgi | 29 | ||||
| -rw-r--r-- | retrace/interface/status.wsgi | 28 |
4 files changed, 81 insertions, 18 deletions
diff --git a/retrace/interface/backtrace.wsgi b/retrace/interface/backtrace.wsgi index 1f059d11..6e2b9592 100644 --- a/retrace/interface/backtrace.wsgi +++ b/retrace/interface/backtrace.wsgi @@ -14,9 +14,30 @@ def application(environ, start_response): if not match: return response(start_response, "404 Not Found") - task = match.group(1) + taskdir = CONFIG["WorkDir"] + "/" + match.group(1) - btpath = CONFIG["WorkDir"] + "/" + task + "/backtrace" + if not os.path.isdir(taskdir): + return response(start_response, "404 Not Found") + + pwdpath = taskdir + "/password" + try: + if not os.path.isfile(pwdpath): + raise + + pwdfile = open(pwdpath, "r") + pwd = pwdfile.read() + pwdfile.close() + except: + return response(start_response, "500 Internal Server Error", "Unable to verify password") + + if not "X-Task-Password" in request.headers or request.headers["X-Task-Password"] != pwd: + return response(start_response, "403 Forbidden") + + newpass = gen_task_password(taskdir) + if not newpass: + return response(start_response, "500 Internal Server Error", "Unable to generate new password") + + btpath = taskdir + "/retrace_backtrace" if not os.path.isfile(btpath): return response(start_response, "404 Not Found") @@ -25,6 +46,6 @@ def application(environ, start_response): output = btfile.read() btfile.close() except: - response(start_response, "500 Internal Server Error", "Unable to read backtrace file at server") + return response(start_response, "500 Internal Server Error", "Unable to read backtrace file at server") - return response(start_response, "200 OK", output)
\ No newline at end of file + return response(start_response, "200 OK", output, [("X-Task-Password", newpass)]) diff --git a/retrace/interface/create.wsgi b/retrace/interface/create.wsgi index a7156c89..f5c243d7 100644 --- a/retrace/interface/create.wsgi +++ b/retrace/interface/create.wsgi @@ -16,7 +16,7 @@ def application(environ, start_response): if request.method != "POST": return response(start_response, "405 Method Not Allowed") - if not request.content_type in ["application/x-xz", "application/x-xz-compressed-tar"]: + if not request.content_type in ["application/x-xz", "application/x-xz-compressed-tar", "application/x-gzip", "application/x-tar"]: return response(start_response, "415 Unsupported Media Type") if not request.content_length: @@ -52,12 +52,13 @@ def application(environ, start_response): os.unlink(archive.name) return response(start_response, "507 Insufficient Storage") - taskid, taskdir = new_task() - if not taskid or not taskdir: + taskid, taskpass, taskdir = new_task() + if not taskid or not taskpass or not taskdir: return response(start_response, "500 Internal Server Error", "Unable to create new task") try: - os.chdir(taskdir) + os.mkdir(taskdir + "/crash/") + os.chdir(taskdir + "/crash/") unpack_retcode = unpack(archive.name) os.unlink(archive.name) @@ -76,4 +77,6 @@ def application(environ, start_response): os.system("rm -rf " + taskdir) return response(start_response, "403 Forbidden") - return response(start_response, "201 Created", "", [("X-Task-Id", taskid), ("X-Task-Est-Time", str(get_task_est_time(taskdir)))])
\ No newline at end of file + # ToDo Spawn worker + + return response(start_response, "201 Created", "", [("X-Task-Id", str(taskid)), ("X-Task-Password", taskpass), ("X-Task-Est-Time", str(get_task_est_time(taskdir)))]) diff --git a/retrace/interface/log.wsgi b/retrace/interface/log.wsgi index c8b0b330..f4778767 100644 --- a/retrace/interface/log.wsgi +++ b/retrace/interface/log.wsgi @@ -14,9 +14,30 @@ def application(environ, start_response): if not match: return response(start_response, "404 Not Found") - task = match.group(1) + taskdir = CONFIG["WorkDir"] + "/" + match.group(1) - logpath = CONFIG["WorkDir"] + "/" + task + "/log" + if not os.path.isdir(taskdir): + return response(start_response, "404 Not Found") + + pwdpath = taskdir + "/password" + try: + if not os.path.isfile(pwdpath): + raise + + pwdfile = open(pwdpath, "r") + pwd = pwdfile.read() + pwdfile.close() + except: + return response(start_response, "500 Internal Server Error", "Unable to verify password") + + if not "X-Task-Password" in request.headers or request.headers["X-Task-Password"] != pwd: + return response(start_response, "403 Forbidden") + + newpass = gen_task_password(taskdir) + if not newpass: + return response(start_response, "500 Internal Server Error", "Unable to generate new password") + + logpath = taskdir + "/retrace_log" if not os.path.isfile(logpath): return response(start_response, "404 Not Found") @@ -25,6 +46,6 @@ def application(environ, start_response): output = logfile.read() logfile.close() except: - response(start_response, "500 Internal Server Error", "Unable to read log file at server") + return response(start_response, "500 Internal Server Error", "Unable to read log file at server") - return response(start_response, "200 OK", output)
\ No newline at end of file + return response(start_response, "200 OK", output) diff --git a/retrace/interface/status.wsgi b/retrace/interface/status.wsgi index c4c62f7b..1341d594 100644 --- a/retrace/interface/status.wsgi +++ b/retrace/interface/status.wsgi @@ -14,16 +14,34 @@ def application(environ, start_response): if not match: return response(start_response, "404 Not Found") - task = match.group(1) + taskdir = CONFIG["WorkDir"] + "/" + match.group(1) - if not os.path.isdir(CONFIG["WorkDir"] + "/" + task): + if not os.path.isdir(taskdir): return response(start_response, "404 Not Found") + pwdpath = taskdir + "/password" + try: + if not os.path.isfile(pwdpath): + raise + + pwdfile = open(pwdpath, "r") + pwd = pwdfile.read() + pwdfile.close() + except: + return response(start_response, "500 Internal Server Error", "Unable to verify password") + + if not "X-Task-Password" in request.headers or request.headers["X-Task-Password"] != pwd: + return response(start_response, "403 Forbidden") + + newpass = gen_task_password(taskdir) + if not newpass: + return response(start_response, "500 Internal Server Error", "Unable to generate new password") + status = "PENDING" - if os.path.isfile(CONFIG["WorkDir"] + "/" + task + "/log"): - if os.path.isfile(CONFIG["WorkDir"] + "/" + task + "/backtrace"): + if os.path.isfile(CONFIG["WorkDir"] + "/" + task + "/retrace_log"): + if os.path.isfile(CONFIG["WorkDir"] + "/" + task + "/retrace_backtrace"): status = "FINISHED_SUCCESS" else: status = "FINISHED_FAILURE" - return response(start_response, "200 OK", "", [("X-Task-Status", status)])
\ No newline at end of file + return response(start_response, "200 OK", status, [("X-Task-Status", status)]) |
