76 lines
1.3 KiB
Go
76 lines
1.3 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"gorm.io/driver/postgres"
|
||
|
"gorm.io/gorm"
|
||
|
|
||
|
"golang.org/x/crypto/bcrypt"
|
||
|
)
|
||
|
|
||
|
type User struct {
|
||
|
ID uint `gorm:"primaryKey"`
|
||
|
Username string
|
||
|
Password string
|
||
|
Email string
|
||
|
Active bool
|
||
|
}
|
||
|
|
||
|
type APIUser struct {
|
||
|
ID uint
|
||
|
Username string
|
||
|
Email string
|
||
|
}
|
||
|
|
||
|
type Comment struct {
|
||
|
UID uint `gorm:"primaryKey"`
|
||
|
PostId uint
|
||
|
Commenter string
|
||
|
Text string
|
||
|
}
|
||
|
|
||
|
type APIComment struct {
|
||
|
PostId uint `json:"post_id"`
|
||
|
Text string `json:"content"`
|
||
|
}
|
||
|
|
||
|
type Post struct {
|
||
|
ID uint `gorm:"primaryKey"`
|
||
|
Content string
|
||
|
Username string
|
||
|
Comments string
|
||
|
}
|
||
|
|
||
|
func initDB() *gorm.DB {
|
||
|
dburl := "host=db user=root password=root dbname=info port=5432 sslmode=disable TimeZone=Asia/Shanghai"
|
||
|
db, err := gorm.Open(postgres.Open(dburl), &gorm.Config{})
|
||
|
|
||
|
if err != nil {
|
||
|
panic("failed to open db")
|
||
|
}
|
||
|
|
||
|
db.AutoMigrate(&User{})
|
||
|
db.AutoMigrate(&Post{})
|
||
|
return db
|
||
|
}
|
||
|
|
||
|
func validateUser(u User) bool {
|
||
|
if len(u.Username) < 3 {
|
||
|
return false
|
||
|
}
|
||
|
if len(u.Password) < 3 {
|
||
|
return false
|
||
|
}
|
||
|
|
||
|
return true
|
||
|
}
|
||
|
|
||
|
func HashPassword(password string) (string, error) {
|
||
|
bytes, err := bcrypt.GenerateFromPassword([]byte(password), 14)
|
||
|
return string(bytes), err
|
||
|
}
|
||
|
|
||
|
func CheckPasswordHash(password, hash string) bool {
|
||
|
err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password))
|
||
|
return err == nil
|
||
|
}
|