123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- 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,
- })
- }
|