Commit b85db3a1 authored by Birte Kristina Friesel's avatar Birte Kristina Friesel
Browse files

Show web-hook test result immediately after saving it

Closes #12
parent 5c3a0a56
Loading
Loading
Loading
Loading
+16 −2
Original line number Diff line number Diff line
@@ -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;
			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;
		}
+12 −3
Original line number Diff line number Diff line
@@ -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} );
+39 −17
Original line number Diff line number Diff line
@@ -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,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}) {
@@ -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;">