diff options
author | Daniel Friesel <derf@finalrewind.org> | 2019-05-14 20:05:45 +0200 |
---|---|---|
committer | Daniel Friesel <derf@finalrewind.org> | 2019-05-14 20:05:45 +0200 |
commit | b85db3a10df32cb2648607c83d37160ac3ee8691 (patch) | |
tree | 3b20a35c32695270ba5bbbc0c2e1fb041184eb96 | |
parent | 5c3a0a562a2169986f3f91034b10a5e177c7dff5 (diff) |
Show web-hook test result immediately after saving it1.3.3
Closes #12
-rwxr-xr-x | lib/Travelynx.pm | 18 | ||||
-rw-r--r-- | lib/Travelynx/Controller/Account.pm | 15 | ||||
-rw-r--r-- | templates/webhooks.html.ep | 56 |
3 files changed, 67 insertions, 22 deletions
diff --git a/lib/Travelynx.pm b/lib/Travelynx.pm index 3284418..c4a2b53 100755 --- a/lib/Travelynx.pm +++ b/lib/Travelynx.pm @@ -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; } @@ -1080,7 +1083,12 @@ sub startup { } my $ua = $self->ua; - $ua->request_timeout(10); + if ($callback) { + $ua->request_timeout(4); + } + else { + $ua->request_timeout(10); + } $ua->post_p( $hook->{url} => $header => json => $hook_body )->then( sub { @@ -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; } diff --git a/lib/Travelynx/Controller/Account.pm b/lib/Travelynx/Controller/Account.pm index e272eb1..e2bfd39 100644 --- a/lib/Travelynx/Controller/Account.pm +++ b/lib/Travelynx/Controller/Account.pm @@ -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} ); diff --git a/templates/webhooks.html.ep b/templates/webhooks.html.ep index 0bf8cc8..b782823 100644 --- a/templates/webhooks.html.ep +++ b/templates/webhooks.html.ep @@ -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> @@ -31,22 +53,6 @@ %= text_field 'token', id => 'token', class => 'validate', maxlength => 250 <label for="token">Token</label> </div> - <div class="col s12"> - % if ($hook->{latest_run}->epoch) { - Zuletzt ausgeführt <%= $hook->{latest_run}->strftime('am %d.%m.%Y um %H:%M:%S') %><br/> - % if ($hook->{errored}) { - <i class="material-icons left">error</i> - Status: <%= $hook->{output} %> - % } - % else { - <i class="material-icons left">check</i> - Server-Antwort: <%= $hook->{output} %> - % } - % } - % else { - 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 @@ -54,6 +60,22 @@ </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}) { + <i class="material-icons left">error</i> + Status: <%= $hook->{output} %> + % } + % else { + <i class="material-icons left">check</i> + Server-Antwort: <%= $hook->{output} %> + % } + % } + % else { + Noch nicht ausgeführt. + % } + </div> <div class="col s12"> <p>Events werden als JSON POST mit folgender Payload übertragen.</p> <p style="font-family: Monospace;"> |