package main import ( "database/sql" "fmt" "github.com/gin-gonic/contrib/sessions" "github.com/gin-gonic/gin" _ "github.com/lib/pq" ) var router *gin.Engine var db *sql.DB func main() { // Подключение к базе данных connect() // Создаем роутер по умолчанию router = gin.Default() // Загружаем файлы шаблонов HTML страниц router.LoadHTMLFiles( cfg.Template+"index.html", cfg.Template+"footer.html", cfg.Template+"header.html", cfg.Template+"authorization.html", cfg.Template+"admin.html", cfg.Template+"404.html", ) // Указываем папку статических файлов router.Static("/assets", cfg.Assets) // Создаем сессию (необходимо для сохранения авторизации на сайте) word := sessions.NewCookieStore([]byte("my-private-key")) router.Use(sessions.Sessions("session", word)) // Обработчик запроса, если пользователь будет долбиться по не существующему адресу router.NoRoute(notFound) router.GET("/", index) router.GET("/authorization", authorization) router.POST("/login", login) router.GET("/logout", logout) router.Run(cfg.ServerHost + ":" + cfg.ServerPort) } func notFound(c *gin.Context) { c.HTML(404, "404", gin.H{}) } func index(c *gin.Context) { s := sessions.Default(c) admin := false isLogin := false role, ok := s.Get("MySecretKey").(string) if ok { if role == "admin" { admin = true } isLogin = true } c.HTML(200, "index", gin.H{ "Title": "Мой сайт", "IsAdmin": admin, "IsLogin": isLogin, }) } func authorization(c *gin.Context) { c.HTML(200, "authorization", gin.H{}) } func login(c *gin.Context) { s := sessions.Default(c) _, ok := s.Get("MySecretKey").(string) if ok { s.Clear() } var u user e := c.BindJSON(&u) if e != nil { fmt.Println(e.Error()) c.JSON(200, gin.H{ "Result": false, }) return } row := db.QueryRow(`SELECT "Role", "Name" FROM "User" WHERE "Phone"=$1 AND "Password"=$2`, u.Phone, u.Password) e = row.Scan(&u.Role, &u.Name) if e != nil { fmt.Println(e.Error()) c.JSON(200, gin.H{ "Result": false, }) return } s.Set("MySecretKey", u.Role) e = s.Save() if e != nil { fmt.Println(e.Error()) c.JSON(200, gin.H{ "Result": false, }) return } c.JSON(200, gin.H{ "Result": true, "Name": u.Name, }) } func logout(c *gin.Context) { s := sessions.Default(c) role, ok := s.Get("MySecretKey").(string) if ok { s.Delete(role) s.Save() } c.HTML(200, "index", gin.H{ "Title": "Мой сайт", "IsAdmin": false, "IsLogin": false, }) }