Loading lib/Travelynx.pm +19 −70 Original line number Diff line number Diff line Loading @@ -891,75 +891,11 @@ sub startup { } ); $self->helper( 'get_webhook' => sub { my ( $self, $uid ) = @_; $uid //= $self->current_user->{id}; my $res_h = $self->pg->db->select( 'webhooks_str', '*', { user_id => $uid } )->hash; $res_h->{latest_run} = epoch_to_dt( $res_h->{latest_run_ts} ); return $res_h; } ); $self->helper( 'set_webhook' => sub { my ( $self, %opt ) = @_; $opt{uid} //= $self->current_user->{id}; if ( $opt{token} ) { $opt{token} =~ tr{\r\n}{}d; } my $res = $self->pg->db->insert( 'webhooks', { user_id => $opt{uid}, enabled => $opt{enabled}, url => $opt{url}, token => $opt{token} }, { on_conflict => \ '(user_id) do update set enabled = EXCLUDED.enabled, url = EXCLUDED.url, token = EXCLUDED.token, errored = null, latest_run = null, output = null' } ); } ); $self->helper( 'mark_hook_status' => sub { my ( $self, $uid, $url, $success, $text ) = @_; if ( length($text) > 1000 ) { $text = substr( $text, 0, 1000 ) . '…'; } $self->pg->db->update( 'webhooks', { errored => $success ? 0 : 1, latest_run => DateTime->now( time_zone => 'Europe/Berlin' ), output => $text, }, { user_id => $uid, url => $url } ); } ); $self->helper( 'run_hook' => sub { my ( $self, $uid, $reason, $callback ) = @_; my $hook = $self->get_webhook($uid); my $hook = $self->users->get_webhook( uid => $uid ); if ( not $hook->{enabled} or not $hook->{url} =~ m{^ https?:// }x ) { Loading Loading @@ -994,12 +930,20 @@ sub startup { sub { my ($tx) = @_; if ( my $err = $tx->error ) { $self->mark_hook_status( $uid, $hook->{url}, 0, "HTTP $err->{code} $err->{message}" ); $self->users->update_webhook_status( uid => $uid, url => $hook->{url}, success => 0, text => "HTTP $err->{code} $err->{message}" ); } else { $self->mark_hook_status( $uid, $hook->{url}, 1, $tx->result->body ); $self->users->update_webhook_status( uid => $uid, url => $hook->{url}, success => 1, text => $tx->result->body ); } if ($callback) { &$callback(); Loading @@ -1009,7 +953,12 @@ sub startup { )->catch( sub { my ($err) = @_; $self->mark_hook_status( $uid, $hook->{url}, 0, $err ); $self->users->update_webhook_status( uid => $uid, url => $hook->{url}, success => 0, text => $err ); if ($callback) { &$callback(); } Loading lib/Travelynx/Controller/Account.pm +6 −3 Original line number Diff line number Diff line Loading @@ -378,13 +378,16 @@ sub insight { sub webhook { my ($self) = @_; my $hook = $self->get_webhook; my $uid = $self->current_user->{id}; my $hook = $self->users->get_webhook( uid => $uid ); if ( $self->param('action') and $self->param('action') eq 'save' ) { $hook->{url} = $self->param('url'); $hook->{token} = $self->param('token'); $hook->{enabled} = $self->param('enabled') // 0; $self->set_webhook( $self->users->set_webhook( uid => $uid, url => $hook->{url}, token => $hook->{token}, enabled => $hook->{enabled} Loading @@ -395,7 +398,7 @@ sub webhook { sub { $self->render( 'webhooks', hook => $self->get_webhook, hook => $self->users->get_webhook( uid => $uid ), new_hook => 1 ); } Loading lib/Travelynx/Model/Users.pm +66 −0 Original line number Diff line number Diff line Loading @@ -478,4 +478,70 @@ sub use_history { } } sub get_webhook { my ( $self, %opt ) = @_; my $db = $opt{db} // $self->{pg}->db; my $uid = $opt{uid}; my $res_h = $db->select( 'webhooks_str', '*', { user_id => $uid } )->hash; $res_h->{latest_run} = DateTime->from_epoch( epoch => $res_h->{latest_run_ts} // 0, time_zone => 'Europe/Berlin', locale => 'de-DE', ); return $res_h; } sub set_webhook { my ( $self, %opt ) = @_; my $db = $opt{db} // $self->{pg}->db; if ( $opt{token} ) { $opt{token} =~ tr{\r\n}{}d; } my $res = $db->insert( 'webhooks', { user_id => $opt{uid}, enabled => $opt{enabled}, url => $opt{url}, token => $opt{token} }, { on_conflict => \ '(user_id) do update set enabled = EXCLUDED.enabled, url = EXCLUDED.url, token = EXCLUDED.token, errored = null, latest_run = null, output = null' } ); } sub update_webhook_status { my ( $self, %opt ) = @_; my $db = $opt{db} // $self->{pg}->db; my $uid = $opt{uid}; my $url = $opt{url}; my $success = $opt{success}; my $text = $opt{text}; if ( length($text) > 1000 ) { $text = substr( $text, 0, 1000 ) . '…'; } $db->update( 'webhooks', { errored => $success ? 0 : 1, latest_run => DateTime->now( time_zone => 'Europe/Berlin' ), output => $text, }, { user_id => $uid, url => $url } ); } 1; templates/account.html.ep +1 −1 Original line number Diff line number Diff line Loading @@ -35,7 +35,7 @@ % } % my $acc = current_user(); % my $hook = get_webhook(); % my $hook = users->get_webhook(uid => $acc->{id}); % my $traewelling = traewelling->get(uid => $acc->{id}); % my $use_history = users->use_history(uid => $acc->{id}); <div class="row"> Loading Loading
lib/Travelynx.pm +19 −70 Original line number Diff line number Diff line Loading @@ -891,75 +891,11 @@ sub startup { } ); $self->helper( 'get_webhook' => sub { my ( $self, $uid ) = @_; $uid //= $self->current_user->{id}; my $res_h = $self->pg->db->select( 'webhooks_str', '*', { user_id => $uid } )->hash; $res_h->{latest_run} = epoch_to_dt( $res_h->{latest_run_ts} ); return $res_h; } ); $self->helper( 'set_webhook' => sub { my ( $self, %opt ) = @_; $opt{uid} //= $self->current_user->{id}; if ( $opt{token} ) { $opt{token} =~ tr{\r\n}{}d; } my $res = $self->pg->db->insert( 'webhooks', { user_id => $opt{uid}, enabled => $opt{enabled}, url => $opt{url}, token => $opt{token} }, { on_conflict => \ '(user_id) do update set enabled = EXCLUDED.enabled, url = EXCLUDED.url, token = EXCLUDED.token, errored = null, latest_run = null, output = null' } ); } ); $self->helper( 'mark_hook_status' => sub { my ( $self, $uid, $url, $success, $text ) = @_; if ( length($text) > 1000 ) { $text = substr( $text, 0, 1000 ) . '…'; } $self->pg->db->update( 'webhooks', { errored => $success ? 0 : 1, latest_run => DateTime->now( time_zone => 'Europe/Berlin' ), output => $text, }, { user_id => $uid, url => $url } ); } ); $self->helper( 'run_hook' => sub { my ( $self, $uid, $reason, $callback ) = @_; my $hook = $self->get_webhook($uid); my $hook = $self->users->get_webhook( uid => $uid ); if ( not $hook->{enabled} or not $hook->{url} =~ m{^ https?:// }x ) { Loading Loading @@ -994,12 +930,20 @@ sub startup { sub { my ($tx) = @_; if ( my $err = $tx->error ) { $self->mark_hook_status( $uid, $hook->{url}, 0, "HTTP $err->{code} $err->{message}" ); $self->users->update_webhook_status( uid => $uid, url => $hook->{url}, success => 0, text => "HTTP $err->{code} $err->{message}" ); } else { $self->mark_hook_status( $uid, $hook->{url}, 1, $tx->result->body ); $self->users->update_webhook_status( uid => $uid, url => $hook->{url}, success => 1, text => $tx->result->body ); } if ($callback) { &$callback(); Loading @@ -1009,7 +953,12 @@ sub startup { )->catch( sub { my ($err) = @_; $self->mark_hook_status( $uid, $hook->{url}, 0, $err ); $self->users->update_webhook_status( uid => $uid, url => $hook->{url}, success => 0, text => $err ); if ($callback) { &$callback(); } Loading
lib/Travelynx/Controller/Account.pm +6 −3 Original line number Diff line number Diff line Loading @@ -378,13 +378,16 @@ sub insight { sub webhook { my ($self) = @_; my $hook = $self->get_webhook; my $uid = $self->current_user->{id}; my $hook = $self->users->get_webhook( uid => $uid ); if ( $self->param('action') and $self->param('action') eq 'save' ) { $hook->{url} = $self->param('url'); $hook->{token} = $self->param('token'); $hook->{enabled} = $self->param('enabled') // 0; $self->set_webhook( $self->users->set_webhook( uid => $uid, url => $hook->{url}, token => $hook->{token}, enabled => $hook->{enabled} Loading @@ -395,7 +398,7 @@ sub webhook { sub { $self->render( 'webhooks', hook => $self->get_webhook, hook => $self->users->get_webhook( uid => $uid ), new_hook => 1 ); } Loading
lib/Travelynx/Model/Users.pm +66 −0 Original line number Diff line number Diff line Loading @@ -478,4 +478,70 @@ sub use_history { } } sub get_webhook { my ( $self, %opt ) = @_; my $db = $opt{db} // $self->{pg}->db; my $uid = $opt{uid}; my $res_h = $db->select( 'webhooks_str', '*', { user_id => $uid } )->hash; $res_h->{latest_run} = DateTime->from_epoch( epoch => $res_h->{latest_run_ts} // 0, time_zone => 'Europe/Berlin', locale => 'de-DE', ); return $res_h; } sub set_webhook { my ( $self, %opt ) = @_; my $db = $opt{db} // $self->{pg}->db; if ( $opt{token} ) { $opt{token} =~ tr{\r\n}{}d; } my $res = $db->insert( 'webhooks', { user_id => $opt{uid}, enabled => $opt{enabled}, url => $opt{url}, token => $opt{token} }, { on_conflict => \ '(user_id) do update set enabled = EXCLUDED.enabled, url = EXCLUDED.url, token = EXCLUDED.token, errored = null, latest_run = null, output = null' } ); } sub update_webhook_status { my ( $self, %opt ) = @_; my $db = $opt{db} // $self->{pg}->db; my $uid = $opt{uid}; my $url = $opt{url}; my $success = $opt{success}; my $text = $opt{text}; if ( length($text) > 1000 ) { $text = substr( $text, 0, 1000 ) . '…'; } $db->update( 'webhooks', { errored => $success ? 0 : 1, latest_run => DateTime->now( time_zone => 'Europe/Berlin' ), output => $text, }, { user_id => $uid, url => $url } ); } 1;
templates/account.html.ep +1 −1 Original line number Diff line number Diff line Loading @@ -35,7 +35,7 @@ % } % my $acc = current_user(); % my $hook = get_webhook(); % my $hook = users->get_webhook(uid => $acc->{id}); % my $traewelling = traewelling->get(uid => $acc->{id}); % my $use_history = users->use_history(uid => $acc->{id}); <div class="row"> Loading