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