Loading lib/Travelynx.pm +16 −2 Original line number Diff line number Diff line Loading @@ -1059,12 +1059,15 @@ sub startup { $self->helper( 'run_hook' => sub { my ( $self, $uid, $reason ) = @_; my ( $self, $uid, $reason, $callback ) = @_; my $hook = $self->get_webhook($uid); if ( not $hook->{enabled} or not $hook->{url} =~ m{^ https?:// }x ) { if ($callback) { &$callback(); } return; } Loading @@ -1080,7 +1083,12 @@ sub startup { } my $ua = $self->ua; if ($callback) { $ua->request_timeout(4); } else { $ua->request_timeout(10); } $ua->post_p( $hook->{url} => $header => json => $hook_body )->then( sub { Loading @@ -1093,11 +1101,17 @@ sub startup { $self->mark_hook_status( $uid, $hook->{url}, 1, $tx->result->body ); } if ($callback) { &$callback(); } } )->catch( sub { my ($err) = @_; $self->mark_hook_status( $uid, $hook->{url}, 0, $err ); if ($callback) { &$callback(); } } )->wait; } Loading lib/Travelynx/Controller/Account.pm +12 −3 Original line number Diff line number Diff line Loading @@ -246,9 +246,18 @@ sub webhook { token => $hook->{token}, enabled => $hook->{enabled} ); $self->flash( success => 'webhook' ); $self->redirect_to('account'); $self->run_hook( $self->current_user->{id}, 'ping' ); $self->run_hook( $self->current_user->{id}, 'ping', sub { $self->render( 'webhooks', hook => $self->get_webhook, new_hook => 1 ); } ); return; } else { $self->param( url => $hook->{url} ); Loading templates/webhooks.html.ep +39 −17 Original line number Diff line number Diff line Loading @@ -4,7 +4,29 @@ <h1>Web Hooks</h1> <!-- -H "Authorization: Bearer ${TOKEN}" --> % if (stash('new_hook') and $hook->{enabled}) { <div class="row"> <div class="col s12"> % if ($hook->{errored}) { <div class="card red darken-4"> <div class="card-content white-text"> <span class="card-title">Web-Hook fehlerhaft</span> <p><%= $hook->{output} %></p> </div> </div> % } % else { <div class="card green darken-4"> <div class="card-content white-text"> <span class="card-title">Web-Hook erfolgreich getestet</span> <p><%= $hook->{output} %></p> </div> </div> % } </div> </div> % } <div class="row"> <div class="col s12"> <p> Loading @@ -31,7 +53,14 @@ %= text_field 'token', id => 'token', class => 'validate', maxlength => 250 <label for="token">Token</label> </div> <div class="col s12"> <div class="col s12 center-align"> <button class="btn waves-effect waves-light" type="submit" name="action" value="save"> Speichern <i class="material-icons right">send</i> </button> </div> %= end <div class="col s12" style="margin-top: 1em; margin-bottom: 2em;"> % if ($hook->{latest_run}->epoch) { Zuletzt ausgeführt <%= $hook->{latest_run}->strftime('am %d.%m.%Y um %H:%M:%S') %><br/> % if ($hook->{errored}) { Loading @@ -47,13 +76,6 @@ Noch nicht ausgeführt. % } </div> <div class="col s12 center-align"> <button class="btn waves-effect waves-light" type="submit" name="action" value="save"> Speichern <i class="material-icons right">send</i> </button> </div> %= end <div class="col s12"> <p>Events werden als JSON POST mit folgender Payload übertragen.</p> <p style="font-family: Monospace;"> Loading Loading
lib/Travelynx.pm +16 −2 Original line number Diff line number Diff line Loading @@ -1059,12 +1059,15 @@ sub startup { $self->helper( 'run_hook' => sub { my ( $self, $uid, $reason ) = @_; my ( $self, $uid, $reason, $callback ) = @_; my $hook = $self->get_webhook($uid); if ( not $hook->{enabled} or not $hook->{url} =~ m{^ https?:// }x ) { if ($callback) { &$callback(); } return; } Loading @@ -1080,7 +1083,12 @@ sub startup { } my $ua = $self->ua; if ($callback) { $ua->request_timeout(4); } else { $ua->request_timeout(10); } $ua->post_p( $hook->{url} => $header => json => $hook_body )->then( sub { Loading @@ -1093,11 +1101,17 @@ sub startup { $self->mark_hook_status( $uid, $hook->{url}, 1, $tx->result->body ); } if ($callback) { &$callback(); } } )->catch( sub { my ($err) = @_; $self->mark_hook_status( $uid, $hook->{url}, 0, $err ); if ($callback) { &$callback(); } } )->wait; } Loading
lib/Travelynx/Controller/Account.pm +12 −3 Original line number Diff line number Diff line Loading @@ -246,9 +246,18 @@ sub webhook { token => $hook->{token}, enabled => $hook->{enabled} ); $self->flash( success => 'webhook' ); $self->redirect_to('account'); $self->run_hook( $self->current_user->{id}, 'ping' ); $self->run_hook( $self->current_user->{id}, 'ping', sub { $self->render( 'webhooks', hook => $self->get_webhook, new_hook => 1 ); } ); return; } else { $self->param( url => $hook->{url} ); Loading
templates/webhooks.html.ep +39 −17 Original line number Diff line number Diff line Loading @@ -4,7 +4,29 @@ <h1>Web Hooks</h1> <!-- -H "Authorization: Bearer ${TOKEN}" --> % if (stash('new_hook') and $hook->{enabled}) { <div class="row"> <div class="col s12"> % if ($hook->{errored}) { <div class="card red darken-4"> <div class="card-content white-text"> <span class="card-title">Web-Hook fehlerhaft</span> <p><%= $hook->{output} %></p> </div> </div> % } % else { <div class="card green darken-4"> <div class="card-content white-text"> <span class="card-title">Web-Hook erfolgreich getestet</span> <p><%= $hook->{output} %></p> </div> </div> % } </div> </div> % } <div class="row"> <div class="col s12"> <p> Loading @@ -31,7 +53,14 @@ %= text_field 'token', id => 'token', class => 'validate', maxlength => 250 <label for="token">Token</label> </div> <div class="col s12"> <div class="col s12 center-align"> <button class="btn waves-effect waves-light" type="submit" name="action" value="save"> Speichern <i class="material-icons right">send</i> </button> </div> %= end <div class="col s12" style="margin-top: 1em; margin-bottom: 2em;"> % if ($hook->{latest_run}->epoch) { Zuletzt ausgeführt <%= $hook->{latest_run}->strftime('am %d.%m.%Y um %H:%M:%S') %><br/> % if ($hook->{errored}) { Loading @@ -47,13 +76,6 @@ Noch nicht ausgeführt. % } </div> <div class="col s12 center-align"> <button class="btn waves-effect waves-light" type="submit" name="action" value="save"> Speichern <i class="material-icons right">send</i> </button> </div> %= end <div class="col s12"> <p>Events werden als JSON POST mit folgender Payload übertragen.</p> <p style="font-family: Monospace;"> Loading