wasmcloud/cmd/wasmcloudd/models.go

66 lines
1.2 KiB
Go

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
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
}