main.go 2.7 KB

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