main.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  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. )
  26. // Указываем папку статических файлов
  27. router.Static("/assets", cfg.Assets)
  28. // Указываем путь к различным локальным файлам (картинки, документы, видео и тд). Папка data
  29. router.Use(static.Serve("/", static.LocalFile(cfg.Data, false)))
  30. // Создаем сессию (необходимо для сохранения авторизации на сайте)
  31. word := sessions.NewCookieStore([]byte("my-private-key"))
  32. router.Use(sessions.Sessions("session", word))
  33. // Обработчик запроса, если пользователь будет долбиться по не существующему адресу
  34. router.NoRoute(notFound)
  35. router.GET("/", index)
  36. router.GET("/authorization", authorization)
  37. router.POST("/login", login)
  38. router.GET("/logout", logout)
  39. router.Run(cfg.ServerHost + ":" + cfg.ServerPort)
  40. }
  41. func notFound(c *gin.Context) {
  42. c.HTML(404, "404", gin.H{})
  43. }
  44. func index(c *gin.Context) {
  45. s := sessions.Default(c)
  46. admin := false
  47. isLogin := false
  48. role, ok := s.Get("MySecretKey").(string)
  49. if ok {
  50. if role == "admin" {
  51. admin = true
  52. }
  53. isLogin = true
  54. }
  55. c.HTML(200, "index", gin.H{
  56. "Title": "Мой сайт",
  57. "IsAdmin": admin,
  58. "IsLogin": isLogin,
  59. })
  60. }
  61. func authorization(c *gin.Context) {
  62. c.HTML(200, "authorization", gin.H{})
  63. }
  64. func login(c *gin.Context) {
  65. s := sessions.Default(c)
  66. _, ok := s.Get("MySecretKey").(string)
  67. if ok {
  68. s.Clear()
  69. }
  70. var u user
  71. e := c.BindJSON(&u)
  72. if e != nil {
  73. fmt.Println(e.Error())
  74. c.JSON(200, gin.H{
  75. "Result": false,
  76. })
  77. return
  78. }
  79. row := db.QueryRow(`SELECT "Role", "Name" FROM "User" WHERE "Phone"=$1 AND "Password"=$2`, u.Phone, u.Password)
  80. e = row.Scan(&u.Role, &u.Name)
  81. if e != nil {
  82. fmt.Println(e.Error())
  83. c.JSON(200, gin.H{
  84. "Result": false,
  85. })
  86. return
  87. }
  88. s.Set("MySecretKey", u.Role)
  89. e = s.Save()
  90. if e != nil {
  91. fmt.Println(e.Error())
  92. c.JSON(200, gin.H{
  93. "Result": false,
  94. })
  95. return
  96. }
  97. c.JSON(200, gin.H{
  98. "Result": true,
  99. "Name": u.Name,
  100. })
  101. }
  102. func logout(c *gin.Context) {
  103. s := sessions.Default(c)
  104. role, ok := s.Get("MySecretKey").(string)
  105. if ok {
  106. s.Delete(role)
  107. s.Clear()
  108. s.Save()
  109. }
  110. c.HTML(200, "index", gin.H{
  111. "Title": "Мой сайт",
  112. "IsAdmin": false,
  113. "IsLogin": false,
  114. })
  115. }