#!/usr/bin/python
from RepSys import Error, config
from RepSys.rpmutil import get_srpm
from RepSys.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 not os.environ.has_key('REQUEST_METHOD'):
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, e:
show(str(e), error=1)
except Error, e:
error = str(e)
show(error[0].upper()+error[1:], error=1)
except:
cgi.print_exception()
# vim:et:ts=4:sw=4