app.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package main
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "io"
  6. "io/ioutil"
  7. "log"
  8. "net/http"
  9. "os"
  10. "strings"
  11. "time"
  12. )
  13. // Application stores main information needed to run the app
  14. type Application struct {
  15. Name, AccessToken, Sid, BaseURL, AuthString string
  16. Languages map[string]string
  17. Delay time.Duration
  18. }
  19. func (app *Application) setBaseURL(url string) {
  20. if !strings.HasSuffix(url, "/") {
  21. url += "/"
  22. }
  23. app.BaseURL = url
  24. }
  25. func jsonDecoder(data io.ReadCloser, target interface{}) error {
  26. decoder := json.NewDecoder(data)
  27. return decoder.Decode(target)
  28. }
  29. func (app *Application) loadLanguages() bool {
  30. data, err := os.Open("./html/languages.json")
  31. if err != nil {
  32. log.Printf("Error reading languages: %s", err)
  33. return false
  34. }
  35. defer func() {
  36. if err := data.Close(); err != nil {
  37. log.Printf("Error closing file: %s", err)
  38. }
  39. }()
  40. app.Languages = make(map[string]string)
  41. err = jsonDecoder(data, &app.Languages)
  42. if err != nil {
  43. log.Printf("Error decoding languages: %s", err)
  44. return false
  45. }
  46. return true
  47. }
  48. func (app Application) checkLanguage(language string) bool {
  49. _, ok := app.Languages[language]
  50. return ok
  51. }
  52. func (app *Application) login() (bool, error) {
  53. credentials, err := ioutil.ReadFile("./secrets.json")
  54. if err != nil {
  55. return false, fmt.Errorf("Error reading credentials: %s", err)
  56. }
  57. loginURL := app.BaseURL + "auth/login"
  58. resp, err := postQuery(loginURL, credentials)
  59. if err != nil {
  60. return false, fmt.Errorf("Error logging in: %s", err)
  61. }
  62. defer resp.Body.Close()
  63. if resp.StatusCode != http.StatusOK {
  64. return false, fmt.Errorf("Error logging in: %s", resp.Status)
  65. }
  66. err = jsonDecoder(resp.Body, &app)
  67. if err != nil {
  68. return false, fmt.Errorf("Error decoding login details: %s", err)
  69. }
  70. app.AuthString = "?authToken=" + app.AccessToken
  71. log.Println(app.AuthString, resp.Status)
  72. return true, nil
  73. }