| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- package admin
- import (
- "crypto/tls"
- "errors"
- "time"
- "github.com/bjdgyc/anylink/base"
- "github.com/bjdgyc/anylink/dbdata"
- "github.com/dgrijalva/jwt-go"
- mail "github.com/xhit/go-simple-mail/v2"
- // "github.com/mojocn/base64Captcha"
- )
- func SetJwtData(data map[string]interface{}, expiresAt int64) (string, error) {
- jwtData := jwt.MapClaims{"exp": expiresAt}
- for k, v := range data {
- jwtData[k] = v
- }
- token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwtData)
- // Sign and get the complete encoded token as a string using the secret
- tokenString, err := token.SignedString([]byte(base.Cfg.JwtSecret))
- return tokenString, err
- }
- func GetJwtData(jwtToken string) (map[string]interface{}, error) {
- token, err := jwt.Parse(jwtToken, func(token *jwt.Token) (interface{}, error) {
- // since we only use the one private key to sign the tokens,
- // we also only use its public counter part to verify
- return []byte(base.Cfg.JwtSecret), nil
- })
- if err != nil || !token.Valid {
- return nil, err
- }
- claims, ok := token.Claims.(jwt.MapClaims)
- if !ok {
- return nil, errors.New("data is parse err")
- }
- return claims, nil
- }
- func SendMail(subject, to, htmlBody string) error {
- dataSmtp := &dbdata.SettingSmtp{}
- err := dbdata.SettingGet(dataSmtp)
- if err != nil {
- base.Error(err)
- return err
- }
- server := mail.NewSMTPClient()
- // SMTP Server
- server.Host = dataSmtp.Host
- server.Port = dataSmtp.Port
- server.Username = dataSmtp.Username
- server.Password = dataSmtp.Password
- switch dataSmtp.Encryption {
- case "SSLTLS":
- server.Encryption = mail.EncryptionSSLTLS
- case "STARTTLS":
- server.Encryption = mail.EncryptionSTARTTLS
- default:
- server.Encryption = mail.EncryptionNone
- }
- // Since v2.3.0 you can specified authentication type:
- // - PLAIN (default)
- // - LOGIN
- // - CRAM-MD5
- server.Authentication = mail.AuthPlain
- // Variable to keep alive connection
- server.KeepAlive = false
- // Timeout for connect to SMTP Server
- server.ConnectTimeout = 10 * time.Second
- // Timeout for send the data and wait respond
- server.SendTimeout = 10 * time.Second
- // Set TLSConfig to provide custom TLS configuration. For example,
- // to skip TLS verification (useful for testing):
- server.TLSConfig = &tls.Config{InsecureSkipVerify: true}
- // SMTP client
- smtpClient, err := server.Connect()
- if err != nil {
- base.Error(err)
- return err
- }
- // New email simple html with inline and CC
- email := mail.NewMSG()
- email.SetFrom(dataSmtp.From).
- AddTo(to).
- SetSubject(subject)
- email.SetBody(mail.TextHTML, htmlBody)
- // Call Send and pass the client
- err = email.Send(smtpClient)
- if err != nil {
- base.Error(err)
- }
- return err
- }
|