Age | Commit message (Collapse) | Author |
|
This is a maintainance release - bugfixes and upgrades of dependencies.
This release fixes a major issue with leaking file descriptors. Please
upgrade as soon as possible. Ruby 2.1 is required - no other upgrade
issues are known.
bugfixes:
* #3 handle domains without A-record
* filedescriptor leak from http_adapters
* send empty json object on 404 rather than nil
* remote nicknym is on port 6425
* use user:password@ prefix in http basic auth
upgrades:
* require at least ruby 2.1
* upgrade bundled gems to latest available
tests:
* more meaningful error messages in case of failures
* test bundle is up to date
* regression test for nonexisting domain
integration:
* Add systemd service unit file
* Restart nickserver automatically from systemd
* gitignore: bundle dir
cleanup:
* old empty adapters and tests
|
|
If a domain only has an mx record but no A record it
will trigger a ConnectionError when attempting the
nicknym key lookup.
We need to detect and handle this in the http adapter
already because once the exception is handled by Celluloid
our actor will be terminated.
So now we allow for handing a rescue option to the
adapter with a string that is checked for inclusion in
the error message. If the string is found the exception
will be caught and the adapter returns nil.
We only make use of this when checking the availability
of nicknym so far. That should be the only http request
going out.
|
|
Now we reuse a single adapter for all requests triggered
by an incoming request. Then we .terminate the adapter.
Includes a regression test.
|
|
sending nothing was keeping the connection alive.
|
|
We may use a different port in the config that is then mapped somehow.
But this should not affect where we try to contact remote nicknym servers.
|
|
This will get us more debug info in the logs if it happens again
|
|
http.rb does not do this on its own.
|
|
|
|
Allow queries by fingerprint (using keyservers to reply) and support key
lookup from other nickservers.
This is a major rewrite both in terms of our dependencies and our
architecture. We moved the server and http_client from eventmachine to
Celluloid based libraries. This allows for a more concise syntax and
proper https handling.
In addition we now support ruby 2.3, use a Logger instead of stdout and handle
network errors properly
|
|
Turns out without this nickserver will not respond to multiple concurrent requests.
|
|
|
|
|
|
This way the logs do not interfere with test output
|
|
|
|
We handle these errors nicely in the dispatcher and have tests for that.
Tests should fail or err out when running into exceptions we are not
handling yet. But for these it's better to just skip.
|
|
|
|
Turns out http.rb does not support celluloid i/o andymore and we were not making
use of it anyway.
Here's what https://github.com/httprb/http/wiki/Thread-Safety says:
(NOTE: this gem previously supported Celluloid::IO, but that support was removed to add the current timeout backend. It may be added back in a future version)
So now we have a plain http.rb adapter and use that as the default.
This prevents actors from crashing in the adapter (as we don't have any).
|
|
|
|
This way the other RequestHandlers can give it a try.
If none handles it we'll get a 404 anyway. But maybe there's
been an exception before so a 502 should be send.
|
|
|
|
If one source raises a 502 and no other handler has any result we'll
respond with a 502 - bad gateway.
|
|
|
|
|
|
Handler Chain is of handlers that respond to call.
Invoking handle(*args) on the chain will call the handlers with the given args
until one of them returns a result that is truethy (i.e. not false or nil).
Extracted from the dispatcher so we can also handle exceptions there in the
future. (So that if one of the network connections to the request_handlers
fails we can continue while still tracking the failed exception.)
|
|
This is a first step. In case the suspected nicknym server cannot be
reached we will now move on and try other sources.
It's robably not what we want in the long run. In order to know wether
no key exists or we just failed to connect to some servers a different
http response code would be nice if network errors occured.
This simplifies testing such scenarios in the unit test and makes the
remote tests skip on network failure.
|
|
Includes our first functional test. This one only makes sure loading
the bin/nickserver actually works fine. Enough to catch this bug.
|
|
|
|
Dropped the webmock dependency. We have our own http adapter. So we can
stub that to inject a mock. As an added bonus this does not mess with
other http requests.
Also wrote down testing strategy. Not completely implemented yet.
|
|
Also changed Nickserver::Response to not include the status code.
This may be okay for error responses but in most cases we want to
have a parsable message and not some status code prepended to it.
|
|
require all the things we depend upon where we depend upon them.
|
|
I added a RequestHandler that uses Nicknym::Source - but that has not
been implemented yet.
|
|
Whenever a RequestHandler class is called we instantiate it with the request.
Then we call handle on the instance. This way we can access the request and
its content via accessors rather than only in the handle method.
|
|
|
|
So far we would error out if no host was specified in the config or
the request. It's true that we can't do local lookup if we don't
know our own domain. However we can still use HKP.
In the future we will query leaps own API for other providers. If the
host was not set in the initial request we might even proxy a request to
ourselves. Providing the Host header will prevent an infinite loop in
that case.
|
|
InvalidEmailHandler - handle emails with an invalid format
LocalEmailHandler - handle emails on the local domain
EmailHandler - handle all other emails by using hkp
This is a preparation to add leap provider email lookup and remove
hkp eventually. But for now we keep the behaviour the same and only
refactor.
|
|
Lookup and InvalidSource were experiments for a design for the
dispatching. Our new dispatcher seems better.
|
|
Instead of testing the preconditions for each handler in the dispatcher
the dispatcher hands a request to one handler after the other until one of
them responds.
This is similar to the Chain of Responsibility patter but we iterate over the
'handler_chain' array instead of a linked list.
To change the order of handlers or add other handlers change the array in the
handler_chain function.
|
|
Now we have a Dispatcher and two ResponseHandlers that have the same interface.
Moving towards a Chain of Responsibility pattern.
|
|
This way we can separate the EmailHandler and the FingerprintHandler as well.
|
|
The original idea was that we would have all the celluloid related things
injected in reel_server. However it seems unlikely that we will use a
different http system anytime soon.
Removing some layers of dependency injection to reduce complexity. We
can easily bring this back if we want.
|
|
|
|
We have a specific way of encoding the thing we are looking for in the
request. I added a small helper class to access the fingerprint and
email.
This also cleans up the RequestHandler code to some extend.
|
|
These warnings were showing on gitlab ci.
$ bundle exec rake test
/usr/local/bin/ruby -w -Ilib:test -I/builds/leap/nickserver/vendor/ruby/2.1.0/gems/rake-11.2.2/lib /builds/leap/nickserver/vendor/ruby/2.1.0/gems/rake-11.2.2/lib/rake/rake_test_loader.rb test/**/*_test.rb
/usr/local/lib/ruby/gems/2.1.0/gems/bundler-1.12.5/lib/bundler/rubygems_integration.rb:468: warning: method redefined; discarding old find_spec_for_exe
/usr/local/lib/ruby/site_ruby/2.1.0/rubygems.rb:261: warning: previous definition of find_spec_for_exe was here
I, [2016-08-26T15:34:46.162843 #325] INFO -- : Celluloid 0.17.3 is running in BACKPORTED mode. [ http://git.io/vJf3J ]
/builds/leap/nickserver/test/unit/request_handler_test.rb:28: warning: mismatched indentations at 'end' with 'def' at 21
/builds/leap/nickserver/vendor/ruby/2.1.0/gems/celluloid-io-0.17.3/lib/celluloid/io/ssl_socket.rb:22: warning: instance variable @npn_protocols not initialized
/builds/leap/nickserver/vendor/ruby/2.1.0/gems/celluloid-io-0.17.3/lib/celluloid/io/ssl_socket.rb:22: warning: instance variable @npn_select_cb not initialized
Run options: --seed 61653
# Running:
.................../builds/leap/nickserver/vendor/ruby/2.1.0/gems/celluloid-io-0.17.3/lib/celluloid/io/ssl_socket.rb:22: warning: instance variable @npn_protocols not initialized
/builds/leap/nickserver/vendor/ruby/2.1.0/gems/celluloid-io-0.17.3/lib/celluloid/io/ssl_socket.rb:22: warning: instance variable @npn_select_cb not initialized
.../builds/leap/nickserver/vendor/ruby/2.1.0/gems/celluloid-io-0.17.3/lib/celluloid/io/ssl_socket.rb:22: warning: instance variable @npn_protocols not initialized
/builds/leap/nickserver/vendor/ruby/2.1.0/gems/celluloid-io-0.17.3/lib/celluloid/io/ssl_socket.rb:22: warning: instance variable @npn_select_cb not initialized
.................
Finished in 2.029982s, 19.2120 runs/s, 10.8375 assertions/s.
|
|
- add fingerprint unit tests
- add integration test
- implement by_fingerprint
|
|
in order to get key by fp as well
|
|
I have to admit I don't completely understand what is going on here.
https://github.com/celluloid/celluloid/wiki/Frequently-Asked-Questions says
you can either use sleep after initiating the actors or call run on them.
But this might not be true for reel. At least run did not work and now
new; sleep seems to work fine.
|
|
|
|
This became possible because we now use celluloid.
Celluloid handles asynchronity without the need for callbacks
or blocks.
|
|
|
|
|