use v6.d.PREVIEW;
use Cro::HTTP::Router;
use Cro::HTTP::Server;
use Ultramarine::Model::Users;
use Ultramarine::Middleware::Authentication;
use Ultramarine::Middleware::Authorisation;
use Ultramarine::Middleware::SetContentType;
use Ultramarine::Serialiser::XML;
sub respond(*@body) {
response.status = 200;
response.set-body(@body);
}
my $users = Ultramarine::Model::Users.new(
accounts=>{me=>'sesame'},
);
my $ultramarine_rest = route {
before Ultramarine::Middleware::Authentication.new(:$users);
before Ultramarine::Middleware::Authorisation;
after Ultramarine::Middleware::SetContentType;
get -> 'ping.view' { respond [] }
};
my $ultramarine = route {
body-serializer Ultramarine::Serialiser::XML.new;
delegate <rest *> => $ultramarine_rest;
}
my Cro::Service $um = Cro::HTTP::Server.new(
:host<localhost>,
:port<8080>,
application => $ultramarine,
);
$um.start;
react whenever signal(SIGINT) {
$um.stop;
exit;
}