82 lines
2.0 KiB
Go
82 lines
2.0 KiB
Go
|
package auth
|
||
|
|
||
|
import (
|
||
|
"github.com/rs/zerolog"
|
||
|
"github.com/rs/zerolog/log"
|
||
|
"github.com/spf13/viper"
|
||
|
"gorm.io/gorm"
|
||
|
"kumoly.io/kumoly/app/server"
|
||
|
"kumoly.io/kumoly/app/store"
|
||
|
"kumoly.io/kumoly/app/system"
|
||
|
)
|
||
|
|
||
|
var DB *gorm.DB
|
||
|
|
||
|
func SetDB(db *gorm.DB) {
|
||
|
DB = db
|
||
|
}
|
||
|
|
||
|
type Service struct {
|
||
|
system.BaseService
|
||
|
Logger zerolog.Logger
|
||
|
|
||
|
server *server.Service
|
||
|
}
|
||
|
|
||
|
func New(s *server.Service) *Service {
|
||
|
return &Service{server: s}
|
||
|
}
|
||
|
|
||
|
func (srv Service) GetName() string { return "auth.Service" }
|
||
|
func (srv Service) GetDependencies() []string { return []string{"server.Service", "auth.Auth"} }
|
||
|
|
||
|
func (srv Service) Init() error {
|
||
|
srv.Logger = log.With().Str("mod", "auth").Str("service", "auth.Service").Logger()
|
||
|
|
||
|
srv.Logger.Debug().Msg("Migrating database for auth.Service ...")
|
||
|
if err := store.Migrate(&User{}, &Profile{}, &Group{}); err != nil {
|
||
|
srv.Logger.Error().Err(err).Msg("Migrating database")
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
srv.Logger.Debug().Msg("Checking db state")
|
||
|
|
||
|
// add default group
|
||
|
if err := srv.SetDefaultGroups(); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
// add default admin account
|
||
|
if err := srv.SetDefaultAdmin(
|
||
|
viper.GetString("admin.user"),
|
||
|
viper.GetString("admin.passwd"),
|
||
|
); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func (srv Service) Load() error {
|
||
|
srv.server.API.POST("/login", ApiLogin)
|
||
|
srv.server.API.POST("/logout", ApiLogout)
|
||
|
srv.server.API.GET("/whoami", ApiMe)
|
||
|
usrAPI := srv.server.API.Group("usr")
|
||
|
usrAPI.POST("/", ACAdmin(), ApiUserNew)
|
||
|
usrAPI.GET("/", ACAdmin(), ApiUsers)
|
||
|
usrAPI.DELETE("/:id", ACAdmin(), ApiUserDelete)
|
||
|
usrAPI.PUT("/passwd", ApiUserChangePasswd)
|
||
|
usrAPI.PUT("/activate/:id", ACAdmin(), ApiUserActivate)
|
||
|
usrAPI.PUT("/deactivate/:id", ACAdmin(), ApiUserDeactivate)
|
||
|
|
||
|
grpAPI := srv.server.API.Group("grp")
|
||
|
grpAPI.GET("/", ACAdmin(), ApiGrps)
|
||
|
grpAPI.POST("/", ACAdmin(), ApiGrpNew)
|
||
|
grpAPI.PUT("/", ApiGrpUpdate)
|
||
|
grpAPI.DELETE("/:id", ACAdmin(), ApiGrpDel)
|
||
|
grpAPI.POST("/add/:uid/:gid", ApiGrpAssign)
|
||
|
grpAPI.POST("/remove/:uid/:gid", ACAdmin(), ApiGrpRemove)
|
||
|
|
||
|
return nil
|
||
|
}
|