Files
jiacrontab/jiacrontab_admin/admin.go
jiazhizhong 1279635d7f fix
2022-03-10 17:09:03 +08:00

93 lines
2.2 KiB
Go

package admin
import (
"errors"
"jiacrontab/models"
"jiacrontab/pkg/mailer"
"jiacrontab/pkg/rpc"
"time"
"sync/atomic"
"github.com/kataras/iris/v12"
)
type Admin struct {
cfg atomic.Value
ldap *Ldap
initAdminUser int32
}
func (n *Admin) getOpts() *Config {
return n.cfg.Load().(*Config)
}
func (n *Admin) swapOpts(opts *Config) {
n.cfg.Store(opts)
}
func New(opt *Config) *Admin {
adm := &Admin{}
adm.swapOpts(opt)
return adm
}
func (a *Admin) init() {
cfg := a.getOpts()
if err := models.InitModel(cfg.Database.DriverName, cfg.Database.DSN, cfg.App.Debug); err != nil {
panic(err)
}
if models.DB().Take(&models.User{}, "group_id=?", 1).Error == nil {
atomic.StoreInt32(&a.initAdminUser, 1)
}
// mail
if cfg.Mailer.Enabled {
mailer.InitMailer(&mailer.Mailer{
QueueLength: cfg.Mailer.QueueLength,
SubjectPrefix: cfg.Mailer.SubjectPrefix,
From: cfg.Mailer.From,
Host: cfg.Mailer.Host,
User: cfg.Mailer.User,
Passwd: cfg.Mailer.Passwd,
FromEmail: cfg.Mailer.FromEmail,
DisableHelo: cfg.Mailer.DisableHelo,
HeloHostname: cfg.Mailer.HeloHostname,
SkipVerify: cfg.Mailer.SkipVerify,
UseCertificate: cfg.Mailer.UseCertificate,
CertFile: cfg.Mailer.CertFile,
KeyFile: cfg.Mailer.KeyFile,
UsePlainText: cfg.Mailer.UsePlainText,
HookMode: false,
})
}
a.ldap = &Ldap{
BindUserDn: cfg.Ldap.BindUserdn,
BindPwd: cfg.Ldap.BindPasswd,
BaseOn: cfg.Ldap.Basedn,
UserField: cfg.Ldap.UserField,
Addr: cfg.Ldap.Addr,
DisabledAnonymousQuery: cfg.Ldap.DisabledAnonymousQuery,
Timeout: time.Second * time.Duration(cfg.Ldap.Timeout),
}
}
func (a *Admin) ResetPwd(username string, password string) error {
if username == "" || password == "" {
return errors.New("username or password cannot empty")
}
a.init()
user := models.User{
Username: username,
Passwd: password,
}
return user.Update()
}
func (a *Admin) Main() {
cfg := a.getOpts()
a.init()
go rpc.ListenAndServe(cfg.App.RPCListenAddr, NewSrv(a))
app := newApp(a)
app.Run(iris.Addr(cfg.App.HTTPListenAddr))
}