| File TODO changed (mode: 100644) (index ae20e25..a6656d1) |
| 1 |
1 |
== Where I stopped last time == |
== Where I stopped last time == |
| 2 |
|
[ ] wh: where do I specify the repo_id?! |
|
| 3 |
|
[ ] wh: repo/branch/tag regex |
|
| 4 |
|
[ ] wh: Add a regex filter for branches! |
|
| 5 |
|
[ ] wh: unit test: events |
|
| 6 |
|
[ ] wh: id of the hook appears as root-id, but also as root-info-id! |
|
| 7 |
2 |
[ ] |
[ ] |
| 8 |
3 |
|
|
| 9 |
4 |
== BEFORE NEXT RELEASE == |
== BEFORE NEXT RELEASE == |
|
5 |
|
[ ] wh: 2 members in a team, both must push to S3 - it is possible |
|
6 |
|
with only one hook? If the other user can push, why not let her/him |
|
7 |
|
execute the hook? The problem is that I have no link between the repo. |
|
8 |
|
Maybe go to the repo and link the hooks? what about 'repo create'? |
|
9 |
|
[ ] docker: document somewhere that is available and how to use it. |
|
10 |
|
[ ] wh: Add a link to a "movie" explaining how with one hook you can cover both |
|
11 |
|
production and evaluation deployments. |
|
12 |
|
[ ] wh: notify user when a hook fails. |
| 10 |
13 |
[ ] wh: trigger on assigning a tag? For example, trigger on |
[ ] wh: trigger on assigning a tag? For example, trigger on |
| 11 |
14 |
adding a tag (regex match) to a ref (regex match). |
adding a tag (regex match) to a ref (regex match). |
| 12 |
15 |
I do have two matches here! |
I do have two matches here! |
| |
| 34 |
37 |
[ ] I do not have rights to del_undel bugs, but I am still getting the |
[ ] I do not have rights to del_undel bugs, but I am still getting the |
| 35 |
38 |
token (token_get). Not good. |
token (token_get). Not good. |
| 36 |
39 |
[ ] Plan for webhooks: |
[ ] Plan for webhooks: |
| 37 |
|
If we do 'include', take care of type to be aonly a-bA-B0-9_! |
|
|
40 |
|
If we do 'include', take care of type to be only a-bA-B0-9_! |
| 38 |
41 |
[ ] Do not show 'webhooks' menu if the login user has no rights. |
[ ] Do not show 'webhooks' menu if the login user has no rights. |
| 39 |
|
This is for when we will allow webhooks per repo. |
|
|
42 |
|
This is for when we will allow webhooks per repo. If. |
| 40 |
43 |
[ ] Add labels for users and for repos/comments/etc.? [Also] private ones? |
[ ] Add labels for users and for repos/comments/etc.? [Also] private ones? |
| 41 |
44 |
[ ] last events: gravatar |
[ ] last events: gravatar |
| 42 |
45 |
[ ] last events: 2015-12-27 09:42 n/a Reference refs/heads/master created (290e4f7a70640d79836b3298c47b913484da24de) |
[ ] last events: 2015-12-27 09:42 n/a Reference refs/heads/master created (290e4f7a70640d79836b3298c47b913484da24de) |
| |
| 44 |
47 |
Should we just say so? |
Should we just say so? |
| 45 |
48 |
[ ] rights: store '*' as equivalent for "all rights". Else, when we will add |
[ ] rights: store '*' as equivalent for "all rights". Else, when we will add |
| 46 |
49 |
more rights, they will not be automatically added to the list. |
more rights, they will not be automatically added to the list. |
| 47 |
|
[ ] http://r1i:9000/op/settings/wh looks wrong! |
|
| 48 |
50 |
[ ] "Please login first"/"Login form" are now justified. |
[ ] "Please login first"/"Login form" are now justified. |
| 49 |
51 |
[ ] Use rg_repo_has_rights. |
[ ] Use rg_repo_has_rights. |
| 50 |
52 |
[ ] Do we stop event processing when we change the structure? |
[ ] Do we stop event processing when we change the structure? |
| |
| 73 |
75 |
http://thread.gmane.org/gmane.linux.network/390690 |
http://thread.gmane.org/gmane.linux.network/390690 |
| 74 |
76 |
[ ] si inca o chestie foarte utila ar fi sa pot accesa fisierul raw, fara line |
[ ] si inca o chestie foarte utila ar fi sa pot accesa fisierul raw, fara line |
| 75 |
77 |
number, pentru a putea da copy la mai multe linii deodata (Gabi B) |
number, pentru a putea da copy la mai multe linii deodata (Gabi B) |
|
78 |
|
Asta plus "Download". |
| 76 |
79 |
[ ] o sugestie ar mai fi ca atunci cand sunt deja pe un fisier sa pot accesa |
[ ] o sugestie ar mai fi ca atunci cand sunt deja pe un fisier sa pot accesa |
| 77 |
80 |
istoricul lui (Gabi) |
istoricul lui (Gabi) |
| 78 |
81 |
[ ] tree: I have no "UP" folder or the list of dirs with links behind. |
[ ] tree: I have no "UP" folder or the list of dirs with links behind. |
| 79 |
|
[ ] If a repo changes from public to private or the other way around, |
|
| 80 |
|
I must invalidate the rights cache. |
|
| 81 |
82 |
[ ] rights: if a user has 'admin/give_rights' rights, allow push? |
[ ] rights: if a user has 'admin/give_rights' rights, allow push? |
| 82 |
83 |
[ ] wh: add prios - we may want to have a hook for storing in s3 and a hook for |
[ ] wh: add prios - we may want to have a hook for storing in s3 and a hook for |
| 83 |
84 |
deployment. Hm. |
deployment. Hm. |
| |
| 87 |
88 |
[ ] amazon: allow deploy to multiple regions |
[ ] amazon: allow deploy to multiple regions |
| 88 |
89 |
[ ] amazon: is clear that i have to use a role and a custom bucket |
[ ] amazon: is clear that i have to use a role and a custom bucket |
| 89 |
90 |
Still investigating how to trigger a CodeDeploy task that will fetch |
Still investigating how to trigger a CodeDeploy task that will fetch |
| 90 |
|
from repo and do the deploy. Not use if is possible. |
|
|
91 |
|
from repo and do the deploy. Not use if is possible. |
| 91 |
92 |
[ ] 2fa: m.google.com/authenticator - also for BlackBerry/iPhone/iPad |
[ ] 2fa: m.google.com/authenticator - also for BlackBerry/iPhone/iPad |
| 92 |
|
[ ] At least refs rights are not reorder by priority! Bad! |
|
| 93 |
93 |
[ ] When editing rights, it is not clear that we are in edit mode! |
[ ] When editing rights, it is not clear that we are in edit mode! |
| 94 |
94 |
[ ] Markdown (Gabi B) |
[ ] Markdown (Gabi B) |
| 95 |
95 |
[ ] Editarea bug-urilor pare ca nu merge |
[ ] Editarea bug-urilor pare ca nu merge |
| File inc/wh/cloud.inc.php changed (mode: 100644) (index 5c43e4b..1b11661) |
| ... |
... |
function rg_wh_cloud_send_one($db, $event) |
| 25 |
25 |
$ret = FALSE; |
$ret = FALSE; |
| 26 |
26 |
|
|
| 27 |
27 |
$wh = &$event['wh']; |
$wh = &$event['wh']; |
| 28 |
|
$info = &$wh['info']; |
|
| 29 |
28 |
|
|
| 30 |
29 |
$xid = rg_id(8); |
$xid = rg_id(8); |
| 31 |
30 |
$f = 'wh-' . $event['ui']['uid'] . '-' . $wh['id'] . '-' . $xid . '.zip'; |
$f = 'wh-' . $event['ui']['uid'] . '-' . $wh['id'] . '-' . $xid . '.zip'; |
| |
| ... |
... |
function rg_wh_cloud_send_one($db, $event) |
| 48 |
47 |
rg_wh_replace_tags($event); |
rg_wh_replace_tags($event); |
| 49 |
48 |
|
|
| 50 |
49 |
// store to s3 |
// store to s3 |
| 51 |
|
$info['idata']['content_type'] = 'application/zip'; |
|
|
50 |
|
$wh['idata']['content_type'] = 'application/zip'; |
| 52 |
51 |
// we need to copy 'flags' because we pass idata |
// we need to copy 'flags' because we pass idata |
| 53 |
|
$info['idata']['flags'] = $info['flags']; |
|
|
52 |
|
$wh['idata']['flags'] = $wh['flags']; |
| 54 |
53 |
$c = @file_get_contents($path); |
$c = @file_get_contents($path); |
| 55 |
54 |
if ($c === FALSE) { |
if ($c === FALSE) { |
| 56 |
55 |
$last_output .= 'missing archive; very strange!'; |
$last_output .= 'missing archive; very strange!'; |
| 57 |
56 |
break; |
break; |
| 58 |
57 |
} |
} |
| 59 |
|
$r = rg_amazon_s3_put_object($info['idata'], $c); |
|
|
58 |
|
$r = rg_amazon_s3_put_object($wh['idata'], $c); |
| 60 |
59 |
if ($r['ok'] != 1) { |
if ($r['ok'] != 1) { |
| 61 |
60 |
$last_output .= $r['error']; |
$last_output .= $r['error']; |
| 62 |
61 |
break; |
break; |
| |
| ... |
... |
function rg_wh_cloud_send_one($db, $event) |
| 64 |
63 |
$last_output .= 'S3: ' . $r['answer']; |
$last_output .= 'S3: ' . $r['answer']; |
| 65 |
64 |
|
|
| 66 |
65 |
// c = skip the CodeDeploy step |
// c = skip the CodeDeploy step |
| 67 |
|
if (!strchr($info['flags'], 'c')) { |
|
|
66 |
|
if (!strchr($wh['flags'], 'c')) { |
| 68 |
67 |
// Do the code deploy |
// Do the code deploy |
| 69 |
|
$r = rg_amazon_codedeploy_create($info['idata']); |
|
|
68 |
|
$r = rg_amazon_codedeploy_create($wh['idata']); |
| 70 |
69 |
if ($r['ok'] != 1) { |
if ($r['ok'] != 1) { |
| 71 |
70 |
$last_output .= $r['error']; |
$last_output .= $r['error']; |
| 72 |
71 |
break; |
break; |
| |
| ... |
... |
function rg_wh_cloud_send_one($db, $event) |
| 83 |
82 |
rg_wh_set_last_output($db, $event['ui']['uid'], $wh['id'], |
rg_wh_set_last_output($db, $event['ui']['uid'], $wh['id'], |
| 84 |
83 |
substr($last_output, 0, 4096)); |
substr($last_output, 0, 4096)); |
| 85 |
84 |
|
|
| 86 |
|
if ($info['idata']['debug'] == 1) |
|
|
85 |
|
if ($wh['idata']['debug'] == 1) |
| 87 |
86 |
rg_cache_set('DEBUG::' . $event['ui']['uid'] |
rg_cache_set('DEBUG::' . $event['ui']['uid'] |
| 88 |
87 |
. '::webhooks::' . $wh['id'], $last_output, |
. '::webhooks::' . $wh['id'], $last_output, |
| 89 |
88 |
RG_SOCKET_NO_WAIT); |
RG_SOCKET_NO_WAIT); |
| |
| ... |
... |
function rg_wh_cloud_send($db, $event) |
| 107 |
106 |
if ($r['ok'] != 1) |
if ($r['ok'] != 1) |
| 108 |
107 |
return FALSE; |
return FALSE; |
| 109 |
108 |
|
|
| 110 |
|
// Filter them by repo_id |
|
| 111 |
|
foreach ($r['list'] as $id => $info) { |
|
| 112 |
|
if (($info['repo_id'] > 0) |
|
| 113 |
|
&& ($event['repo_id'] != $info['repo_id'])) { |
|
| 114 |
|
rg_log('hook is not for this repo'); |
|
|
109 |
|
// Filter |
|
110 |
|
foreach ($r['list'] as $id => $wh) { |
|
111 |
|
if (!rg_repo_compare_refs($wh['repo'], $event['ri']['name'])) { |
|
112 |
|
rg_log('hook is not for this ref'); |
| 115 |
113 |
continue; |
continue; |
| 116 |
114 |
} |
} |
| 117 |
115 |
|
|
| 118 |
|
if (strcmp($info['htype'], 'cloud') != 0) |
|
|
116 |
|
if (!rg_repo_compare_refs($wh['refname'], $event['refname'])) { |
|
117 |
|
rg_log('hook is not for this ref'); |
| 119 |
118 |
continue; |
continue; |
|
119 |
|
} |
| 120 |
120 |
|
|
| 121 |
|
// Diabled? |
|
| 122 |
|
if (strchr($info['flags'], 'D')) |
|
|
121 |
|
if (strcmp($wh['htype'], 'cloud') != 0) |
| 123 |
122 |
continue; |
continue; |
| 124 |
123 |
|
|
| 125 |
|
$wh = array(); |
|
| 126 |
|
$wh['id'] = $id; |
|
| 127 |
|
$wh['info'] = $info; |
|
|
124 |
|
// Diabled? |
|
125 |
|
if (strchr($wh['flags'], 'D')) |
|
126 |
|
continue; |
| 128 |
127 |
|
|
| 129 |
128 |
$x = $event; |
$x = $event; |
| 130 |
129 |
$x['category'] = 20001; |
$x['category'] = 20001; |
| 131 |
130 |
$x['wh'] = $wh; |
$x['wh'] = $wh; |
|
131 |
|
$x['debug'] = $wh['idata']['debug']; |
| 132 |
132 |
$ret[] = $x; |
$ret[] = $x; |
| 133 |
133 |
} |
} |
| 134 |
134 |
|
|
| File inc/wh/core.inc.php changed (mode: 100644) (index 1b6ec6b..6c7102a) |
| ... |
... |
function rg_wh_sort_helper($a, $b) |
| 218 |
218 |
|
|
| 219 |
219 |
/* |
/* |
| 220 |
220 |
* Returns a list of webhooks associated with a user |
* Returns a list of webhooks associated with a user |
| 221 |
|
* @repo_id may be 0 => hooks installed on user account |
|
| 222 |
221 |
*/ |
*/ |
| 223 |
222 |
function rg_wh_list($db, $uid) |
function rg_wh_list($db, $uid) |
| 224 |
223 |
{ |
{ |
| |
| ... |
... |
function rg_wh_add($db, $uid, $data) |
| 292 |
291 |
|
|
| 293 |
292 |
if ($data['id'] == 0) { |
if ($data['id'] == 0) { |
| 294 |
293 |
$data['last_output'] = ''; |
$data['last_output'] = ''; |
| 295 |
|
$sql = 'INSERT INTO webhooks (uid, repo_id, itime' |
|
| 296 |
|
. ', htype, flags' |
|
|
294 |
|
$sql = 'INSERT INTO webhooks (uid, itime' |
|
295 |
|
. ', htype, flags, repo, refname' |
| 297 |
296 |
. ', add_ip, description, idata)' |
. ', add_ip, description, idata)' |
| 298 |
|
. ' VALUES (@@uid@@, @@repo_id@@, @@itime@@' |
|
| 299 |
|
. ', @@htype@@, @@flags@@, @@add_ip@@' |
|
|
297 |
|
. ' VALUES (@@uid@@, @@itime@@' |
|
298 |
|
. ', @@htype@@, @@flags@@, @@repo@@' |
|
299 |
|
. ', @@refname@@' |
|
300 |
|
. ', @@add_ip@@' |
| 300 |
301 |
. ', @@description@@, @@idata@@)' |
. ', @@description@@, @@idata@@)' |
| 301 |
302 |
. ' RETURNING id'; |
. ' RETURNING id'; |
| 302 |
303 |
} else { |
} else { |
| 303 |
304 |
$sql = 'UPDATE webhooks' |
$sql = 'UPDATE webhooks' |
| 304 |
305 |
. ' SET description = @@description@@' |
. ' SET description = @@description@@' |
| 305 |
306 |
. ', flags = @@flags@@' |
. ', flags = @@flags@@' |
|
307 |
|
. ', repo = @@repo@@' |
|
308 |
|
. ', refname = @@refname@@' |
| 306 |
309 |
. ', idata = @@idata@@' |
. ', idata = @@idata@@' |
| 307 |
310 |
. ' WHERE uid = @@uid@@' |
. ' WHERE uid = @@uid@@' |
| 308 |
311 |
. ' AND id = @@id@@'; |
. ' AND id = @@id@@'; |
| |
| ... |
... |
function rg_wh_fill_vars(&$rg) |
| 390 |
393 |
while (1) { |
while (1) { |
| 391 |
394 |
$t = $rg['wh']['htype']; |
$t = $rg['wh']['htype']; |
| 392 |
395 |
|
|
|
396 |
|
$rg['wh']['repo'] = rg_var_str('wh::repo'); |
| 393 |
397 |
$rg['wh']['flags'] = rg_var_a2s('wh::flags'); |
$rg['wh']['flags'] = rg_var_a2s('wh::flags'); |
| 394 |
|
$rg['wh']['repo_id'] = rg_var_uint('wh::repo_id'); |
|
|
398 |
|
$rg['wh']['refname'] = rg_var_str('wh::refname'); |
| 395 |
399 |
$rg['wh']['itime'] = time(); |
$rg['wh']['itime'] = time(); |
| 396 |
400 |
$rg['wh']['add_ip'] = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : ''; |
$rg['wh']['add_ip'] = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : ''; |
| 397 |
401 |
$rg['wh']['description'] = trim(rg_var_str('wh::description')); |
$rg['wh']['description'] = trim(rg_var_str('wh::description')); |
| |
| ... |
... |
function rg_wh_default_paras(&$rg) |
| 516 |
520 |
$rg['wh']['id'] = 0; |
$rg['wh']['id'] = 0; |
| 517 |
521 |
$rg['wh']['description'] = ''; |
$rg['wh']['description'] = ''; |
| 518 |
522 |
$rg['wh']['flags'] = ''; |
$rg['wh']['flags'] = ''; |
|
523 |
|
$rg['wh']['repo'] = ''; |
|
524 |
|
$rg['wh']['refname'] = ''; |
| 519 |
525 |
|
|
| 520 |
526 |
$rg['wh']['idata'] = array(); |
$rg['wh']['idata'] = array(); |
| 521 |
527 |
$rg['wh']['idata']['events'] = ''; |
$rg['wh']['idata']['events'] = ''; |
| |
| ... |
... |
function rg_wh_replace_tags(&$ev) |
| 589 |
595 |
rg_log_ml('wh_replace_tags: ev=' . print_r($ev, TRUE)); |
rg_log_ml('wh_replace_tags: ev=' . print_r($ev, TRUE)); |
| 590 |
596 |
|
|
| 591 |
597 |
$wh = &$ev['wh']; |
$wh = &$ev['wh']; |
| 592 |
|
$info = &$wh['info']; |
|
| 593 |
|
$idata = &$info['idata']; |
|
|
598 |
|
$idata = &$wh['idata']; |
| 594 |
599 |
|
|
| 595 |
|
$branch = rg_repo_ref_nice($ev['refname']); |
|
|
600 |
|
$branch = isset($ev['refname']) ? rg_repo_ref_nice($ev['refname']) : ''; |
|
601 |
|
$repo_name = isset($ev['ri']['name']) ? $ev['ri']['name'] : ''; |
|
602 |
|
$new_rev = isset($ev['new_rev']) ? $ev['new_rev'] : ''; |
| 596 |
603 |
|
|
| 597 |
|
$keys = array('##branch##', '##repo##', '##who##', |
|
|
604 |
|
$keys = array('##branch##', '##repo##', |
| 598 |
605 |
'##hook_id##', '##commit##', |
'##hook_id##', '##commit##', |
| 599 |
606 |
'##date##', '##time##', |
'##date##', '##time##', |
| 600 |
607 |
'##ip##', '##timestamp##'); |
'##ip##', '##timestamp##'); |
| 601 |
608 |
|
|
| 602 |
|
$values = array($branch, $ev['repo_name'], $ev['login_username'], |
|
| 603 |
|
$info['id'], $ev['new_rev'], |
|
|
609 |
|
$values = array($branch, $repo_name, |
|
610 |
|
$wh['id'], $new_rev, |
| 604 |
611 |
gmdate('Y-m-d', $ev['itime']), |
gmdate('Y-m-d', $ev['itime']), |
| 605 |
612 |
gmdate('H:i:s', $ev['itime']), |
gmdate('H:i:s', $ev['itime']), |
| 606 |
613 |
$ev['ip'], $ev['itime']); |
$ev['ip'], $ev['itime']); |
| |
| ... |
... |
function rg_wh_replace_tags(&$ev) |
| 611 |
618 |
rg_log_ml('after: ' . print_r($idata, TRUE)); |
rg_log_ml('after: ' . print_r($idata, TRUE)); |
| 612 |
619 |
} |
} |
| 613 |
620 |
|
|
|
621 |
|
/* |
|
622 |
|
* Used to filter hooks by repo name |
|
623 |
|
*/ |
|
624 |
|
function rg_wh_repo_match($pattern, $repo_name) |
|
625 |
|
{ |
|
626 |
|
rg_log('wh_repo_match pattern=[' . $pattern . ']' |
|
627 |
|
. ' repo_name=[' . $repo_name . ']'); |
|
628 |
|
|
|
629 |
|
$pattern = str_replace('|', '', $pattern); |
|
630 |
|
return preg_match('|' . $pattern . '|uD', $repo_name) === 1; |
|
631 |
|
} |
|
632 |
|
|
| 614 |
633 |
?> |
?> |
| File inc/wh/http.inc.php changed (mode: 100644) (index 77eebea..5566680) |
| ... |
... |
function rg_wh_http_send_one($db, $event) |
| 20 |
20 |
rg_prof_start('wh_http_send_helper'); |
rg_prof_start('wh_http_send_helper'); |
| 21 |
21 |
|
|
| 22 |
22 |
$wh = &$event['wh']; |
$wh = &$event['wh']; |
| 23 |
|
$info = &$wh['info']; |
|
| 24 |
23 |
|
|
| 25 |
24 |
rg_log_ml('wh_http_send_one: event: ' . print_r($event, TRUE)); |
rg_log_ml('wh_http_send_one: event: ' . print_r($event, TRUE)); |
| 26 |
|
if ($info['idata']['debug'] == 1) |
|
| 27 |
|
rg_log_ml('XXX DEBUG: wh[data]=' . print_r($wh['data'], TRUE)); |
|
|
25 |
|
if ($wh['idata']['debug'] == 1) |
|
26 |
|
rg_log_ml('DEBUG: wh[data]=' . print_r($wh['data'], TRUE)); |
| 28 |
27 |
|
|
| 29 |
28 |
$headers = array(); |
$headers = array(); |
| 30 |
|
|
|
| 31 |
|
while (!empty($info['idata']['key'])) { |
|
| 32 |
|
if ($info['idata']['itype'] == 0) |
|
|
29 |
|
while (!empty($wh['idata']['key'])) { |
|
30 |
|
if ($wh['idata']['itype'] == 0) |
| 33 |
31 |
break; |
break; |
| 34 |
32 |
|
|
| 35 |
33 |
$headers[] = 'X-RocketGit-Signature: ' |
$headers[] = 'X-RocketGit-Signature: ' |
| 36 |
|
. hash_hmac('sha512', $wh['data'], $info['idata']['key']); |
|
|
34 |
|
. hash_hmac('sha512', $wh['data'], $wh['idata']['key']); |
| 37 |
35 |
break; |
break; |
| 38 |
36 |
} |
} |
| 39 |
37 |
|
|
| 40 |
|
$c = curl_init($info['idata']['url']); |
|
|
38 |
|
$c = curl_init($wh['idata']['url']); |
| 41 |
39 |
curl_setopt($c, CURLOPT_POST, 1); |
curl_setopt($c, CURLOPT_POST, 1); |
| 42 |
40 |
curl_setopt($c, CURLOPT_POSTFIELDS, $wh['data']); |
curl_setopt($c, CURLOPT_POSTFIELDS, $wh['data']); |
| 43 |
41 |
curl_setopt($c, CURLOPT_RETURNTRANSFER, TRUE); |
curl_setopt($c, CURLOPT_RETURNTRANSFER, TRUE); |
| |
| ... |
... |
function rg_wh_http_send_one($db, $event) |
| 57 |
55 |
if ($err !== FALSE) |
if ($err !== FALSE) |
| 58 |
56 |
curl_setopt($c, CURLOPT_STDERR, $err); |
curl_setopt($c, CURLOPT_STDERR, $err); |
| 59 |
57 |
|
|
| 60 |
|
if (strchr($info['flags'], 'I')) |
|
|
58 |
|
if (strchr($wh['flags'], 'I')) |
| 61 |
59 |
curl_setopt($c, CURLOPT_SSL_VERIFYPEER, FALSE); |
curl_setopt($c, CURLOPT_SSL_VERIFYPEER, FALSE); |
| 62 |
60 |
|
|
| 63 |
|
if (strchr($info['flags'], 'H')) |
|
|
61 |
|
if (strchr($wh['flags'], 'H')) |
| 64 |
62 |
curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 0); // TODO verify 0 is a good value (default 2) |
curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 0); // TODO verify 0 is a good value (default 2) |
| 65 |
63 |
|
|
| 66 |
64 |
$ret = FALSE; |
$ret = FALSE; |
| |
| ... |
... |
function rg_wh_http_send_one($db, $event) |
| 72 |
70 |
// replace ##tags## |
// replace ##tags## |
| 73 |
71 |
rg_wh_replace_tags($event); |
rg_wh_replace_tags($event); |
| 74 |
72 |
|
|
| 75 |
|
if (!empty($info['idata']['client_cert'])) { |
|
|
73 |
|
if (!empty($wh['idata']['client_cert'])) { |
| 76 |
74 |
rg_log('DEBUG: will provide client cert...'); |
rg_log('DEBUG: will provide client cert...'); |
| 77 |
75 |
$f = 'wh-' . $event['ui']['uid'] . '-' . $wh['id'] . '-client-' . $xid; |
$f = 'wh-' . $event['ui']['uid'] . '-' . $wh['id'] . '-client-' . $xid; |
| 78 |
|
$cert_file = rg_tmp_file($f, $info['idata']['client_cert']); |
|
|
76 |
|
$cert_file = rg_tmp_file($f, $wh['idata']['client_cert']); |
| 79 |
77 |
if ($cert_file === FALSE) |
if ($cert_file === FALSE) |
| 80 |
78 |
break; |
break; |
| 81 |
79 |
|
|
| |
| ... |
... |
function rg_wh_http_send_one($db, $event) |
| 86 |
84 |
curl_setopt($c, CURLOPT_SSLCERT, FALSE); |
curl_setopt($c, CURLOPT_SSLCERT, FALSE); |
| 87 |
85 |
} |
} |
| 88 |
86 |
|
|
| 89 |
|
if (!empty($info['idata']['client_ca_cert'])) { |
|
|
87 |
|
if (!empty($wh['idata']['client_ca_cert'])) { |
| 90 |
88 |
$f = 'wh-' . $event['ui']['uid'] . '-' . $wh['id'] . '-ca-' . $xid; |
$f = 'wh-' . $event['ui']['uid'] . '-' . $wh['id'] . '-ca-' . $xid; |
| 91 |
|
$ca_file = rg_tmp_file($f, $info['idata']['client_ca_cert']); |
|
|
89 |
|
$ca_file = rg_tmp_file($f, $wh['idata']['client_ca_cert']); |
| 92 |
90 |
if ($ca_file === FALSE) |
if ($ca_file === FALSE) |
| 93 |
91 |
break; |
break; |
| 94 |
92 |
|
|
| |
| ... |
... |
function rg_wh_http_send_one($db, $event) |
| 111 |
109 |
$_info = curl_getinfo($c); |
$_info = curl_getinfo($c); |
| 112 |
110 |
rg_log_ml('Debug: ' . print_r($_info, TRUE)); |
rg_log_ml('Debug: ' . print_r($_info, TRUE)); |
| 113 |
111 |
|
|
| 114 |
|
if ($info['idata']['debug'] == 1) |
|
|
112 |
|
if ($wh['idata']['debug'] == 1) |
| 115 |
113 |
rg_cache_set('DEBUG::' . $event['ui']['uid'] |
rg_cache_set('DEBUG::' . $event['ui']['uid'] |
| 116 |
|
. '::webhooks::' . $info['idata']['opaque'] |
|
|
114 |
|
. '::webhooks::' . $wh['idata']['opaque'] |
| 117 |
115 |
. '::' . $wh['id'], |
. '::' . $wh['id'], |
| 118 |
116 |
'BAD', RG_SOCKET_NO_WAIT); |
'BAD', RG_SOCKET_NO_WAIT); |
| 119 |
117 |
break; |
break; |
| |
| ... |
... |
function rg_wh_http_send_one($db, $event) |
| 123 |
121 |
rg_log_ml('Answer: ' . print_r($r, TRUE)); |
rg_log_ml('Answer: ' . print_r($r, TRUE)); |
| 124 |
122 |
$xerr .= $r; |
$xerr .= $r; |
| 125 |
123 |
|
|
| 126 |
|
if ($info['idata']['debug'] == 1) |
|
|
124 |
|
if ($wh['idata']['debug'] == 1) |
| 127 |
125 |
rg_cache_set('DEBUG::' . $event['ui']['uid'] |
rg_cache_set('DEBUG::' . $event['ui']['uid'] |
| 128 |
|
. '::webhooks::' . $info['idata']['opaque'] |
|
|
126 |
|
. '::webhooks::' . $wh['idata']['opaque'] |
| 129 |
127 |
. '::' . $wh['id'], |
. '::' . $wh['id'], |
| 130 |
128 |
'OK', RG_SOCKET_NO_WAIT); |
'OK', RG_SOCKET_NO_WAIT); |
| 131 |
129 |
|
|
| |
| ... |
... |
function rg_wh_http_send($db, $event) |
| 161 |
159 |
if ($r['ok'] != 1) |
if ($r['ok'] != 1) |
| 162 |
160 |
return FALSE; |
return FALSE; |
| 163 |
161 |
|
|
| 164 |
|
// Filter them by repo_id |
|
| 165 |
|
$real_list = array(); |
|
| 166 |
|
foreach ($r['list'] as $id => $info) { |
|
| 167 |
|
if (($info['repo_id'] > 0) |
|
| 168 |
|
&& ($event['ri']['repo_id'] != $info['repo_id'])) { |
|
|
162 |
|
$cache = array(); |
|
163 |
|
$ret = array(); |
|
164 |
|
|
|
165 |
|
// Filter |
|
166 |
|
foreach ($r['list'] as $id => $wh) { |
|
167 |
|
if (isset($event['ri']['name']) |
|
168 |
|
&& !rg_wh_repo_match($wh['repo'], $event['ri']['name'])) { |
| 169 |
169 |
rg_log('hook is not for this repo'); |
rg_log('hook is not for this repo'); |
| 170 |
170 |
continue; |
continue; |
| 171 |
171 |
} |
} |
| 172 |
172 |
|
|
| 173 |
|
if (strcmp($info['htype'], 'http') != 0) |
|
|
173 |
|
if (isset($event['refname']) |
|
174 |
|
&& !rg_repo_compare_refs($wh['refname'], $event['refname'])) { |
|
175 |
|
rg_log('hook is not for this ref'); |
|
176 |
|
continue; |
|
177 |
|
} |
|
178 |
|
|
|
179 |
|
if (strcmp($wh['htype'], 'http') != 0) |
| 174 |
180 |
continue; |
continue; |
| 175 |
181 |
|
|
| 176 |
182 |
// Diabled? |
// Diabled? |
| 177 |
|
if (strchr($info['flags'], 'D')) |
|
|
183 |
|
if (strchr($wh['flags'], 'D')) |
| 178 |
184 |
continue; |
continue; |
| 179 |
185 |
|
|
| 180 |
186 |
// If the web hook does not contain our type, skip it |
// If the web hook does not contain our type, skip it |
| 181 |
|
if (!strchr($info['idata']['events'], $event['wh_event'])) { |
|
|
187 |
|
if (!strchr($wh['idata']['events'], $event['wh_event'])) { |
| 182 |
188 |
rg_log($event['wh_event'] . ' is not present in ' |
rg_log($event['wh_event'] . ' is not present in ' |
| 183 |
|
. $info['idata']['events']); |
|
|
189 |
|
. $wh['idata']['events']); |
| 184 |
190 |
continue; |
continue; |
| 185 |
191 |
} |
} |
| 186 |
192 |
|
|
| 187 |
|
$real_list[] = $id; |
|
| 188 |
|
} |
|
| 189 |
|
|
|
| 190 |
|
// Something to do? |
|
| 191 |
|
if (empty($real_list)) |
|
| 192 |
|
return array(); |
|
| 193 |
|
|
|
| 194 |
|
$cache = array(); |
|
| 195 |
|
$wh = array(); |
|
| 196 |
|
$ret = array(); |
|
| 197 |
|
foreach ($real_list as $id) { |
|
| 198 |
|
$wh['info'] = $r['list'][$id]; |
|
| 199 |
|
$wh['id'] = $id; |
|
| 200 |
|
|
|
| 201 |
|
if (!isset($wh['info']['idata']['itype'])) { |
|
| 202 |
|
rg_log_ml('wh[info]: ' . print_r($wh['info'], TRUE)); |
|
|
193 |
|
if (!isset($wh['idata']['itype'])) { |
|
194 |
|
rg_log_ml('wh: ' . print_r($wh, TRUE)); |
| 203 |
195 |
rg_internal_error('DEBUG: itype is not present'); |
rg_internal_error('DEBUG: itype is not present'); |
|
196 |
|
continue; |
| 204 |
197 |
} |
} |
| 205 |
|
$type = $wh['info']['idata']['itype']; |
|
| 206 |
|
if (!isset($cache[$type])) { |
|
| 207 |
|
switch ($type) { |
|
|
198 |
|
|
|
199 |
|
$itype = $wh['idata']['itype']; |
|
200 |
|
if (!isset($cache[$itype])) { |
|
201 |
|
switch ($itype) { |
| 208 |
202 |
case 0: // http post |
case 0: // http post |
| 209 |
|
$cache[$type] = &$event['wh_data']; |
|
|
203 |
|
$cache[$itype] = &$event['ri']; |
| 210 |
204 |
break; |
break; |
| 211 |
205 |
|
|
| 212 |
206 |
case 1: // php serialize |
case 1: // php serialize |
| 213 |
|
$cache[$type] = serialize($event['wh_data']); |
|
|
207 |
|
$cache[$itype] = serialize($event['ri']); |
| 214 |
208 |
break; |
break; |
| 215 |
209 |
|
|
| 216 |
210 |
default: |
default: |
| 217 |
|
rg_log('Unknown type ' . $type . '!'); |
|
| 218 |
|
$cache[$type] = ''; |
|
|
211 |
|
rg_log('Unknown type ' . $itype . '!'); |
|
212 |
|
$cache[$itype] = ''; |
| 219 |
213 |
break; |
break; |
| 220 |
214 |
} |
} |
| 221 |
215 |
} |
} |
| 222 |
|
$wh['data'] = $cache[$type]; |
|
|
216 |
|
$wh['data'] = $cache[$itype]; |
| 223 |
217 |
|
|
| 224 |
218 |
$x = $event; |
$x = $event; |
| 225 |
219 |
$x['category'] = 10001; |
$x['category'] = 10001; |
| 226 |
220 |
$x['wh'] = $wh; |
$x['wh'] = $wh; |
|
221 |
|
$x['debug'] = $wh['idata']['debug']; |
| 227 |
222 |
$ret[] = $x; |
$ret[] = $x; |
| 228 |
223 |
} |
} |
| 229 |
224 |
|
|
| File inc/wh/lambda.inc.php changed (mode: 100644) (index 93fcabf..fe0b9f2) |
| ... |
... |
function rg_wh_lambda_send_one($db, $event) |
| 25 |
25 |
$ret = FALSE; |
$ret = FALSE; |
| 26 |
26 |
|
|
| 27 |
27 |
$wh = &$event['wh']; |
$wh = &$event['wh']; |
| 28 |
|
$info = &$wh['info']; |
|
| 29 |
28 |
|
|
| 30 |
29 |
$last_output = ''; |
$last_output = ''; |
| 31 |
30 |
while (1) { |
while (1) { |
| |
| ... |
... |
function rg_wh_lambda_send_one($db, $event) |
| 33 |
32 |
rg_wh_replace_tags($event); |
rg_wh_replace_tags($event); |
| 34 |
33 |
|
|
| 35 |
34 |
// we need to copy 'flags' because we pass idata |
// we need to copy 'flags' because we pass idata |
| 36 |
|
$info['idata']['flags'] = $info['flags']; |
|
|
35 |
|
$wh['idata']['flags'] = $wh['flags']; |
| 37 |
36 |
|
|
| 38 |
37 |
// Call the function |
// Call the function |
| 39 |
|
$r = rg_amazon_lambda_invoke($info['idata']); |
|
|
38 |
|
$r = rg_amazon_lambda_invoke($wh['idata']); |
| 40 |
39 |
if ($r['ok'] != 1) { |
if ($r['ok'] != 1) { |
| 41 |
40 |
$last_output .= $r['error']; |
$last_output .= $r['error']; |
| 42 |
41 |
break; |
break; |
| |
| ... |
... |
function rg_wh_lambda_send($db, $event) |
| 69 |
68 |
if ($r['ok'] != 1) |
if ($r['ok'] != 1) |
| 70 |
69 |
return FALSE; |
return FALSE; |
| 71 |
70 |
|
|
| 72 |
|
// Filter them by repo_id |
|
| 73 |
|
foreach ($r['list'] as $id => $info) { |
|
| 74 |
|
if (($info['repo_id'] > 0) |
|
| 75 |
|
&& ($event['repo_id'] != $info['repo_id'])) { |
|
|
71 |
|
// Filter |
|
72 |
|
foreach ($r['list'] as $id => $wh) { |
|
73 |
|
if (isset($event['ri']['name']) |
|
74 |
|
&& !rg_repo_compare_refs($wh['repo'], $event['ri']['name'])) { |
| 76 |
75 |
rg_log('hook is not for this repo'); |
rg_log('hook is not for this repo'); |
| 77 |
76 |
continue; |
continue; |
| 78 |
77 |
} |
} |
| 79 |
78 |
|
|
| 80 |
|
if (strcmp($info['htype'], 'lambda') != 0) |
|
|
79 |
|
if (isset($event['refname']) |
|
80 |
|
&& !rg_repo_compare_refs($wh['refname'], $event['refname'])) { |
|
81 |
|
rg_log('hook is not for this ref'); |
| 81 |
82 |
continue; |
continue; |
|
83 |
|
} |
| 82 |
84 |
|
|
| 83 |
|
// Diabled? |
|
| 84 |
|
if (strchr($info['flags'], 'D')) |
|
|
85 |
|
if (strcmp($wh['htype'], 'lambda') != 0) |
| 85 |
86 |
continue; |
continue; |
| 86 |
87 |
|
|
| 87 |
|
$wh = array(); |
|
| 88 |
|
$wh['id'] = $id; |
|
| 89 |
|
$wh['info'] = $info; |
|
|
88 |
|
// Diabled? |
|
89 |
|
if (strchr($wh['flags'], 'D')) |
|
90 |
|
continue; |
| 90 |
91 |
|
|
| 91 |
92 |
$x = $event; |
$x = $event; |
| 92 |
93 |
$x['category'] = 30001; |
$x['category'] = 30001; |
| 93 |
94 |
$x['wh'] = $wh; |
$x['wh'] = $wh; |
|
95 |
|
$x['debug'] = $wh['idata']['debug']; |
| 94 |
96 |
$ret[] = $x; |
$ret[] = $x; |
| 95 |
97 |
} |
} |
| 96 |
98 |
|
|
| |
| ... |
... |
function rg_wh_lambda_fill_hints($rg, &$hints) |
| 165 |
167 |
{ |
{ |
| 166 |
168 |
$hints[]['HTML:hint'] = rg_template('user/settings/wh/amazon/hints.html', |
$hints[]['HTML:hint'] = rg_template('user/settings/wh/amazon/hints.html', |
| 167 |
169 |
$rg, TRUE /*xss*/); |
$rg, TRUE /*xss*/); |
| 168 |
|
$hints[]['HTML:hint'] = rg_template('user/settings/wh/hints_tags.html', |
|
| 169 |
|
$rg, TRUE /*xss*/); |
|
| 170 |
170 |
} |
} |
| 171 |
171 |
|
|
| 172 |
172 |
/* |
/* |
| 173 |
173 |
* Loads default paras for a form |
* Loads default paras for a form |
|
174 |
|
* TODO: escape json when replacing |
| 174 |
175 |
*/ |
*/ |
| 175 |
176 |
function rg_wh_lambda_default_paras(&$rg) |
function rg_wh_lambda_default_paras(&$rg) |
| 176 |
177 |
{ |
{ |
| 177 |
178 |
$a = &$rg['wh']['idata']; |
$a = &$rg['wh']['idata']; |
| 178 |
179 |
rg_wh_amazon_default_paras($a); |
rg_wh_amazon_default_paras($a); |
| 179 |
180 |
$a['function'] = ''; |
$a['function'] = ''; |
| 180 |
|
$a['payload'] = ''; |
|
|
181 |
|
$a['payload'] = '{' . "\n" |
|
182 |
|
. '"repo": "##repo##",' . "\n" |
|
183 |
|
. '"branch": "##branch##",' . "\n" |
|
184 |
|
. '"hook_id": "##hook_id##",' . "\n" |
|
185 |
|
. '"commit": "##commit##",' . "\n" |
|
186 |
|
. '"date": "##date##",' . "\n" |
|
187 |
|
. '"time": "##time##",' . "\n" |
|
188 |
|
. '"timestamp": "##timestamp##",' . "\n" |
|
189 |
|
. '"ip": "##ip##"' . "\n" |
|
190 |
|
. '}'; |
| 181 |
191 |
} |
} |
| 182 |
192 |
|
|
| 183 |
193 |
|
|
| File tests/wh_cloud.php changed (mode: 100644) (index 90a5cdf..568da7a) |
| ... |
... |
rg_log_enter('Registering webhook1...'); |
| 50 |
50 |
$extra = array( |
$extra = array( |
| 51 |
51 |
'wh::htype' => 'cloud', |
'wh::htype' => 'cloud', |
| 52 |
52 |
'wh::description' => 'description1 <xss>', |
'wh::description' => 'description1 <xss>', |
|
53 |
|
'wh::repo' => '', |
|
54 |
|
'wh::refname' => '', |
| 53 |
55 |
'wh::idata::access_key_id' => $a['access_key_id'], |
'wh::idata::access_key_id' => $a['access_key_id'], |
| 54 |
56 |
'wh::idata::secret_access_key' => $a['secret_access_key'], |
'wh::idata::secret_access_key' => $a['secret_access_key'], |
| 55 |
57 |
'wh::idata::region' => 'eu-central-1', |
'wh::idata::region' => 'eu-central-1', |
| |
| ... |
... |
$extra = array( |
| 58 |
60 |
'wh::idata::deployment_config_name' => '', |
'wh::idata::deployment_config_name' => '', |
| 59 |
61 |
'wh::idata::bucket' => 'test-deploy-500-##repo##-##branch##', |
'wh::idata::bucket' => 'test-deploy-500-##repo##-##branch##', |
| 60 |
62 |
'wh::idata::file' => |
'wh::idata::file' => |
| 61 |
|
'##repo##-##branch##-##who##-##hook_id##' |
|
|
63 |
|
'##repo##-##branch##-##hook_id##' |
| 62 |
64 |
. '-##commit##-##date##-##time##-##ip##-##timestamp##.zip', |
. '-##commit##-##date##-##time##-##ip##-##timestamp##.zip', |
| 63 |
65 |
); |
); |
| 64 |
66 |
rg_test_wh_add_edit($db, $rg_ui, $good_sid, 'cloud', $extra); |
rg_test_wh_add_edit($db, $rg_ui, $good_sid, 'cloud', $extra); |
| |
| ... |
... |
rg_log_enter('Testing the edit of webhook...'); |
| 136 |
138 |
$extra = array( |
$extra = array( |
| 137 |
139 |
'wh::id' => $wh_id, |
'wh::id' => $wh_id, |
| 138 |
140 |
'wh::htype' => 'cloud', |
'wh::htype' => 'cloud', |
|
141 |
|
'wh::repo' => '.*', |
|
142 |
|
'wh::refname' => '..*', |
| 139 |
143 |
'wh::description' => 'desc2 <xss>', |
'wh::description' => 'desc2 <xss>', |
| 140 |
144 |
'wh::flags' => 'D', |
'wh::flags' => 'D', |
| 141 |
145 |
'wh::idata::access_key_id' => 'aaa', |
'wh::idata::access_key_id' => 'aaa', |
| |
| ... |
... |
$row['idata'] = unserialize($row['idata']); |
| 157 |
161 |
$key = 'wh' . '::' . $rg_ui['uid'] . '::' . 'list' . '::' . $wh_id; |
$key = 'wh' . '::' . $rg_ui['uid'] . '::' . 'list' . '::' . $wh_id; |
| 158 |
162 |
rg_cache_core_unset($key); // else we will get previous copy! |
rg_cache_core_unset($key); // else we will get previous copy! |
| 159 |
163 |
$c = rg_cache_get($key); |
$c = rg_cache_get($key); |
| 160 |
|
$list = array('htype' => 'cloud', |
|
|
164 |
|
$list = array('htype' => 'cloud', 'repo' => '.*', 'refname' => '..*', |
| 161 |
165 |
'description' => 'desc2 <xss>', 'flags' => 'D', |
'description' => 'desc2 <xss>', 'flags' => 'D', |
| 162 |
166 |
'access_key_id' => 'aaa', |
'access_key_id' => 'aaa', |
| 163 |
167 |
'secret_access_key' => 'bbb', 'region' => 'ccc', |
'secret_access_key' => 'bbb', 'region' => 'ccc', |
| File tests/wh_http.php changed (mode: 100644) (index e301f49..c9517bb) |
| ... |
... |
rg_log('Registering webhook1...'); |
| 136 |
136 |
$extra = array( |
$extra = array( |
| 137 |
137 |
'wh::htype' => 'http', |
'wh::htype' => 'http', |
| 138 |
138 |
'wh::description' => 'description1 <xss>', |
'wh::description' => 'description1 <xss>', |
|
139 |
|
'wh::repo' => '', |
|
140 |
|
'wh::refname' => '', |
| 139 |
141 |
'wh::idata::url' => 'https://localhost:' . $port1 . '/wh.html', |
'wh::idata::url' => 'https://localhost:' . $port1 . '/wh.html', |
| 140 |
142 |
'wh::idata::events[C]' => 'on', |
'wh::idata::events[C]' => 'on', |
| 141 |
143 |
'wh::idata::events[P]' => 'on', |
'wh::idata::events[P]' => 'on', |
| |
| ... |
... |
rg_log('Registering webhook2...'); |
| 154 |
156 |
$extra = array( |
$extra = array( |
| 155 |
157 |
'wh::htype' => 'http', |
'wh::htype' => 'http', |
| 156 |
158 |
'wh::description' => 'description1 <xss>', |
'wh::description' => 'description1 <xss>', |
|
159 |
|
'wh::repo' => '', |
|
160 |
|
'wh::refname' => '', |
| 157 |
161 |
'wh::idata::url' => 'https://localhost:' . $port2 . '/wh.html', |
'wh::idata::url' => 'https://localhost:' . $port2 . '/wh.html', |
| 158 |
162 |
'wh::idata::events[C]' => 'on', |
'wh::idata::events[C]' => 'on', |
| 159 |
163 |
'wh::idata::events[P]' => 'on', |
'wh::idata::events[P]' => 'on', |
| |
| ... |
... |
rg_log('Registering webhook3...'); |
| 173 |
177 |
$extra = array( |
$extra = array( |
| 174 |
178 |
'wh::htype' => 'http', |
'wh::htype' => 'http', |
| 175 |
179 |
'wh::description' => 'description1 <xss>', |
'wh::description' => 'description1 <xss>', |
|
180 |
|
'wh::repo' => '', |
|
181 |
|
'wh::refname' => '', |
| 176 |
182 |
'wh::idata::url' => 'https://localhost:' . $port3 . '/wh.html', |
'wh::idata::url' => 'https://localhost:' . $port3 . '/wh.html', |
| 177 |
183 |
'wh::idata::events[C]' => 'on', |
'wh::idata::events[C]' => 'on', |
| 178 |
184 |
'wh::idata::events[P]' => 'on', |
'wh::idata::events[P]' => 'on', |
| |
| ... |
... |
$extra = array( |
| 275 |
281 |
'wh::id' => $wh_id1, |
'wh::id' => $wh_id1, |
| 276 |
282 |
'wh::htype' => 'http', |
'wh::htype' => 'http', |
| 277 |
283 |
'wh::description' => 'desc2 <xss>', |
'wh::description' => 'desc2 <xss>', |
|
284 |
|
'wh::repo' => '.*', |
|
285 |
|
'wh::refname' => '..*', |
| 278 |
286 |
'wh::flags[D]' => 'on', |
'wh::flags[D]' => 'on', |
| 279 |
287 |
'wh::idata::url' => 'https://localhost:' . $port1 . '/wh.html', |
'wh::idata::url' => 'https://localhost:' . $port1 . '/wh.html', |
| 280 |
288 |
'wh::idata::events[C]' => 'on', |
'wh::idata::events[C]' => 'on', |
| |
| ... |
... |
$row['idata'] = unserialize($row['idata']); |
| 295 |
303 |
$key = 'wh' . '::' . $rg_ui['uid'] . '::' . 'list' . '::' . $wh_id1; |
$key = 'wh' . '::' . $rg_ui['uid'] . '::' . 'list' . '::' . $wh_id1; |
| 296 |
304 |
rg_cache_core_unset($key); // else we will get previous copy! |
rg_cache_core_unset($key); // else we will get previous copy! |
| 297 |
305 |
$c = rg_cache_get($key); |
$c = rg_cache_get($key); |
| 298 |
|
$list = array('htype' => 'http', 'events' => 'CB', |
|
|
306 |
|
$list = array('htype' => 'http', 'events' => 'CB', 'repo' => '.*', |
|
307 |
|
'refname' => '..*', |
| 299 |
308 |
'description' => 'desc2 <xss>', 'key' => 'another key <xss>', |
'description' => 'desc2 <xss>', 'key' => 'another key <xss>', |
| 300 |
309 |
'opaque' => 'xxx', 'itype' => '1', 'flags' => 'D', |
'opaque' => 'xxx', 'itype' => '1', 'flags' => 'D', |
| 301 |
310 |
'client_cert' => 'abc <xss>', 'client_ca_cert' => 'zzz <xss>'); |
'client_cert' => 'abc <xss>', 'client_ca_cert' => 'zzz <xss>'); |