0000: 23 21 2f 75 73 72 2f 62 69 6e 2f 70 68 70 20 2d #!/usr/bin/php -
0010: 71 43 0a 3c 3f 70 68 70 0a 23 20 65 6e 63 6f 64 qC.<?php.# encod
0020: 69 6e 67 3a 20 75 74 66 2d 38 0a 23 20 61 70 69 ing: utf-8.# api
0030: 3a 20 63 6c 69 0a 23 20 74 69 74 6c 65 3a 20 77 : cli.# title: w
0040: 65 62 68 6f 6f 6b 0a 23 20 64 65 73 63 72 69 70 ebhook.# descrip
0050: 74 69 6f 6e 3a 20 74 6f 20 62 65 20 72 75 6e 20 tion: to be run
0060: 66 72 6f 6d 20 66 6f 73 73 69 6c 20 62 61 63 6b from fossil back
0070: 6f 66 66 69 63 65 2f 61 66 74 65 72 2d 72 65 63 office/after-rec
0080: 65 69 76 65 20 68 6f 6f 6b 73 0a 23 20 76 65 72 eive hooks.# ver
0090: 73 69 6f 6e 3a 20 30 2e 31 0a 23 20 64 6f 63 3a sion: 0.1.# doc:
00a0: 20 68 74 74 70 73 3a 2f 2f 66 6f 73 73 69 6c 2d https://fossil-
00b0: 73 63 6d 2e 6f 72 67 2f 68 6f 6d 65 2f 64 6f 63 scm.org/home/doc
00c0: 2f 74 72 75 6e 6b 2f 77 77 77 2f 68 6f 6f 6b 73 /trunk/www/hooks
00d0: 2e 6d 64 0a 23 0a 23 20 4d 65 61 6e 74 20 74 6f .md.#.# Meant to
00e0: 20 74 72 61 6e 73 66 6f 72 6d 20 63 6f 6d 6d 69 transform commi
00f0: 74 73 20 69 6e 74 6f 20 63 6f 6d 6d 6f 6e 20 77 ts into common w
0100: 65 62 68 6f 6f 6b 20 4a 53 4f 4e 20 66 6f 72 6d ebhook JSON form
0110: 61 74 73 2c 0a 23 20 61 6e 64 20 74 68 65 6e 20 ats,.# and then
0120: 73 65 6e 64 20 74 68 65 6d 20 6f 66 66 2e 0a 23 send them off..#
0130: 0a 23 20 48 6f 6f 6b 20 73 79 6e 74 61 78 3a 0a .# Hook syntax:.
0140: 23 20 20 20 66 6f 73 73 69 6c 2d 77 65 62 68 6f # fossil-webho
0150: 6f 6b 20 27 25 52 27 20 27 68 74 74 70 3a 2f 2f ok '%R' 'http://
0160: 73 65 72 76 69 63 65 2e 72 65 73 74 2f 61 70 69 service.rest/api
0170: 3f 74 6f 6b 65 6e 3d 31 32 33 27 0a 23 20 50 61 ?token=123'.# Pa
0180: 72 61 6d 65 74 65 72 73 3a 0a 23 20 20 20 25 52 rameters:.# %R
0190: 20 20 20 20 20 20 20 20 62 65 63 6f 6d 65 73 20 becomes
01a0: 72 65 70 6f 73 69 74 6f 72 79 20 66 69 6c 65 6e repository filen
01b0: 61 6d 65 20 28 52 45 51 55 49 52 45 44 29 0a 23 ame (REQUIRED).#
01c0: 20 20 20 2d 2d 66 73 6c 20 20 20 20 20 66 6f 73 --fsl fos
01d0: 73 69 6c 2d 73 74 79 6c 65 20 70 61 79 6c 6f 61 sil-style payloa
01e0: 64 20 28 64 65 66 61 75 6c 74 29 0a 23 20 20 20 d (default).#
01f0: 2d 2d 67 69 74 20 20 20 20 20 63 72 61 66 74 73 --git crafts
0200: 20 61 20 67 69 74 68 75 62 2d 73 74 79 6c 65 20 a github-style
0210: 70 61 79 6c 6f 61 64 0a 23 20 20 20 2d 2d 70 69 payload.# --pi
0220: 6e 67 20 20 20 20 62 61 73 69 63 20 70 69 6e 67 ng basic ping
0230: 0a 23 20 20 20 2d 2d 69 66 3a 77 69 6b 69 20 74 .# --if:wiki t
0240: 65 73 74 20 61 72 74 69 66 61 63 74 20 6c 69 73 est artifact lis
0250: 74 20 66 6f 72 20 74 79 70 65 20 28 63 68 65 63 t for type (chec
0260: 6b 2d 69 6e 2c 20 77 69 6b 69 2c 20 66 69 6c 65 k-in, wiki, file
0270: 29 0a 23 20 20 20 68 74 74 70 74 3a 2f 2f 20 20 ).# httpt://
0280: 77 65 62 68 6f 6f 6b 20 73 65 72 76 69 63 65 20 webhook service
0290: 65 6e 64 70 6f 69 6e 74 20 28 52 45 51 55 49 52 endpoint (REQUIR
02a0: 45 44 29 0a 23 20 20 20 2b 74 6f 6b 3d 31 32 33 ED).# +tok=123
02b0: 20 20 69 6e 6a 65 63 74 20 61 64 64 69 74 69 6f inject additio
02c0: 6e 61 6c 20 70 61 72 61 6d 65 74 65 72 73 0a 23 nal parameters.#
02d0: 20 20 20 0a 0a 23 2d 2d 20 69 6e 69 74 0a 24 61 ..#-- init.$a
02e0: 72 67 76 20 3d 20 24 5f 53 45 52 56 45 52 5b 22 rgv = $_SERVER["
02f0: 61 72 67 76 22 5d 3b 0a 24 63 66 67 20 3d 20 5b argv"];.$cfg = [
0300: 0a 20 20 20 20 22 73 74 61 72 74 22 20 3d 3e 20 . "start" =>
0310: 6d 69 63 72 6f 74 69 6d 65 28 54 52 55 45 29 2c microtime(TRUE),
0320: 0a 20 20 20 20 22 64 62 67 22 20 3d 3e 20 70 72 . "dbg" => pr
0330: 65 67 5f 67 72 65 70 28 22 7e 5e 2d 2b 28 64 65 eg_grep("~^-+(de
0340: 3f 62 75 3f 67 7c 64 75 3f 6d 70 29 24 7e 69 22 ?bu?g|du?mp)$~i"
0350: 2c 20 24 61 72 67 76 29 2c 0a 20 20 20 20 22 67 , $argv),. "g
0360: 69 74 22 20 3d 3e 20 70 72 65 67 5f 67 72 65 70 it" => preg_grep
0370: 28 22 7e 5e 2d 2b 67 69 3f 74 3f 24 7e 69 22 2c ("~^-+gi?t?$~i",
0380: 20 24 61 72 67 76 29 2c 0a 20 20 20 20 22 70 69 $argv),. "pi
0390: 6e 67 22 20 3d 3e 20 70 72 65 67 5f 67 72 65 70 ng" => preg_grep
03a0: 28 22 7e 5e 2d 2b 70 69 3f 6e 3f 67 3f 24 7e 69 ("~^-+pi?n?g?$~i
03b0: 22 2c 20 24 61 72 67 76 29 2c 0a 20 20 20 20 22 ", $argv),. "
03c0: 68 65 6c 70 22 20 3d 3e 20 70 72 65 67 5f 67 72 help" => preg_gr
03d0: 65 70 28 22 7e 5e 2d 2b 68 65 3f 6c 3f 70 3f 24 ep("~^-+he?l?p?$
03e0: 7e 69 22 2c 20 24 61 72 67 76 29 2c 0a 20 20 20 ~i", $argv),.
03f0: 20 22 72 65 70 6f 22 20 3d 3e 20 63 75 72 72 65 "repo" => curre
0400: 6e 74 28 70 72 65 67 5f 67 72 65 70 28 22 7e 5e nt(preg_grep("~^
0410: 2f 5c 77 2b 2e 2b 5c 2e 28 66 73 6c 7c 66 6f 73 /\w+.+\.(fsl|fos
0420: 73 69 6c 7c 73 71 6c 69 74 65 29 24 7e 22 2c 20 sil|sqlite)$~",
0430: 24 61 72 67 76 29 29 2c 0a 20 20 20 20 22 61 64 $argv)),. "ad
0440: 64 22 20 3d 3e 20 70 72 65 67 5f 67 72 65 70 28 d" => preg_grep(
0450: 22 7e 5e 5c 2b 5b 5c 77 2e 2d 5d 2b 5b 3a 3d 5d "~^\+[\w.-]+[:=]
0460: 2e 2b 24 7e 22 2c 20 24 61 72 67 76 29 2c 0a 20 .+$~", $argv),.
0470: 20 20 20 22 69 66 22 20 3d 3e 20 70 72 65 67 5f "if" => preg_
0480: 67 72 65 70 28 22 7e 5e 2d 2b 69 66 3a 5b 5c 77 grep("~^-+if:[\w
0490: 2d 5d 2b 24 7e 69 22 2c 20 24 61 72 67 76 29 2c -]+$~i", $argv),
04a0: 0a 20 20 20 20 22 75 72 6c 22 20 3d 3e 20 63 75 . "url" => cu
04b0: 72 72 65 6e 74 28 70 72 65 67 5f 67 72 65 70 28 rrent(preg_grep(
04c0: 22 7e 5e 68 74 74 70 73 3f 3a 2f 2f 2e 2b 24 7e "~^https?://.+$~
04d0: 69 22 2c 20 24 61 72 67 76 29 29 2c 0a 20 20 20 i", $argv)),.
04e0: 20 22 61 72 74 69 66 61 63 74 73 22 20 3d 3e 20 "artifacts" =>
04f0: 66 72 65 61 64 28 53 54 44 49 4e 2c 20 31 3c 3c fread(STDIN, 1<<
0500: 32 30 29 2c 0a 20 20 20 20 20 20 20 20 23 65 39 20),. #e9
0510: 63 65 32 37 32 65 38 30 36 63 34 37 61 31 30 65 ce272e806c47a10e
0520: 33 64 34 63 66 35 37 30 35 34 39 61 31 64 33 33 3d4cf570549a1d33
0530: 31 33 33 31 33 33 20 66 69 6c 65 20 73 72 63 2f 133133 file src/
0540: 63 6f 64 65 2e 63 0a 20 20 20 20 20 20 20 20 23 code.c. #
0550: 31 64 62 33 32 63 33 66 66 36 63 35 39 36 39 31 1db32c3ff6c59691
0560: 39 31 64 35 37 35 63 36 35 39 31 36 66 36 33 32 91d575c65916f632
0570: 32 62 38 33 33 33 31 33 20 77 69 6b 69 20 48 6f 2b833313 wiki Ho
0580: 6d 65 50 61 67 65 0a 20 20 20 20 20 20 20 20 23 mePage. #
0590: 33 31 33 39 30 38 33 39 30 33 38 31 33 39 30 38 3139083903813908
05a0: 31 33 39 31 33 38 31 33 39 33 31 39 33 31 38 33 1391381393193183
05b0: 30 39 33 38 61 61 61 61 20 63 68 65 63 6b 2d 69 0938aaaa check-i
05c0: 6e 20 74 6f 20 74 72 75 6e 6b 20 62 79 20 75 73 n to trunk by us
05d0: 65 72 20 6f 6e 20 32 32 32 32 2d 31 31 2d 33 30 er on 2222-11-30
05e0: 20 30 30 3a 30 30 0a 20 20 20 20 22 6a 73 6f 6e 00:00. "json
05f0: 22 20 3d 3e 20 54 52 55 45 2c 0a 20 20 20 20 22 " => TRUE,. "
0600: 75 73 65 72 22 20 3d 3e 20 6e 75 6c 6c 2c 0a 5d user" => null,.]
0610: 3b 0a 69 66 20 28 65 6d 70 74 79 28 24 63 66 67 ;.if (empty($cfg
0620: 5b 22 72 65 70 6f 22 5d 29 20 7c 7c 20 65 6d 70 ["repo"]) || emp
0630: 74 79 28 24 63 66 67 5b 22 75 72 6c 22 5d 29 29 ty($cfg["url"]))
0640: 20 7b 0a 20 20 20 64 69 65 28 22 25 52 20 6f 72 {. die("%R or
0650: 20 75 72 6c 20 6d 69 73 73 69 6e 67 22 29 3b 0a url missing");.
0660: 7d 0a 69 66 20 28 24 63 66 67 5b 22 69 66 22 5d }.if ($cfg["if"]
0670: 20 61 6e 64 20 70 72 65 67 5f 6d 61 74 63 68 28 and preg_match(
0680: 22 2f 69 66 3a 28 2e 2b 29 2f 22 2c 20 24 63 66 "/if:(.+)/", $cf
0690: 67 5b 22 69 66 22 5d 5b 30 5d 2c 20 24 75 75 29 g["if"][0], $uu)
06a0: 20 61 6e 64 20 21 70 72 65 67 5f 6d 61 74 63 68 and !preg_match
06b0: 28 22 2f 5c 5c 62 24 75 75 5b 31 5d 5c 5c 62 2f ("/\\b$uu[1]\\b/
06c0: 22 2c 20 24 63 66 67 5b 22 61 72 74 69 66 69 63 ", $cfg["artific
06d0: 74 73 22 5d 29 29 20 7b 0a 20 20 20 64 69 65 28 ts"])) {. die(
06e0: 22 2d 2d 69 66 3a 20 6e 6f 20 6d 61 74 63 68 22 "--if: no match"
06f0: 29 3b 0a 7d 0a 24 63 66 67 20 2b 3d 20 5b 0a 20 );.}.$cfg += [.
0700: 20 20 20 22 62 61 73 65 6e 61 6d 65 22 20 3d 3e "basename" =>
0710: 20 70 72 65 67 5f 72 65 70 6c 61 63 65 28 22 7e preg_replace("~
0720: 5c 2e 5c 77 2b 24 7e 22 2c 20 22 22 2c 20 62 61 \.\w+$~", "", ba
0730: 73 65 6e 61 6d 65 28 24 63 66 67 5b 22 72 65 70 sename($cfg["rep
0740: 6f 22 5d 29 29 2c 0a 20 20 20 20 22 62 61 73 65 o"])),. "base
0750: 75 72 6c 22 20 3d 3e 20 67 65 74 5f 62 61 73 65 url" => get_base
0760: 75 72 6c 28 29 2c 0a 20 20 20 20 22 74 69 74 6c url(),. "titl
0770: 65 22 20 3d 3e 20 67 65 74 5f 63 6f 6e 66 69 67 e" => get_config
0780: 28 22 70 72 6f 6a 65 63 74 2d 74 69 74 6c 65 22 ("project-title"
0790: 29 2c 0a 5d 3b 0a 0a 23 2d 2d 20 6f 70 65 72 61 ),.];..#-- opera
07a0: 74 69 6f 6e 20 66 6c 61 67 0a 69 66 20 28 24 63 tion flag.if ($c
07b0: 66 67 5b 22 68 65 6c 70 22 5d 29 20 7b 0a 20 20 fg["help"]) {.
07c0: 20 64 69 65 28 22 55 73 61 67 65 20 61 73 20 68 die("Usage as h
07d0: 6f 6f 6b 3a 5c 6e 20 20 66 6f 73 73 69 6c 2d 77 ook:\n fossil-w
07e0: 65 62 68 6f 6f 6b 20 25 52 20 2d 2d 67 69 74 20 ebhook %R --git
07f0: 68 74 74 70 3a 2f 2f 73 65 72 76 69 63 65 2e 72 http://service.r
0800: 65 73 74 2f 54 4f 4b 45 4e 2f 45 54 43 5c 6e 22 est/TOKEN/ETC\n"
0810: 29 3b 0a 7d 0a 65 6c 73 65 69 66 20 28 24 63 66 );.}.elseif ($cf
0820: 67 5b 22 67 69 74 22 5d 29 20 7b 0a 20 20 20 20 g["git"]) {.
0830: 24 72 65 71 75 65 73 74 20 3d 20 67 69 74 5f 72 $request = git_r
0840: 65 71 75 65 73 74 28 29 3b 0a 7d 0a 65 6c 73 65 equest();.}.else
0850: 69 66 20 28 24 63 66 67 5b 22 70 69 6e 67 22 5d if ($cfg["ping"]
0860: 29 20 7b 0a 20 20 20 20 24 72 65 71 75 65 73 74 ) {. $request
0870: 20 3d 20 62 61 73 69 63 5f 70 69 6e 67 28 29 3b = basic_ping();
0880: 0a 7d 0a 65 6c 73 65 20 7b 0a 20 20 20 20 24 72 .}.else {. $r
0890: 65 71 75 65 73 74 20 3d 20 66 6f 73 73 69 6c 5f equest = fossil_
08a0: 72 65 71 75 65 73 74 28 29 3b 0a 7d 0a 0a 23 2d request();.}..#-
08b0: 2d 20 61 6e 64 20 73 65 6e 64 0a 61 64 64 5f 70 - and send.add_p
08c0: 61 72 61 6d 73 28 24 72 65 71 75 65 73 74 29 3b arams($request);
08d0: 0a 69 66 20 28 24 63 66 67 5b 22 64 62 67 22 5d .if ($cfg["dbg"]
08e0: 29 20 7b 20 64 69 65 28 6a 73 6f 6e 5f 65 6e 63 ) { die(json_enc
08f0: 6f 64 65 28 24 72 65 71 75 65 73 74 2c 20 4a 53 ode($request, JS
0900: 4f 4e 5f 50 52 45 54 54 59 5f 50 52 49 4e 54 29 ON_PRETTY_PRINT)
0910: 29 3b 20 7d 0a 73 65 6e 64 28 24 72 65 71 75 65 ); }.send($reque
0920: 73 74 29 3b 0a 0a 0a 0a 0a 2f 2a 2a 0a 20 2a 20 st);...../**. *
0930: 50 72 6f 63 65 73 73 20 2b 61 64 64 3d 70 61 72 Process +add=par
0940: 61 6d 76 61 6c 20 61 72 67 75 6d 65 6e 74 73 2c amval arguments,
0950: 0a 20 2a 20 73 69 6d 70 6c 79 20 61 64 64 69 6e . * simply addin
0960: 67 20 74 68 65 6d 20 74 6f 20 24 72 65 71 75 65 g them to $reque
0970: 73 74 5b 5d 20 74 6f 70 2d 6c 65 76 65 6c 2e 0a st[] top-level..
0980: 20 2a 0a 20 2a 2f 0a 66 75 6e 63 74 69 6f 6e 20 *. */.function
0990: 61 64 64 5f 70 61 72 61 6d 73 28 26 24 72 65 71 add_params(&$req
09a0: 75 65 73 74 29 20 7b 0a 20 20 20 20 67 6c 6f 62 uest) {. glob
09b0: 61 6c 20 24 63 66 67 3b 0a 20 20 20 20 23 2d 2d al $cfg;. #--
09c0: 20 2b 61 64 64 3d 70 61 72 61 6d 73 3f 0a 20 20 +add=params?.
09d0: 20 20 66 6f 72 65 61 63 68 20 28 24 63 66 67 5b foreach ($cfg[
09e0: 22 61 64 64 22 5d 20 61 73 20 24 61 64 64 29 20 "add"] as $add)
09f0: 7b 0a 20 20 20 20 20 20 20 20 70 72 65 67 5f 6d {. preg_m
0a00: 61 74 63 68 28 22 7e 5e 5c 2b 28 5b 5c 77 2d 2e atch("~^\+([\w-.
0a10: 5d 2b 29 5b 3a 3d 5d 28 2e 2b 29 24 7e 22 2c 20 ]+)[:=](.+)$~",
0a20: 24 61 64 64 2c 20 24 6b 76 29 3b 0a 20 20 20 20 $add, $kv);.
0a30: 20 20 20 20 24 72 65 71 75 65 73 74 5b 24 6b 76 $request[$kv
0a40: 5b 31 5d 5d 20 3d 20 24 6b 76 5b 32 5d 3b 0a 20 [1]] = $kv[2];.
0a50: 20 20 20 7d 0a 7d 0a 0a 0a 2f 2a 2a 0a 20 2a 20 }.}.../**. *
0a60: 53 65 6e 64 69 6e 67 0a 20 2a 0a 20 2a 2f 0a 66 Sending. *. */.f
0a70: 75 6e 63 74 69 6f 6e 20 73 65 6e 64 28 24 72 65 unction send($re
0a80: 71 75 65 73 74 29 20 7b 0a 20 20 20 20 67 6c 6f quest) {. glo
0a90: 62 61 6c 20 24 63 66 67 3b 0a 20 20 20 20 23 2d bal $cfg;. #-
0aa0: 2d 20 73 65 6e 64 20 71 75 65 72 79 0a 20 20 20 - send query.
0ab0: 20 24 63 20 3d 20 63 75 72 6c 5f 69 6e 69 74 28 $c = curl_init(
0ac0: 24 63 66 67 5b 22 75 72 6c 22 5d 29 3b 0a 20 20 $cfg["url"]);.
0ad0: 20 20 63 75 72 6c 5f 73 65 74 6f 70 74 5f 61 72 curl_setopt_ar
0ae0: 72 61 79 28 24 63 2c 20 5b 0a 20 20 20 20 20 20 ray($c, [.
0af0: 20 20 43 55 52 4c 4f 50 54 5f 50 4f 53 54 20 3d CURLOPT_POST =
0b00: 3e 20 31 2c 0a 20 20 20 20 20 20 20 20 43 55 52 > 1,. CUR
0b10: 4c 4f 50 54 5f 50 4f 53 54 46 49 45 4c 44 53 20 LOPT_POSTFIELDS
0b20: 3d 3e 20 24 63 66 67 5b 22 6a 73 6f 6e 22 5d 20 => $cfg["json"]
0b30: 3f 20 6a 73 6f 6e 5f 65 6e 63 6f 64 65 28 24 72 ? json_encode($r
0b40: 65 71 75 65 73 74 2c 20 4a 53 4f 4e 5f 50 52 45 equest, JSON_PRE
0b50: 54 54 59 5f 50 52 49 4e 54 29 20 3a 20 24 72 65 TTY_PRINT) : $re
0b60: 71 75 65 73 74 2c 0a 20 20 20 20 20 20 20 20 43 quest,. C
0b70: 55 52 4c 4f 50 54 5f 56 45 52 42 4f 53 45 20 3d URLOPT_VERBOSE =
0b80: 3e 20 31 2c 0a 20 20 20 20 5d 29 3b 0a 20 20 20 > 1,. ]);.
0b90: 20 24 63 2d 3e 65 78 65 63 28 29 3b 0a 7d 0a 0a $c->exec();.}..
0ba0: 0a 0a 2f 2a 2a 0a 20 2a 20 44 65 66 69 6e 65 20 ../**. * Define
0bb0: 61 20 66 6f 73 73 69 6c 2d 73 74 79 6c 65 20 77 a fossil-style w
0bc0: 65 62 68 6f 6f 6b 20 70 61 79 6c 6f 61 64 2e 0a ebhook payload..
0bd0: 20 2a 0a 20 2a 2f 0a 66 75 6e 63 74 69 6f 6e 20 *. */.function
0be0: 66 6f 73 73 69 6c 5f 72 65 71 75 65 73 74 28 29 fossil_request()
0bf0: 20 7b 0a 20 20 20 20 67 6c 6f 62 61 6c 20 24 63 {. global $c
0c00: 66 67 3b 0a 20 20 20 20 24 75 72 6c 20 3d 20 67 fg;. $url = g
0c10: 65 74 5f 62 61 73 65 75 72 6c 28 29 3b 0a 20 20 et_baseurl();.
0c20: 20 20 72 65 74 75 72 6e 20 5b 0a 20 20 20 20 20 return [.
0c30: 20 20 20 27 24 74 79 70 65 27 20 3d 3e 20 22 77 '$type' => "w
0c40: 65 62 68 6f 6f 6b 22 2c 0a 20 20 20 20 20 20 20 ebhook",.
0c50: 20 27 24 63 6c 61 73 73 27 20 3d 3e 20 22 76 63 '$class' => "vc
0c60: 73 20 66 6f 73 73 69 6c 22 2c 0a 20 20 20 20 20 s fossil",.
0c70: 20 20 20 27 24 76 65 72 27 20 3d 3e 20 22 30 2e '$ver' => "0.
0c80: 31 22 2c 0a 20 20 20 20 20 20 20 20 22 61 63 74 1",. "act
0c90: 69 6f 6e 22 20 3d 3e 20 6d 61 69 6e 5f 61 63 74 ion" => main_act
0ca0: 69 6f 6e 28 24 63 66 67 5b 22 61 72 74 69 66 61 ion($cfg["artifa
0cb0: 63 74 73 22 5d 29 2c 0a 09 22 66 6f 73 73 69 6c cts"]),.."fossil
0cc0: 22 20 3d 3e 20 67 65 74 5f 63 6f 6e 66 69 67 28 " => get_config(
0cd0: 22 73 65 72 76 65 72 2d 63 6f 64 65 22 29 2c 0a "server-code"),.
0ce0: 09 22 75 72 6c 22 20 3d 3e 20 24 75 72 6c 2c 0a ."url" => $url,.
0cf0: 20 20 20 20 20 20 20 20 22 70 72 6f 6a 65 63 74 "project
0d00: 22 20 3d 3e 20 5b 0a 20 20 20 20 20 20 20 20 20 " => [.
0d10: 20 20 20 22 6e 61 6d 65 22 20 3d 3e 20 67 65 74 "name" => get
0d20: 5f 62 61 73 65 6e 61 6d 65 28 29 2c 0a 20 20 20 _basename(),.
0d30: 20 20 20 20 20 20 20 20 20 22 74 69 74 6c 65 22 "title"
0d40: 20 3d 3e 20 67 65 74 5f 63 6f 6e 66 69 67 28 22 => get_config("
0d50: 70 72 6f 6a 65 63 74 2d 6e 61 6d 65 22 29 2c 0a project-name"),.
0d60: 20 20 20 20 20 20 20 20 20 20 20 20 22 64 65 73 "des
0d70: 63 72 69 70 74 69 6f 6e 22 20 3d 3e 20 67 65 74 cription" => get
0d80: 5f 63 6f 6e 66 69 67 28 22 70 72 6f 6a 65 63 74 _config("project
0d90: 2d 64 65 73 63 72 69 70 74 69 6f 6e 22 29 2c 0a -description"),.
0da0: 20 20 20 20 20 20 20 20 20 20 20 20 22 73 69 7a "siz
0db0: 65 22 20 3d 3e 20 66 69 6c 65 73 69 7a 65 28 24 e" => filesize($
0dc0: 63 66 67 5b 22 72 65 70 6f 22 5d 29 2c 0a 20 20 cfg["repo"]),.
0dd0: 20 20 20 20 20 20 20 20 20 20 22 69 64 22 20 3d "id" =
0de0: 3e 20 67 65 74 5f 63 6f 6e 66 69 67 28 22 70 72 > get_config("pr
0df0: 6f 6a 65 63 74 2d 63 6f 64 65 22 29 2c 0a 20 20 oject-code"),.
0e00: 20 20 20 20 20 20 20 20 20 20 22 75 72 6c 5f 73 "url_s
0e10: 74 61 74 22 20 3d 3e 20 22 24 75 72 6c 2f 6a 73 tat" => "$url/js
0e20: 6f 6e 2f 73 74 61 74 22 2c 0a 20 20 20 20 20 20 on/stat",.
0e30: 20 20 20 20 20 20 22 75 72 6c 5f 74 69 6d 65 6c "url_timel
0e40: 69 6e 65 22 20 3d 3e 20 22 24 75 72 6c 2f 6a 73 ine" => "$url/js
0e50: 6f 6e 2f 74 69 6d 65 6c 69 6e 65 2f 63 68 65 63 on/timeline/chec
0e60: 6b 69 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 kin",.
0e70: 20 20 22 75 72 6c 5f 64 69 72 22 20 3d 3e 20 22 "url_dir" => "
0e80: 24 75 72 6c 2f 6a 73 6f 6e 2f 64 69 72 22 2c 0a $url/json/dir",.
0e90: 20 20 20 20 20 20 20 20 20 20 20 20 22 75 72 6c "url
0ea0: 5f 74 72 65 65 73 22 20 3d 3e 20 22 24 75 72 6c _trees" => "$url
0eb0: 2f 65 78 74 2f 74 72 65 65 73 22 2c 0a 20 20 20 /ext/trees",.
0ec0: 20 20 20 20 20 5d 2c 0a 20 20 20 20 20 20 20 20 ],.
0ed0: 22 61 72 74 69 66 61 63 74 73 22 20 3d 3e 20 61 "artifacts" => a
0ee0: 72 72 61 79 5f 6d 61 70 28 0a 20 20 20 20 20 20 rray_map(.
0ef0: 20 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 28 24 function($
0f00: 72 6f 77 29 20 75 73 65 28 24 75 72 6c 29 20 7b row) use($url) {
0f10: 20 72 65 74 75 72 6e 20 65 78 70 61 6e 64 5f 61 return expand_a
0f20: 72 74 69 66 61 63 74 28 24 72 6f 77 2c 20 24 75 rtifact($row, $u
0f30: 72 6c 29 3b 20 7d 2c 0a 20 20 20 20 20 20 20 20 rl); },.
0f40: 20 20 20 20 67 65 74 5f 61 72 74 69 66 61 63 74 get_artifact
0f50: 73 28 24 63 66 67 5b 22 61 72 74 69 66 61 63 74 s($cfg["artifact
0f60: 73 22 5d 29 0a 20 20 20 20 20 20 20 20 29 2c 0a s"]). ),.
0f70: 20 20 20 20 20 20 20 20 22 75 73 65 72 22 20 3d "user" =
0f80: 3e 20 24 63 66 67 5b 22 75 73 65 72 22 5d 2c 0a > $cfg["user"],.
0f90: 09 22 74 69 6d 65 73 74 61 6d 70 22 20 3d 3e 20 ."timestamp" =>
0fa0: 74 69 6d 65 28 29 2c 0a 20 20 20 20 20 20 20 20 time(),.
0fb0: 22 70 72 6f 63 54 69 6d 65 4d 73 22 20 3d 3e 20 "procTimeMs" =>
0fc0: 20 31 30 30 30 20 2a 20 28 6d 69 63 72 6f 74 69 1000 * (microti
0fd0: 6d 65 28 54 52 55 45 29 20 2d 20 24 63 66 67 5b me(TRUE) - $cfg[
0fe0: 22 73 74 61 72 74 22 5d 29 2c 0a 20 20 20 20 5d "start"]),. ]
0ff0: 3b 0a 7d 0a 0a 0a 2f 2a 2a 0a 20 2a 20 4d 6f 72 ;.}.../**. * Mor
1000: 65 20 62 61 73 69 63 20 70 61 79 6c 6f 61 64 0a e basic payload.
1010: 20 2a 0a 20 2a 2f 0a 66 75 6e 63 74 69 6f 6e 20 *. */.function
1020: 62 61 73 69 63 5f 70 69 6e 67 28 29 20 7b 0a 20 basic_ping() {.
1030: 20 20 20 67 6c 6f 62 61 6c 20 24 63 66 67 3b 0a global $cfg;.
1040: 20 20 20 20 24 75 72 6c 20 3d 20 67 65 74 5f 62 $url = get_b
1050: 61 73 65 75 72 6c 28 29 3b 0a 20 20 20 20 72 65 aseurl();. re
1060: 74 75 72 6e 20 5b 0a 20 20 20 20 20 20 20 20 27 turn [. '
1070: 24 74 79 70 65 27 20 3d 3e 20 22 77 65 62 68 6f $type' => "webho
1080: 6f 6b 22 2c 0a 20 20 20 20 20 20 20 20 27 24 63 ok",. '$c
1090: 6c 61 73 73 27 20 3d 3e 20 22 70 69 6e 67 20 62 lass' => "ping b
10a0: 61 73 69 63 22 2c 0a 20 20 20 20 20 20 20 20 22 asic",. "
10b0: 61 63 74 69 6f 6e 22 20 3d 3e 20 22 65 64 69 74 action" => "edit
10c0: 65 64 22 2c 0a 09 22 75 72 6c 22 20 3d 3e 20 24 ed",.."url" => $
10d0: 75 72 6c 2c 0a 09 22 6e 61 6d 65 22 20 3d 3e 20 url,.."name" =>
10e0: 67 65 74 5f 62 61 73 65 6e 61 6d 65 28 29 2c 0a get_basename(),.
10f0: 20 20 20 20 20 20 20 20 22 73 74 64 69 6e 22 20 "stdin"
1100: 3d 3e 20 24 63 66 67 5b 22 61 72 74 69 66 61 63 => $cfg["artifac
1110: 74 73 22 5d 2c 0a 09 22 74 69 6d 65 73 74 61 6d ts"],.."timestam
1120: 70 22 20 3d 3e 20 74 69 6d 65 28 29 2c 0a 20 20 p" => time(),.
1130: 20 20 5d 3b 0a 7d 0a 0a 20 0a 2f 2a 2a 0a 20 2a ];.}.. ./**. *
1140: 20 53 69 6d 75 6c 61 74 65 20 47 69 74 48 75 62 Simulate GitHub
1150: 2d 73 74 79 6c 65 20 77 65 62 68 6f 6f 6b 2e 0a -style webhook..
1160: 20 2a 20 28 55 6e 6c 69 6b 65 6c 79 20 74 68 61 * (Unlikely tha
1170: 74 20 77 65 20 63 61 6e 20 66 69 6c 6c 20 69 6e t we can fill in
1180: 20 61 6c 6c 20 74 68 65 20 6d 69 6e 75 74 61 65 all the minutae
1190: 2e 29 0a 20 2a 0a 20 2a 2f 0a 66 75 6e 63 74 69 .). *. */.functi
11a0: 6f 6e 20 67 69 74 5f 72 65 71 75 65 73 74 28 29 on git_request()
11b0: 20 7b 0a 20 20 20 20 67 6c 6f 62 61 6c 20 24 63 {. global $c
11c0: 66 67 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 5b fg;. return [
11d0: 0a 20 20 20 20 20 20 27 61 63 74 69 6f 6e 27 20 . 'action'
11e0: 3d 3e 20 27 65 64 69 74 65 64 27 2c 0a 20 20 20 => 'edited',.
11f0: 20 20 20 27 72 75 6c 65 27 20 3d 3e 20 5b 0a 20 'rule' => [.
1200: 20 20 20 20 20 20 20 27 69 64 27 20 3d 3e 20 63 'id' => c
1210: 72 63 33 32 28 24 63 66 67 5b 22 61 72 74 69 66 rc32($cfg["artif
1220: 61 63 74 73 22 5d 29 2c 0a 20 20 20 20 20 20 20 acts"]),.
1230: 20 27 72 65 70 6f 73 69 74 6f 72 79 5f 69 64 27 'repository_id'
1240: 20 3d 3e 20 24 72 65 70 5f 69 64 20 3d 20 68 65 => $rep_id = he
1250: 78 64 65 63 28 73 75 62 73 74 72 28 67 65 74 5f xdec(substr(get_
1260: 63 6f 6e 66 69 67 28 22 70 72 6f 6a 65 63 74 2d config("project-
1270: 63 6f 64 65 22 2c 20 22 31 32 46 46 46 46 22 29 code", "12FFFF")
1280: 2c 20 30 2c 20 36 29 29 2c 0a 20 20 20 20 20 20 , 0, 6)),.
1290: 20 20 27 6e 61 6d 65 27 20 3d 3e 20 24 62 61 73 'name' => $bas
12a0: 65 6e 61 6d 65 20 3d 20 67 65 74 5f 62 61 73 65 ename = get_base
12b0: 6e 61 6d 65 28 29 2c 0a 20 20 20 20 20 20 20 20 name(),.
12c0: 27 63 72 65 61 74 65 64 5f 61 74 27 20 3d 3e 20 'created_at' =>
12d0: 69 73 6f 38 36 30 31 28 6d 74 69 6d 65 5f 65 76 iso8601(mtime_ev
12e0: 65 6e 74 28 22 4d 49 4e 22 29 29 2c 0a 20 20 20 ent("MIN")),.
12f0: 20 20 20 20 20 27 75 70 64 61 74 65 64 5f 61 74 'updated_at
1300: 27 20 3d 3e 20 69 73 6f 38 36 30 31 28 6d 74 69 ' => iso8601(mti
1310: 6d 65 5f 65 76 65 6e 74 28 22 4d 41 58 22 29 29 me_event("MAX"))
1320: 2c 0a 20 20 20 20 20 20 20 20 27 70 75 6c 6c 5f ,. 'pull_
1330: 72 65 71 75 65 73 74 5f 72 65 76 69 65 77 73 5f request_reviews_
1340: 65 6e 66 6f 72 63 65 6d 65 6e 74 5f 6c 65 76 65 enforcement_leve
1350: 6c 27 20 3d 3e 20 27 6f 66 66 27 2c 0a 20 20 20 l' => 'off',.
1360: 20 20 20 20 20 27 72 65 71 75 69 72 65 64 5f 61 'required_a
1370: 70 70 72 6f 76 69 6e 67 5f 72 65 76 69 65 77 5f pproving_review_
1380: 63 6f 75 6e 74 27 20 3d 3e 20 30 2c 0a 20 20 20 count' => 0,.
1390: 20 20 20 20 20 27 64 69 73 6d 69 73 73 5f 73 74 'dismiss_st
13a0: 61 6c 65 5f 72 65 76 69 65 77 73 5f 6f 6e 5f 70 ale_reviews_on_p
13b0: 75 73 68 27 20 3d 3e 20 66 61 6c 73 65 2c 0a 20 ush' => false,.
13c0: 20 20 20 20 20 20 20 27 72 65 71 75 69 72 65 5f 'require_
13d0: 63 6f 64 65 5f 6f 77 6e 65 72 5f 72 65 76 69 65 code_owner_revie
13e0: 77 27 20 3d 3e 20 66 61 6c 73 65 2c 0a 20 20 20 w' => false,.
13f0: 20 20 20 20 20 27 61 75 74 68 6f 72 69 7a 65 64 'authorized
1400: 5f 64 69 73 6d 69 73 73 61 6c 5f 61 63 74 6f 72 _dismissal_actor
1410: 73 5f 6f 6e 6c 79 27 20 3d 3e 20 66 61 6c 73 65 s_only' => false
1420: 2c 0a 20 20 20 20 20 20 20 20 27 69 67 6e 6f 72 ,. 'ignor
1430: 65 5f 61 70 70 72 6f 76 61 6c 73 5f 66 72 6f 6d e_approvals_from
1440: 5f 63 6f 6e 74 72 69 62 75 74 6f 72 73 27 20 3d _contributors' =
1450: 3e 20 66 61 6c 73 65 2c 0a 20 20 20 20 20 20 20 > false,.
1460: 20 27 72 65 71 75 69 72 65 64 5f 73 74 61 74 75 'required_statu
1470: 73 5f 63 68 65 63 6b 73 27 20 3d 3e 20 5b 0a 20 s_checks' => [.
1480: 20 20 20 20 20 20 20 20 20 30 20 3d 3e 20 27 62 0 => 'b
1490: 61 73 69 63 2d 43 49 27 2c 0a 20 20 20 20 20 20 asic-CI',.
14a0: 20 20 5d 2c 0a 20 20 20 20 20 20 20 20 27 72 65 ],. 're
14b0: 71 75 69 72 65 64 5f 73 74 61 74 75 73 5f 63 68 quired_status_ch
14c0: 65 63 6b 73 5f 65 6e 66 6f 72 63 65 6d 65 6e 74 ecks_enforcement
14d0: 5f 6c 65 76 65 6c 27 20 3d 3e 20 27 6e 6f 6e 5f _level' => 'non_
14e0: 61 64 6d 69 6e 73 27 2c 0a 20 20 20 20 20 20 20 admins',.
14f0: 20 27 73 74 72 69 63 74 5f 72 65 71 75 69 72 65 'strict_require
1500: 64 5f 73 74 61 74 75 73 5f 63 68 65 63 6b 73 5f d_status_checks_
1510: 70 6f 6c 69 63 79 27 20 3d 3e 20 66 61 6c 73 65 policy' => false
1520: 2c 0a 20 20 20 20 20 20 20 20 27 73 69 67 6e 61 ,. 'signa
1530: 74 75 72 65 5f 72 65 71 75 69 72 65 6d 65 6e 74 ture_requirement
1540: 5f 65 6e 66 6f 72 63 65 6d 65 6e 74 5f 6c 65 76 _enforcement_lev
1550: 65 6c 27 20 3d 3e 20 27 6f 66 66 27 2c 0a 20 20 el' => 'off',.
1560: 20 20 20 20 20 20 27 6c 69 6e 65 61 72 5f 68 69 'linear_hi
1570: 73 74 6f 72 79 5f 72 65 71 75 69 72 65 6d 65 6e story_requiremen
1580: 74 5f 65 6e 66 6f 72 63 65 6d 65 6e 74 5f 6c 65 t_enforcement_le
1590: 76 65 6c 27 20 3d 3e 20 27 6f 66 66 27 2c 0a 20 vel' => 'off',.
15a0: 20 20 20 20 20 20 20 27 61 64 6d 69 6e 5f 65 6e 'admin_en
15b0: 66 6f 72 63 65 64 27 20 3d 3e 20 66 61 6c 73 65 forced' => false
15c0: 2c 0a 20 20 20 20 20 20 20 20 27 61 6c 6c 6f 77 ,. 'allow
15d0: 5f 66 6f 72 63 65 5f 70 75 73 68 65 73 5f 65 6e _force_pushes_en
15e0: 66 6f 72 63 65 6d 65 6e 74 5f 6c 65 76 65 6c 27 forcement_level'
15f0: 20 3d 3e 20 27 6f 66 66 27 2c 0a 20 20 20 20 20 => 'off',.
1600: 20 20 20 27 61 6c 6c 6f 77 5f 64 65 6c 65 74 69 'allow_deleti
1610: 6f 6e 73 5f 65 6e 66 6f 72 63 65 6d 65 6e 74 5f ons_enforcement_
1620: 6c 65 76 65 6c 27 20 3d 3e 20 27 6f 66 66 27 2c level' => 'off',
1630: 0a 20 20 20 20 20 20 20 20 27 6d 65 72 67 65 5f . 'merge_
1640: 71 75 65 75 65 5f 65 6e 66 6f 72 63 65 6d 65 6e queue_enforcemen
1650: 74 5f 6c 65 76 65 6c 27 20 3d 3e 20 27 6f 66 66 t_level' => 'off
1660: 27 2c 0a 20 20 20 20 20 20 20 20 27 72 65 71 75 ',. 'requ
1670: 69 72 65 64 5f 64 65 70 6c 6f 79 6d 65 6e 74 73 ired_deployments
1680: 5f 65 6e 66 6f 72 63 65 6d 65 6e 74 5f 6c 65 76 _enforcement_lev
1690: 65 6c 27 20 3d 3e 20 27 6f 66 66 27 2c 0a 20 20 el' => 'off',.
16a0: 20 20 20 20 20 20 27 72 65 71 75 69 72 65 64 5f 'required_
16b0: 63 6f 6e 76 65 72 73 61 74 69 6f 6e 5f 72 65 73 conversation_res
16c0: 6f 6c 75 74 69 6f 6e 5f 6c 65 76 65 6c 27 20 3d olution_level' =
16d0: 3e 20 27 6f 66 66 27 2c 0a 20 20 20 20 20 20 20 > 'off',.
16e0: 20 27 61 75 74 68 6f 72 69 7a 65 64 5f 61 63 74 'authorized_act
16f0: 6f 72 73 5f 6f 6e 6c 79 27 20 3d 3e 20 74 72 75 ors_only' => tru
1700: 65 2c 0a 20 20 20 20 20 20 20 20 27 61 75 74 68 e,. 'auth
1710: 6f 72 69 7a 65 64 5f 61 63 74 6f 72 5f 6e 61 6d orized_actor_nam
1720: 65 73 27 20 3d 3e 20 5b 0a 20 20 20 20 20 20 20 es' => [.
1730: 20 20 20 30 20 3d 3e 20 24 75 73 65 72 20 3d 20 0 => $user =
1740: 67 65 74 5f 6d 61 69 6e 5f 75 73 65 72 28 29 2c get_main_user(),
1750: 0a 20 20 20 20 20 20 20 20 5d 2c 0a 20 20 20 20 . ],.
1760: 20 20 5d 2c 0a 20 20 20 20 20 20 27 63 68 61 6e ],. 'chan
1770: 67 65 73 27 20 3d 3e 20 5b 0a 20 20 20 20 20 20 ges' => [.
1780: 20 20 27 61 75 74 68 6f 72 69 7a 65 64 5f 61 63 'authorized_ac
1790: 74 6f 72 73 5f 6f 6e 6c 79 27 20 3d 3e 20 5b 0a tors_only' => [.
17a0: 20 20 20 20 20 20 20 20 20 20 27 66 72 6f 6d 27 'from'
17b0: 20 3d 3e 20 66 61 6c 73 65 2c 0a 20 20 20 20 20 => false,.
17c0: 20 20 20 5d 2c 0a 20 20 20 20 20 20 20 20 27 61 ],. 'a
17d0: 75 74 68 6f 72 69 7a 65 64 5f 61 63 74 6f 72 5f uthorized_actor_
17e0: 6e 61 6d 65 73 27 20 3d 3e 20 5b 0a 20 20 20 20 names' => [.
17f0: 20 20 20 20 20 20 27 66 72 6f 6d 27 20 3d 3e 20 'from' =>
1800: 5b 0a 20 20 20 20 20 20 20 20 20 20 5d 2c 0a 20 [. ],.
1810: 20 20 20 20 20 20 20 5d 2c 0a 20 20 20 20 20 20 ],.
1820: 5d 2c 0a 20 20 20 20 20 20 27 72 65 70 6f 73 69 ],. 'reposi
1830: 74 6f 72 79 27 20 3d 3e 20 5b 0a 20 20 20 20 20 tory' => [.
1840: 20 20 20 27 69 64 27 20 3d 3e 20 24 72 65 70 5f 'id' => $rep_
1850: 69 64 2c 0a 20 20 20 20 20 20 20 20 27 6e 6f 64 id,. 'nod
1860: 65 5f 69 64 27 20 3d 3e 20 27 4d 44 45 77 4f 6c e_id' => 'MDEwOl
1870: 4a 6c 63 47 39 7a 61 58 52 76 63 6e 6b 78 4e 7a JlcG9zaXRvcnkxNz
1880: 49 33 4d 7a 41 31 4d 51 3d 3d 27 2c 0a 20 20 20 I3MzA1MQ==',.
1890: 20 20 20 20 20 27 6e 61 6d 65 27 20 3d 3e 20 27 'name' => '
18a0: 6f 63 74 6f 2d 72 65 70 6f 27 2c 0a 20 20 20 20 octo-repo',.
18b0: 20 20 20 20 27 66 75 6c 6c 5f 6e 61 6d 65 27 20 'full_name'
18c0: 3d 3e 20 27 6f 63 74 6f 2d 6f 72 67 2f 6f 63 74 => 'octo-org/oct
18d0: 6f 2d 72 65 70 6f 27 2c 0a 20 20 20 20 20 20 20 o-repo',.
18e0: 20 27 70 72 69 76 61 74 65 27 20 3d 3e 20 74 72 'private' => tr
18f0: 75 65 2c 0a 20 20 20 20 20 20 20 20 27 6f 77 6e ue,. 'own
1900: 65 72 27 20 3d 3e 20 5b 0a 20 20 20 20 20 20 20 er' => [.
1910: 20 20 20 27 6c 6f 67 69 6e 27 20 3d 3e 20 27 6f 'login' => 'o
1920: 63 74 6f 2d 6f 72 67 27 2c 0a 20 20 20 20 20 20 cto-org',.
1930: 20 20 20 20 27 69 64 27 20 3d 3e 20 36 38 31 31 'id' => 6811
1940: 36 37 32 2c 0a 20 20 20 20 20 20 20 20 20 20 27 672,. '
1950: 6e 6f 64 65 5f 69 64 27 20 3d 3e 20 27 4d 44 45 node_id' => 'MDE
1960: 79 4f 6b 39 79 5a 32 46 75 61 58 70 68 64 47 6c yOk9yZ2FuaXphdGl
1970: 76 62 6a 59 34 4d 54 45 32 4e 7a 49 3d 27 2c 0a vbjY4MTE2NzI=',.
1980: 20 20 20 20 20 20 20 20 20 20 27 61 76 61 74 61 'avata
1990: 72 5f 75 72 6c 27 20 3d 3e 20 27 68 74 74 70 73 r_url' => 'https
19a0: 3a 2f 2f 61 76 61 74 61 72 73 2e 67 69 74 68 75 ://avatars.githu
19b0: 62 75 73 65 72 63 6f 6e 74 65 6e 74 2e 63 6f 6d busercontent.com
19c0: 2f 75 2f 36 38 31 31 36 37 32 3f 76 3d 34 27 2c /u/6811672?v=4',
19d0: 0a 20 20 20 20 20 20 20 20 20 20 27 67 72 61 76 . 'grav
19e0: 61 74 61 72 5f 69 64 27 20 3d 3e 20 27 27 2c 0a atar_id' => '',.
19f0: 20 20 20 20 20 20 20 20 20 20 27 75 72 6c 27 20 'url'
1a00: 3d 3e 20 27 68 74 74 70 73 3a 2f 2f 61 70 69 2e => 'https://api.
1a10: 67 69 74 68 75 62 2e 63 6f 6d 2f 75 73 65 72 73 github.com/users
1a20: 2f 6f 63 74 6f 2d 6f 72 67 27 2c 0a 20 20 20 20 /octo-org',.
1a30: 20 20 20 20 20 20 27 68 74 6d 6c 5f 75 72 6c 27 'html_url'
1a40: 20 3d 3e 20 27 68 74 74 70 73 3a 2f 2f 67 69 74 => 'https://git
1a50: 68 75 62 2e 63 6f 6d 2f 6f 63 74 6f 2d 6f 72 67 hub.com/octo-org
1a60: 27 2c 0a 20 20 20 20 20 20 20 20 20 20 27 66 6f ',. 'fo
1a70: 6c 6c 6f 77 65 72 73 5f 75 72 6c 27 20 3d 3e 20 llowers_url' =>
1a80: 27 68 74 74 70 73 3a 2f 2f 61 70 69 2e 67 69 74 'https://api.git
1a90: 68 75 62 2e 63 6f 6d 2f 75 73 65 72 73 2f 6f 63 hub.com/users/oc
1aa0: 74 6f 2d 6f 72 67 2f 66 6f 6c 6c 6f 77 65 72 73 to-org/followers
1ab0: 27 2c 0a 20 20 20 20 20 20 20 20 20 20 27 66 6f ',. 'fo
1ac0: 6c 6c 6f 77 69 6e 67 5f 75 72 6c 27 20 3d 3e 20 llowing_url' =>
1ad0: 27 68 74 74 70 73 3a 2f 2f 61 70 69 2e 67 69 74 'https://api.git
1ae0: 68 75 62 2e 63 6f 6d 2f 75 73 65 72 73 2f 6f 63 hub.com/users/oc
1af0: 74 6f 2d 6f 72 67 2f 66 6f 6c 6c 6f 77 69 6e 67 to-org/following
1b00: 7b 2f 6f 74 68 65 72 5f 75 73 65 72 7d 27 2c 0a {/other_user}',.
1b10: 20 20 20 20 20 20 20 20 20 20 27 67 69 73 74 73 'gists
1b20: 5f 75 72 6c 27 20 3d 3e 20 27 68 74 74 70 73 3a _url' => 'https:
1b30: 2f 2f 61 70 69 2e 67 69 74 68 75 62 2e 63 6f 6d //api.github.com
1b40: 2f 75 73 65 72 73 2f 6f 63 74 6f 2d 6f 72 67 2f /users/octo-org/
1b50: 67 69 73 74 73 7b 2f 67 69 73 74 5f 69 64 7d 27 gists{/gist_id}'
1b60: 2c 0a 20 20 20 20 20 20 20 20 20 20 27 73 74 61 ,. 'sta
1b70: 72 72 65 64 5f 75 72 6c 27 20 3d 3e 20 27 68 74 rred_url' => 'ht
1b80: 74 70 73 3a 2f 2f 61 70 69 2e 67 69 74 68 75 62 tps://api.github
1b90: 2e 63 6f 6d 2f 75 73 65 72 73 2f 6f 63 74 6f 2d .com/users/octo-
1ba0: 6f 72 67 2f 73 74 61 72 72 65 64 7b 2f 6f 77 6e org/starred{/own
1bb0: 65 72 7d 7b 2f 72 65 70 6f 7d 27 2c 0a 20 20 20 er}{/repo}',.
1bc0: 20 20 20 20 20 20 20 27 73 75 62 73 63 72 69 70 'subscrip
1bd0: 74 69 6f 6e 73 5f 75 72 6c 27 20 3d 3e 20 27 68 tions_url' => 'h
1be0: 74 74 70 73 3a 2f 2f 61 70 69 2e 67 69 74 68 75 ttps://api.githu
1bf0: 62 2e 63 6f 6d 2f 75 73 65 72 73 2f 6f 63 74 6f b.com/users/octo
1c00: 2d 6f 72 67 2f 73 75 62 73 63 72 69 70 74 69 6f -org/subscriptio
1c10: 6e 73 27 2c 0a 20 20 20 20 20 20 20 20 20 20 27 ns',. '
1c20: 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 73 5f 75 72 organizations_ur
1c30: 6c 27 20 3d 3e 20 27 68 74 74 70 73 3a 2f 2f 61 l' => 'https://a
1c40: 70 69 2e 67 69 74 68 75 62 2e 63 6f 6d 2f 75 73 pi.github.com/us
1c50: 65 72 73 2f 6f 63 74 6f 2d 6f 72 67 2f 6f 72 67 ers/octo-org/org
1c60: 73 27 2c 0a 20 20 20 20 20 20 20 20 20 20 27 72 s',. 'r
1c70: 65 70 6f 73 5f 75 72 6c 27 20 3d 3e 20 27 68 74 epos_url' => 'ht
1c80: 74 70 73 3a 2f 2f 61 70 69 2e 67 69 74 68 75 62 tps://api.github
1c90: 2e 63 6f 6d 2f 75 73 65 72 73 2f 6f 63 74 6f 2d .com/users/octo-
1ca0: 6f 72 67 2f 72 65 70 6f 73 27 2c 0a 20 20 20 20 org/repos',.
1cb0: 20 20 20 20 20 20 27 65 76 65 6e 74 73 5f 75 72 'events_ur
1cc0: 6c 27 20 3d 3e 20 27 68 74 74 70 73 3a 2f 2f 61 l' => 'https://a
1cd0: 70 69 2e 67 69 74 68 75 62 2e 63 6f 6d 2f 75 73 pi.github.com/us
1ce0: 65 72 73 2f 6f 63 74 6f 2d 6f 72 67 2f 65 76 65 ers/octo-org/eve
1cf0: 6e 74 73 7b 2f 70 72 69 76 61 63 79 7d 27 2c 0a nts{/privacy}',.
1d00: 20 20 20 20 20 20 20 20 20 20 27 72 65 63 65 69 'recei
1d10: 76 65 64 5f 65 76 65 6e 74 73 5f 75 72 6c 27 20 ved_events_url'
1d20: 3d 3e 20 27 68 74 74 70 73 3a 2f 2f 61 70 69 2e => 'https://api.
1d30: 67 69 74 68 75 62 2e 63 6f 6d 2f 75 73 65 72 73 github.com/users
1d40: 2f 6f 63 74 6f 2d 6f 72 67 2f 72 65 63 65 69 76 /octo-org/receiv
1d50: 65 64 5f 65 76 65 6e 74 73 27 2c 0a 20 20 20 20 ed_events',.
1d60: 20 20 20 20 20 20 27 74 79 70 65 27 20 3d 3e 20 'type' =>
1d70: 27 4f 72 67 61 6e 69 7a 61 74 69 6f 6e 27 2c 0a 'Organization',.
1d80: 20 20 20 20 20 20 20 20 20 20 27 73 69 74 65 5f 'site_
1d90: 61 64 6d 69 6e 27 20 3d 3e 20 66 61 6c 73 65 2c admin' => false,
1da0: 0a 20 20 20 20 20 20 20 20 5d 2c 0a 20 20 20 20 . ],.
1db0: 20 20 20 20 27 68 74 6d 6c 5f 75 72 6c 27 20 3d 'html_url' =
1dc0: 3e 20 27 68 74 74 70 73 3a 2f 2f 67 69 74 68 75 > 'https://githu
1dd0: 62 2e 63 6f 6d 2f 6f 63 74 6f 2d 6f 72 67 2f 6f b.com/octo-org/o
1de0: 63 74 6f 2d 72 65 70 6f 27 2c 0a 20 20 20 20 20 cto-repo',.
1df0: 20 20 20 27 64 65 73 63 72 69 70 74 69 6f 6e 27 'description'
1e00: 20 3d 3e 20 27 4d 79 20 66 69 72 73 74 20 72 65 => 'My first re
1e10: 70 6f 20 6f 6e 20 47 69 74 48 75 62 21 27 2c 0a po on GitHub!',.
1e20: 20 20 20 20 20 20 20 20 27 66 6f 72 6b 27 20 3d 'fork' =
1e30: 3e 20 66 61 6c 73 65 2c 0a 20 20 20 20 20 20 20 > false,.
1e40: 20 27 75 72 6c 27 20 3d 3e 20 27 68 74 74 70 73 'url' => 'https
1e50: 3a 2f 2f 61 70 69 2e 67 69 74 68 75 62 2e 63 6f ://api.github.co
1e60: 6d 2f 72 65 70 6f 73 2f 6f 63 74 6f 2d 6f 72 67 m/repos/octo-org
1e70: 2f 6f 63 74 6f 2d 72 65 70 6f 27 2c 0a 20 20 20 /octo-repo',.
1e80: 20 20 20 20 20 27 66 6f 72 6b 73 5f 75 72 6c 27 'forks_url'
1e90: 20 3d 3e 20 27 68 74 74 70 73 3a 2f 2f 61 70 69 => 'https://api
1ea0: 2e 67 69 74 68 75 62 2e 63 6f 6d 2f 72 65 70 6f .github.com/repo
1eb0: 73 2f 6f 63 74 6f 2d 6f 72 67 2f 6f 63 74 6f 2d s/octo-org/octo-
1ec0: 72 65 70 6f 2f 66 6f 72 6b 73 27 2c 0a 20 20 20 repo/forks',.
1ed0: 20 20 20 20 20 27 6b 65 79 73 5f 75 72 6c 27 20 'keys_url'
1ee0: 3d 3e 20 27 68 74 74 70 73 3a 2f 2f 61 70 69 2e => 'https://api.
1ef0: 67 69 74 68 75 62 2e 63 6f 6d 2f 72 65 70 6f 73 github.com/repos
1f00: 2f 6f 63 74 6f 2d 6f 72 67 2f 6f 63 74 6f 2d 72 /octo-org/octo-r
1f10: 65 70 6f 2f 6b 65 79 73 7b 2f 6b 65 79 5f 69 64 epo/keys{/key_id
1f20: 7d 27 2c 0a 20 20 20 20 20 20 20 20 27 63 6f 6c }',. 'col
1f30: 6c 61 62 6f 72 61 74 6f 72 73 5f 75 72 6c 27 20 laborators_url'
1f40: 3d 3e 20 27 68 74 74 70 73 3a 2f 2f 61 70 69 2e => 'https://api.
1f50: 67 69 74 68 75 62 2e 63 6f 6d 2f 72 65 70 6f 73 github.com/repos
1f60: 2f 6f 63 74 6f 2d 6f 72 67 2f 6f 63 74 6f 2d 72 /octo-org/octo-r
1f70: 65 70 6f 2f 63 6f 6c 6c 61 62 6f 72 61 74 6f 72 epo/collaborator
1f80: 73 7b 2f 63 6f 6c 6c 61 62 6f 72 61 74 6f 72 7d s{/collaborator}
1f90: 27 2c 0a 20 20 20 20 20 20 20 20 27 74 65 61 6d ',. 'team
1fa0: 73 5f 75 72 6c 27 20 3d 3e 20 27 68 74 74 70 73 s_url' => 'https
1fb0: 3a 2f 2f 61 70 69 2e 67 69 74 68 75 62 2e 63 6f ://api.github.co
1fc0: 6d 2f 72 65 70 6f 73 2f 6f 63 74 6f 2d 6f 72 67 m/repos/octo-org
1fd0: 2f 6f 63 74 6f 2d 72 65 70 6f 2f 74 65 61 6d 73 /octo-repo/teams
1fe0: 27 2c 0a 20 20 20 20 20 20 20 20 27 68 6f 6f 6b ',. 'hook
1ff0: 73 5f 75 72 6c 27 20 3d 3e 20 27 68 74 74 70 73 s_url' => 'https
2000: 3a 2f 2f 61 70 69 2e 67 69 74 68 75 62 2e 63 6f ://api.github.co
2010: 6d 2f 72 65 70 6f 73 2f 6f 63 74 6f 2d 6f 72 67 m/repos/octo-org
2020: 2f 6f 63 74 6f 2d 72 65 70 6f 2f 68 6f 6f 6b 73 /octo-repo/hooks
2030: 27 2c 0a 20 20 20 20 20 20 20 20 27 69 73 73 75 ',. 'issu
2040: 65 5f 65 76 65 6e 74 73 5f 75 72 6c 27 20 3d 3e e_events_url' =>
2050: 20 27 68 74 74 70 73 3a 2f 2f 61 70 69 2e 67 69 'https://api.gi
2060: 74 68 75 62 2e 63 6f 6d 2f 72 65 70 6f 73 2f 6f thub.com/repos/o
2070: 63 74 6f 2d 6f 72 67 2f 6f 63 74 6f 2d 72 65 70 cto-org/octo-rep
2080: 6f 2f 69 73 73 75 65 73 2f 65 76 65 6e 74 73 7b o/issues/events{
2090: 2f 6e 75 6d 62 65 72 7d 27 2c 0a 20 20 20 20 20 /number}',.
20a0: 20 20 20 27 65 76 65 6e 74 73 5f 75 72 6c 27 20 'events_url'
20b0: 3d 3e 20 27 68 74 74 70 73 3a 2f 2f 61 70 69 2e => 'https://api.
20c0: 67 69 74 68 75 62 2e 63 6f 6d 2f 72 65 70 6f 73 github.com/repos
20d0: 2f 6f 63 74 6f 2d 6f 72 67 2f 6f 63 74 6f 2d 72 /octo-org/octo-r
20e0: 65 70 6f 2f 65 76 65 6e 74 73 27 2c 0a 20 20 20 epo/events',.
20f0: 20 20 20 20 20 27 61 73 73 69 67 6e 65 65 73 5f 'assignees_
2100: 75 72 6c 27 20 3d 3e 20 27 68 74 74 70 73 3a 2f url' => 'https:/
2110: 2f 61 70 69 2e 67 69 74 68 75 62 2e 63 6f 6d 2f /api.github.com/
2120: 72 65 70 6f 73 2f 6f 63 74 6f 2d 6f 72 67 2f 6f repos/octo-org/o
2130: 63 74 6f 2d 72 65 70 6f 2f 61 73 73 69 67 6e 65 cto-repo/assigne
2140: 65 73 7b 2f 75 73 65 72 7d 27 2c 0a 20 20 20 20 es{/user}',.
2150: 20 20 20 20 27 62 72 61 6e 63 68 65 73 5f 75 72 'branches_ur
2160: 6c 27 20 3d 3e 20 27 68 74 74 70 73 3a 2f 2f 61 l' => 'https://a
2170: 70 69 2e 67 69 74 68 75 62 2e 63 6f 6d 2f 72 65 pi.github.com/re
2180: 70 6f 73 2f 6f 63 74 6f 2d 6f 72 67 2f 6f 63 74 pos/octo-org/oct
2190: 6f 2d 72 65 70 6f 2f 62 72 61 6e 63 68 65 73 7b o-repo/branches{
21a0: 2f 62 72 61 6e 63 68 7d 27 2c 0a 20 20 20 20 20 /branch}',.
21b0: 20 20 20 27 74 61 67 73 5f 75 72 6c 27 20 3d 3e 'tags_url' =>
21c0: 20 27 68 74 74 70 73 3a 2f 2f 61 70 69 2e 67 69 'https://api.gi
21d0: 74 68 75 62 2e 63 6f 6d 2f 72 65 70 6f 73 2f 6f thub.com/repos/o
21e0: 63 74 6f 2d 6f 72 67 2f 6f 63 74 6f 2d 72 65 70 cto-org/octo-rep
21f0: 6f 2f 74 61 67 73 27 2c 0a 20 20 20 20 20 20 20 o/tags',.
2200: 20 27 62 6c 6f 62 73 5f 75 72 6c 27 20 3d 3e 20 'blobs_url' =>
2210: 27 68 74 74 70 73 3a 2f 2f 61 70 69 2e 67 69 74 'https://api.git
2220: 68 75 62 2e 63 6f 6d 2f 72 65 70 6f 73 2f 6f 63 hub.com/repos/oc
2230: 74 6f 2d 6f 72 67 2f 6f 63 74 6f 2d 72 65 70 6f to-org/octo-repo
2240: 2f 67 69 74 2f 62 6c 6f 62 73 7b 2f 73 68 61 7d /git/blobs{/sha}
2250: 27 2c 0a 20 20 20 20 20 20 20 20 27 67 69 74 5f ',. 'git_
2260: 74 61 67 73 5f 75 72 6c 27 20 3d 3e 20 27 68 74 tags_url' => 'ht
2270: 74 70 73 3a 2f 2f 61 70 69 2e 67 69 74 68 75 62 tps://api.github
2280: 2e 63 6f 6d 2f 72 65 70 6f 73 2f 6f 63 74 6f 2d .com/repos/octo-
2290: 6f 72 67 2f 6f 63 74 6f 2d 72 65 70 6f 2f 67 69 org/octo-repo/gi
22a0: 74 2f 74 61 67 73 7b 2f 73 68 61 7d 27 2c 0a 20 t/tags{/sha}',.
22b0: 20 20 20 20 20 20 20 27 67 69 74 5f 72 65 66 73 'git_refs
22c0: 5f 75 72 6c 27 20 3d 3e 20 27 68 74 74 70 73 3a _url' => 'https:
22d0: 2f 2f 61 70 69 2e 67 69 74 68 75 62 2e 63 6f 6d //api.github.com
22e0: 2f 72 65 70 6f 73 2f 6f 63 74 6f 2d 6f 72 67 2f /repos/octo-org/
22f0: 6f 63 74 6f 2d 72 65 70 6f 2f 67 69 74 2f 72 65 octo-repo/git/re
2300: 66 73 7b 2f 73 68 61 7d 27 2c 0a 20 20 20 20 20 fs{/sha}',.
2310: 20 20 20 27 74 72 65 65 73 5f 75 72 6c 27 20 3d 'trees_url' =
2320: 3e 20 27 68 74 74 70 73 3a 2f 2f 61 70 69 2e 67 > 'https://api.g
2330: 69 74 68 75 62 2e 63 6f 6d 2f 72 65 70 6f 73 2f ithub.com/repos/
2340: 6f 63 74 6f 2d 6f 72 67 2f 6f 63 74 6f 2d 72 65 octo-org/octo-re
2350: 70 6f 2f 67 69 74 2f 74 72 65 65 73 7b 2f 73 68 po/git/trees{/sh
2360: 61 7d 27 2c 0a 20 20 20 20 20 20 20 20 27 73 74 a}',. 'st
2370: 61 74 75 73 65 73 5f 75 72 6c 27 20 3d 3e 20 27 atuses_url' => '
2380: 68 74 74 70 73 3a 2f 2f 61 70 69 2e 67 69 74 68 https://api.gith
2390: 75 62 2e 63 6f 6d 2f 72 65 70 6f 73 2f 6f 63 74 ub.com/repos/oct
23a0: 6f 2d 6f 72 67 2f 6f 63 74 6f 2d 72 65 70 6f 2f o-org/octo-repo/
23b0: 73 74 61 74 75 73 65 73 2f 7b 73 68 61 7d 27 2c statuses/{sha}',
23c0: 0a 20 20 20 20 20 20 20 20 27 6c 61 6e 67 75 61 . 'langua
23d0: 67 65 73 5f 75 72 6c 27 20 3d 3e 20 27 68 74 74 ges_url' => 'htt
23e0: 70 73 3a 2f 2f 61 70 69 2e 67 69 74 68 75 62 2e ps://api.github.
23f0: 63 6f 6d 2f 72 65 70 6f 73 2f 6f 63 74 6f 2d 6f com/repos/octo-o
2400: 72 67 2f 6f 63 74 6f 2d 72 65 70 6f 2f 6c 61 6e rg/octo-repo/lan
2410: 67 75 61 67 65 73 27 2c 0a 20 20 20 20 20 20 20 guages',.
2420: 20 27 73 74 61 72 67 61 7a 65 72 73 5f 75 72 6c 'stargazers_url
2430: 27 20 3d 3e 20 27 68 74 74 70 73 3a 2f 2f 61 70 ' => 'https://ap
2440: 69 2e 67 69 74 68 75 62 2e 63 6f 6d 2f 72 65 70 i.github.com/rep
2450: 6f 73 2f 6f 63 74 6f 2d 6f 72 67 2f 6f 63 74 6f os/octo-org/octo
2460: 2d 72 65 70 6f 2f 73 74 61 72 67 61 7a 65 72 73 -repo/stargazers
2470: 27 2c 0a 20 20 20 20 20 20 20 20 27 63 6f 6e 74 ',. 'cont
2480: 72 69 62 75 74 6f 72 73 5f 75 72 6c 27 20 3d 3e ributors_url' =>
2490: 20 27 68 74 74 70 73 3a 2f 2f 61 70 69 2e 67 69 'https://api.gi
24a0: 74 68 75 62 2e 63 6f 6d 2f 72 65 70 6f 73 2f 6f thub.com/repos/o
24b0: 63 74 6f 2d 6f 72 67 2f 6f 63 74 6f 2d 72 65 70 cto-org/octo-rep
24c0: 6f 2f 63 6f 6e 74 72 69 62 75 74 6f 72 73 27 2c o/contributors',
24d0: 0a 20 20 20 20 20 20 20 20 27 73 75 62 73 63 72 . 'subscr
24e0: 69 62 65 72 73 5f 75 72 6c 27 20 3d 3e 20 27 68 ibers_url' => 'h
24f0: 74 74 70 73 3a 2f 2f 61 70 69 2e 67 69 74 68 75 ttps://api.githu
2500: 62 2e 63 6f 6d 2f 72 65 70 6f 73 2f 6f 63 74 6f b.com/repos/octo
2510: 2d 6f 72 67 2f 6f 63 74 6f 2d 72 65 70 6f 2f 73 -org/octo-repo/s
2520: 75 62 73 63 72 69 62 65 72 73 27 2c 0a 20 20 20 ubscribers',.
2530: 20 20 20 20 20 27 73 75 62 73 63 72 69 70 74 69 'subscripti
2540: 6f 6e 5f 75 72 6c 27 20 3d 3e 20 27 68 74 74 70 on_url' => 'http
2550: 73 3a 2f 2f 61 70 69 2e 67 69 74 68 75 62 2e 63 s://api.github.c
2560: 6f 6d 2f 72 65 70 6f 73 2f 6f 63 74 6f 2d 6f 72 om/repos/octo-or
2570: 67 2f 6f 63 74 6f 2d 72 65 70 6f 2f 73 75 62 73 g/octo-repo/subs
2580: 63 72 69 70 74 69 6f 6e 27 2c 0a 20 20 20 20 20 cription',.
2590: 20 20 20 27 63 6f 6d 6d 69 74 73 5f 75 72 6c 27 'commits_url'
25a0: 20 3d 3e 20 27 68 74 74 70 73 3a 2f 2f 61 70 69 => 'https://api
25b0: 2e 67 69 74 68 75 62 2e 63 6f 6d 2f 72 65 70 6f .github.com/repo
25c0: 73 2f 6f 63 74 6f 2d 6f 72 67 2f 6f 63 74 6f 2d s/octo-org/octo-
25d0: 72 65 70 6f 2f 63 6f 6d 6d 69 74 73 7b 2f 73 68 repo/commits{/sh
25e0: 61 7d 27 2c 0a 20 20 20 20 20 20 20 20 27 67 69 a}',. 'gi
25f0: 74 5f 63 6f 6d 6d 69 74 73 5f 75 72 6c 27 20 3d t_commits_url' =
2600: 3e 20 27 68 74 74 70 73 3a 2f 2f 61 70 69 2e 67 > 'https://api.g
2610: 69 74 68 75 62 2e 63 6f 6d 2f 72 65 70 6f 73 2f ithub.com/repos/
2620: 6f 63 74 6f 2d 6f 72 67 2f 6f 63 74 6f 2d 72 65 octo-org/octo-re
2630: 70 6f 2f 67 69 74 2f 63 6f 6d 6d 69 74 73 7b 2f po/git/commits{/
2640: 73 68 61 7d 27 2c 0a 20 20 20 20 20 20 20 20 27 sha}',. '
2650: 63 6f 6d 6d 65 6e 74 73 5f 75 72 6c 27 20 3d 3e comments_url' =>
2660: 20 27 68 74 74 70 73 3a 2f 2f 61 70 69 2e 67 69 'https://api.gi
2670: 74 68 75 62 2e 63 6f 6d 2f 72 65 70 6f 73 2f 6f thub.com/repos/o
2680: 63 74 6f 2d 6f 72 67 2f 6f 63 74 6f 2d 72 65 70 cto-org/octo-rep
2690: 6f 2f 63 6f 6d 6d 65 6e 74 73 7b 2f 6e 75 6d 62 o/comments{/numb
26a0: 65 72 7d 27 2c 0a 20 20 20 20 20 20 20 20 27 69 er}',. 'i
26b0: 73 73 75 65 5f 63 6f 6d 6d 65 6e 74 5f 75 72 6c ssue_comment_url
26c0: 27 20 3d 3e 20 27 68 74 74 70 73 3a 2f 2f 61 70 ' => 'https://ap
26d0: 69 2e 67 69 74 68 75 62 2e 63 6f 6d 2f 72 65 70 i.github.com/rep
26e0: 6f 73 2f 6f 63 74 6f 2d 6f 72 67 2f 6f 63 74 6f os/octo-org/octo
26f0: 2d 72 65 70 6f 2f 69 73 73 75 65 73 2f 63 6f 6d -repo/issues/com
2700: 6d 65 6e 74 73 7b 2f 6e 75 6d 62 65 72 7d 27 2c ments{/number}',
2710: 0a 20 20 20 20 20 20 20 20 27 63 6f 6e 74 65 6e . 'conten
2720: 74 73 5f 75 72 6c 27 20 3d 3e 20 27 68 74 74 70 ts_url' => 'http
2730: 73 3a 2f 2f 61 70 69 2e 67 69 74 68 75 62 2e 63 s://api.github.c
2740: 6f 6d 2f 72 65 70 6f 73 2f 6f 63 74 6f 2d 6f 72 om/repos/octo-or
2750: 67 2f 6f 63 74 6f 2d 72 65 70 6f 2f 63 6f 6e 74 g/octo-repo/cont
2760: 65 6e 74 73 2f 7b 2b 70 61 74 68 7d 27 2c 0a 20 ents/{+path}',.
2770: 20 20 20 20 20 20 20 27 63 6f 6d 70 61 72 65 5f 'compare_
2780: 75 72 6c 27 20 3d 3e 20 27 68 74 74 70 73 3a 2f url' => 'https:/
2790: 2f 61 70 69 2e 67 69 74 68 75 62 2e 63 6f 6d 2f /api.github.com/
27a0: 72 65 70 6f 73 2f 6f 63 74 6f 2d 6f 72 67 2f 6f repos/octo-org/o
27b0: 63 74 6f 2d 72 65 70 6f 2f 63 6f 6d 70 61 72 65 cto-repo/compare
27c0: 2f 7b 62 61 73 65 7d 2e 2e 2e 7b 68 65 61 64 7d /{base}...{head}
27d0: 27 2c 0a 20 20 20 20 20 20 20 20 27 6d 65 72 67 ',. 'merg
27e0: 65 73 5f 75 72 6c 27 20 3d 3e 20 27 68 74 74 70 es_url' => 'http
27f0: 73 3a 2f 2f 61 70 69 2e 67 69 74 68 75 62 2e 63 s://api.github.c
2800: 6f 6d 2f 72 65 70 6f 73 2f 6f 63 74 6f 2d 6f 72 om/repos/octo-or
2810: 67 2f 6f 63 74 6f 2d 72 65 70 6f 2f 6d 65 72 67 g/octo-repo/merg
2820: 65 73 27 2c 0a 20 20 20 20 20 20 20 20 27 61 72 es',. 'ar
2830: 63 68 69 76 65 5f 75 72 6c 27 20 3d 3e 20 27 68 chive_url' => 'h
2840: 74 74 70 73 3a 2f 2f 61 70 69 2e 67 69 74 68 75 ttps://api.githu
2850: 62 2e 63 6f 6d 2f 72 65 70 6f 73 2f 6f 63 74 6f b.com/repos/octo
2860: 2d 6f 72 67 2f 6f 63 74 6f 2d 72 65 70 6f 2f 7b -org/octo-repo/{
2870: 61 72 63 68 69 76 65 5f 66 6f 72 6d 61 74 7d 7b archive_format}{
2880: 2f 72 65 66 7d 27 2c 0a 20 20 20 20 20 20 20 20 /ref}',.
2890: 27 64 6f 77 6e 6c 6f 61 64 73 5f 75 72 6c 27 20 'downloads_url'
28a0: 3d 3e 20 27 68 74 74 70 73 3a 2f 2f 61 70 69 2e => 'https://api.
28b0: 67 69 74 68 75 62 2e 63 6f 6d 2f 72 65 70 6f 73 github.com/repos
28c0: 2f 6f 63 74 6f 2d 6f 72 67 2f 6f 63 74 6f 2d 72 /octo-org/octo-r
28d0: 65 70 6f 2f 64 6f 77 6e 6c 6f 61 64 73 27 2c 0a epo/downloads',.
28e0: 20 20 20 20 20 20 20 20 27 69 73 73 75 65 73 5f 'issues_
28f0: 75 72 6c 27 20 3d 3e 20 27 68 74 74 70 73 3a 2f url' => 'https:/
2900: 2f 61 70 69 2e 67 69 74 68 75 62 2e 63 6f 6d 2f /api.github.com/
2910: 72 65 70 6f 73 2f 6f 63 74 6f 2d 6f 72 67 2f 6f repos/octo-org/o
2920: 63 74 6f 2d 72 65 70 6f 2f 69 73 73 75 65 73 7b cto-repo/issues{
2930: 2f 6e 75 6d 62 65 72 7d 27 2c 0a 20 20 20 20 20 /number}',.
2940: 20 20 20 27 70 75 6c 6c 73 5f 75 72 6c 27 20 3d 'pulls_url' =
2950: 3e 20 27 68 74 74 70 73 3a 2f 2f 61 70 69 2e 67 > 'https://api.g
2960: 69 74 68 75 62 2e 63 6f 6d 2f 72 65 70 6f 73 2f ithub.com/repos/
2970: 6f 63 74 6f 2d 6f 72 67 2f 6f 63 74 6f 2d 72 65 octo-org/octo-re
2980: 70 6f 2f 70 75 6c 6c 73 7b 2f 6e 75 6d 62 65 72 po/pulls{/number
2990: 7d 27 2c 0a 20 20 20 20 20 20 20 20 27 6d 69 6c }',. 'mil
29a0: 65 73 74 6f 6e 65 73 5f 75 72 6c 27 20 3d 3e 20 estones_url' =>
29b0: 27 68 74 74 70 73 3a 2f 2f 61 70 69 2e 67 69 74 'https://api.git
29c0: 68 75 62 2e 63 6f 6d 2f 72 65 70 6f 73 2f 6f 63 hub.com/repos/oc
29d0: 74 6f 2d 6f 72 67 2f 6f 63 74 6f 2d 72 65 70 6f to-org/octo-repo
29e0: 2f 6d 69 6c 65 73 74 6f 6e 65 73 7b 2f 6e 75 6d /milestones{/num
29f0: 62 65 72 7d 27 2c 0a 20 20 20 20 20 20 20 20 27 ber}',. '
2a00: 6e 6f 74 69 66 69 63 61 74 69 6f 6e 73 5f 75 72 notifications_ur
2a10: 6c 27 20 3d 3e 20 27 68 74 74 70 73 3a 2f 2f 61 l' => 'https://a
2a20: 70 69 2e 67 69 74 68 75 62 2e 63 6f 6d 2f 72 65 pi.github.com/re
2a30: 70 6f 73 2f 6f 63 74 6f 2d 6f 72 67 2f 6f 63 74 pos/octo-org/oct
2a40: 6f 2d 72 65 70 6f 2f 6e 6f 74 69 66 69 63 61 74 o-repo/notificat
2a50: 69 6f 6e 73 7b 3f 73 69 6e 63 65 2c 61 6c 6c 2c ions{?since,all,
2a60: 70 61 72 74 69 63 69 70 61 74 69 6e 67 7d 27 2c participating}',
2a70: 0a 20 20 20 20 20 20 20 20 27 6c 61 62 65 6c 73 . 'labels
2a80: 5f 75 72 6c 27 20 3d 3e 20 27 68 74 74 70 73 3a _url' => 'https:
2a90: 2f 2f 61 70 69 2e 67 69 74 68 75 62 2e 63 6f 6d //api.github.com
2aa0: 2f 72 65 70 6f 73 2f 6f 63 74 6f 2d 6f 72 67 2f /repos/octo-org/
2ab0: 6f 63 74 6f 2d 72 65 70 6f 2f 6c 61 62 65 6c 73 octo-repo/labels
2ac0: 7b 2f 6e 61 6d 65 7d 27 2c 0a 20 20 20 20 20 20 {/name}',.
2ad0: 20 20 27 72 65 6c 65 61 73 65 73 5f 75 72 6c 27 'releases_url'
2ae0: 20 3d 3e 20 27 68 74 74 70 73 3a 2f 2f 61 70 69 => 'https://api
2af0: 2e 67 69 74 68 75 62 2e 63 6f 6d 2f 72 65 70 6f .github.com/repo
2b00: 73 2f 6f 63 74 6f 2d 6f 72 67 2f 6f 63 74 6f 2d s/octo-org/octo-
2b10: 72 65 70 6f 2f 72 65 6c 65 61 73 65 73 7b 2f 69 repo/releases{/i
2b20: 64 7d 27 2c 0a 20 20 20 20 20 20 20 20 27 64 65 d}',. 'de
2b30: 70 6c 6f 79 6d 65 6e 74 73 5f 75 72 6c 27 20 3d ployments_url' =
2b40: 3e 20 27 68 74 74 70 73 3a 2f 2f 61 70 69 2e 67 > 'https://api.g
2b50: 69 74 68 75 62 2e 63 6f 6d 2f 72 65 70 6f 73 2f ithub.com/repos/
2b60: 6f 63 74 6f 2d 6f 72 67 2f 6f 63 74 6f 2d 72 65 octo-org/octo-re
2b70: 70 6f 2f 64 65 70 6c 6f 79 6d 65 6e 74 73 27 2c po/deployments',
2b80: 0a 20 20 20 20 20 20 20 20 27 63 72 65 61 74 65 . 'create
2b90: 64 5f 61 74 27 20 3d 3e 20 27 32 30 31 34 2d 30 d_at' => '2014-0
2ba0: 32 2d 32 38 54 30 32 3a 34 32 3a 35 31 5a 27 2c 2-28T02:42:51Z',
2bb0: 0a 20 20 20 20 20 20 20 20 27 75 70 64 61 74 65 . 'update
2bc0: 64 5f 61 74 27 20 3d 3e 20 27 32 30 32 31 2d 30 d_at' => '2021-0
2bd0: 33 2d 31 31 54 31 34 3a 35 34 3a 31 33 5a 27 2c 3-11T14:54:13Z',
2be0: 0a 20 20 20 20 20 20 20 20 27 70 75 73 68 65 64 . 'pushed
2bf0: 5f 61 74 27 20 3d 3e 20 27 32 30 32 31 2d 30 33 _at' => '2021-03
2c00: 2d 31 31 54 31 34 3a 35 34 3a 31 30 5a 27 2c 0a -11T14:54:10Z',.
2c10: 20 20 20 20 20 20 20 20 27 67 69 74 5f 75 72 6c 'git_url
2c20: 27 20 3d 3e 20 27 67 69 74 3a 2f 2f 67 69 74 68 ' => 'git://gith
2c30: 75 62 2e 63 6f 6d 2f 6f 63 74 6f 2d 6f 72 67 2f ub.com/octo-org/
2c40: 6f 63 74 6f 2d 72 65 70 6f 2e 67 69 74 27 2c 0a octo-repo.git',.
2c50: 20 20 20 20 20 20 20 20 27 73 73 68 5f 75 72 6c 'ssh_url
2c60: 27 20 3d 3e 20 27 6f 72 67 2d 36 38 31 31 36 37 ' => 'org-681167
2c70: 32 40 67 69 74 68 75 62 2e 63 6f 6d 3a 6f 63 74 2@github.com:oct
2c80: 6f 2d 6f 72 67 2f 6f 63 74 6f 2d 72 65 70 6f 2e o-org/octo-repo.
2c90: 67 69 74 27 2c 0a 20 20 20 20 20 20 20 20 27 63 git',. 'c
2ca0: 6c 6f 6e 65 5f 75 72 6c 27 20 3d 3e 20 27 68 74 lone_url' => 'ht
2cb0: 74 70 73 3a 2f 2f 67 69 74 68 75 62 2e 63 6f 6d tps://github.com
2cc0: 2f 6f 63 74 6f 2d 6f 72 67 2f 6f 63 74 6f 2d 72 /octo-org/octo-r
2cd0: 65 70 6f 2e 67 69 74 27 2c 0a 20 20 20 20 20 20 epo.git',.
2ce0: 20 20 27 73 76 6e 5f 75 72 6c 27 20 3d 3e 20 27 'svn_url' => '
2cf0: 68 74 74 70 73 3a 2f 2f 67 69 74 68 75 62 2e 63 https://github.c
2d00: 6f 6d 2f 6f 63 74 6f 2d 6f 72 67 2f 6f 63 74 6f om/octo-org/octo
2d10: 2d 72 65 70 6f 27 2c 0a 20 20 20 20 20 20 20 20 -repo',.
2d20: 27 68 6f 6d 65 70 61 67 65 27 20 3d 3e 20 27 27 'homepage' => ''
2d30: 2c 0a 20 20 20 20 20 20 20 20 27 73 69 7a 65 27 ,. 'size'
2d40: 20 3d 3e 20 33 30 30 2c 0a 20 20 20 20 20 20 20 => 300,.
2d50: 20 27 73 74 61 72 67 61 7a 65 72 73 5f 63 6f 75 'stargazers_cou
2d60: 6e 74 27 20 3d 3e 20 30 2c 0a 20 20 20 20 20 20 nt' => 0,.
2d70: 20 20 27 77 61 74 63 68 65 72 73 5f 63 6f 75 6e 'watchers_coun
2d80: 74 27 20 3d 3e 20 30 2c 0a 20 20 20 20 20 20 20 t' => 0,.
2d90: 20 27 6c 61 6e 67 75 61 67 65 27 20 3d 3e 20 27 'language' => '
2da0: 43 27 2c 0a 20 20 20 20 20 20 20 20 27 68 61 73 C',. 'has
2db0: 5f 69 73 73 75 65 73 27 20 3d 3e 20 74 72 75 65 _issues' => true
2dc0: 2c 0a 20 20 20 20 20 20 20 20 27 68 61 73 5f 70 ,. 'has_p
2dd0: 72 6f 6a 65 63 74 73 27 20 3d 3e 20 66 61 6c 73 rojects' => fals
2de0: 65 2c 0a 20 20 20 20 20 20 20 20 27 68 61 73 5f e,. 'has_
2df0: 64 6f 77 6e 6c 6f 61 64 73 27 20 3d 3e 20 74 72 downloads' => tr
2e00: 75 65 2c 0a 20 20 20 20 20 20 20 20 27 68 61 73 ue,. 'has
2e10: 5f 77 69 6b 69 27 20 3d 3e 20 66 61 6c 73 65 2c _wiki' => false,
2e20: 0a 20 20 20 20 20 20 20 20 27 68 61 73 5f 70 61 . 'has_pa
2e30: 67 65 73 27 20 3d 3e 20 74 72 75 65 2c 0a 20 20 ges' => true,.
2e40: 20 20 20 20 20 20 27 66 6f 72 6b 73 5f 63 6f 75 'forks_cou
2e50: 6e 74 27 20 3d 3e 20 30 2c 0a 20 20 20 20 20 20 nt' => 0,.
2e60: 20 20 27 6d 69 72 72 6f 72 5f 75 72 6c 27 20 3d 'mirror_url' =
2e70: 3e 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 20 20 > NULL,.
2e80: 27 61 72 63 68 69 76 65 64 27 20 3d 3e 20 66 61 'archived' => fa
2e90: 6c 73 65 2c 0a 20 20 20 20 20 20 20 20 27 64 69 lse,. 'di
2ea0: 73 61 62 6c 65 64 27 20 3d 3e 20 66 61 6c 73 65 sabled' => false
2eb0: 2c 0a 20 20 20 20 20 20 20 20 27 6f 70 65 6e 5f ,. 'open_
2ec0: 69 73 73 75 65 73 5f 63 6f 75 6e 74 27 20 3d 3e issues_count' =>
2ed0: 20 33 39 2c 0a 20 20 20 20 20 20 20 20 27 6c 69 39,. 'li
2ee0: 63 65 6e 73 65 27 20 3d 3e 20 4e 55 4c 4c 2c 0a cense' => NULL,.
2ef0: 20 20 20 20 20 20 20 20 27 66 6f 72 6b 73 27 20 'forks'
2f00: 3d 3e 20 30 2c 0a 20 20 20 20 20 20 20 20 27 6f => 0,. 'o
2f10: 70 65 6e 5f 69 73 73 75 65 73 27 20 3d 3e 20 33 pen_issues' => 3
2f20: 39 2c 0a 20 20 20 20 20 20 20 20 27 77 61 74 63 9,. 'watc
2f30: 68 65 72 73 27 20 3d 3e 20 30 2c 0a 20 20 20 20 hers' => 0,.
2f40: 20 20 20 20 27 64 65 66 61 75 6c 74 5f 62 72 61 'default_bra
2f50: 6e 63 68 27 20 3d 3e 20 27 74 72 75 6e 6b 27 2c nch' => 'trunk',
2f60: 0a 20 20 20 20 20 20 5d 2c 0a 20 20 20 20 20 20 . ],.
2f70: 27 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 27 20 3d 'organization' =
2f80: 3e 20 5b 0a 20 20 20 20 20 20 20 20 27 6c 6f 67 > [. 'log
2f90: 69 6e 27 20 3d 3e 20 27 6f 63 74 6f 2d 6f 72 67 in' => 'octo-org
2fa0: 27 2c 0a 20 20 20 20 20 20 20 20 27 69 64 27 20 ',. 'id'
2fb0: 3d 3e 20 36 38 31 31 36 37 32 2c 0a 20 20 20 20 => 6811672,.
2fc0: 20 20 20 20 27 6e 6f 64 65 5f 69 64 27 20 3d 3e 'node_id' =>
2fd0: 20 27 4d 44 45 79 4f 6b 39 79 5a 32 46 75 61 58 'MDEyOk9yZ2FuaX
2fe0: 70 68 64 47 6c 76 62 6a 59 34 4d 54 45 32 4e 7a phdGlvbjY4MTE2Nz
2ff0: 49 3d 27 2c 0a 20 20 20 20 20 20 20 20 27 75 72 I=',. 'ur
3000: 6c 27 20 3d 3e 20 27 68 74 74 70 73 3a 2f 2f 61 l' => 'https://a
3010: 70 69 2e 67 69 74 68 75 62 2e 63 6f 6d 2f 6f 72 pi.github.com/or
3020: 67 73 2f 6f 63 74 6f 2d 6f 72 67 27 2c 0a 20 20 gs/octo-org',.
3030: 20 20 20 20 20 20 27 72 65 70 6f 73 5f 75 72 6c 'repos_url
3040: 27 20 3d 3e 20 27 68 74 74 70 73 3a 2f 2f 61 70 ' => 'https://ap
3050: 69 2e 67 69 74 68 75 62 2e 63 6f 6d 2f 6f 72 67 i.github.com/org
3060: 73 2f 6f 63 74 6f 2d 6f 72 67 2f 72 65 70 6f 73 s/octo-org/repos
3070: 27 2c 0a 20 20 20 20 20 20 20 20 27 65 76 65 6e ',. 'even
3080: 74 73 5f 75 72 6c 27 20 3d 3e 20 27 68 74 74 70 ts_url' => 'http
3090: 73 3a 2f 2f 61 70 69 2e 67 69 74 68 75 62 2e 63 s://api.github.c
30a0: 6f 6d 2f 6f 72 67 73 2f 6f 63 74 6f 2d 6f 72 67 om/orgs/octo-org
30b0: 2f 65 76 65 6e 74 73 27 2c 0a 20 20 20 20 20 20 /events',.
30c0: 20 20 27 68 6f 6f 6b 73 5f 75 72 6c 27 20 3d 3e 'hooks_url' =>
30d0: 20 27 68 74 74 70 73 3a 2f 2f 61 70 69 2e 67 69 'https://api.gi
30e0: 74 68 75 62 2e 63 6f 6d 2f 6f 72 67 73 2f 6f 63 thub.com/orgs/oc
30f0: 74 6f 2d 6f 72 67 2f 68 6f 6f 6b 73 27 2c 0a 20 to-org/hooks',.
3100: 20 20 20 20 20 20 20 27 69 73 73 75 65 73 5f 75 'issues_u
3110: 72 6c 27 20 3d 3e 20 27 68 74 74 70 73 3a 2f 2f rl' => 'https://
3120: 61 70 69 2e 67 69 74 68 75 62 2e 63 6f 6d 2f 6f api.github.com/o
3130: 72 67 73 2f 6f 63 74 6f 2d 6f 72 67 2f 69 73 73 rgs/octo-org/iss
3140: 75 65 73 27 2c 0a 20 20 20 20 20 20 20 20 27 6d ues',. 'm
3150: 65 6d 62 65 72 73 5f 75 72 6c 27 20 3d 3e 20 27 embers_url' => '
3160: 68 74 74 70 73 3a 2f 2f 61 70 69 2e 67 69 74 68 https://api.gith
3170: 75 62 2e 63 6f 6d 2f 6f 72 67 73 2f 6f 63 74 6f ub.com/orgs/octo
3180: 2d 6f 72 67 2f 6d 65 6d 62 65 72 73 7b 2f 6d 65 -org/members{/me
3190: 6d 62 65 72 7d 27 2c 0a 20 20 20 20 20 20 20 20 mber}',.
31a0: 27 70 75 62 6c 69 63 5f 6d 65 6d 62 65 72 73 5f 'public_members_
31b0: 75 72 6c 27 20 3d 3e 20 27 68 74 74 70 73 3a 2f url' => 'https:/
31c0: 2f 61 70 69 2e 67 69 74 68 75 62 2e 63 6f 6d 2f /api.github.com/
31d0: 6f 72 67 73 2f 6f 63 74 6f 2d 6f 72 67 2f 70 75 orgs/octo-org/pu
31e0: 62 6c 69 63 5f 6d 65 6d 62 65 72 73 7b 2f 6d 65 blic_members{/me
31f0: 6d 62 65 72 7d 27 2c 0a 20 20 20 20 20 20 20 20 mber}',.
3200: 27 61 76 61 74 61 72 5f 75 72 6c 27 20 3d 3e 20 'avatar_url' =>
3210: 27 68 74 74 70 73 3a 2f 2f 61 76 61 74 61 72 73 'https://avatars
3220: 2e 67 69 74 68 75 62 75 73 65 72 63 6f 6e 74 65 .githubuserconte
3230: 6e 74 2e 63 6f 6d 2f 75 2f 36 38 31 31 36 37 32 nt.com/u/6811672
3240: 3f 76 3d 34 27 2c 0a 20 20 20 20 20 20 20 20 27 ?v=4',. '
3250: 64 65 73 63 72 69 70 74 69 6f 6e 27 20 3d 3e 20 description' =>
3260: 27 57 6f 72 6b 69 6e 67 20 62 65 74 74 65 72 20 'Working better
3270: 74 6f 67 65 74 68 65 72 21 27 2c 0a 20 20 20 20 together!',.
3280: 20 20 5d 2c 0a 20 20 20 20 20 20 27 73 65 6e 64 ],. 'send
3290: 65 72 27 20 3d 3e 20 5b 0a 20 20 20 20 20 20 20 er' => [.
32a0: 20 27 6c 6f 67 69 6e 27 20 3d 3e 20 24 75 73 65 'login' => $use
32b0: 72 2c 0a 20 20 20 20 20 20 20 20 27 69 64 27 20 r,. 'id'
32c0: 3d 3e 20 63 72 63 33 32 28 24 75 73 65 72 29 2c => crc32($user),
32d0: 0a 20 20 20 20 20 20 20 20 27 6e 6f 64 65 5f 69 . 'node_i
32e0: 64 27 20 3d 3e 20 62 61 73 65 36 34 5f 65 6e 63 d' => base64_enc
32f0: 6f 64 65 28 24 75 73 65 72 29 2c 0a 20 20 20 20 ode($user),.
3300: 20 20 20 20 27 61 76 61 74 61 72 5f 75 72 6c 27 'avatar_url'
3310: 20 3d 3e 20 27 68 74 74 70 73 3a 2f 2f 61 76 61 => 'https://ava
3320: 74 61 72 73 31 2e 67 69 74 68 75 62 75 73 65 72 tars1.githubuser
3330: 63 6f 6e 74 65 6e 74 2e 63 6f 6d 2f 75 2f 32 31 content.com/u/21
3340: 30 33 31 30 36 37 3f 76 3d 34 27 2c 0a 20 20 20 031067?v=4',.
3350: 20 20 20 20 20 27 67 72 61 76 61 74 61 72 5f 69 'gravatar_i
3360: 64 27 20 3d 3e 20 27 27 2c 0a 20 20 20 20 20 20 d' => '',.
3370: 20 20 27 75 72 6c 27 20 3d 3e 20 27 68 74 74 70 'url' => 'http
3380: 73 3a 2f 2f 61 70 69 2e 67 69 74 68 75 62 2e 63 s://api.github.c
3390: 6f 6d 2f 75 73 65 72 73 2f 43 6f 64 65 72 74 6f om/users/Coderto
33a0: 63 61 74 27 2c 0a 20 20 20 20 20 20 20 20 27 68 cat',. 'h
33b0: 74 6d 6c 5f 75 72 6c 27 20 3d 3e 20 27 68 74 74 tml_url' => 'htt
33c0: 70 73 3a 2f 2f 67 69 74 68 75 62 2e 63 6f 6d 2f ps://github.com/
33d0: 43 6f 64 65 72 74 6f 63 61 74 27 2c 0a 20 20 20 Codertocat',.
33e0: 20 20 20 20 20 27 66 6f 6c 6c 6f 77 65 72 73 5f 'followers_
33f0: 75 72 6c 27 20 3d 3e 20 27 68 74 74 70 73 3a 2f url' => 'https:/
3400: 2f 61 70 69 2e 67 69 74 68 75 62 2e 63 6f 6d 2f /api.github.com/
3410: 75 73 65 72 73 2f 43 6f 64 65 72 74 6f 63 61 74 users/Codertocat
3420: 2f 66 6f 6c 6c 6f 77 65 72 73 27 2c 0a 20 20 20 /followers',.
3430: 20 20 20 20 20 27 66 6f 6c 6c 6f 77 69 6e 67 5f 'following_
3440: 75 72 6c 27 20 3d 3e 20 27 68 74 74 70 73 3a 2f url' => 'https:/
3450: 2f 61 70 69 2e 67 69 74 68 75 62 2e 63 6f 6d 2f /api.github.com/
3460: 75 73 65 72 73 2f 43 6f 64 65 72 74 6f 63 61 74 users/Codertocat
3470: 2f 66 6f 6c 6c 6f 77 69 6e 67 7b 2f 6f 74 68 65 /following{/othe
3480: 72 5f 75 73 65 72 7d 27 2c 0a 20 20 20 20 20 20 r_user}',.
3490: 20 20 27 67 69 73 74 73 5f 75 72 6c 27 20 3d 3e 'gists_url' =>
34a0: 20 27 68 74 74 70 73 3a 2f 2f 61 70 69 2e 67 69 'https://api.gi
34b0: 74 68 75 62 2e 63 6f 6d 2f 75 73 65 72 73 2f 43 thub.com/users/C
34c0: 6f 64 65 72 74 6f 63 61 74 2f 67 69 73 74 73 7b odertocat/gists{
34d0: 2f 67 69 73 74 5f 69 64 7d 27 2c 0a 20 20 20 20 /gist_id}',.
34e0: 20 20 20 20 27 73 74 61 72 72 65 64 5f 75 72 6c 'starred_url
34f0: 27 20 3d 3e 20 27 68 74 74 70 73 3a 2f 2f 61 70 ' => 'https://ap
3500: 69 2e 67 69 74 68 75 62 2e 63 6f 6d 2f 75 73 65 i.github.com/use
3510: 72 73 2f 43 6f 64 65 72 74 6f 63 61 74 2f 73 74 rs/Codertocat/st
3520: 61 72 72 65 64 7b 2f 6f 77 6e 65 72 7d 7b 2f 72 arred{/owner}{/r
3530: 65 70 6f 7d 27 2c 0a 20 20 20 20 20 20 20 20 27 epo}',. '
3540: 73 75 62 73 63 72 69 70 74 69 6f 6e 73 5f 75 72 subscriptions_ur
3550: 6c 27 20 3d 3e 20 27 68 74 74 70 73 3a 2f 2f 61 l' => 'https://a
3560: 70 69 2e 67 69 74 68 75 62 2e 63 6f 6d 2f 75 73 pi.github.com/us
3570: 65 72 73 2f 43 6f 64 65 72 74 6f 63 61 74 2f 73 ers/Codertocat/s
3580: 75 62 73 63 72 69 70 74 69 6f 6e 73 27 2c 0a 20 ubscriptions',.
3590: 20 20 20 20 20 20 20 27 6f 72 67 61 6e 69 7a 61 'organiza
35a0: 74 69 6f 6e 73 5f 75 72 6c 27 20 3d 3e 20 27 68 tions_url' => 'h
35b0: 74 74 70 73 3a 2f 2f 61 70 69 2e 67 69 74 68 75 ttps://api.githu
35c0: 62 2e 63 6f 6d 2f 75 73 65 72 73 2f 43 6f 64 65 b.com/users/Code
35d0: 72 74 6f 63 61 74 2f 6f 72 67 73 27 2c 0a 20 20 rtocat/orgs',.
35e0: 20 20 20 20 20 20 27 72 65 70 6f 73 5f 75 72 6c 'repos_url
35f0: 27 20 3d 3e 20 27 68 74 74 70 73 3a 2f 2f 61 70 ' => 'https://ap
3600: 69 2e 67 69 74 68 75 62 2e 63 6f 6d 2f 75 73 65 i.github.com/use
3610: 72 73 2f 43 6f 64 65 72 74 6f 63 61 74 2f 72 65 rs/Codertocat/re
3620: 70 6f 73 27 2c 0a 20 20 20 20 20 20 20 20 27 65 pos',. 'e
3630: 76 65 6e 74 73 5f 75 72 6c 27 20 3d 3e 20 27 68 vents_url' => 'h
3640: 74 74 70 73 3a 2f 2f 61 70 69 2e 67 69 74 68 75 ttps://api.githu
3650: 62 2e 63 6f 6d 2f 75 73 65 72 73 2f 43 6f 64 65 b.com/users/Code
3660: 72 74 6f 63 61 74 2f 65 76 65 6e 74 73 7b 2f 70 rtocat/events{/p
3670: 72 69 76 61 63 79 7d 27 2c 0a 20 20 20 20 20 20 rivacy}',.
3680: 20 20 27 72 65 63 65 69 76 65 64 5f 65 76 65 6e 'received_even
3690: 74 73 5f 75 72 6c 27 20 3d 3e 20 27 68 74 74 70 ts_url' => 'http
36a0: 73 3a 2f 2f 61 70 69 2e 67 69 74 68 75 62 2e 63 s://api.github.c
36b0: 6f 6d 2f 75 73 65 72 73 2f 43 6f 64 65 72 74 6f om/users/Coderto
36c0: 63 61 74 2f 72 65 63 65 69 76 65 64 5f 65 76 65 cat/received_eve
36d0: 6e 74 73 27 2c 0a 20 20 20 20 20 20 20 20 27 74 nts',. 't
36e0: 79 70 65 27 20 3d 3e 20 27 55 73 65 72 27 2c 0a ype' => 'User',.
36f0: 20 20 20 20 20 20 20 20 27 73 69 74 65 5f 61 64 'site_ad
3700: 6d 69 6e 27 20 3d 3e 20 66 61 6c 73 65 2c 0a 20 min' => false,.
3710: 20 20 20 20 20 5d 2c 0a 20 20 20 20 5d 3b 0a 20 ],. ];.
3720: 20 20 20 23 20 64 6f 2e 2e 2e 0a 7d 0a 0a 0a 2f # do....}.../
3730: 2a 2a 0a 20 2a 20 44 61 74 61 62 61 73 65 20 71 **. * Database q
3740: 75 65 72 79 20 73 68 6f 72 74 68 61 6e 64 2e 20 uery shorthand.
3750: 28 55 73 69 6e 67 20 61 63 74 69 76 65 20 66 6f (Using active fo
3760: 73 73 69 6c 20 72 65 70 6f 73 69 74 6f 72 79 2e ssil repository.
3770: 29 0a 20 2a 0a 20 2a 20 40 70 61 72 61 6d 20 20 ). *. * @param
3780: 73 74 72 69 6e 67 20 20 24 73 71 6c 20 20 20 20 string $sql
3790: 20 20 51 75 65 72 79 20 77 69 74 68 20 70 6c 61 Query with pla
37a0: 63 65 68 6f 6c 64 65 72 73 0a 20 2a 20 40 70 61 ceholders. * @pa
37b0: 72 61 6d 20 20 61 72 72 61 79 20 20 20 24 70 61 ram array $pa
37c0: 72 61 6d 73 20 20 20 42 6f 75 6e 64 20 70 61 72 rams Bound par
37d0: 61 6d 65 74 65 72 73 0a 20 2a 20 40 70 61 72 61 ameters. * @para
37e0: 6d 20 20 62 6f 6f 6c 20 20 20 20 24 66 65 74 63 m bool $fetc
37f0: 68 20 20 20 20 49 6d 6d 65 64 69 61 74 65 20 2d h Immediate -
3800: 3e 66 65 74 63 68 41 6c 6c 28 29 0a 20 2a 20 40 >fetchAll(). * @
3810: 72 65 74 75 72 6e 20 61 72 72 61 79 7c 50 44 4f return array|PDO
3820: 53 74 61 74 65 6d 65 6e 74 7c 50 44 4f 0a 20 2a Statement|PDO. *
3830: 2f 0a 66 75 6e 63 74 69 6f 6e 20 64 62 28 24 73 /.function db($s
3840: 71 6c 3d 22 22 2c 20 24 70 61 72 61 6d 73 3d 5b ql="", $params=[
3850: 5d 2c 20 24 66 65 74 63 68 3d 54 52 55 45 29 20 ], $fetch=TRUE)
3860: 7b 0a 20 20 20 20 73 74 61 74 69 63 20 24 64 62 {. static $db
3870: 3b 0a 20 20 20 20 67 6c 6f 62 61 6c 20 24 63 66 ;. global $cf
3880: 67 3b 0a 20 20 20 20 69 66 20 28 65 6d 70 74 79 g;. if (empty
3890: 28 24 64 62 29 29 20 7b 0a 20 20 20 20 20 20 20 ($db)) {.
38a0: 20 69 66 20 28 21 70 72 65 67 5f 6d 61 74 63 68 if (!preg_match
38b0: 28 22 7e 5e 2f 5c 77 5b 2f 5c 77 2e 2d 5d 2b 5c ("~^/\w[/\w.-]+\
38c0: 77 5c 2e 28 66 73 3f 6c 3f 7c 66 6f 73 73 69 6c w\.(fs?l?|fossil
38d0: 7c 73 71 6c 69 74 65 29 24 7e 22 2c 20 24 63 66 |sqlite)$~", $cf
38e0: 67 5b 22 72 65 70 6f 22 5d 29 29 20 7b 0a 20 20 g["repo"])) {.
38f0: 20 20 20 20 20 20 20 20 20 20 64 69 65 28 22 64 die("d
3900: 62 28 29 3a 20 46 4f 53 53 49 4c 5f 52 45 50 4f b(): FOSSIL_REPO
3910: 53 49 54 4f 52 59 20 64 6f 65 73 6e 27 74 20 6c SITORY doesn't l
3920: 6f 6f 6b 20 72 69 67 68 74 2e 20 41 62 6f 72 74 ook right. Abort
3930: 2e 22 29 3b 0a 20 20 20 20 20 20 20 20 7d 20 0a .");. } .
3940: 20 20 20 20 20 20 20 20 23 24 64 62 20 3d 20 6e #$db = n
3950: 65 77 20 50 44 4f 28 22 73 71 6c 69 74 65 3a 3a ew PDO("sqlite::
3960: 6d 65 6d 6f 72 79 3a 22 29 3b 0a 20 20 20 20 20 memory:");.
3970: 20 20 20 24 64 62 20 3d 20 6e 65 77 20 50 44 4f $db = new PDO
3980: 28 22 73 71 6c 69 74 65 3a 24 63 66 67 5b 72 65 ("sqlite:$cfg[re
3990: 70 6f 5d 22 29 3b 0a 20 20 20 20 20 20 20 20 24 po]");. $
39a0: 64 62 2d 3e 73 65 74 41 74 74 72 69 62 75 74 65 db->setAttribute
39b0: 28 50 44 4f 3a 3a 41 54 54 52 5f 45 52 52 4d 4f (PDO::ATTR_ERRMO
39c0: 44 45 2c 20 50 44 4f 3a 3a 45 52 52 4d 4f 44 45 DE, PDO::ERRMODE
39d0: 5f 57 41 52 4e 49 4e 47 29 3b 0a 20 20 20 20 7d _WARNING);. }
39e0: 0a 20 20 20 20 69 66 20 28 24 70 61 72 61 6d 73 . if ($params
39f0: 29 20 7b 0a 20 20 20 20 20 20 20 20 24 73 74 6d ) {. $stm
3a00: 74 20 3d 20 24 64 62 2d 3e 70 72 65 70 61 72 65 t = $db->prepare
3a10: 28 24 73 71 6c 29 3b 0a 20 20 20 20 20 20 20 20 ($sql);.
3a20: 24 73 74 6d 74 2d 3e 65 78 65 63 75 74 65 28 24 $stmt->execute($
3a30: 70 61 72 61 6d 73 29 3b 0a 20 20 20 20 20 20 20 params);.
3a40: 20 72 65 74 75 72 6e 20 24 66 65 74 63 68 20 3f return $fetch ?
3a50: 20 24 73 74 6d 74 2d 3e 66 65 74 63 68 41 6c 6c $stmt->fetchAll
3a60: 28 50 44 4f 3a 3a 46 45 54 43 48 5f 41 53 53 4f (PDO::FETCH_ASSO
3a70: 43 29 20 3a 20 24 73 74 6d 74 3b 0a 20 20 20 20 C) : $stmt;.
3a80: 7d 0a 20 20 20 20 65 6c 73 65 69 66 20 28 24 73 }. elseif ($s
3a90: 71 6c 29 20 7b 0a 20 20 20 20 20 20 20 20 72 65 ql) {. re
3aa0: 74 75 72 6e 20 24 64 62 2d 3e 71 75 65 72 79 28 turn $db->query(
3ab0: 24 73 71 6c 29 2d 3e 66 65 74 63 68 41 6c 6c 28 $sql)->fetchAll(
3ac0: 50 44 4f 3a 3a 46 45 54 43 48 5f 41 53 53 4f 43 PDO::FETCH_ASSOC
3ad0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 65 6c 73 );. }. els
3ae0: 65 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 e {. retu
3af0: 72 6e 20 24 64 62 3b 0a 20 20 20 20 7d 0a 7d 0a rn $db;. }.}.
3b00: 0a 2f 2a 2a 0a 20 2a 20 51 75 65 72 79 20 66 6f ./**. * Query fo
3b10: 73 73 69 6c 20 60 63 6f 6e 66 69 67 60 20 74 61 ssil `config` ta
3b20: 62 6c 65 2e 0a 20 2a 0a 20 2a 20 40 70 61 72 61 ble.. *. * @para
3b30: 6d 20 20 73 74 72 69 6e 67 20 20 24 6e 61 6d 65 m string $name
3b40: 20 20 20 20 20 4f 70 74 69 6f 6e 0a 20 2a 20 40 Option. * @
3b50: 70 61 72 61 6d 20 20 61 72 72 61 79 20 20 20 24 param array $
3b60: 64 65 66 61 75 6c 74 20 20 46 61 6c 6c 62 61 63 default Fallbac
3b70: 6b 0a 20 2a 20 40 72 65 74 75 72 6e 20 73 74 72 k. * @return str
3b80: 69 6e 67 0a 20 2a 2f 0a 66 75 6e 63 74 69 6f 6e ing. */.function
3b90: 20 67 65 74 5f 63 6f 6e 66 69 67 28 24 6e 61 6d get_config($nam
3ba0: 65 2c 20 24 64 65 66 61 75 6c 74 3d 22 22 29 20 e, $default="")
3bb0: 7b 0a 20 20 20 20 24 72 20 3d 20 64 62 28 22 53 {. $r = db("S
3bc0: 45 4c 45 43 54 20 76 61 6c 75 65 20 46 52 4f 4d ELECT value FROM
3bd0: 20 63 6f 6e 66 69 67 20 57 48 45 52 45 20 6e 61 config WHERE na
3be0: 6d 65 3d 3f 22 2c 20 5b 24 6e 61 6d 65 5d 29 3b me=?", [$name]);
3bf0: 0a 20 20 20 20 72 65 74 75 72 6e 20 24 72 20 3f . return $r ?
3c00: 20 24 72 5b 30 5d 5b 22 76 61 6c 75 65 22 5d 20 $r[0]["value"]
3c10: 3a 20 24 64 65 66 61 75 6c 74 3b 0a 7d 0a 0a 0a : $default;.}...
3c20: 0a 23 2d 2d 20 70 75 62 6c 69 63 20 61 63 63 65 .#-- public acce
3c30: 73 73 20 75 72 6c 0a 66 75 6e 63 74 69 6f 6e 20 ss url.function
3c40: 67 65 74 5f 62 61 73 65 75 72 6c 28 29 20 7b 0a get_baseurl() {.
3c50: 20 20 20 20 24 75 72 6c 73 20 3d 20 61 72 72 61 $urls = arra
3c60: 79 5f 63 6f 6c 75 6d 6e 28 64 62 28 22 53 45 4c y_column(db("SEL
3c70: 45 43 54 20 53 55 42 53 54 52 28 6e 61 6d 65 2c ECT SUBSTR(name,
3c80: 39 2c 32 30 30 29 20 41 53 20 75 72 6c 20 46 52 9,200) AS url FR
3c90: 4f 4d 20 63 6f 6e 66 69 67 20 57 48 45 52 45 20 OM config WHERE
3ca0: 6e 61 6d 65 20 4c 49 4b 45 20 27 62 61 73 65 75 name LIKE 'baseu
3cb0: 72 6c 3a 25 27 22 29 2c 20 22 75 72 6c 22 29 3b rl:%'"), "url");
3cc0: 0a 20 20 20 20 69 66 20 28 24 62 65 73 74 20 3d . if ($best =
3cd0: 20 70 72 65 67 5f 67 72 65 70 28 22 7e 6c 6f 63 preg_grep("~loc
3ce0: 61 6c 68 6f 73 74 7c 3a 5c 64 2b 2f 7e 69 22 2c alhost|:\d+/~i",
3cf0: 20 24 75 72 6c 73 2c 20 50 52 45 47 5f 47 52 45 $urls, PREG_GRE
3d00: 50 5f 49 4e 56 45 52 54 29 29 20 7b 0a 20 20 20 P_INVERT)) {.
3d10: 20 20 20 20 20 72 65 74 75 72 6e 20 61 72 72 61 return arra
3d20: 79 5f 76 61 6c 75 65 73 28 24 62 65 73 74 29 5b y_values($best)[
3d30: 30 5d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 65 6c 0];. }. el
3d40: 73 65 69 66 20 28 24 62 65 73 74 20 3d 20 70 72 seif ($best = pr
3d50: 65 67 5f 67 72 65 70 28 22 7e 3a 5c 64 2b 2f 7e eg_grep("~:\d+/~
3d60: 69 22 2c 20 24 75 72 6c 73 2c 20 50 52 45 47 5f i", $urls, PREG_
3d70: 47 52 45 50 5f 49 4e 56 45 52 54 29 29 20 7b 0a GREP_INVERT)) {.
3d80: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 61 return a
3d90: 72 72 61 79 5f 76 61 6c 75 65 73 28 24 62 65 73 rray_values($bes
3da0: 74 29 5b 30 5d 3b 0a 20 20 20 20 7d 0a 20 20 20 t)[0];. }.
3db0: 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 else {.
3dc0: 72 65 74 75 72 6e 20 24 75 72 6c 73 5b 30 5d 3b return $urls[0];
3dd0: 0a 20 20 20 20 7d 0a 7d 0a 0a 23 2d 2d 20 61 72 . }.}..#-- ar
3de0: 74 69 66 61 63 74 20 6f 77 6e 65 72 0a 66 75 6e tifact owner.fun
3df0: 63 74 69 6f 6e 20 67 65 74 5f 75 73 65 72 28 24 ction get_user($
3e00: 75 75 69 64 29 20 7b 0a 20 20 20 20 24 72 20 3d uuid) {. $r =
3e10: 20 64 62 28 22 0a 20 20 20 20 20 20 20 20 53 45 db(". SE
3e20: 4c 45 43 54 20 6c 6f 67 69 6e 0a 20 20 20 20 20 LECT login.
3e30: 20 20 20 20 20 46 52 4f 4d 20 62 6c 6f 62 0a 20 FROM blob.
3e40: 20 20 20 20 20 20 20 20 20 4c 45 46 54 20 4a 4f LEFT JO
3e50: 49 4e 20 72 63 76 66 72 6f 6d 20 4f 4e 20 62 6c IN rcvfrom ON bl
3e60: 6f 62 2e 72 63 76 69 64 3d 72 63 76 66 72 6f 6d ob.rcvid=rcvfrom
3e70: 2e 72 63 76 69 64 0a 20 20 20 20 20 20 20 20 20 .rcvid.
3e80: 20 4c 45 46 54 20 4a 4f 49 4e 20 75 73 65 72 20 LEFT JOIN user
3e90: 4f 4e 20 75 73 65 72 2e 75 69 64 3d 72 63 76 66 ON user.uid=rcvf
3ea0: 72 6f 6d 2e 75 69 64 0a 20 20 20 20 20 20 20 20 rom.uid.
3eb0: 20 57 48 45 52 45 20 75 75 69 64 20 3d 20 3f 22 WHERE uuid = ?"
3ec0: 2c 0a 20 20 20 20 20 20 20 20 5b 24 75 75 69 64 ,. [$uuid
3ed0: 5d 0a 20 20 20 20 29 3b 0a 20 20 20 20 72 65 74 ]. );. ret
3ee0: 75 72 6e 20 24 72 20 3f 20 24 72 5b 30 5d 5b 22 urn $r ? $r[0]["
3ef0: 6c 6f 67 69 6e 22 5d 20 3a 20 6e 75 6c 6c 3b 0a login"] : null;.
3f00: 7d 0a 0a 23 2d 2d 20 70 72 69 6d 61 72 79 20 75 }..#-- primary u
3f10: 73 65 72 0a 66 75 6e 63 74 69 6f 6e 20 67 65 74 ser.function get
3f20: 5f 6d 61 69 6e 5f 75 73 65 72 28 29 20 7b 0a 20 _main_user() {.
3f30: 20 20 20 72 65 74 75 72 6e 20 64 62 28 22 0a 20 return db(".
3f40: 20 20 20 20 20 20 20 53 45 4c 45 43 54 20 75 73 SELECT us
3f50: 65 72 2c 20 43 4f 55 4e 54 28 74 79 70 65 29 20 er, COUNT(type)
3f60: 41 53 20 63 6e 74 0a 20 20 20 20 20 20 20 20 20 AS cnt.
3f70: 20 46 52 4f 4d 20 65 76 65 6e 74 0a 20 20 20 20 FROM event.
3f80: 20 20 20 20 20 57 48 45 52 45 20 74 79 70 65 3d WHERE type=
3f90: 27 63 69 27 0a 20 20 20 20 20 20 20 20 20 47 52 'ci'. GR
3fa0: 4f 55 50 20 42 59 20 75 73 65 72 0a 20 20 20 20 OUP BY user.
3fb0: 20 20 20 20 20 4f 52 44 45 52 20 42 59 20 63 6e ORDER BY cn
3fc0: 74 20 44 45 53 43 22 0a 20 20 20 20 29 5b 30 5d t DESC". )[0]
3fd0: 5b 22 75 73 65 72 22 5d 3b 0a 7d 0a 0a 23 2d 2d ["user"];.}..#--
3fe0: 20 62 61 73 65 6e 61 6d 65 2e 66 6f 73 73 69 6c basename.fossil
3ff0: 0a 66 75 6e 63 74 69 6f 6e 20 67 65 74 5f 62 61 .function get_ba
4000: 73 65 6e 61 6d 65 28 29 20 7b 0a 20 20 20 20 67 sename() {. g
4010: 6c 6f 62 61 6c 20 24 63 66 67 3b 0a 20 20 20 20 lobal $cfg;.
4020: 72 65 74 75 72 6e 20 70 72 65 67 5f 72 65 70 6c return preg_repl
4030: 61 63 65 28 22 2f 5c 2e 5c 77 2b 24 2f 22 2c 20 ace("/\.\w+$/",
4040: 22 22 2c 20 62 61 73 65 6e 61 6d 65 28 24 63 66 "", basename($cf
4050: 67 5b 22 72 65 70 6f 22 5d 29 29 3b 0a 7d 0a 0a g["repo"]));.}..
4060: 23 2d 2d 20 73 70 6c 69 74 20 53 54 44 49 4e 20 #-- split STDIN
4070: 69 6e 74 6f 20 72 6f 77 73 0a 66 75 6e 63 74 69 into rows.functi
4080: 6f 6e 20 67 65 74 5f 61 72 74 69 66 61 63 74 73 on get_artifacts
4090: 28 24 61 72 74 29 20 7b 0a 20 20 20 20 70 72 65 ($art) {. pre
40a0: 67 5f 6d 61 74 63 68 5f 61 6c 6c 28 22 2f 5e 28 g_match_all("/^(
40b0: 5c 77 2b 29 5c 73 2b 28 5b 5c 77 2d 5d 2b 29 28 \w+)\s+([\w-]+)(
40c0: 3f 3a 5c 73 2b 28 2e 2b 29 29 3f 24 2f 6d 22 2c ?:\s+(.+))?$/m",
40d0: 20 24 61 72 74 2c 20 24 72 6f 77 73 2c 20 50 52 $art, $rows, PR
40e0: 45 47 5f 53 45 54 5f 4f 52 44 45 52 29 3b 0a 20 EG_SET_ORDER);.
40f0: 20 20 20 24 72 6f 77 73 20 3d 20 61 72 72 61 79 $rows = array
4100: 5f 6d 61 70 28 0a 20 20 20 20 20 20 20 20 66 75 _map(. fu
4110: 6e 63 74 69 6f 6e 28 24 72 6f 77 29 20 7b 0a 20 nction($row) {.
4120: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur
4130: 6e 20 5b 0a 20 20 20 20 20 20 20 20 20 20 20 20 n [.
4140: 20 20 20 20 22 75 75 69 64 22 20 3d 3e 20 24 72 "uuid" => $r
4150: 6f 77 5b 31 5d 2c 0a 20 20 20 20 20 20 20 20 20 ow[1],.
4160: 20 20 20 20 20 20 20 22 74 79 70 65 22 20 3d 3e "type" =>
4170: 20 24 72 6f 77 5b 32 5d 2c 0a 20 20 20 20 20 20 $row[2],.
4180: 20 20 20 20 20 20 20 20 20 20 22 63 6f 6d 6d 65 "comme
4190: 6e 74 22 20 3d 3e 20 24 72 6f 77 5b 33 5d 2c 0a nt" => $row[3],.
41a0: 20 20 20 20 20 20 20 20 20 20 20 20 5d 3b 0a 20 ];.
41b0: 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 },.
41c0: 20 20 24 72 6f 77 73 0a 20 20 20 20 29 3b 0a 20 $rows. );.
41d0: 20 20 20 72 65 74 75 72 6e 20 24 72 6f 77 73 3b return $rows;
41e0: 0a 7d 0a 0a 23 2d 2d 20 74 75 72 6e 20 75 75 69 .}..#-- turn uui
41f0: 64 20 69 6e 74 6f 20 61 70 70 72 6f 70 72 69 61 d into appropria
4200: 74 65 20 75 72 6c 0a 66 75 6e 63 74 69 6f 6e 20 te url.function
4210: 65 78 70 61 6e 64 5f 61 72 74 69 66 61 63 74 28 expand_artifact(
4220: 24 72 6f 77 2c 20 24 75 72 6c 2c 20 24 71 3d 22 $row, $url, $q="
4230: 75 72 6c 65 6e 63 6f 64 65 22 29 20 7b 0a 20 20 urlencode") {.
4240: 20 20 67 6c 6f 62 61 6c 20 24 63 66 67 3b 0a 20 global $cfg;.
4250: 20 20 20 73 77 69 74 63 68 20 28 24 72 6f 77 5b switch ($row[
4260: 22 74 79 70 65 22 5d 29 20 7b 0a 20 20 20 20 20 "type"]) {.
4270: 20 20 20 63 61 73 65 20 22 61 74 74 61 63 68 6d case "attachm
4280: 65 6e 74 22 3a 0a 20 20 20 20 20 20 20 20 63 61 ent":. ca
4290: 73 65 20 22 66 69 6c 65 22 3a 0a 20 20 20 20 20 se "file":.
42a0: 20 20 20 20 20 20 20 24 72 6f 77 5b 22 6e 61 6d $row["nam
42b0: 65 22 5d 20 3d 20 24 72 6f 77 5b 22 63 6f 6d 6d e"] = $row["comm
42c0: 65 6e 74 22 5d 3b 0a 20 20 20 20 20 20 20 20 20 ent"];.
42d0: 20 20 20 24 72 6f 77 5b 22 75 72 6c 5f 72 61 77 $row["url_raw
42e0: 22 5d 20 3d 20 22 24 75 72 6c 2f 72 61 77 2f 24 "] = "$url/raw/$
42f0: 72 6f 77 5b 75 75 69 64 5d 3f 61 74 3d 7b 24 71 row[uuid]?at={$q
4300: 28 24 72 6f 77 5b 27 6e 61 6d 65 27 5d 29 7d 22 ($row['name'])}"
4310: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 72 ;. $r
4320: 6f 77 5b 22 75 72 6c 5f 6a 73 6f 6e 22 5d 20 3d ow["url_json"] =
4330: 20 22 24 75 72 6c 2f 6a 73 6f 6e 2f 61 72 74 69 "$url/json/arti
4340: 66 61 63 74 2f 7b 24 71 28 24 72 6f 77 5b 27 6e fact/{$q($row['n
4350: 61 6d 65 27 5d 29 7d 22 3b 0a 20 20 20 20 20 20 ame'])}";.
4360: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 break;.
4370: 20 20 20 20 20 63 61 73 65 20 22 77 69 6b 69 22 case "wiki"
4380: 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 72 :. $r
4390: 6f 77 5b 22 6e 61 6d 65 22 5d 20 3d 20 24 72 6f ow["name"] = $ro
43a0: 77 5b 22 63 6f 6d 6d 65 6e 74 22 5d 3b 0a 20 20 w["comment"];.
43b0: 20 20 20 20 20 20 20 20 20 20 24 72 6f 77 5b 22 $row["
43c0: 75 72 6c 5f 77 65 62 22 5d 20 3d 20 22 24 75 72 url_web"] = "$ur
43d0: 6c 2f 77 69 6b 69 2f 7b 24 71 28 24 72 6f 77 5b l/wiki/{$q($row[
43e0: 27 6e 61 6d 65 27 5d 29 7d 22 3b 0a 20 20 20 20 'name'])}";.
43f0: 20 20 20 20 20 20 20 20 24 72 6f 77 5b 22 75 72 $row["ur
4400: 6c 5f 6a 73 6f 6e 22 5d 20 3d 20 22 24 75 72 6c l_json"] = "$url
4410: 2f 6a 73 6f 6e 2f 77 69 6b 69 2f 67 65 74 2f 7b /json/wiki/get/{
4420: 24 71 28 24 72 6f 77 5b 27 6e 61 6d 65 27 5d 29 $q($row['name'])
4430: 7d 22 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 }";.
4440: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 break;. c
4450: 61 73 65 20 22 63 68 65 63 6b 2d 69 6e 22 3a 0a ase "check-in":.
4460: 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 brea
4470: 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 k;. case
4480: 22 61 74 74 61 63 68 6d 65 6e 74 2d 63 6f 6e 74 "attachment-cont
4490: 72 6f 6c 22 3a 0a 20 20 20 20 20 20 20 20 63 61 rol":. ca
44a0: 73 65 20 22 74 61 67 22 3a 0a 20 20 20 20 20 20 se "tag":.
44b0: 20 20 63 61 73 65 20 22 72 65 66 65 72 65 6e 63 case "referenc
44c0: 65 64 22 3a 0a 20 20 20 20 20 20 20 20 64 65 66 ed":. def
44d0: 61 75 6c 74 3a 0a 20 20 20 20 20 20 20 20 20 20 ault:.
44e0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 break;. }.
44f0: 20 20 20 24 63 66 67 5b 22 75 73 65 72 22 5d 20 $cfg["user"]
4500: 3d 20 24 72 6f 77 5b 22 75 73 65 72 22 5d 20 3d = $row["user"] =
4510: 20 67 65 74 5f 75 73 65 72 28 24 72 6f 77 5b 22 get_user($row["
4520: 75 75 69 64 22 5d 29 3b 0a 20 20 20 20 72 65 74 uuid"]);. ret
4530: 75 72 6e 20 24 72 6f 77 3b 0a 7d 0a 0a 23 2d 2d urn $row;.}..#--
4540: 20 63 68 65 63 6b 2d 69 6e 20 6f 72 20 66 69 6c check-in or fil
4550: 65 2c 20 6f 72 20 6f 74 68 65 72 20 61 72 74 69 e, or other arti
4560: 66 61 63 74 20 74 79 70 65 73 0a 66 75 6e 63 74 fact types.funct
4570: 69 6f 6e 20 6d 61 69 6e 5f 61 63 74 69 6f 6e 28 ion main_action(
4580: 24 61 72 74 29 20 7b 0a 20 20 20 20 66 6f 72 65 $art) {. fore
4590: 61 63 68 20 28 5b 22 63 68 65 63 6b 2d 69 6e 22 ach (["check-in"
45a0: 2c 20 22 66 69 6c 65 22 2c 20 22 61 74 74 61 63 , "file", "attac
45b0: 68 6d 65 6e 74 22 2c 20 22 77 69 6b 69 22 2c 20 hment", "wiki",
45c0: 22 72 65 66 65 72 65 6e 63 65 64 22 2c 20 22 74 "referenced", "t
45d0: 61 67 22 5d 20 61 73 20 24 74 29 20 7b 0a 20 20 ag"] as $t) {.
45e0: 20 20 20 20 20 20 69 66 20 28 70 72 65 67 5f 6d if (preg_m
45f0: 61 74 63 68 28 22 2f 5e 5c 77 2b 5c 73 24 74 5c atch("/^\w+\s$t\
4600: 5c 62 2f 6d 22 2c 20 24 61 72 74 29 29 20 7b 0a \b/m", $art)) {.
4610: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu
4620: 72 6e 20 24 74 3b 0a 20 20 20 20 20 20 20 20 7d rn $t;. }
4630: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 . }. retur
4640: 6e 20 22 61 66 74 65 72 2d 72 65 63 65 69 76 65 n "after-receive
4650: 22 3b 0a 7d 0a 0a 66 75 6e 63 74 69 6f 6e 20 69 ";.}..function i
4660: 73 6f 38 36 30 31 28 24 74 29 20 7b 0a 20 20 20 so8601($t) {.
4670: 20 72 65 74 75 72 6e 20 73 74 72 66 74 69 6d 65 return strftime
4680: 28 22 25 59 2d 25 6d 2d 25 64 54 25 48 3a 25 4d ("%Y-%m-%dT%H:%M
4690: 3a 25 53 5a 22 2c 20 24 74 29 3b 0a 7d 0a 0a 66 :%SZ", $t);.}..f
46a0: 75 6e 63 74 69 6f 6e 20 6d 74 69 6d 65 5f 65 76 unction mtime_ev
46b0: 65 6e 74 28 24 46 4e 3d 22 4d 49 4e 22 29 20 7b ent($FN="MIN") {
46c0: 0a 20 20 20 20 72 65 74 75 72 6e 20 64 62 28 22 . return db("
46d0: 53 45 4c 45 43 54 20 73 74 72 66 74 69 6d 65 28 SELECT strftime(
46e0: 27 25 73 27 2c 20 24 46 4e 28 6d 74 69 6d 65 29 '%s', $FN(mtime)
46f0: 29 20 41 53 20 64 74 20 46 52 4f 4d 20 65 76 65 ) AS dt FROM eve
4700: 6e 74 20 4c 49 4d 49 54 20 31 22 29 5b 30 5d 5b nt LIMIT 1")[0][
4710: 22 64 74 22 5d 3b 0a 7d 0a 3f 3e "dt"];.}.?>