package main import ( "fmt" "net/http" "time" "github.com/google/uuid" "github.com/jinzhu/gorm" ) type User struct { gorm.Model Username string `gorm:"unique;not null"` CryptedPassword []byte `gorm:"not null" json:"-"` Email string `gorm:"unique;not null"` IsAdmin bool `gorm:"default:false"` CanCreateHandlers bool `gorm:"default:false"` } type Token struct { gorm.Model Body string `gorm:"unique;not null"` UserID uint User User ExpiresAt time.Time } type ExecutionLog struct { gorm.Model RunID string `gorm:"unique;not null"` HandlerID uint Data []byte `gorm:"not null"` } type Handler struct { gorm.Model Name string `gorm:"unique;not null"` Path string `gorm:"unique;not null"` UserID uint `json:"-"` User User `json:"-"` } func (t Token) ToCookie() *http.Cookie { return &http.Cookie{ Name: "wasmcloud-token", Value: t.Body, Expires: t.ExpiresAt, } } func makeToken(u User) (Token, error) { t := Token{ Body: uuid.New().String(), UserID: u.ID, ExpiresAt: time.Now().Add(*defaultTokenLifetime), } err := db.Save(&t).Error if err != nil { return Token{}, fmt.Errorf("error when creating token: %w", err) } return t, nil }