--- /dev/null
+=head1 NAME
+
+FS::msg_template::http example server.
+
+=head1 DESCRIPTION
+
+This is an incredibly crude Mojo web service for demonstrating how to talk
+to the HTTP customer messaging interface in Freeside.
+
+It implements an endpoint for the "password reset" messaging case which
+creates a simple password reset message using some template variables,
+and a "send" endpoint that just delivers the message by sendmail. The
+configuration to use this as your password reset handler would be:
+
+prepare_url = 'http://localhost:3000/prepare/password_reset'
+send_url = 'http://localhost:3000/send'
+No username, no password, no additional content.
+
+=cut
+
+use Mojolicious::Lite;
+use Mojo::JSON qw(decode_json encode_json);
+use Email::Simple;
+use Email::Simple::Creator;
+use Email::Sender::Simple qw(sendmail);
+
+post '/prepare/password_reset' => sub {
+ my $self = shift;
+
+ my $json_data = $self->req->body;
+ #print STDERR $json_data;
+ my $input = decode_json($json_data);
+ if ( $input->{username} ) {
+ my $output = {
+ 'to' => $input->{invoicing_email},
+ 'subject' => "Password reset for $input->{username}",
+ 'body' => "
+To complete your $input->{company_name} password reset, please go to
+$input->{selfservice_server_base_url}/selfservice.cgi?action=process_forgot_password;session_id=$input->{session_id}
+
+This link will expire in 24 hours.",
+ };
+
+ return $self->render( json => $output );
+
+ } else {
+
+ return $self->render( text => 'Username required', status => 500 );
+
+ }
+};
+
+post '/send' => sub {
+ my $self = shift;
+
+ my $json_data = $self->req->body;
+ my $input = decode_json($json_data);
+ my $email = Email::Simple->create(
+ header => [
+ From => $ENV{USER}.'@localhost',
+ To => $input->{to},
+ Subject => $input->{subject},
+ ],
+ body => $input->{body},
+ );
+ local $@;
+ eval { sendmail($email) };
+ if ( $@ ) {
+ return $self->render( text => $@->message, status => 500 );
+ } else {
+ return $self->render( text => '' );
+ }
+};
+
+app->start;
+