main.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. package main
  2. import (
  3. "database/sql"
  4. "fmt"
  5. "github.com/gin-gonic/contrib/sessions"
  6. "github.com/gin-gonic/contrib/static"
  7. "github.com/gin-gonic/gin"
  8. _ "github.com/lib/pq"
  9. )
  10. var router *gin.Engine
  11. var db *sql.DB
  12. func main() {
  13. // Подключение к базе данных
  14. connect()
  15. // Создаем роутер по умолчанию
  16. router = gin.Default()
  17. // Загружаем файлы шаблонов HTML страниц
  18. router.LoadHTMLFiles(
  19. cfg.Template+"index.html",
  20. cfg.Template+"footer.html",
  21. cfg.Template+"header.html",
  22. cfg.Template+"authorization.html",
  23. cfg.Template+"admin.html",
  24. cfg.Template+"404.html",
  25. cfg.Template+"page1.html",
  26. cfg.Template+"page2.html",
  27. cfg.Template+"page3.html",
  28. cfg.Template+"page4.html",
  29. cfg.Template+"page5.html",
  30. )
  31. // Указываем папку статических файлов
  32. router.Static("/assets", cfg.Assets)
  33. // Указываем путь к различным локальным файлам (картинки, документы, видео и тд). Папка data
  34. router.Use(static.Serve("/", static.LocalFile(cfg.Data, false)))
  35. // Создаем сессию (необходимо для сохранения авторизации на сайте)
  36. word := sessions.NewCookieStore([]byte("my-private-key"))
  37. router.Use(sessions.Sessions("session", word))
  38. // Обработчик запроса, если пользователь будет долбиться по не существующему адресу
  39. router.NoRoute(notFound)
  40. router.GET("/", index)
  41. router.GET("/page/:page", indexPage)
  42. router.GET("/authorization", authorization)
  43. router.POST("/login", login)
  44. router.GET("/logout", logout)
  45. router.Run(cfg.ServerHost + ":" + cfg.ServerPort)
  46. }
  47. func notFound(c *gin.Context) {
  48. c.HTML(404, "404", gin.H{})
  49. }
  50. func indexPage(c *gin.Context) {
  51. page := c.Param("page")
  52. s := sessions.Default(c)
  53. admin := false
  54. isLogin := false
  55. role, ok := s.Get("MySecretKey").(string)
  56. if ok {
  57. if role == "admin" {
  58. admin = true
  59. }
  60. isLogin = true
  61. }
  62. c.HTML(200, "index", gin.H{
  63. "Title": "Мой сайт",
  64. "IsAdmin": admin,
  65. "IsLogin": isLogin,
  66. "Page": page,
  67. })
  68. }
  69. func index(c *gin.Context) {
  70. s := sessions.Default(c)
  71. admin := false
  72. isLogin := false
  73. role, ok := s.Get("MySecretKey").(string)
  74. if ok {
  75. if role == "admin" {
  76. admin = true
  77. }
  78. isLogin = true
  79. }
  80. c.HTML(200, "index", gin.H{
  81. "Title": "Мой сайт",
  82. "IsAdmin": admin,
  83. "IsLogin": isLogin,
  84. "Page": "main",
  85. })
  86. }
  87. func authorization(c *gin.Context) {
  88. c.HTML(200, "authorization", gin.H{})
  89. }
  90. func login(c *gin.Context) {
  91. s := sessions.Default(c)
  92. _, ok := s.Get("MySecretKey").(string)
  93. if ok {
  94. s.Clear()
  95. }
  96. var u user
  97. e := c.BindJSON(&u)
  98. if e != nil {
  99. fmt.Println(e.Error())
  100. c.JSON(200, gin.H{
  101. "Result": false,
  102. })
  103. return
  104. }
  105. row := db.QueryRow(`SELECT "Role", "Name" FROM "User" WHERE "Phone"=$1 AND "Password"=$2`, u.Phone, u.Password)
  106. e = row.Scan(&u.Role, &u.Name)
  107. if e != nil {
  108. fmt.Println(e.Error())
  109. c.JSON(200, gin.H{
  110. "Result": false,
  111. })
  112. return
  113. }
  114. s.Set("MySecretKey", u.Role)
  115. e = s.Save()
  116. if e != nil {
  117. fmt.Println(e.Error())
  118. c.JSON(200, gin.H{
  119. "Result": false,
  120. })
  121. return
  122. }
  123. c.JSON(200, gin.H{
  124. "Result": true,
  125. "Name": u.Name,
  126. })
  127. }
  128. func logout(c *gin.Context) {
  129. s := sessions.Default(c)
  130. _, ok := s.Get("MySecretKey").(string)
  131. if ok {
  132. s.Clear()
  133. s.Save()
  134. c.SetCookie("session", "", -1, "/", c.Request.Host, false, true)
  135. }
  136. c.HTML(200, "index", gin.H{
  137. "Title": "Мой сайт",
  138. "IsAdmin": false,
  139. "IsLogin": false,
  140. "Page": "main",
  141. })
  142. }