#!/usr/bin/python
from MgaRepo import Error, config
from MgaRepo.rpmutil import get_srpm
from MgaRepo.cgiutil import CgiError, get_targets
import cgi
import sys
import os
TEMPLATE = """\
Repository package submission system
%(message)s
"""
def get_targetoptions():
s = ""
selected = " selected"
for target in get_targets():
s += '' \
% (target.name, selected, target.name)
selected = ""
return s
def show(msg="", error=0):
if error:
msg = '%s' % msg
print(TEMPLATE % {"message":msg, "targetoptions":get_targetoptions()})
def submit_packages(packager):
form = cgi.FieldStorage()
packageurl = form.getfirst("packageurl", "").strip()
packagerev = form.getfirst("packagerev", "").strip()
if not packageurl:
show()
elif not packagerev:
raise CgiError("No revision provided!")
else:
targetname = form.getfirst("target")
if not targetname:
raise CgiError("No target selected!")
for target in get_targets():
if target.name == targetname:
break
else:
raise CgiError("Target not found!")
try:
tmp = int(packagerev)
except ValueError:
raise CgiError("Invalid revision provided!")
for allowed in target.allowed:
if packageurl.startswith(allowed):
break
else:
raise CgiError("%s is not allowed for this target!" % packageurl)
get_srpm(packageurl,
revision=packagerev,
targetdirs=target.target,
packager=packager,
revname=1,
svnlog=1,
scripts=target.scripts)
show("Package submitted!")
def main():
if 'REQUEST_METHOD' not in os.environ:
sys.stderr.write("error: this program is meant to be used as a cgi\n")
sys.exit(1)
print("Content-type: text/html\n\n")
try:
username = os.environ.get("REMOTE_USER")
method = os.environ.get("REQUEST_METHOD")
if not username or method != "POST":
show()
else:
useremail = config.get("users", username)
if not useremail:
raise CgiError("Your email was not found. Contact the administrator!")
submit_packages(useremail)
except CgiError as e:
show(str(e), error=1)
except Error as e:
error = str(e)
show(error[0].upper()+error[1:], error=1)
except:
cgi.print_exception()
# vim:et:ts=4:sw=4