Advertisement
Guest User

Untitled

a guest
Jun 29th, 2017
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 9.51 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "encoding/json"
  5.     "fmt"
  6.     "io/ioutil"
  7.     "log"
  8.     "net/http"
  9.     "strconv"
  10.     //"os"
  11.     "html/template"
  12.     _ "github.com/lib/pq"
  13.     "github.com/dchest/uniuri"
  14.     "database/sql"
  15.     "time"
  16.     //"strings"
  17. )
  18.  
  19. //type UpdateCfg strcut {
  20. //  Timeout integer
  21. //  Offset integer
  22. //}
  23. type Update struct {
  24.     //Ok     bool `json:"ok"`
  25.     //Result []struct {
  26.         UpdateId int `json:"update_id"`
  27.         Message struct {
  28.             MessageId int `json:"message_id"`
  29.             From      struct {
  30.                 Id           int    `json:"id"`
  31.                 FirstName    string `json:"first_name"`
  32.                 LastName     string `json:"last_name"`
  33.                 LanguageCode string `json:"language_code"`
  34.             } `json:"from"`
  35.             Chat struct {
  36.                 Id        int    `json:"id"`
  37.                 FirstName string `json:"first_name"`
  38.                 LastName  string `json:"last_name"`
  39.                 ChatType  string `json:"type"`
  40.             } `json:"chat"`
  41.             Date int    `json:"date"`
  42.             Text string `json:"text"`
  43.         } `json:"message"`
  44.     } //`json:"result"`
  45. //}
  46.  
  47. type Message struct {
  48.         Ok     bool `json:"ok"`
  49.         Result struct {
  50.             MessageId int `json:"message_id"`
  51.             From      struct {
  52.                 Id           int    `json:"id"`
  53.                 FirstName    string `json:"first_name"`
  54.                 Username     string `json:"username"`
  55.             } `json:"from"`
  56.             Chat struct {
  57.                 Id        int    `json:"id"`
  58.                 FirstName string `json:"first_name"`
  59.                 LastName  string `json:"last_name"`
  60.                 ChatType  string `json:"type"`
  61.             } `json:"chat"`
  62.             Date int    `json:"date"`
  63.             Text string `json:"text"`
  64.         } `json:"result"`
  65.     }
  66.  
  67. type Orders []struct {
  68.     OrderId int `json:"order_id"`
  69.     TypeId  int `json:"type_id"`
  70.     LocationId  int `json:"location_id"`
  71.     VolumeTotal int `json:"volume_total"`
  72.     VolumeRemain int `json:"volume_remain"`
  73.     MinVolume int `json:"min_volume"`
  74.     Price float64 `json:"price"`
  75.     IsBuyOrder bool `json:"is_buy_order"`
  76.     Duration int `json:"duration"`
  77.     Issued string `json:"issued"`
  78.     Range string `json:"range"`
  79. }
  80.  
  81.  
  82. const (
  83.     Token  string = "420535307:AAG8-yNLWdRK3s2kDQ5KzjLYiRowUMP-avI"
  84.     UrlApiTelegram string = "https://api.telegram.org/bot"
  85.     UrlApiEve string = "https://esi.tech.ccp.is/latest"
  86.     WebHookUrl string = "https://aqueous-chamber-20779.herokuapp.com/"
  87. )
  88.  
  89. /*
  90. func getCharacterOrders(character_id int) Orders {
  91.     query := "/characters/" + strconv.Itoa(character_id) + "/orders/"
  92.     c := http.Client{}
  93.     resp, err := c.Get(UrlApiEve + query)
  94.     if err != nil {
  95.         log.Println(err)
  96.     }
  97.     body, _ := ioutil.ReadAll(resp.Body)
  98.     //fmt.Println(string(body))
  99.     orders := Orders{}
  100.     err = json.Unmarshal(body, &order)
  101.     if err != nil {
  102.         log.Println(err)
  103.     }
  104.     //fmt.Println(order)
  105.     resp.Body.Close()
  106.  
  107.     return orders
  108. }
  109.  
  110. func getRegionOrders(region_id int) Orders {
  111.     query := "/markets/" + strconv.Itoa(region_id) + "/orders/"
  112.     c := http.Client{}
  113.     resp, err := c.Get(UrlApiEve + query)
  114.     if err != nil {
  115.         log.Println(err)
  116.     }
  117.     body, _ := ioutil.ReadAll(resp.Body)
  118.     //fmt.Println(string(body))
  119.     orders := Orders{}
  120.     err = json.Unmarshal(body, &orders)
  121.     if err != nil {
  122.         log.Println(err)
  123.     }
  124.     //fmt.Println(order)
  125.     resp.Body.Close()
  126.  
  127.     return orders
  128. }
  129.  
  130. func getUpdate(timeout int, offset int) Update {
  131.     path := UrlApiTelegram + Token
  132.     query := "/getUpdates?timeout="
  133.     c := http.Client{}
  134.     resp, err := c.Get(path + query + strconv.Itoa(timeout) + "&offset=" + strconv.Itoa(offset))
  135.     if err != nil {
  136.         log.Println(err)
  137.     }
  138.     body, _ := ioutil.ReadAll(resp.Body)
  139.     //fmt.Println(string(body)
  140.     //decoder := json.NewDecoder(resp.Body)
  141.     //var update interface{}
  142.     update := Update{}
  143.     //err = decoder.Decode(&update)
  144.     err = json.Unmarshal(body, &update)
  145.     if err != nil {
  146.         log.Println(err)
  147.     }
  148.     resp.Body.Close()
  149.  
  150.     return update
  151. }
  152. */
  153.  
  154. func SetWebhook() {
  155.     path := UrlApiTelegram + Token
  156.     query := "/setWebhook?url=" + WebHookUrl
  157.     c := http.Client{}
  158.     resp, err := c.Get(path + query)
  159.     if err != nil {
  160.         log.Println(err)
  161.     }
  162.     body, _ := ioutil.ReadAll(resp.Body)
  163.     log.Println(string(body))
  164.     resp.Body.Close()
  165. }
  166.  
  167. func sendMessage(chat_id int, text string, reply_to_message_id int) Message {
  168.     path := UrlApiTelegram + Token
  169.     query := "/sendMessage?chat_id="
  170.     c := http.Client{}
  171.     resp, err := c.Get(path + query + strconv.Itoa(chat_id) + "&text=" + text + "&reply_to_message_id=" + strconv.Itoa(reply_to_message_id))
  172.     if err != nil {
  173.         log.Println(err)
  174.     }
  175.     body, _ := ioutil.ReadAll(resp.Body)
  176.     message := Message{}
  177.     err = json.Unmarshal(body, &message)
  178.     if err != nil {
  179.         log.Println(err)
  180.     }
  181.     resp.Body.Close()
  182.     return message
  183. }
  184.  
  185. /*func mapface(m interface{}, mm map[string]interface{}) map[string]interface{} {
  186.     for k, v := range m.(map[string]interface{}) {
  187.         switch vv := v.(type) {
  188.         case string:
  189.             mm[k] = v
  190.             fmt.Println(k)
  191.         case []interface{}:
  192.             //vv[0] = vv[0].([]interface{})
  193.  
  194.             return mapface(vv[0], mm)
  195.         }
  196.     }
  197.     //fmt.Println(mm)
  198.     return mm
  199. }*/
  200.  
  201.  
  202. func main() {
  203.     var sessions = map[string]string{}
  204.     SetWebhook()
  205.     //port := os.Getenv("PORT")
  206.     port := "8085"
  207.     //handler1 := HandlerWebhook{}
  208.     //handler2 := HandlerIndex{}
  209.     http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
  210.     if r.Method == http.MethodPost {
  211.         body, _ := ioutil.ReadAll(r.Body)
  212.         log.Println("Body: ", string(body))
  213.         update := Update{}
  214.         err := json.Unmarshal(body, &update)
  215.         if err != nil {
  216.             log.Println(err)
  217.         }
  218.         /*switch update.Message.Text {
  219.             case "":
  220.  
  221.             case "":
  222.  
  223.             default:
  224.                 sendMessage(update.Message.Chat.Id, update.Message.Text, 0)
  225.         }
  226.         fmt.Println(update.Message.Text)
  227.         message := sendMessage(update.Message.Chat.Id, update.Message.Text, 0)
  228.         if message.Result.Text != update.Message.Text {
  229.                 log.Println(message)
  230.         }
  231.         /*for _, v := range update.Result {
  232.             fmt.Println(v.Message.Text)
  233.             message := sendMessage(v.Message.Chat.Id, v.Message.Text, 0)
  234.             if message.Result.Text != v.Message.Text {
  235.                 log.Println(message)
  236.             }
  237.         }*/
  238.         r.Body.Close()
  239.         }
  240.     })
  241.     http.HandleFunc("/add", func(w http.ResponseWriter, r *http.Request) {
  242.    
  243.         /*rows, err := db.Query("SELECT * FROM Tasks")
  244.         for rows.Next() {
  245.             var id int
  246.             var text, solution string
  247.             err = rows.Scan(&id, &text, &solution)
  248.             if err != nil {
  249.                 log.Println(err)
  250.             } else {
  251.                 fmt.Println(strconv.Itoa(id) + " " + text + " " + solution)
  252.             }
  253.         }*/  
  254.         sessionID, err := r.Cookie("session_id")
  255.         if err == http.ErrNoCookie {
  256.             http.Redirect(w, r, "/login", 301)
  257.             return
  258.         } else if err != nil {
  259.             log.Println(err)
  260.         }
  261.  
  262.         fmt.Println(sessionID)
  263.         _, ok := sessions[sessionID.Value]
  264.         if !ok {
  265.             fmt.Fprint(w, "Session not found")
  266.             //http.Redirect(w, r, "/login", 301)
  267.         } else {
  268.             if r.Method == http.MethodPost {
  269.                 r.ParseForm()
  270.                 db, err := sql.Open("postgres", "user=irina_dashevskaya dbname=mylocaldb sslmode=disable")
  271.                 if err != nil {
  272.                     log.Println(err)
  273.                 }
  274.                 if _, err = db.Exec("INSERT INTO Tasks (Text, Solution) VALUES ($1, $2)", r.Form["task"][0], r.Form["solution"][0]); err != nil {
  275.                     log.Println(err)
  276.                 }
  277.                 return
  278.             }
  279.             tmpl, err := template.ParseFiles("add.html")
  280.             if err != nil {
  281.                 log.Println("Can not expand template", err)
  282.                 return
  283.             }
  284.             if err = tmpl.Execute(w, nil); err != nil {
  285.                 log.Println(err)
  286.             }
  287.         }
  288.  
  289.     })
  290.     http.HandleFunc("/login", func(w http.ResponseWriter, r *http.Request) {
  291.         if r.Method == http.MethodPost {
  292.             var login string
  293.             r.ParseForm()
  294.             db, err := sql.Open("postgres", "user=irina_dashevskaya dbname=mylocaldb sslmode=disable")
  295.             if err != nil {
  296.                 log.Println(err)
  297.             }
  298.             err = db.QueryRow("SELECT login FROM Users WHERE login = $1 AND password = $2", r.Form["login"][0], r.Form["password"][0]).Scan(&login)
  299.             if err != nil {
  300.                 log.Println(err)
  301.             }
  302.             if login == "" {
  303.                 fmt.Println("Incorrect username or password")
  304.             } else {
  305.                 sessionID := uniuri.NewLen(32)
  306.                 sessions[sessionID] = login
  307.                 expiration := time.Now().Add(365 * 24 * time.Hour)
  308.                 cookie := http.Cookie{Name: "session_id", Value: sessionID, Expires: expiration}
  309.                 http.SetCookie(w, &cookie)
  310.                 fmt.Println("Cookie is set")
  311.                 http.Redirect(w, r, "/add", 301)
  312.                 return
  313.             }
  314.         } else {
  315.             tmpl, err := template.ParseFiles("template.html")
  316.             if err != nil {
  317.                 log.Println("Can not expand template", err)
  318.                 return
  319.             }
  320.             if err = tmpl.Execute(w, nil); err != nil {
  321.                 log.Println(err)
  322.             }
  323.         }
  324.         /*db, err := sql.Open("postgres", "user=irina_dashevskaya dbname=mylocaldb sslmode=disable")
  325.         if err != nil {
  326.             log.Println(err)
  327.         }
  328.         rows, err := db.Query("SELECT * FROM Tasks")
  329.         for rows.Next() {
  330.             var id int
  331.             var text, solution string
  332.             err = rows.Scan(&id, &text, &solution)
  333.             if err != nil {
  334.                 log.Println(err)
  335.             } else {
  336.                 fmt.Println(strconv.Itoa(id) + " " + text + " " + solution)
  337.             }
  338.         }
  339.  
  340.         tmpl, err := template.ParseFiles("template.html")
  341.         if err != nil {
  342.             log.Println("Can not expand template", err)
  343.             return
  344.         }
  345.         err = tmpl.Execute(w, nil)
  346.         if err != nil {
  347.             log.Println(err)
  348.         }*/
  349.     }   )
  350.     http.ListenAndServe(":"+port, nil)
  351.     return
  352.     /*
  353.     timeout := 5
  354.     offset := 0
  355.     //orders := getRegionOrders(10000001)
  356.     //fmt.Println(len(order))
  357.     for {
  358.         update := getUpdate(timeout, offset)
  359.         if len(update.Result) == 0 {
  360.             continue
  361.         }
  362.         offset = update.Result[0].UpdateId + 1
  363.         for _, v := range update.Result {
  364.             fmt.Println(v.Message.Text)
  365.             message := sendMessage(v.Message.Chat.Id, v.Message.Text, 0)
  366.             if message.Result.Text != v.Message.Text {
  367.                 log.Println(message)
  368.             }
  369.         }
  370.     }*/
  371.  
  372.  
  373.    
  374.    
  375.     //m := update.(map[string]interface{})
  376.     //mm := make(map[string]interface{})
  377.     //mm = mapface(m, mm)
  378.     //result := m["result"].([]interface{})[0]
  379.     //fmt.Println(mm)
  380. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement