1// Copyright 2015 Keybase, Inc. All rights reserved. Use of 2// this source code is governed by the included BSD license. 3 4// +build !production 5 6package libkb 7 8import ( 9 "strings" 10 11 "github.com/PuerkitoBio/goquery" 12) 13 14type StubAPIEngine struct { 15 *ExternalAPIEngine 16} 17 18func NewStubAPIEngine(g *GlobalContext) *StubAPIEngine { 19 return &StubAPIEngine{ 20 ExternalAPIEngine: &ExternalAPIEngine{BaseAPIEngine{Contextified: NewContextified(g), clients: make(map[int]*Client)}}, 21 } 22} 23 24func (e *StubAPIEngine) Get(m MetaContext, arg APIArg) (res *ExternalAPIRes, err error) { 25 return e.ExternalAPIEngine.Get(m, arg) 26} 27 28func (e *StubAPIEngine) GetHTML(m MetaContext, arg APIArg) (res *ExternalHTMLRes, err error) { 29 if body, ok := htmlAPIStubs[arg.Endpoint]; ok { 30 doc, err := goquery.NewDocumentFromReader(strings.NewReader(body)) 31 if err != nil { 32 return nil, err 33 } 34 return &ExternalHTMLRes{ 35 GoQuery: doc, 36 HTTPStatus: 200, 37 }, nil 38 } 39 return e.ExternalAPIEngine.GetHTML(m, arg) 40} 41 42func (e *StubAPIEngine) GetText(m MetaContext, arg APIArg) (*ExternalTextRes, error) { 43 if body, ok := apiStubs[arg.Endpoint]; ok { 44 return &ExternalTextRes{Body: body, HTTPStatus: 200}, nil 45 } 46 return e.ExternalAPIEngine.GetText(m, arg) 47} 48 49var apiStubs = map[string]string{ 50 "https://gist.githubusercontent.com/kbtester1/9f6c0787825f4fcc81f7/raw/1ec930037d05bbd2496e862a023d69ae6cc4c215/keybase.md": `### Keybase proof 51 52I hereby claim: 53 54 * I am kbtester1 on github. 55 * I am t_bob (https://keybase.io/t_bob) on keybase. 56 * I have a public key whose fingerprint is 91FE 9B24 EF67 06B1 F789 8F20 59A2 A43F 8B73 1F29 57 58To claim this, I am signing this object: 59 60json 61{ 62 "body": { 63 "client": { 64 "name": "keybase.io node.js client", 65 "version": "0.7.5" 66 }, 67 "key": { 68 "fingerprint": "91fe9b24ef6706b1f7898f2059a2a43f8b731f29", 69 "host": "keybase.io", 70 "key_id": "59A2A43F8B731F29", 71 "uid": "afb5eda3154bc13c1df0189ce93ba119", 72 "username": "t_bob" 73 }, 74 "merkle_root": { 75 "ctime": 1424293533, 76 "hash": "976e2bd970e1375d2a4c906ddef53e015e4bcbee8d87f7d1992e0344abe36f3d2e622efa9d2715d3350b7be5e981357d7e9c93db84c041210df98a3747c84073", 77 "seqno": 5 78 }, 79 "service": { 80 "name": "github", 81 "username": "kbtester1" 82 }, 83 "type": "web_service_binding", 84 "version": 1 85 }, 86 "ctime": 1424293535, 87 "expire_in": 157680000, 88 "prev": "4364d76671c1a7cc4d4597aee4c534ea4086e3831e867010ae0509832608c1d0", 89 "seqno": 2, 90 "tag": "signature" 91} 92 93 94with the key [91FE 9B24 EF67 06B1 F789 8F20 59A2 A43F 8B73 1F29](https://keybase.io/t_bob), yielding the signature: 95 96 97-----BEGIN PGP MESSAGE----- 98Version: GnuPG/MacGPG2 v2 99 100owFdUltsFVUUvb3YgmgDojGiVcuA0YTbm/OcM6etFTRp/OJDjD9qrufM2XPvtHTm 101OjOtlJsGH1Hsj8EHvhptaEET8AMlPAwtGnkUQ2orwWiCjcRACNEYw4cBNMaZmxrB 10287Wz99prr3X23tq8IJdviJ5ov9T15URrw8mLOvf4ub9Ha5YOzaDVXrPcDT4ESRYF 103qg+sdqsXBrWKoeiHrUFooNgTt85jCtYARLEfBikKFUWRW0OFDJ41e35Qhqga+RmX 104JbEHUhMGni2QrbEnHOl4BHGpiGLUc7Sg2CMypayEcXLdVKvOWfJNmuVyLVnLaLfz 105cIrvruP76wXlaQ5GUcyZdjF1sfEQdqQLkmqFcR0YQzRvKSnpUGdi+yDq3QClKAzr 106jt3Ez+qYEUYk5ZSmclRcyQwIG4g2UiDAVHCTqnYlso0Bj1NAmEM6VwM4xhGeMFhK 107AogypjRQ26OGgE0IeEoaIjA3lHKkhQYO0sGUCyNAupIa7TAXMUwwMp50FBVMuA5D 108gqb6Y3g2CK12PpSF0YDvwjVLKvtJpV9f77JXJxAnEOHMaTJYzXLPgS7Nd5e0Hxg/ 109GC1fu0ecQv//C7xgwcaqH0HJzxBc2A5KX8GqRjCQcjJqMyNsW2AXK+G6zDAuhQJg 110LqcMFEOODdShGJx0+xgpQBxJhxIbOemi0H/eSKpTlVPK2C8HKumPwBoabmi5IdeQ 111zzU15rNDzS2+cem/17vn1UW5mdnOw317u/atXL3wIPrrapM1Jtcc3o4fqu76oXLi 11244svfLPgzEenu34abxv+896Ryzuu7Hn0tml993vrF0c/Tk183vlmcNPkp9M7F47d 1139eLZn99vemvm2zeO/fp0bQJdngrWL227OnhhE8R/3HrifMfrIx073jkw9ciTMz2F 114VeXKpfOdq3p63hWj418s23pqfNvIgQ+OzW3e+N2hJS/lT52+0la6ffjcTMuuoOOZ 115LWvQfV/3rXtwUfMts3P3HM0Xx/Yf2j7dff/yWuOR/trumxuf33cwv2Xg9xXo5BJy 11658hTHx59eXb5Z78dSTZ/9djq/IXJ45/sbd55R7Ltte7Zt385/sqmydaWeP/cimX8 117zAPf187+Aw== 118=Zpkd 119-----END PGP MESSAGE----- 120 121 122 123And finally, I am proving ownership of the github account by posting this as a gist. 124 125### My publicly-auditable identity: 126 127https://keybase.io/t_bob 128 129### From the command line: 130 131Consider the [keybase command line program](https://keybase.io/docs/command_line). 132 133bash 134# look me up 135keybase id t_bob 136 137# encrypt a message to me 138keybase encrypt t_bob -m 'a secret message...' 139 140# ...and more... 141`, 142 "https://gist.githubusercontent.com/kbtester2/3cbaad55bfae3ed948d9/raw/0c5a148629e3f405ed8d640b8fa432a073da56c8/keybase.md": `### Keybase proof 143 144 I hereby claim: 145 146 * I am kbtester2 on github. 147 * I am t_alice (https://keybase.io/t_alice) on keybase. 148 * I have a public key whose fingerprint is 2373 FD08 9F28 F328 916B 88F9 9C79 27C0 BDFD ADF9 149 150 To claim this, I am signing this object: 151 152 json 153 { 154 "body": { 155 "client": { 156 "name": "keybase.io node.js client", 157 "version": "0.7.5" 158 }, 159 "key": { 160 "fingerprint": "2373fd089f28f328916b88f99c7927c0bdfdadf9", 161 "host": "keybase.io", 162 "key_id": "9C7927C0BDFDADF9", 163 "uid": "295a7eea607af32040647123732bc819", 164 "username": "t_alice" 165 }, 166 "merkle_root": { 167 "ctime": 1424293518, 168 "hash": "fd557b6743f705d3672e919102a78b2a2371af34735bff33db524c5baecda8fd61c6c625ecc1ce1f7a2ed435e1c82c9a6c2ff861782daf86a9dd6594c278ac1e", 169 "seqno": 2 170 }, 171 "service": { 172 "name": "github", 173 "username": "kbtester2" 174 }, 175 "type": "web_service_binding", 176 "version": 1 177 }, 178 "ctime": 1424293523, 179 "expire_in": 157680000, 180 "prev": "68700c8bf6c727934f126c5dcc5ef4dacfe450663435065e7930f1f87d3b5333", 181 "seqno": 2, 182 "tag": "signature" 183 } 184 185 with the key [2373 FD08 9F28 F328 916B 88F9 9C79 27C0 BDFD ADF9](https://keybase.io/t_alice), yielding the signature: 186 187 -----BEGIN PGP MESSAGE----- 188 Version: GnuPG/MacGPG2 v2 189 190 owFdkm9oVWUcx++uzlhcIUTsRV6yUy8mXOZ5nuc8f840y3ZRYhAhijrIw3OeP/ee 191 dnfv3Tlnm3NbRJYRWRg6wvLFpmDBpmVBBHNhL0yimDBZkqKBhJbppg2j8LJ6zlik 192 nVc/nufz+35/3/N79i9dlErXTc86qPPR/R/Uffern9ry89yBPsuvyF6ruc8SpUCV 193 46Qq8w5lNVvtqtfnkWoKKqvKFamaXo5WLTA5q1uFUVApG8puok3YGsgleNKsg3JB 194 hdUwSLQsiCjS0mauhkwjyFxAfMa06wrqQipsX2rJpXaNZLESxQ+4WvOaXiDNqduS 195 8C32c/mN+Q35jQnfNX8BXcypUpzYlBsD27GJQ0FiC33BwDwYqXAhUuzxUiBUMm6H 196 CttLygsrlfnMIg4SAjjQgS7CgJmBeFQ0PVpiTH1CHaSpjSUiFCoXuMCGnDIfcuMF 197 jLVDEfa1Rkj6GDoC+1wJyZmWBAgiCMRKCCAU0JRDJR2EFRAMCpcTAbVmBFAGJTcF 198 d6Uk2HUEpIwLoEyCSHWWK1YzHEjKsDtJ8N+aCkFc7PIfzNnuxyqKVQiTpHFvNTnr 199 Ub630O35QVkOm0Xdv0lg0P/9BYhyltpVDULlBQmBKWG2+XJWNVTdRpMwatuC+ZoI 200 CqmLHA0gEVgKgZV2JBdaOdgmBJm8NsHKILYGmlGJfIwQui+bmZMXjGQUFMo87grN 201 kt6qW7k4VZdOLalPJ0819XDDI/++X/7CQ7WlrbWpzGOTlz8+8ea13MVNeydfv/Ph 202 6GBrJnP87HDIhnpq3/+GXnp/6pWx5fJptXd8x4YxOFK4UF8cLA4suz15cfWz3/yx 203 fOhUfnDdjWNP7s7woYls6VBf6/aZZ1ZeQPtevf5R7fq3vxxbll39++5NnZfW1cb+ 204 yoxca+sfLJ3sp2/frd/ZcqTh9KWZT7YcfWpf40TwxOiajPf3RGPH5htz711d3//V 205 3PFd538C09s/XZudGfV+PPfDi4fHv5je4VWH2+6VXkuPzKzI3zxzSH82e+XLq1MH 206 Fr2x9Wv4zvptYE999vK7Vw5Otjyfnv3zVOPpe+MN9pm2xztOznahW9lbny8uumfv 207 nj+3p+dg+h8= 208 =iePR 209 -----END PGP MESSAGE----- 210 211 212 And finally, I am proving ownership of the github account by posting this as a gist. 213 214 ### My publicly-auditable identity: 215 216 https://keybase.io/t_alice 217 218 ### From the command line: 219 220 Consider the [keybase command line program](https://keybase.io/docs/command_line). 221 222 bash 223 # look me up 224 keybase id t_alice 225 226 # encrypt a message to me 227 keybase encrypt t_alice -m 'a secret message...' 228 229 # ...and more... 230 231 `, 232 "https://gist.githubusercontent.com/tacoplusplus/d21a10f2d7f6447dba7d/raw/cfeb4ffbec5f555bddf4ce23ea43bcb7613c6577/keybase.md": `### Keybase proof 233 234 I hereby claim: 235 236 * I am tacoplusplus on github. 237 * I am t_charlie (https://keybase.io/t_charlie) on keybase. 238 * I have a public key whose fingerprint is 6FB9 1F01 1D89 542A C1C0 947D DE0F 9384 9129 7B7F 239 240 To claim this, I am signing this object: 241 242 json 243 { 244 "body": { 245 "client": { 246 "name": "keybase.io node.js client", 247 "version": "0.7.5" 248 }, 249 "key": { 250 "fingerprint": "6fb91f011d89542ac1c0947dde0f938491297b7f", 251 "host": "keybase.io", 252 "key_id": "DE0F938491297B7F", 253 "uid": "9d56bd0c02ac2711e142faf484ea9519", 254 "username": "t_charlie" 255 }, 256 "merkle_root": { 257 "ctime": 1424293546, 258 "hash": "ad25d6ffda2195229175f7199e6fca799b36ca03523c2fb8030f9b81bb185ea7a4babfdbf7650e80a0ecb015a0bfd6382fe42b11b4914aff5812d3667cb4cd33", 259 "seqno": 8 260 }, 261 "service": { 262 "name": "github", 263 "username": "tacoplusplus" 264 }, 265 "type": "web_service_binding", 266 "version": 1 267 }, 268 "ctime": 1424293548, 269 "expire_in": 157680000, 270 "prev": "1dd32ec2e951f642d6f88ac93f07c69b1195d63d9011cfe5ff14a889c8af3d54", 271 "seqno": 2, 272 "tag": "signature" 273 } 274 275 with the key [6FB9 1F01 1D89 542A C1C0 947D DE0F 9384 9129 7B7F](https://keybase.io/t_charlie), yielding the signature: 276 277 -----BEGIN PGP MESSAGE----- 278 Version: GnuPG/MacGPG2 v2 279 280 owFdkl1sFUUUx+9toUJFPpWibQJsUnngWmZmd3ZnClIw5SakxgipNJCY2/m83dK7 281 e9m9t7aBykdoCA986AMoJCQaEaKGNEQrFF54oMYYDOGjDSRqNTURDST0wfigjbNN 282 QWSTTSZn/uc/53fOOfpcZaoifX9ieI/c/XFd+rt7PNU6PvnFTouHstdq3GmJLl8F 283 peQUsIKyGq3tqpezWDX44bIglKqhM142rclY3SqK/TAwKtDgNWCrL5PIk2TtB3kV 284 FSM/8bJczSnUAEJJKHYQE1AA6nhSKqCpTRwKEfW4p41lRxiX/veqNeWZ86WJNm8A 285 2cf617ysuStPXVCJXS6BAMYbeRAq6CDNtEMcxSiGNBHGKppGKuVEB4sMRFJwQUXb 286 u1QuCsMpalHyE43JdxC1seOakljcYbKYRFi6WkuGIMUIUehh7UFKlasF8yjltisY 287 sDGyBdKcANvAcQI5hwQr5jGHM64l156LgSKAASU4gJgBE3VtgrRyEIeQGzyHaY0J 288 RNJ2XU9wR0jbNgyx2hGEViPpS45Rty/UE4PK+6WOMn+KlImw2FWOkz+BLfUWk/A7 289 iuemDT7NcT+QZlpPjhMa6dONIBlL9RT9SOX8RIE9lwDzZaxipLqNJ5TSRkogZfqt 290 XQeZVhHCBLU18IRLDRg17bMlNWsgtMJaG0pCqCBM2xI7/+EhUyfLG8vYzwesVI7M 291 nA6m62ak0hWpqpkVyb6mqmfPf7TE2bnP/FNz6spoW/7MxuuvV+vdnx/tuzerOavb 292 g9biX5fw0E+1mwuHXm4Zrf96zeaNrcOF5z8cz/YvvDv77Ok7P3feHx+67v+2ItP+ 293 +yJn4tZ7uPrNW6uWDsVNY3VvjO36oVo9e7vml4UvTdSom1fPozX9n51/9/hg+81D 294 cwdvvFA70Pnwx5P5lauvztk0NnCjJ1y9b337g7Y5k3fK9VVbwbxX/i5UfZk+S/9Y 295 UR5+66MXt7wfq707vs83rxu5fKLlYH3TmV8Hl3z7Dd6S3fPBCDs2/8SBnrUXYRXa 296 9ueS28sPj26r3Ftb2XVh17zl15oefvWgtaXtWt3xFq/n7YHT5z65sKB568j+/iPr 297 XhUbGicXV/4L 298 =2qH+ 299 -----END PGP MESSAGE----- 300 301 302 And finally, I am proving ownership of the github account by posting this as a gist. 303 304 ### My publicly-auditable identity: 305 306 https://keybase.io/t_charlie 307 308 ### From the command line: 309 310 Consider the [keybase command line program](https://keybase.io/docs/command_line). 311 312 bash 313 # look me up 314 keybase id t_charlie 315 316 # encrypt a message to me 317 keybase encrypt t_charlie -m 'a secret message...' 318 319 # ...and more...`, 320} 321