<?php require_once($INC . "/util.inc.php"); require_once($INC . "/log.inc.php"); require_once($INC . "/sql.inc.php"); require_once($INC . "/prof.inc.php"); require_once($INC . "/wh/http.inc.php"); require_once($INC . "/wh/cloud.inc.php"); require_once($INC . "/wh/lambda.inc.php"); require_once($INC . "/wh/build.inc.php"); $rg_wh_functions = array( 'wh_send' => 'rg_wh_send', ); rg_event_register_functions($rg_wh_functions); function rg_wh_send($db, $ev) { rg_log_ml('wh_send: ev: ' . print_r($ev, TRUE)); $ret = array(); $x = $ev; $x['category'] = 'wh_http_send'; $ret[] = $x; $x = $ev; $x['category'] = 'wh_lambda_send'; $ret[] = $x; // we add a cloud/build event, only for pushes if (strcmp($ev['wh_event'], 'P') == 0) { $x = $ev; $x['category'] = 'wh_cloud_send'; $ret[] = $x; $x = $ev; $x['category'] = 'wh_build_send'; $ret[] = $x; } return $ret; } /* * High level function to list the webhooks */ function rg_wh_list_high_level($db, $rg, $paras) { rg_prof_start('wh_list_high_level'); rg_log_enter('wh_list_high_level'); $ret = ''; $errmsg = array(); $delete = rg_var_uint('delete'); while ($delete == 1) { if (!rg_valid_referer()) { $errmsg[] = 'invalid referer; try again'; break; } if (!rg_token_valid($db, $rg, 'wh_list', FALSE)) { $errmsg[] = 'invalid token; try again.'; break; } $list = rg_var_str("delete_list"); $r = rg_wh_remove($db, $rg['login_ui']['uid'], $list); if ($r['ok'] !== 1) { $errmsg[] = 'cannot delete: ' . rg_wh_error(); break; } $ret .= rg_template('user/settings/wh/delete_ok.html', $rg, TRUE /*xss*/); break; } if (!empty($errmsg)) { $rg['HTML:errmsg'] = rg_template_errmsg($errmsg); $ret .= rg_template('user/settings/wh/delete_err.html', $rg, TRUE /*xss*/); } $r = rg_wh_list($db, $rg['login_ui']['uid']); if ($r['ok'] !== 1) { $rg['errmsg'] = rg_wh_error(); $ret .= rg_template('user/settings/wh/list_err.html', $rg, TRUE /*xss*/); } else { rg_wh_cosmetic($r['list']); rg_log_ml('DEBUG: wh_list_high_level: r[list]: ' . print_r($r['list'], TRUE)); $rg['rg_form_token'] = rg_token_get($db, $rg, 'wh_list'); $ret .= rg_template_table('user/settings/wh/list', $r['list'], $rg); } rg_log_exit(); rg_prof_end('wh_list_high_level'); return $ret; } /* * High level function to add/edit a web hook */ function rg_wh_add_high_level($db, $rg, $op, $paras) { rg_prof_start('wh_add_high_level'); rg_log_enter('wh_add_high_level op=' . $op); rg_log('DEBUG: paras:' . rg_array2string($paras)); $ret = ''; $errmsg = array(); $show_form = TRUE; $rg['wh'] = array(); if (strcmp($op, 'add') == 0) { $rg['wh']['htype'] = array_shift($paras); $rg['wh']['hsubtype'] = array_shift($paras); $rg['wh']['id'] = 0; if (!rg_wh_valid($rg['wh']['htype'])) $rg['wh']['htype'] = ''; if (empty($rg['wh']['htype'])) { $ret .= rg_wh_htypes($rg); $show_form = FALSE; } } else { // edit $rg['wh']['htype'] = rg_var_str('wh::htype'); $rg['wh']['hsubtype'] = rg_var_str('wh::hsubtype'); if (isset($paras[0])) $rg['wh']['id'] = intval($paras[0]); else $rg['wh']['id'] = 0; } $doit = rg_var_uint('doit'); while ($doit == 1) { rg_wh_fill_vars($rg); $r = rg_wh_validate_vars($rg, $errmsg); if ($r !== TRUE) break; if (!rg_valid_referer()) { $errmsg[] = 'invalid referer; try again'; break; } if (!rg_token_valid($db, $rg, 'wh_add', FALSE)) { $errmsg[] = 'invalid token; try again.'; break; } $r = rg_wh_add($db, $rg['login_ui']['uid'], $rg['wh']); if ($r['ok'] !== 1) { $errmsg[] = rg_wh_error(); break; } $ret .= rg_template('user/settings/wh/edit_ok.html', $rg, TRUE /*xss*/); $show_form = FALSE; break; } $hints = array(); if ($show_form) { if ($doit == 0) { if (strcmp($op, 'add') != 0) { // edit $r = rg_wh_list($db, $rg['login_ui']['uid']); if ($r['ok'] != 1) { $errmsg[] = 'cannot load webhook info; try again later'; } else if (!isset($r['list'][$rg['wh']['id']])) { $errmsg[] = 'invalid webhook id'; } else { $rg['wh'] = $r['list'][$rg['wh']['id']]; } } rg_wh_default_paras($rg); } rg_wh_add_form($db, $rg); $hints[]['HTML:hint'] = rg_template('user/settings/wh/hints_htype.html', $rg, TRUE /*xss*/); rg_wh_fill_hints($rg, $hints); $rg['HTML:errmsg'] = rg_template_errmsg($errmsg); $rg['rg_form_token'] = rg_token_get($db, $rg, 'wh_add'); rg_log_ml('DEBUG: BEFORE FORM: wh[idata]: ' . print_r($rg['wh']['idata'], TRUE)); $ret .= rg_template('user/settings/wh/add_edit.html', $rg, TRUE /*xss*/); } else { $hints[]['HTML:hint'] = rg_template('user/settings/wh/hints.html', $rg, TRUE /*xss*/); } $ret .= rg_template_table("hints/list", $hints, $rg); rg_log_exit(); rg_prof_end('wh_add_high_level'); return $ret; } /* * Main HL function for webhooks */ function rg_wh_high_level($db, &$rg, $paras) { rg_prof_start('wh_high_level'); rg_log_enter('wh_high_level'); $ret = ''; while (1) { $op = empty($paras) ? 'list' : array_shift($paras); $rg['menu']['wh'][$op] = 1; $rg['HTML:menu_level2'] = rg_template('user/settings/wh/menu.html', $rg, TRUE /*xss*/); switch ($op) { case 'add': case 'edit': $ret .= rg_wh_add_high_level($db, $rg, $op, $paras); break; default: $ret .= rg_wh_list_high_level($db, $rg, $paras); break; } break; } rg_log_exit(); rg_prof_end('wh_high_level'); return $ret; }