main.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. package main
  2. import (
  3. "encoding/json"
  4. "log"
  5. "net"
  6. "net/http"
  7. "os"
  8. "strings"
  9. "time"
  10. // "git.mmnx.de/Moe/webOffice_backend/contacts"
  11. // "git.mmnx.de/Moe/webOffice_backend/module"
  12. "git.mmnx.de/mmnx/cdn/module"
  13. "github.com/gorilla/mux"
  14. "github.com/jinzhu/gorm"
  15. _ "github.com/jinzhu/gorm/dialects/mysql"
  16. "github.com/rs/cors"
  17. "github.com/urfave/negroni"
  18. )
  19. func connectDB(host string) *gorm.DB {
  20. time.Sleep(250 * time.Millisecond) // let mysql startup
  21. db, err := gorm.Open("mysql", "wo:wo@tcp("+host+")/weboffice?charset=utf8mb4&parseTime=True&loc=Local")
  22. if err != nil {
  23. if strings.HasPrefix(err.Error(), "default addr for network") {
  24. log.Println("Reconnecting..")
  25. return connectDB(host)
  26. }
  27. log.Println(err)
  28. return nil
  29. }
  30. log.Println("Apparently connected")
  31. return db
  32. }
  33. func main() {
  34. log.SetFlags(log.LstdFlags | log.Lshortfile) // get line numberz
  35. c := cors.New(cors.Options{ // allow ng dev server access
  36. AllowedOrigins: []string{"http://localhost:4200"},
  37. AllowedMethods: []string{"GET", "POST", "PUT", "PATCH", "DELETE"},
  38. })
  39. // lookup docker db ip
  40. names, err := net.LookupHost("cdn-db")
  41. if err != nil {
  42. log.Println("Failed to get DB host: ", err)
  43. return // TODO retry
  44. }
  45. if len(names) < 1 {
  46. log.Println("No hosts")
  47. return
  48. }
  49. db := connectDB(names[0])
  50. defer db.Close()
  51. router := mux.NewRouter()
  52. apiV1 := router.PathPrefix("/api/v1").Subrouter()
  53. modConf := module.Config{apiV1, "/api/v1", db, true, log.New(os.Stdout, "[debug] ", log.LstdFlags|log.Lshortfile)} // debug
  54. //modConf := module.Config{apiV1, "/api/v1", db, false, log.New(os.Stdout, "[log] ", log.LstdFlags|log.Lshortfile)} // production
  55. module.Conf = modConf
  56. // contacts.RegisterModule(&modConf)
  57. module.NegroniRoute(apiV1, "/api/v1", "/test", "GET", HandlerFunc, AuthFunc)
  58. n := negroni.Classic()
  59. n.Use(module.NewHTTPStatusHandler())
  60. n.Use(c)
  61. n.UseHandler(router)
  62. n.Run(":420126")
  63. }
  64. // AuthFunc ...
  65. func AuthFunc(w http.ResponseWriter, r *http.Request, next http.HandlerFunc) {
  66. // TODO some kind of auth
  67. next(w, r)
  68. }
  69. // HandlerFunc ...
  70. func HandlerFunc(w http.ResponseWriter, r *http.Request) {
  71. encJSON, _ := json.Marshal("wörks") // err
  72. // errs.HandleError(errs.ErrEncodingJSON, err)
  73. //
  74. // // Error handling debug
  75. // err = errors.New("ayyyyy")
  76. // errs.HandleError(errs.ErrUnknown, err)
  77. // names, err := net.LookupHost("weboffice-db")
  78. // module.HandleError(module.ErrUnknown, err)
  79. //
  80. // spew.Dump(names)
  81. w.Write(encJSON)
  82. // log.Println(string(encJSON))
  83. }