summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2019-05-14 20:05:45 +0200
committerDaniel Friesel <derf@finalrewind.org>2019-05-14 20:05:45 +0200
commitb85db3a10df32cb2648607c83d37160ac3ee8691 (patch)
tree3b20a35c32695270ba5bbbc0c2e1fb041184eb96
parent5c3a0a562a2169986f3f91034b10a5e177c7dff5 (diff)
Show web-hook test result immediately after saving it1.3.3
Closes #12
-rwxr-xr-xlib/Travelynx.pm18
-rw-r--r--lib/Travelynx/Controller/Account.pm15
-rw-r--r--templates/webhooks.html.ep56
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;">