mirror of
https://github.com/derf/travelynx
synced 2024-11-10 06:54:17 +00:00
parent
5c3a0a562a
commit
b85db3a10d
3 changed files with 67 additions and 22 deletions
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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} );
|
||||
|
|
|
@ -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;">
|
||||
|
|
Loading…
Reference in a new issue