Update to usable schema part
Signed-off-by: Adrien Kara <adrien@iglou.eu>
This commit is contained in:
parent
985cafa8fe
commit
e20f33b5c0
|
@ -4,12 +4,20 @@
|
|||
|
||||
package schema
|
||||
|
||||
import "time"
|
||||
import (
|
||||
"crypto/sha256"
|
||||
"encoding/hex"
|
||||
"time"
|
||||
)
|
||||
|
||||
type Client struct {
|
||||
// Client title+name+key hash
|
||||
// Client title+name+success hash
|
||||
ID string `xorm:"pk varchar(64)"`
|
||||
// Enable or disable account
|
||||
Activate bool `xorm:"notnull"`
|
||||
|
||||
// Client name
|
||||
Name string `xorm:"notnull"`
|
||||
// Title is site form title
|
||||
Title string `xorm:"notnull"`
|
||||
|
||||
|
@ -25,5 +33,71 @@ type Client struct {
|
|||
// Redirect to . when success
|
||||
Fail string `xorm:"notnull"`
|
||||
|
||||
// Account creation date
|
||||
Created time.Time `xorm:"INDEX created"`
|
||||
}
|
||||
|
||||
func GetClient(id string) (Client, error) {
|
||||
var c Client
|
||||
var _, err = xe.ID(id).Get(&c)
|
||||
|
||||
return c, err
|
||||
}
|
||||
|
||||
func DelClient(id string) error {
|
||||
_, err := xe.ID(id).Delete(&Client{})
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
func (c *Client) regenID() {
|
||||
sum := sha256.Sum256([]byte(c.Name + c.Title + c.Success))
|
||||
c.ID = hex.EncodeToString(sum[:])
|
||||
}
|
||||
|
||||
func (c *Client) Add() error {
|
||||
c.regenID()
|
||||
|
||||
_, err := xe.InsertOne(c)
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
func (c *Client) Update() error {
|
||||
oID := c.ID
|
||||
c.regenID()
|
||||
|
||||
_, err := xe.ID(oID).Update(c)
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
func (c *Client) Del() error {
|
||||
_, err := xe.Delete(c)
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
func (c *Client) Enable() error {
|
||||
c.Activate = true
|
||||
|
||||
_, err := xe.Update(c)
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
func (c *Client) Disable() error {
|
||||
c.Activate = false
|
||||
|
||||
_, err := xe.Update(c)
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
func (c *Client) IsEnable() bool {
|
||||
return c.Activate
|
||||
}
|
||||
|
||||
func (c *Client) IsUsable() bool {
|
||||
return (c.Success != "" && c.Fail != "")
|
||||
}
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
package schema
|
||||
|
||||
import (
|
||||
"log"
|
||||
"time"
|
||||
|
||||
"xorm.io/xorm"
|
||||
|
@ -16,23 +15,20 @@ import (
|
|||
|
||||
var xe *xorm.Engine
|
||||
|
||||
func Loader() {
|
||||
func Loader(dbPath string) error {
|
||||
var err error
|
||||
|
||||
xe, err = xorm.NewEngine("sqlite3", "./test.sqlite")
|
||||
xe, err = xorm.NewEngine("sqlite3", dbPath)
|
||||
if err != nil {
|
||||
log.Fatalln(err)
|
||||
return err
|
||||
}
|
||||
|
||||
xe.SetMapper(names.GonicMapper{})
|
||||
xe.TZLocation, _ = time.LoadLocation("UTC")
|
||||
|
||||
err = xe.CreateTables(
|
||||
return xe.CreateTables(
|
||||
new(Client),
|
||||
new(Webhook),
|
||||
new(Email),
|
||||
)
|
||||
if err != nil {
|
||||
log.Fatalln(err)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,6 +4,12 @@
|
|||
|
||||
package schema
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
mail "github.com/xhit/go-simple-mail"
|
||||
)
|
||||
|
||||
type Email struct {
|
||||
ID int `xorm:"pk autoincr"`
|
||||
Client string `xorm:"notnull varchar(64)"`
|
||||
|
@ -16,5 +22,71 @@ type Email struct {
|
|||
Pass string `xorm:"notnull"`
|
||||
|
||||
For []string
|
||||
IsEnable bool `xorm:"notnull"`
|
||||
From string `xorm:"-"`
|
||||
IsEnable bool `xorm:"notnull"`
|
||||
|
||||
client *mail.SMTPClient
|
||||
server *mail.SMTPServer
|
||||
}
|
||||
|
||||
func (e *Email) New(from string) error {
|
||||
var err error
|
||||
|
||||
// Config the smtp server
|
||||
e.server.Host = e.Host
|
||||
e.server.Port = e.Port
|
||||
e.server.Username = e.User
|
||||
e.server.Password = e.Pass
|
||||
e.server.KeepAlive = true
|
||||
e.server.ConnectTimeout = 10 * time.Second
|
||||
e.server.SendTimeout = 10 * time.Second
|
||||
|
||||
switch e.Encrypt {
|
||||
case "tls":
|
||||
e.server.Encryption = mail.EncryptionTLS
|
||||
case "ssl":
|
||||
e.server.Encryption = mail.EncryptionSSL
|
||||
default:
|
||||
e.server.Encryption = mail.EncryptionNone
|
||||
}
|
||||
|
||||
// Try the SMTP server
|
||||
if e.client, err = e.server.Connect(); err != nil {
|
||||
return err
|
||||
}
|
||||
return e.client.Close()
|
||||
}
|
||||
|
||||
func (e *Email) connect() error {
|
||||
var err error
|
||||
|
||||
if e.client, err = e.server.Connect(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (e *Email) close() error {
|
||||
return e.client.Close()
|
||||
}
|
||||
|
||||
func (e *Email) Send(subject, message string) error {
|
||||
email := mail.NewMSG()
|
||||
|
||||
email.SetFrom(e.From).SetSubject(subject)
|
||||
email.SetBody(mail.TextPlain, message)
|
||||
|
||||
if len(e.For) == 1 {
|
||||
email.AddTo(e.For...)
|
||||
} else {
|
||||
email.AddBcc(e.For...)
|
||||
}
|
||||
|
||||
if err := e.connect(); err != nil {
|
||||
return err
|
||||
}
|
||||
defer e.close()
|
||||
|
||||
return email.Send(e.client)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue