diff options
author | dakkar <dakkar@thenautilus.net> | 2017-12-17 19:09:31 +0000 |
---|---|---|
committer | dakkar <dakkar@thenautilus.net> | 2017-12-17 19:09:31 +0000 |
commit | ba1caee706c51e25a6ee325f4c338aa4d2d31292 (patch) | |
tree | 28d041597203df828bf1e8f3cab631213006d877 /lib | |
parent | passes "connection test" from official Android app! (diff) | |
download | Ultramarine-ba1caee706c51e25a6ee325f4c338aa4d2d31292.tar.gz Ultramarine-ba1caee706c51e25a6ee325f4c338aa4d2d31292.tar.bz2 Ultramarine-ba1caee706c51e25a6ee325f4c338aa4d2d31292.zip |
split pieces into modules
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Ultramarine/Controller.pm6 | 34 | ||||
-rw-r--r-- | lib/Ultramarine/Model/License.pm6 | 11 | ||||
-rw-r--r-- | lib/Ultramarine/Server.pm | 46 |
3 files changed, 91 insertions, 0 deletions
diff --git a/lib/Ultramarine/Controller.pm6 b/lib/Ultramarine/Controller.pm6 new file mode 100644 index 0000000..29433fd --- /dev/null +++ b/lib/Ultramarine/Controller.pm6 @@ -0,0 +1,34 @@ +use v6.d.PREVIEW; +use Cro::HTTP::Router; + +class Ultramarine::Controller { + has $.license is required; + has $.authorisation is required; + + sub respond(*@body) { + response.status = 200; + response.set-body(@body); + } + + submethod inner-routes() { + return route { + # this needs to be here, not in the Server because its + # short-circuited "unauthorised" response will be emited + # in an 'after' middleware, but the + # ResponseSerializerExtension is applied just before those + # middlewares, so our serialised won't be seen by the + # "unauthorised" response + before $!authorisation; + post -> 'ping.view' { respond [] } + post -> 'getLicense.view' { + respond [ license => [ |%($!license.status) ] ], + } + } + } + + method routes() { + return route { + include rest => self.inner-routes(), + } + } +} diff --git a/lib/Ultramarine/Model/License.pm6 b/lib/Ultramarine/Model/License.pm6 new file mode 100644 index 0000000..2ceeaa5 --- /dev/null +++ b/lib/Ultramarine/Model/License.pm6 @@ -0,0 +1,11 @@ +use v6.d.PREVIEW; + +class Ultramarine::Model::License { + method status() { + return { + :valid<true>, + :email<foo@bar.com>, + :licenseExpires<2019-01-01:00:00:00>, + } + } +} diff --git a/lib/Ultramarine/Server.pm b/lib/Ultramarine/Server.pm new file mode 100644 index 0000000..ec7220c --- /dev/null +++ b/lib/Ultramarine/Server.pm @@ -0,0 +1,46 @@ +use v6.d.PREVIEW; +use Cro::HTTP::Server; +use Cro::HTTP::Request; +use Cro::HTTP::Response; + +class Ultramarine::Server { + has $.authentication is required; + has @.serialisers is required; + has $.set-content-type is required; + has $.controller is required; + has $.host = 'localhost'; + has $.port = 8080; + has $.do-trace = False; + + my class Trace does Cro::Transform { + has $.type is required; + + method consumes() { $!type } + method produces() { $!type } + + method transformer(Supply $input --> Supply) { + supply whenever $input -> $thing { + say $thing.trace-output,"\n"; + say (await $thing.body-text).indent(2); + emit $thing; + } + } + } + + method server() { + return Cro::HTTP::Server.new( + :$!host, + :$!port, + application => $!controller, + before => [ + $.do-trace ?? Trace.new(type=>Cro::HTTP::Request) !! (), + $.authentication, + ], + add-body-serializers => @.serialisers, + after => [ + $.set-content-type, + $.do-trace ?? Trace.new(type=>Cro::HTTP::Response) !! (), + ], + ); + } +} |