more SOLIDer
This commit is contained in:
parent
623e9e1ad5
commit
ecd996e21e
31
api/auth.go
31
api/auth.go
@ -4,7 +4,6 @@ import (
|
||||
"net/http"
|
||||
|
||||
"git.tek.govt.hu/dowerx/chat/server/config"
|
||||
"git.tek.govt.hu/dowerx/chat/server/controller"
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
@ -39,13 +38,7 @@ func register(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
authController, err := controller.MakeAuthController()
|
||||
if err != nil {
|
||||
sendError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
err = authController.Register(transaction.Username, transaction.Password, transaction.RepeatPassword)
|
||||
err := authController.Register(transaction.Username, transaction.Password, transaction.RepeatPassword)
|
||||
if err != nil {
|
||||
sendError(c, err)
|
||||
return
|
||||
@ -69,12 +62,6 @@ func login(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
authController, err := controller.MakeAuthController()
|
||||
if err != nil {
|
||||
sendError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
token, err := authController.Login(transaction.Username, transaction.Password)
|
||||
if err != nil {
|
||||
sendError(c, err)
|
||||
@ -89,14 +76,8 @@ func login(c *gin.Context) {
|
||||
}
|
||||
|
||||
func logout(c *gin.Context) {
|
||||
authController, err := controller.MakeAuthController()
|
||||
if err != nil {
|
||||
sendError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
token, _ := c.Get(SESSION_COOKIE) // must exist after isLoggedIn
|
||||
err = authController.Logout(token.(string))
|
||||
err := authController.Logout(token.(string))
|
||||
if err != nil {
|
||||
sendError(c, err)
|
||||
return
|
||||
@ -109,14 +90,8 @@ func logout(c *gin.Context) {
|
||||
}
|
||||
|
||||
func bump(c *gin.Context) {
|
||||
authController, err := controller.MakeAuthController()
|
||||
if err != nil {
|
||||
sendError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
token, _ := c.Get(SESSION_COOKIE)
|
||||
if err = authController.Bump(token.(string)); err != nil {
|
||||
if err := authController.Bump(token.(string)); err != nil {
|
||||
sendError(c, err)
|
||||
return
|
||||
}
|
||||
|
@ -4,10 +4,44 @@ import (
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"git.tek.govt.hu/dowerx/chat/server/controller"
|
||||
"git.tek.govt.hu/dowerx/chat/server/dao"
|
||||
"git.tek.govt.hu/dowerx/chat/server/util"
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
var userController controller.UserController
|
||||
var chatController controller.ChatController
|
||||
var authController controller.AuthController
|
||||
|
||||
func initControlles() *util.ChatError {
|
||||
userDAO, err := dao.GetUserDAO()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
channelDAO, err := dao.GetChannelDAO()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
sessionDAO, err := dao.GetSessionDAO()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
userController = controller.MakeUserController(userDAO)
|
||||
authController = controller.MakeAuthController(userDAO, sessionDAO)
|
||||
chatController = controller.MakeChatController(channelDAO)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func Listen(address string, base string) error {
|
||||
if err := initControlles(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
router := gin.Default()
|
||||
|
||||
api := router.Group(base)
|
||||
|
@ -1,10 +1,8 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
|
||||
"git.tek.govt.hu/dowerx/chat/server/controller"
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
@ -13,13 +11,6 @@ const USERNAME_PARAM string = "username"
|
||||
func userInfo(c *gin.Context) {
|
||||
username := c.Param(USERNAME_PARAM)
|
||||
|
||||
userController, err := controller.MakeUserController()
|
||||
if err != nil {
|
||||
fmt.Println(err.Error())
|
||||
sendError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
user, err := userController.GetUser(username)
|
||||
if err != nil {
|
||||
sendError(c, err)
|
||||
|
@ -6,16 +6,14 @@ import (
|
||||
|
||||
"git.tek.govt.hu/dowerx/chat/server/config"
|
||||
"git.tek.govt.hu/dowerx/chat/server/dao"
|
||||
"git.tek.govt.hu/dowerx/chat/server/dao/postgres"
|
||||
"git.tek.govt.hu/dowerx/chat/server/dao/valkey"
|
||||
"git.tek.govt.hu/dowerx/chat/server/model"
|
||||
"git.tek.govt.hu/dowerx/chat/server/util"
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
)
|
||||
|
||||
type AuthController struct {
|
||||
UserDAO dao.IUserDAO
|
||||
SessionDAO dao.ISessionDAO
|
||||
userDAO dao.IUserDAO
|
||||
sessionDAO dao.ISessionDAO
|
||||
}
|
||||
|
||||
const (
|
||||
@ -44,7 +42,7 @@ func (c AuthController) Register(username string, password string, repeatPasswor
|
||||
return util.MakeError(err, util.GENERAL_ERROR)
|
||||
}
|
||||
|
||||
return c.UserDAO.Create(model.User{
|
||||
return c.userDAO.Create(model.User{
|
||||
Username: username,
|
||||
PasswordHash: string(hash),
|
||||
})
|
||||
@ -61,7 +59,7 @@ func generateToken(length int) (string, error) {
|
||||
}
|
||||
|
||||
func (c AuthController) Login(username string, password string) (string, *util.ChatError) {
|
||||
user, err := c.UserDAO.Read(model.User{Username: username})
|
||||
user, err := c.userDAO.Read(model.User{Username: username})
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
@ -75,12 +73,12 @@ func (c AuthController) Login(username string, password string) (string, *util.C
|
||||
return "", util.MakeError(err, util.GENERAL_ERROR)
|
||||
}
|
||||
|
||||
err = c.SessionDAO.DeleteAllByID(user.ID)
|
||||
err = c.sessionDAO.DeleteAllByID(user.ID)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
err = c.SessionDAO.Set(token, user.ID)
|
||||
err = c.sessionDAO.Set(token, user.ID)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
@ -89,30 +87,14 @@ func (c AuthController) Login(username string, password string) (string, *util.C
|
||||
}
|
||||
|
||||
func (c AuthController) Logout(token string) *util.ChatError {
|
||||
return c.SessionDAO.Delete(token)
|
||||
return c.sessionDAO.Delete(token)
|
||||
}
|
||||
|
||||
func (c AuthController) Bump(token string) *util.ChatError {
|
||||
return c.SessionDAO.Bump(token, config.GetConfig().API.TokenLife)
|
||||
return c.sessionDAO.Bump(token, config.GetConfig().API.TokenLife)
|
||||
}
|
||||
|
||||
func MakeAuthController() (AuthController, *util.ChatError) {
|
||||
controller := AuthController{}
|
||||
|
||||
userDAO := postgres.UserDAOPG{}
|
||||
err := userDAO.Init()
|
||||
if err != nil {
|
||||
return controller, err
|
||||
}
|
||||
|
||||
sessionDAO := valkey.SessionDAOVK{}
|
||||
err = sessionDAO.Init()
|
||||
if err != nil {
|
||||
return controller, err
|
||||
}
|
||||
|
||||
controller.UserDAO = userDAO
|
||||
controller.SessionDAO = sessionDAO
|
||||
|
||||
return controller, nil
|
||||
func MakeAuthController(userDAO dao.IUserDAO, sessionDAO dao.ISessionDAO) AuthController {
|
||||
controller := AuthController{userDAO: userDAO, sessionDAO: sessionDAO}
|
||||
return controller
|
||||
}
|
||||
|
14
controller/ChatController.go
Normal file
14
controller/ChatController.go
Normal file
@ -0,0 +1,14 @@
|
||||
package controller
|
||||
|
||||
import (
|
||||
"git.tek.govt.hu/dowerx/chat/server/dao"
|
||||
)
|
||||
|
||||
type ChatController struct {
|
||||
channelDAO dao.IChannelDAO
|
||||
}
|
||||
|
||||
func MakeChatController(channelDAO dao.IChannelDAO) ChatController {
|
||||
controller := ChatController{channelDAO: channelDAO}
|
||||
return controller
|
||||
}
|
@ -2,29 +2,19 @@ package controller
|
||||
|
||||
import (
|
||||
"git.tek.govt.hu/dowerx/chat/server/dao"
|
||||
"git.tek.govt.hu/dowerx/chat/server/dao/postgres"
|
||||
"git.tek.govt.hu/dowerx/chat/server/model"
|
||||
"git.tek.govt.hu/dowerx/chat/server/util"
|
||||
)
|
||||
|
||||
type UserController struct {
|
||||
UserDAO dao.IUserDAO
|
||||
userDAO dao.IUserDAO
|
||||
}
|
||||
|
||||
func (c UserController) GetUser(username string) (model.User, *util.ChatError) {
|
||||
return c.UserDAO.Read(model.User{Username: username})
|
||||
return c.userDAO.Read(model.User{Username: username})
|
||||
}
|
||||
|
||||
func MakeUserController() (UserController, *util.ChatError) {
|
||||
controller := UserController{}
|
||||
|
||||
userDAO := postgres.UserDAOPG{}
|
||||
err := userDAO.Init()
|
||||
if err != nil {
|
||||
return controller, err
|
||||
}
|
||||
|
||||
controller.UserDAO = userDAO
|
||||
|
||||
return controller, nil
|
||||
func MakeUserController(userDAO dao.IUserDAO) UserController {
|
||||
controller := UserController{userDAO: userDAO}
|
||||
return controller
|
||||
}
|
||||
|
@ -11,7 +11,7 @@ var channelDAO IChannelDAO
|
||||
var sessionDAO ISessionDAO
|
||||
|
||||
func GetUserDAO() (IUserDAO, *util.ChatError) {
|
||||
if !userDAO.Ready() {
|
||||
if userDAO == nil {
|
||||
dao, err := postgres.MakeUserDAO()
|
||||
if err != nil {
|
||||
return userDAO, err
|
||||
@ -24,7 +24,7 @@ func GetUserDAO() (IUserDAO, *util.ChatError) {
|
||||
}
|
||||
|
||||
func GetChannelDAO() (IChannelDAO, *util.ChatError) {
|
||||
if !channelDAO.Ready() {
|
||||
if channelDAO == nil {
|
||||
dao, err := postgres.MakeChannelDAO()
|
||||
if err != nil {
|
||||
return channelDAO, err
|
||||
@ -37,7 +37,7 @@ func GetChannelDAO() (IChannelDAO, *util.ChatError) {
|
||||
}
|
||||
|
||||
func GetSessionDAO() (ISessionDAO, *util.ChatError) {
|
||||
if !sessionDAO.Ready() {
|
||||
if sessionDAO == nil {
|
||||
dao, err := valkey.MakeUserDAO()
|
||||
if err != nil {
|
||||
return sessionDAO, err
|
||||
|
@ -6,7 +6,6 @@ import (
|
||||
)
|
||||
|
||||
type IChannelDAO interface {
|
||||
IDAO
|
||||
Create(channel model.Channel) *util.ChatError
|
||||
Read(channel model.Channel) (model.Channel, *util.ChatError)
|
||||
List() ([]model.Channel, *util.ChatError)
|
||||
|
@ -1,5 +0,0 @@
|
||||
package dao
|
||||
|
||||
type IDAO interface {
|
||||
Ready() bool
|
||||
}
|
@ -3,7 +3,6 @@ package dao
|
||||
import "git.tek.govt.hu/dowerx/chat/server/util"
|
||||
|
||||
type ISessionDAO interface {
|
||||
IDAO
|
||||
Set(token string, id int) *util.ChatError
|
||||
Get(token string) (int, *util.ChatError)
|
||||
Delete(token string) *util.ChatError
|
||||
|
@ -6,7 +6,6 @@ import (
|
||||
)
|
||||
|
||||
type IUserDAO interface {
|
||||
IDAO
|
||||
Create(user model.User) *util.ChatError
|
||||
Read(user model.User) (model.User, *util.ChatError)
|
||||
List() ([]model.User, *util.ChatError)
|
||||
|
@ -71,10 +71,6 @@ func (d ChannelDAOPG) Delete(channel model.Channel) *util.ChatError {
|
||||
return util.MakeError(err, util.DATABASE_QUERY_FAULT)
|
||||
}
|
||||
|
||||
func (d ChannelDAOPG) Ready() bool {
|
||||
return d.db != nil
|
||||
}
|
||||
|
||||
func MakeChannelDAO() (ChannelDAOPG, *util.ChatError) {
|
||||
dao := ChannelDAOPG{}
|
||||
conn, err := getDatabase()
|
||||
|
@ -81,10 +81,6 @@ func (d UserDAOPG) Delete(user model.User) *util.ChatError {
|
||||
return util.MakeError(err, util.DATABASE_QUERY_FAULT)
|
||||
}
|
||||
|
||||
func (d UserDAOPG) Ready() bool {
|
||||
return d.db != nil
|
||||
}
|
||||
|
||||
func MakeUserDAO() (UserDAOPG, *util.ChatError) {
|
||||
dao := UserDAOPG{}
|
||||
conn, err := getDatabase()
|
||||
|
@ -89,10 +89,6 @@ func (d SessionDAOVK) Bump(token string, time int) *util.ChatError {
|
||||
return util.MakeError((*d.vk).Do(context.Background(), cmd).Error(), util.DATABASE_QUERY_FAULT)
|
||||
}
|
||||
|
||||
func (d SessionDAOVK) Ready() bool {
|
||||
return d.vk != nil
|
||||
}
|
||||
|
||||
func MakeUserDAO() (SessionDAOVK, *util.ChatError) {
|
||||
dao := SessionDAOVK{}
|
||||
conn, err := getClient()
|
||||
|
Loading…
Reference in New Issue
Block a user