@@ -2,18 +2,10 @@ package main
2
2
3
3
import (
4
4
"bufio"
5
- "bytes"
6
- "fmt"
7
- "github.com/atotto/clipboard"
8
5
"gopkg.in/urfave/cli.v1"
9
6
"io"
10
- "io/ioutil"
11
7
"log"
12
- "net/http"
13
- "net/url"
14
8
"os"
15
- "strconv"
16
- "strings"
17
9
)
18
10
19
11
// API constants for communicating with Write.as.
@@ -263,179 +255,3 @@ func handlePost(fullPost []byte, c *cli.Context) error {
263
255
264
256
return DoPost (c , fullPost , c .String ("font" ), false , tor , c .Bool ("code" ))
265
257
}
266
-
267
- func client (read , tor bool , path , query string ) (string , * http.Client ) {
268
- var u * url.URL
269
- var client * http.Client
270
- if tor {
271
- u , _ = url .ParseRequestURI (hiddenAPIURL )
272
- u .Path = "/api/" + path
273
- client = torClient ()
274
- } else {
275
- u , _ = url .ParseRequestURI (apiURL )
276
- u .Path = "/api/" + path
277
- client = & http.Client {}
278
- }
279
- if query != "" {
280
- u .RawQuery = query
281
- }
282
- urlStr := fmt .Sprintf ("%v" , u )
283
-
284
- return urlStr , client
285
- }
286
-
287
- // DoFetch retrieves the Write.as post with the given friendlyID,
288
- // optionally via the Tor hidden service.
289
- func DoFetch (friendlyID string , tor bool ) error {
290
- path := friendlyID
291
-
292
- urlStr , client := client (true , tor , path , "" )
293
-
294
- r , _ := http .NewRequest ("GET" , urlStr , nil )
295
- r .Header .Add ("User-Agent" , "writeas-cli v" + version )
296
-
297
- resp , err := client .Do (r )
298
- if err != nil {
299
- return err
300
- }
301
- defer resp .Body .Close ()
302
-
303
- if resp .StatusCode == http .StatusOK {
304
- content , err := ioutil .ReadAll (resp .Body )
305
- if err != nil {
306
- return err
307
- }
308
- fmt .Printf ("%s\n " , string (content ))
309
- } else if resp .StatusCode == http .StatusNotFound {
310
- return ErrPostNotFound
311
- } else if resp .StatusCode == http .StatusGone {
312
- } else {
313
- return fmt .Errorf ("Unable to get post: %s" , resp .Status )
314
- }
315
- return nil
316
- }
317
-
318
- // DoPost creates a Write.as post, returning an error if it was
319
- // unsuccessful.
320
- func DoPost (c * cli.Context , post []byte , font string , encrypt , tor , code bool ) error {
321
- data := url.Values {}
322
- data .Set ("w" , string (post ))
323
- if encrypt {
324
- data .Add ("e" , "" )
325
- }
326
- data .Add ("font" , getFont (code , font ))
327
-
328
- urlStr , client := client (false , tor , "" , "" )
329
-
330
- r , _ := http .NewRequest ("POST" , urlStr , bytes .NewBufferString (data .Encode ()))
331
- r .Header .Add ("User-Agent" , "writeas-cli v" + version )
332
- r .Header .Add ("Content-Type" , "application/x-www-form-urlencoded" )
333
- r .Header .Add ("Content-Length" , strconv .Itoa (len (data .Encode ())))
334
-
335
- resp , err := client .Do (r )
336
- if err != nil {
337
- return err
338
- }
339
- defer resp .Body .Close ()
340
-
341
- if resp .StatusCode == http .StatusOK {
342
- content , err := ioutil .ReadAll (resp .Body )
343
- if err != nil {
344
- return err
345
- }
346
-
347
- nlPos := strings .Index (string (content ), "\n " )
348
- url := content [:nlPos ]
349
- idPos := strings .LastIndex (string (url ), "/" ) + 1
350
- id := string (url [idPos :])
351
- token := string (content [nlPos + 1 : len (content )- 1 ])
352
-
353
- addPost (id , token )
354
-
355
- // Copy URL to clipboard
356
- err = clipboard .WriteAll (string (url ))
357
- if err != nil {
358
- Errorln ("writeas: Didn't copy to clipboard: %s" , err )
359
- } else {
360
- Info (c , "Copied to clipboard." )
361
- }
362
-
363
- // Output URL
364
- fmt .Printf ("%s\n " , url )
365
- } else {
366
- return fmt .Errorf ("Unable to post: %s" , resp .Status )
367
- }
368
-
369
- return nil
370
- }
371
-
372
- // DoUpdate updates the given post on Write.as.
373
- func DoUpdate (c * cli.Context , post []byte , friendlyID , token , font string , tor , code bool ) error {
374
- urlStr , client := client (false , tor , friendlyID , fmt .Sprintf ("t=%s" , token ))
375
-
376
- data := url.Values {}
377
- data .Set ("w" , string (post ))
378
-
379
- if code || font != "" {
380
- // Only update font if explicitly changed
381
- data .Add ("font" , getFont (code , font ))
382
- }
383
-
384
- r , _ := http .NewRequest ("POST" , urlStr , bytes .NewBufferString (data .Encode ()))
385
- r .Header .Add ("User-Agent" , "writeas-cli v" + version )
386
- r .Header .Add ("Content-Type" , "application/x-www-form-urlencoded" )
387
- r .Header .Add ("Content-Length" , strconv .Itoa (len (data .Encode ())))
388
-
389
- resp , err := client .Do (r )
390
- if err != nil {
391
- return err
392
- }
393
- defer resp .Body .Close ()
394
-
395
- if resp .StatusCode == http .StatusOK {
396
- if tor {
397
- Info (c , "Post updated via hidden service." )
398
- } else {
399
- Info (c , "Post updated." )
400
- }
401
- } else {
402
- if debug {
403
- ErrorlnQuit ("Problem updating: %s" , resp .Status )
404
- } else {
405
- return fmt .Errorf ("Post doesn't exist, or bad edit token given." )
406
- }
407
- }
408
- return nil
409
- }
410
-
411
- // DoDelete deletes the given post on Write.as.
412
- func DoDelete (c * cli.Context , friendlyID , token string , tor bool ) error {
413
- urlStr , client := client (false , tor , friendlyID , fmt .Sprintf ("t=%s" , token ))
414
-
415
- r , _ := http .NewRequest ("DELETE" , urlStr , nil )
416
- r .Header .Add ("User-Agent" , "writeas-cli v" + version )
417
- r .Header .Add ("Content-Type" , "application/x-www-form-urlencoded" )
418
-
419
- resp , err := client .Do (r )
420
- if err != nil {
421
- return err
422
- }
423
- defer resp .Body .Close ()
424
-
425
- if resp .StatusCode == http .StatusOK {
426
- if tor {
427
- Info (c , "Post deleted from hidden service." )
428
- } else {
429
- Info (c , "Post deleted." )
430
- }
431
- removePost (friendlyID )
432
- } else {
433
- if debug {
434
- ErrorlnQuit ("Problem deleting: %s" , resp .Status )
435
- } else {
436
- return fmt .Errorf ("Post doesn't exist, or bad edit token given." )
437
- }
438
- }
439
-
440
- return nil
441
- }
0 commit comments