1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 from rhn.UserDictCase import UserDictCase
17 from spacewalk.common import apache
18
19 from spacewalk.common.rhnLog import log_debug
20 from spacewalk.common.rhnException import rhnFault
21
22
24
26 self.header_prefix = "X-RHN-Upload"
27 self.error_header_prefix = 'X-RHN-Upload-Error'
28 self.prefix = 'rhn/repository'
29 self.is_source = 0
30 self.rel_package_path = None
31 self.package_path = None
32 self.required_fields = [
33 "Package-Name",
34 "Package-Version",
35 "Package-Release",
36 "Package-Arch",
37 "File-Checksum",
38 "File-Checksum-Type",
39 ]
40 self.field_data = UserDictCase()
41 self.org_id = None
42
44 """ This whole function is ugly as hell. The Auth field in the header used to be required, but now
45 it must have either the Auth field or the Auth-Session field.
46 """
47
48 log_debug(3, "Method", req.method)
49
50
51 session_header = "%s-%s" % (self.header_prefix, "Auth-Session")
52
53
54 md5sum_header = "%s-%s" % (self.header_prefix, "File-MD5sum")
55 if md5sum_header in req.headers_in:
56 req.headers_in["%s-%s" % (self.header_prefix, "File-Checksum-Type")] = 'md5'
57 req.headers_in["%s-%s" % (self.header_prefix, "File-Checksum")] = \
58 req.headers_in[md5sum_header]
59
60 for f in self.required_fields:
61 hf = "%s-%s" % (self.header_prefix, f)
62 if hf not in req.headers_in:
63
64 if f == "Auth" and (session_header not in req.headers_in):
65 log_debug(4, "Required field %s missing" % f)
66 raise rhnFault(500, f)
67
68
69 elif f == "Auth" and (session_header in req.headers_in):
70 self.field_data["Auth-Session"] = req.headers_in[session_header]
71 continue
72
73
74 else:
75 log_debug(4, "Required field %s missing" % f)
76 raise rhnFault(500, f)
77
78 if not (f == "Auth" and (hf not in req.headers_in)):
79 self.field_data[f] = req.headers_in[hf]
80 else:
81 if session_header in req.headers_in:
82 self.field_data[f] = req.headers_in[hf]
83
84 self.package_name = self.field_data["Package-Name"]
85 self.package_version = self.field_data["Package-Version"]
86 self.package_release = self.field_data["Package-Release"]
87 self.package_arch = self.field_data["Package-Arch"]
88 self.file_checksum_type = self.field_data["File-Checksum-Type"]
89 self.file_checksum = self.field_data["File-Checksum"]
90
91 self.is_source = (self.package_arch == 'src' or self.package_arch == 'nosrc')
92 return apache.OK
93
97
100
103