<?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"); /* * 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; } $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'); $rg['HTML:errmsg'] = rg_template_errmsg($errmsg); $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, $paras) { rg_prof_start('wh_add_high_level'); rg_log_enter('wh_add_high_level'); rg_log('DEBUG: paras:' . rg_array2string($paras)); $ret = ''; $errmsg = array(); $show_form = TRUE; $rg['wh'] = array(); $rg['wh']['htype'] = rg_var_str('wh::htype'); // We need the id in any case if (isset($paras[0])) { $rg['wh']['id'] = intval($paras[0]); } else { $rg['wh']['id'] = rg_var_str('wh::id'); if (empty($rg['wh']['htype'])) { $ret .= rg_wh_htypes($rg); $show_form = FALSE; } } $add = rg_var_uint('add'); while ($add == 1) { $rg['wh']['repo_id'] = rg_var_uint('wh::repo_id'); $rg['wh']['itime'] = time(); $rg['wh']['events'] = rg_var_a2s('wh::events'); // TODO $rg['wh']['url'] = rg_var_str('wh::url'); $rg['wh']['add_ip'] = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : ''; $rg['wh']['description'] = rg_var_str('wh::description'); $rg['wh']['opaque'] = rg_var_str('wh::opaque'); $rg['wh']['key'] = rg_var_str('wh::key'); 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; } if ($show_form) { // defaults if ($add == 0) { // TODO: if edit, load data based on id if ($rg['wh']['id'] > 0) { $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']]; } } else { // here is clear an add $rg['wh']['id'] = 0; $rg['wh']['events'] = ''; $rg['wh']['url'] = ''; $rg['wh']['description'] = ''; $rg['wh']['opaque'] = ''; $rg['wh']['key'] = ''; rg_wh_default_paras($rg); } } rg_wh_add_form($rg); $hints = array(); $hints[]['HTML:hint'] = rg_template('user/settings/wh/hints.html', $rg, TRUE /*xss*/); rg_wh_fill_hints($rg, $hints); $rg['HTML:hints'] = rg_template_table("hints/list", $hints, $rg); $rg['HTML:errmsg'] = rg_template_errmsg($errmsg); $rg['HTML:check_events'] = rg_wh_check_events($rg['wh']['events']); $rg['rg_form_token'] = rg_token_get($db, $rg, 'wh_add'); $ret .= rg_template('user/settings/wh/add_edit.html', $rg, TRUE /*xss*/); } 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; $ret .= rg_template('user/settings/wh/menu.html', $rg, TRUE /*xss*/); switch ($op) { case 'add': case 'edit': $ret .= rg_wh_add_high_level($db, $rg, $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; } ?>