Update to usable schema part

Signed-off-by: Adrien Kara <adrien@iglou.eu>
This commit is contained in:
Adrien Kara 2021-05-21 01:35:11 +02:00
parent 985cafa8fe
commit e20f33b5c0
Signed by: adrien
GPG Key ID: 605B69551C56DB62
3 changed files with 153 additions and 11 deletions

View File

@ -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 != "")
}

View File

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

View File

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