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;"> | 
