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