source: soft/build_system/build_system/repsys/tags/V1_6_12/RepSys/cgi/xmlrpcserver.py @ 1

Last change on this file since 1 was 1, checked in by fasma, 12 years ago

Initial Import from Mandriva's soft revision 224062 and package revision 45733

File size: 3.1 KB
Line 
1#!/usr/bin/python
2from RepSys import Error, config
3from RepSys.rpmutil import get_srpm
4from RepSys.cgiutil import CgiError, get_targets
5import sys
6import os
7
8import xmlrpclib, cgi
9
10class XmlRpcIface:
11    def author_email(self, author):
12        return config.get("users", author)
13
14    def submit_package(self, packageurl, packagerev, targetname):
15        username = os.environ.get("REMOTE_USER")
16        packager = config.get("users", username)
17        if not packager:
18            raise CgiError, "your email was not found"
19        elif not packagerev:
20            raise CgiError, "no revision provided"
21        elif not targetname:
22            raise CgiError, "no target provided"
23        else:
24            targetname = targetname.lower()
25            for target in get_targets():
26                if target.name.lower() == targetname:
27                    break
28            else:
29                raise CgiError, "target not found"
30            try:
31                tmp = int(packagerev)
32            except ValueError:
33                raise CgiError, "invalid revision provided"
34            for allowed in target.allowed:
35                if packageurl.startswith(allowed):
36                    break
37            else:
38                raise CgiError, "%s is not allowed for this target" \
39                                % packageurl
40            get_srpm(packageurl,
41                     revision=packagerev,
42                     targetdirs=target.target,
43                     packager=packager,
44                     revname=1,
45                     svnlog=1,
46                     scripts=target.scripts)
47        return 1
48
49    def submit_targets(self):
50        return [x.name for x in get_targets()]
51
52TEMPLATE = """\
53Content-type: text/html
54
55<html>
56<head>
57<title>Repository system SOAP server</title>
58</head>
59<body bgcolor="white">
60<br>
61<hr>
62<center>
63<b>%(message)s</b>
64</center>
65<hr>
66</body>
67</html>
68"""
69
70def show(msg="", error=0):
71    if error:
72        msg = '<font color="red">%s</font>' % msg
73    print TEMPLATE % {"message":msg}
74
75def main():
76    if not os.environ.has_key('REQUEST_METHOD'):
77        sys.stderr.write("error: this program is meant to be used as a cgi\n")
78        sys.exit(1)
79    username = os.environ.get("REMOTE_USER")
80    method = os.environ.get("REQUEST_METHOD")
81    if not username or method != "POST":
82        show("This is a XMLRPC interface!", error=1)
83        sys.exit(1)
84
85    iface = XmlRpcIface()
86
87    response = ""
88    try:
89        form = cgi.FieldStorage()
90        parms, method = xmlrpclib.loads(form.value)
91        meth = getattr(iface, method)
92        response = (meth(*parms),)
93    except CgiError, e:
94        msg = str(e)
95        try:
96            msg = msg.decode("iso-8859-1")
97        except UnicodeError:
98            pass
99        response = xmlrpclib.Fault(1, msg)
100    except Exception, e:
101        msg = str(e)
102        try:
103            msg = msg.decode("iso-8859-1")
104        except UnicodeError:
105            pass
106        response = xmlrpclib.Fault(1, msg)
107
108    sys.stdout.write("Content-type: text/xml\n\n")
109    sys.stdout.write(xmlrpclib.dumps(response, methodresponse=1))
110
111# vim:et:ts=4:sw=4
Note: See TracBrowser for help on using the repository browser.