1 | from ..attribute import Attribute |
---|
2 | from ..attributegroup import AttributeGroup |
---|
3 | from ..request import Request |
---|
4 | from ..value import Value |
---|
5 | from .. import errors |
---|
6 | from .. import constants as consts |
---|
7 | from .. import object_attributes |
---|
8 | |
---|
9 | def verify_operations(request): |
---|
10 | """Pretty much all requests have the first attribute group for |
---|
11 | operation attributes, and these all have 'attributes-charset' and |
---|
12 | 'attributes-natural-language' as the first two attributes. This |
---|
13 | method just generically verifies that these attributes are there. |
---|
14 | |
---|
15 | """ |
---|
16 | |
---|
17 | # XXX: check version |
---|
18 | if False: |
---|
19 | raise errors.ClientErrorVersionNotSupported(str(request.version)) |
---|
20 | |
---|
21 | # XXX: check operation id |
---|
22 | if False: |
---|
23 | raise errors.ClientErrorOperationNotSupported(str(request.operation_id)) |
---|
24 | |
---|
25 | # check operation attributes tag |
---|
26 | op_attrs = request.attribute_groups[0] |
---|
27 | if op_attrs.tag != consts.AttributeTags.OPERATION: |
---|
28 | raise errors.ClientErrorBadRequest( |
---|
29 | "Attribute group does not have OPERATION tag: 0x%x" % op_attrs.tag) |
---|
30 | |
---|
31 | # XXX: if these aren't valid, then you HAVE to return something |
---|
32 | # special. See RFC 2911 3.1.6.1 |
---|
33 | # # check compression |
---|
34 | # if False: |
---|
35 | # raise errors.ClientErrorCompressionNotSupported |
---|
36 | |
---|
37 | # # check document format |
---|
38 | # if False: |
---|
39 | # raise errors.ClientErrorDocumentFormatNotSupported |
---|
40 | |
---|
41 | # # check document uri |
---|
42 | # if False: |
---|
43 | # raise errors.ClientErrorUriSchemeNotSupported |
---|
44 | |
---|
45 | # check charset |
---|
46 | charset_attr = op_attrs.attributes[0] |
---|
47 | if charset_attr != object_attributes.AttributesCharset('utf-8'): |
---|
48 | raise errors.ClientErrorBadRequest |
---|
49 | |
---|
50 | # check for attributes-natural-language |
---|
51 | natlang_attr = op_attrs.attributes[1] |
---|
52 | if natlang_attr != object_attributes.AttributesNaturalLanguage('en-us'): |
---|
53 | raise errors.ClientErrorBadRequest |
---|
54 | |
---|
55 | return dict([(attr.name, attr) for attr in op_attrs.attributes]) |
---|
56 | |
---|
57 | def verify_printer_uri(uri_attr): |
---|
58 | if uri_attr != object_attributes.PrinterUri(uri_attr.values[0].value): |
---|
59 | raise errors.ClientErrorBadRequest |
---|
60 | |
---|
61 | # actually get the printer name |
---|
62 | # XXX: hack -- CUPS will strip the port from the request, so |
---|
63 | # we can't do an exact comparison (also the hostname might be |
---|
64 | # different, depending on the CNAME or whether it's localhost) |
---|
65 | uri = uri_attr.values[0].value.split("/")[-1] |
---|
66 | return uri |
---|
67 | |
---|
68 | def verify_requesting_username(username_attr): |
---|
69 | if username_attr != object_attributes.RequestingUserName(username_attr.values[0].value): |
---|
70 | raise errors.ClientErrorBadRequest |
---|
71 | return username_attr.values[0].value |
---|
72 | |
---|
73 | def make_empty_response(request): |
---|
74 | # Operation attributes -- typically the same for any request |
---|
75 | attributes = AttributeGroup( |
---|
76 | consts.AttributeTags.OPERATION, |
---|
77 | [object_attributes.AttributesCharset('utf-8'), |
---|
78 | object_attributes.AttributesNaturalLanguage('en-us')]) |
---|
79 | |
---|
80 | # Set up the default response -- handlers will override these |
---|
81 | # values if they need to |
---|
82 | response_kwargs = {} |
---|
83 | response_kwargs['version'] = request.version |
---|
84 | response_kwargs['operation_id'] = consts.StatusCodes.OK |
---|
85 | response_kwargs['request_id'] = request.request_id |
---|
86 | response_kwargs['attribute_groups'] = [attributes] |
---|
87 | response = Request(**response_kwargs) |
---|
88 | |
---|
89 | return response |
---|
90 | |
---|
91 | def make_job_attributes(attrs, request, response): |
---|
92 | response.attribute_groups.append(AttributeGroup( |
---|
93 | consts.AttributeTags.JOB, attrs)) |
---|
94 | |
---|
95 | def make_printer_attributes(attrs, request, response): |
---|
96 | response.attribute_groups.append(AttributeGroup( |
---|
97 | consts.AttributeTags.PRINTER, attrs)) |
---|
98 | |
---|
99 | from cups_get_classes import verify_cups_get_classes_request, make_cups_get_classes_response |
---|
100 | from cups_get_default import verify_cups_get_default_request, make_cups_get_default_response |
---|
101 | from cups_get_document import verify_cups_get_document_request, make_cups_get_document_response |
---|
102 | from cups_get_printers import verify_cups_get_printers_request, make_cups_get_printers_response |
---|
103 | |
---|
104 | from cancel_job import verify_cancel_job_request, make_cancel_job_response |
---|
105 | from create_job import verify_create_job_request, make_create_job_response |
---|
106 | from get_jobs import verify_get_jobs_request, make_get_jobs_response |
---|
107 | from get_printer_attributes import make_get_printer_attributes_response |
---|
108 | from get_printer_attributes import verify_get_printer_attributes_request |
---|
109 | from pause_printer import verify_pause_printer_request, make_pause_printer_response |
---|
110 | from print_job import verify_print_job_request, make_print_job_response |
---|
111 | from print_uri import verify_print_uri_request, make_print_uri_response |
---|
112 | from promote_job import verify_promote_job_request, make_promote_job_response |
---|
113 | from restart_job import verify_restart_job_request, make_restart_job_response |
---|
114 | from resume_printer import verify_resume_printer_request, make_resume_printer_response |
---|
115 | from send_document import verify_send_document_request, make_send_document_response |
---|
116 | from send_uri import verify_send_uri_request, make_send_uri_response |
---|
117 | from set_job_attributes import make_set_job_attributes_response |
---|
118 | from set_job_attributes import verify_set_job_attributes_request |
---|
119 | from set_printer_attributes import make_set_printer_attributes_response |
---|
120 | from set_printer_attributes import verify_set_printer_attributes_request |
---|
121 | from validate_job import verify_validate_job_request, make_validate_job_response |
---|
122 | |
---|
123 | |
---|
124 | |
---|
125 | __all__ = ['verify_cups_get_classes_request', 'make_cups_get_classes_response' |
---|
126 | 'verify_cups_get_default_request', 'make_cups_get_default_response' |
---|
127 | 'verify_cups_get_document_request', 'make_cups_get_document_response' |
---|
128 | 'verify_cups_get_printers_request', 'make_cups_get_printers_response' |
---|
129 | |
---|
130 | 'verify_cancel_job_request', 'make_cancel_job_response' |
---|
131 | 'verify_create_job_request', 'make_create_job_response' |
---|
132 | 'verify_get_jobs_request', 'make_get_jobs_response' |
---|
133 | 'make_get_printer_attributes_response' |
---|
134 | 'verify_get_printer_attributes_request' |
---|
135 | 'verify_pause_printer_request', 'make_pause_printer_response' |
---|
136 | 'verify_print_job_request', 'make_print_job_response' |
---|
137 | 'verify_print_uri_request', 'make_print_uri_response' |
---|
138 | 'verify_promote_job_request', 'make_promote_job_response' |
---|
139 | 'verify_restart_job_request', 'make_restart_job_response' |
---|
140 | 'verify_resume_printer_request', 'make_resume_printer_response' |
---|
141 | 'verify_send_document_request', 'make_send_document_response' |
---|
142 | 'verify_send_uri_request', 'make_send_uri_response' |
---|
143 | 'make_set_job_attributes_response' |
---|
144 | 'verify_set_job_attributes_request' |
---|
145 | 'make_set_printer_attributes_response' |
---|
146 | 'verify_set_printer_attributes_request' |
---|
147 | 'verify_validate_job_request', 'make_validate_job_response' |
---|
148 | |
---|
149 | 'verify_operations', |
---|
150 | 'verify_printer_uri', |
---|
151 | 'verify_requesting_username', |
---|
152 | |
---|
153 | 'make_empty_response', |
---|
154 | 'make_job_attributes', |
---|
155 | 'make_printer_attributes'] |
---|