127 Commits

Author SHA1 Message Date
Athanasius
abcf472197 Gateway: Revert non-gzip form encoded check
Fixes the regression identified in #165

However the gzip code path can still erroneously think a decompressed
request body is form encoded when it is not.  This happens when any text
in the decompressed body matches the regex:

        .+=[^\&;]*

i.e. some text, followed by `=`, and then some more text, possibly
empty, followed by an ampersand `&`, or semi-colon `;`, or the end of the
string.

`&` and `;` are used to separate key=value pairs in form encoding, the
`=` separates a key from its value.
2022-01-11 15:06:02 +00:00
Athanasius
ccde820ba7
Gateway/errors: 'Schema Validation' properly tagged and documented 2022-01-09 16:02:28 +00:00
Athanasius
e111fb8415
Gateway/errors: Outdate Schema: Tweak message and document 2022-01-09 15:48:27 +00:00
Athanasius
e931bfff96
Gateway/errors: MalformedUploadError isn't raised upon JSON issue 2022-01-09 15:45:56 +00:00
Athanasius
4da60215f0
Gateway/errors: Tag FAIL if a zlib.error 2022-01-09 15:43:12 +00:00
Athanasius
8edae919e2
Gateway/errors: Call out if FAIL is specifically on JSON parsing 2022-01-09 15:38:29 +00:00
Athanasius
10d70bfe77 Gateway: Properly report 'not compressed, badly form-encoded' to uploaders
* This code worked if the request was *properly* form-encoded, with a
'data' key whose value was a valid message.

* It failed to detect where the request was form-encoded, with without a
'data' key.  It would just assume 'not form-encoded' in that case, then
fail later on JSON parsing.

Thus, re-use the `urlparse.parse_qs()` check for form-encoded format.
This passes:

  1. Properly, `data` key, form-encoded with valid value is fully JSON
  parsed, schema checked and accepted.
  2. *NOT* compressed *or* form-encoded valid message is properly parsed
  and accepted.
  2. Uncompressed, form-encoded, but no `data` key correctly returns the
  same error status and body as the compressed+form-encoded+no data key
  path.
2022-01-07 16:45:37 +00:00
Athanasius
872af7f594 Gateway: Properly report 'badly form encoded' to uploaders
This currently only applies if the data was also, validly, compressed.
2022-01-07 16:32:10 +00:00
Athanasius
10b12cf74b Gateway: Properly report zlib.decompress() errors to uploaders
This also adds some debug/error logging to the code path.
2022-01-07 16:04:00 +00:00
Athanasius
1134a6c9b4 Gateway: Only log first 512 characters of invalid JSON
Don't want to spam the logs with up to 1MiB per bad message.
2022-01-06 17:39:01 +00:00
Athanasius
9f219da6a6 Gateway: Expand on logging for interpretation of errors
This includes logging the *full* (uncompressed) message if it fails to
parse as JSON.
2022-01-06 17:36:39 +00:00
Athanasius
1371f71217 Gateway: Set up proper logger formatting
For some reason the milliseconds portion of the %S timestamp is using a
comma for decimals separator, despite 'locale' saying we're set to (US)
English.  /tableflip
2022-01-06 14:06:59 +00:00
Athanasius
377bdd3833 Gateway: Add logging per Accepted request
Actually some logging was already there, just the logger had never been
set up properly, but then I decided to make the format of this message
more useful.
2022-01-06 13:54:33 +00:00
Athanasius
0e80c76cb5 Gateway: Set bottle request limit to 1MiB 2022-01-06 13:07:53 +00:00
Athanasius
9359b78301 Gateway: Correct methodS to singular & remove extraneous header
* methods != method
* There shouldn't be any need to manually set
  Access-Control-Allow-Origin headers now.
2021-07-02 17:02:07 +00:00
Athanasius
2eb8a9fb88 Gateway: Implement a CORS plugin for all routes
* Switches all of the routes to use .route(..., method=[...]) so as to
  include OPTIONS as well as either POST or GET.
2021-07-02 16:32:19 +00:00
Athanasius
6d9942ece0 Switch bottle to using an 'app' instance.
This fixes the problem I was having (on two separate machines, Debian
stretch and Debian buster) with the Gateway not actually sending
messages out port 8500 to the Relay and Monitor.
  Something about the '@thing' syntax, or using bare 'run()' must be
interfering with zmq.green.  The latter ends up thinking there are no
active/matching sockets to send to[0], despite the sockets definitely
being there (complete with TCP 3-way handshake visible on tcpdump
output).
  With the problem:

	* no network traffic was observed on port 8500.
	* A test sender.send(...) just before the bottle run() call
	  *did* send the message.  A similar test at the start of the
	  @post('/upload/') function did not succeed.

[0] - I ended up putting debug prints in both python-zmq and the zeromq
'libzmq' libraries, building the Debian packages and installing those
versions.  I also ended up using 'gdb' on the process.  The end result
of this was to find that the _matching variable (a count of matching
sockets I think) was empty deep in libzmq, when it should be counting
sockets to send to.
  This was specifically in zeromq3-4.3.1/src/dist.cpp, in the
void zmq::dist_t::distribute (msg_t *msg_) function.  The immediate:

	    if (_matching == 0) {

test was true.  I didn't manage to track down which bit of libzmq code
should have been setting _matching before I 'recursed back up' the call
chain to investigate other things.
2019-10-05 11:23:41 +01:00
AnthorNet
a221ae13c3 Remove uploaderID from public relays to avoid real time tracking of user without consent 2018-01-27 09:37:26 +01:00
AnthorNet
26f0d64745 Small fixes 2018-01-06 12:40:56 +01:00
AnthorNet
32ed86da91 Fix duplicate message not copied 2018-01-05 16:35:57 +01:00
AnthorNet
dd65ba50d1 Temp fix 2018-01-05 15:10:53 +01:00
AnthorNet
313120aa94 Implement tracking stats 2018-01-05 15:06:21 +01:00
AnthorNet
a6546c3628 Ensure CORS available from gateway upload 2017-10-18 15:07:58 +02:00
Jonathan Harris
f9c7eb1d39 Stop rewriting new schemas to old
Reverts 04a8f91.
2017-07-03 15:34:39 +01:00
Jonathan Harris
04a8f91b8c Rewrite schemas during transition period 2017-07-03 12:58:44 +01:00
Jonathan Harris
a959390ff7 Move SSL config to Settings 2017-07-03 12:31:20 +01:00
AnthorNet
e13fffea79 Fix UnicodeDecodeError 2017-06-29 21:18:44 +02:00
AnthorNet
97ed7ad101 Add the new Gateway/Relay and make them act in HTTPS 2017-06-29 14:01:40 +02:00
Jonathan Harris
a925155547 Make gatewayTimestamp strictly conformant.
http://json-schema.org/latest/json-schema-validation.html#anchor108
RCF3339: http://tools.ietf.org/html/rfc3339#section-5.6
2016-01-22 17:11:54 +00:00
Jonathan Harris
a70edab1a2 Handle non-ASCII characters in messages, i.e. in the uploaderID field. 2015-12-05 04:39:32 +00:00
James Muscat
802633d3ef Bind gateway to localhost by default (e.g. and then proxy via nginx) 2015-07-06 16:10:29 +01:00
James Muscat
443882592e Back out wsgi entry point since it breaks things in complicated ways. 2015-07-01 23:23:47 +01:00
James Muscat
2d6e7d9f38 This just needs to be a list, not a dict. 2015-07-01 22:27:12 +01:00
James Muscat
13a651175d We still need to configure the gateway when running in wsgi mode! 2015-07-01 22:25:38 +01:00
James Muscat
f591d3a815 Slightly nicer error message. 2015-07-01 21:46:16 +01:00
James Muscat
a2ebb94c7a Coding standards. 2015-07-01 21:44:42 +01:00
James Muscat
8cdd2b4c84 Add WSGI hook for running gateway through uWSGI. 2015-07-01 21:44:19 +01:00
Jonathan Harris
1f85be3beb Add reason text to reply for outdated schemas. 2015-06-20 00:28:50 +01:00
AnthorNet
c0d4f4c8b0 Add outdated schema functionnality.
Also added shipyard to release.
2015-06-19 22:23:20 +02:00
AnthorNet
ac92ae7076 Removed comment 2015-06-08 10:14:04 +02:00
AnthorNet
6a86ee904f Make use of pkg_resources to keep egg file zipped
Used to keep schemas in egg file
2015-06-08 09:59:20 +02:00
AnthorNet
85ab051b9a Remove unnecessary stats collector in favor of monitor 2015-06-08 08:20:05 +02:00
AnthorNet
ceaac2be74 Fix PEP8 2015-06-05 16:43:59 +02:00
AnthorNet
2f72fe84fe Moved _Core/_Conf to core/conf and some UTF8 fixes 2015-06-05 16:08:32 +02:00
James Muscat
6ed5537d71 Merge branch 'master' of https://github.com/jamesremuscat/EDDN 2015-06-05 14:12:22 +01:00
AnthorNet
37fdd5333e Merge pull request #13 from AnthorNet/Pull-for-James---Release-0.4
EDDN Release 0.4
2015-06-05 12:45:25 +02:00
AnthorNet
69f7134a94 Fix wrong argument in gateway 2015-05-07 19:33:59 +02:00
AnthorNet
c7187e90bd Added topic in Gateway/Relay to allow filtering 2015-05-05 12:37:57 +02:00
AnthorNet
863d5937c7 Remove unnecessary comment 2015-05-04 13:33:58 +02:00
AnthorNet
6639b3a13e Moved core functions to _Core 2015-05-04 13:21:58 +02:00