Advertisement
Void-voiD

Untitled

Oct 15th, 2019
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 5.14 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "bufio"
  5.     "fmt"
  6.     "github.com/jlaffaye/ftp"
  7.     "io/ioutil"
  8.     "log"
  9.     "net/http"
  10.     "os"
  11. )
  12.  
  13. var (
  14.     Server   = ""
  15.     Login    = ""
  16.     Password = ""
  17.     BasePath = "/home/iu9_33_03/GoProjects/src/Laba1"
  18.     client *ftp.ServerConn
  19.     file *os.File
  20.     err error
  21.     cur1, _ = ioutil.ReadFile("web/Home.html")
  22.     homeScreenForm = string(cur1)
  23.     cur2, _ = ioutil.ReadFile("web/Menu.html")
  24.     menuScreenFormStart = string(cur2)
  25.     cur3, _ = ioutil.ReadFile("web/Options.html")
  26.     options = string(cur3)
  27.     cur4, _ = ioutil.ReadFile("web/End.html")
  28.     menuScreenFormEnd = string(cur4)
  29.     //185.20.227.83
  30. )
  31.  
  32. func HomeScreenHandler(w http.ResponseWriter, r *http.Request) {
  33.     fmt.Fprintf(w, homeScreenForm)
  34. }
  35.  
  36. func MenuScreenHandler(w http.ResponseWriter, r *http.Request) {
  37.     if r.URL.Query().Get("server") != "" {
  38.         Server = r.URL.Query().Get("server")
  39.     }
  40.     if r.URL.Query().Get("login") != "" {
  41.         Login = r.URL.Query().Get("login")
  42.     }
  43.     if r.URL.Query().Get("pass") != "" {
  44.         Password = r.URL.Query().Get("pass")
  45.     }
  46.  
  47.     client, err = ftp.Connect(Server)
  48.     if err != nil {
  49.         log.Fatal(err)
  50.     }
  51.     err = client.Login(Login, Password)
  52.     if err != nil {
  53.         log.Fatal(err)
  54.     }
  55.  
  56.     res := menuScreenFormStart
  57.     res += "<center><p><h2>" + Server + "</h2></p>" + "<p><h3> Connected </h3></p>"
  58.     res += options
  59.     option := r.URL.Query().Get("options")
  60.  
  61.     switch option {
  62.     case "delete":
  63.         err = removeDirectory(r.URL.Query().Get("f1"))
  64.         if err != nil {
  65.             log.Fatal(err)
  66.         }
  67.     case "make":
  68.         err = makeDirectory(r.URL.Query().Get("f1"))
  69.         if err != nil {
  70.             log.Fatal(err)
  71.         }
  72.     case "list":
  73.         entries, err := listOfDirectories(r.URL.Query().Get("f1"))
  74.         if err != nil {
  75.             log.Fatal(err)
  76.         }
  77.         res += "<p><b>" + r.URL.Query().Get("f1") + ": </b></p>"
  78.         for _, e := range entries {
  79.             res += "<p>" + e.Name + "</p>"
  80.         }
  81.     case "upload":
  82.         err = uploadFile(r.URL.Query().Get("f1"), r.URL.Query().Get("f2"))
  83.         if err != nil {
  84.             log.Fatal(err)
  85.         }
  86.     case "read":
  87.         str, err := readFile(r.URL.Query().Get("f1"))
  88.         if err != nil {
  89.             log.Fatal(err)
  90.         }
  91.         res += "<p>" + str + "</p>"
  92.     case "currentDir":
  93.         str, err := currentDirectory()
  94.         if err != nil {
  95.             log.Fatal(err)
  96.         }
  97.         res += "<p>" + str + "</p>"
  98.     case "change":
  99.         err := changeDirectory(r.URL.Query().Get("f1"))
  100.         if err != nil {
  101.             log.Fatal(err)
  102.         }
  103.     }
  104.     res += menuScreenFormEnd
  105.     fmt.Fprint(w, res)
  106.  
  107.     err = client.Quit()
  108.     if err != nil {
  109.         log.Fatal(err)
  110.     }
  111. }
  112.  
  113. func uploadFile(from string, to string) error {
  114.     file, err = os.Open(BasePath + from)
  115.     if err != nil {
  116.         return err
  117.     }
  118.     reader := bufio.NewReader(file)
  119.     err = client.Stor(to, reader)
  120.     if err != nil {
  121.         return err
  122.     }
  123.     return nil
  124. }
  125.  
  126. func removeDirectory(path string) error {
  127.     err = client.Delete(path)
  128.     if err != nil {
  129.         return err
  130.     }
  131.     return nil
  132. }
  133.  
  134. func makeDirectory(dir string) error {
  135.     err = client.MakeDir(dir)
  136.     if err != nil {
  137.         return err
  138.     }
  139.     return nil
  140. }
  141.  
  142. func listOfDirectories(path string) ([]*ftp.Entry, error) {
  143.     entries, err := client.List(path)
  144.     if err != nil {
  145.         return nil, err
  146.     }
  147.     return entries, nil
  148. }
  149.  
  150. func readFile(path string) (string, error) {
  151.     file, err := client.Retr(path)
  152.     if err != nil {
  153.         return "", err
  154.     }
  155.     buffer, err := ioutil.ReadAll(file)
  156.     if err != nil {
  157.         return "", err
  158.     }
  159.     return string(buffer), nil
  160. }
  161.  
  162. func currentDirectory() (string, error) {
  163.     name, err := client.CurrentDir()
  164.     if err != nil {
  165.         return "", err
  166.     }
  167.     return name, nil
  168. }
  169.  
  170. func changeDirectory(path string) error {
  171.     err = client.ChangeDir(path)
  172.     if err != nil {
  173.         return err
  174.     }
  175.     return nil
  176. }
  177.  
  178. func main() {
  179.     http.HandleFunc("/", HomeScreenHandler)
  180.     http.HandleFunc("/menu", MenuScreenHandler)
  181.     err = http.ListenAndServe(":9211", nil)
  182.     if err != nil {
  183.         log.Fatal("ListenAndServe: ", err)
  184.     }
  185. }
  186. //----------------------------------------
  187. package main
  188.  
  189. import (
  190.         "flag"
  191.         "github.com/goftp/file-driver"
  192.         "github.com/goftp/server"
  193.         "log"
  194. )
  195.  
  196. func main() {
  197.         var (
  198.                 root = flag.String("root", ".", "Root directory to serve")
  199.                 user = flag.String("user", "admin", "Username for login")
  200.                 pass = flag.String("pass", "123456", "Password for login")
  201.                 port = flag.Int("port", 9211, "Port")
  202.                 host = flag.String("host", "185.20.227.83", "Host")
  203.         )
  204.         flag.Parse()
  205.         if *root == "" {
  206.                 log.Fatalf("Please set a root to serve with -root")
  207.         }
  208.  
  209.         factory := &filedriver.FileDriverFactory{
  210.                 RootPath: *root,
  211.                 Perm:     server.NewSimplePerm("user", "group"),
  212.         }
  213.  
  214.         opts := &server.ServerOpts{
  215.                 Factory:  factory,
  216.                 Port:     *port,
  217.                 Hostname: *host,
  218.                 Auth:     &server.SimpleAuth{Name: *user, Password: *pass},
  219.         }
  220.  
  221.         log.Printf("Starting ftp server on: %v:%v", opts.Hostname, opts.Port)
  222.         log.Printf("Username: %v, Password: %v", *user, *pass)
  223.  
  224.         serv := server.NewServer(opts)
  225.         err := serv.ListenAndServe()
  226.         if err != nil {
  227.                 log.Fatal("Error starting server: ", err)
  228.         }
  229.  
  230. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement