Passed
Push — main ( f6597a...58b626 )
by Yume
01:31 queued 12s
created

controllers.*AuthController.Logout   A

Complexity

Conditions 1

Size

Total Lines 2
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nop 1
dl 0
loc 2
rs 10
c 0
b 0
f 0
1
package controllers
2
3
import (
4
	"github.com/gofiber/fiber/v2"
5
	"github.com/memnix/memnix-rest/domain"
6
	"github.com/memnix/memnix-rest/infrastructures"
7
	"github.com/memnix/memnix-rest/internal/auth"
8
	"github.com/memnix/memnix-rest/pkg/utils"
9
	"github.com/memnix/memnix-rest/views"
10
	"github.com/pkg/errors"
11
)
12
13
// AuthController is the controller for the auth routes
14
type AuthController struct {
15
	auth auth.IUseCase
16
}
17
18
// NewAuthController creates a new auth controller
19
func NewAuthController(auth auth.IUseCase) AuthController {
20
	return AuthController{auth: auth}
21
}
22
23
// Login is the controller for the login route
24
//
25
//	@Summary		Login
26
//	@Description	Login
27
//	@Tags			Auth
28
//	@Accept			json
29
//	@Produce		json
30
//	@Param			login	body		domain.Login	true	"Login"
31
//	@Success		200		{object}	views.LoginTokenVM
32
//	@Failure		401		{object}	views.HTTPResponseVM
33
//	@Failure		500		{object}	views.HTTPResponseVM
34
//	@Router			/v2/security/login [post]
35
func (a *AuthController) Login(c *fiber.Ctx) error {
36
	var loginStruct domain.Login
37
	err := c.BodyParser(&loginStruct)
38
	if err != nil {
39
		return c.Status(fiber.StatusBadRequest).JSON(views.NewHTTPResponseVMFromError(err))
40
	}
41
42
	jwtToken, err := a.auth.Login(loginStruct.Password, loginStruct.Email)
43
	if err != nil {
44
		return c.Status(fiber.StatusUnauthorized).JSON(views.NewLoginTokenVM("", "invalid credentials"))
45
	}
46
47
	return c.Status(fiber.StatusOK).JSON(views.NewLoginTokenVM(jwtToken, ""))
48
}
49
50
// Register is the controller for the register route
51
//
52
//	@Summary		Register
53
//	@Description	Register
54
//	@Tags			Auth
55
//	@Accept			json
56
//	@Produce		json
57
//	@Param			register	body		domain.Register	true	"Register"
58
//	@Success		201			{object}	views.RegisterVM
59
//	@Failure		400			{object}	views.HTTPResponseVM
60
//	@Failure		500			{object}	views.HTTPResponseVM
61
//	@Router			/v2/security/register [post]
62
func (a *AuthController) Register(c *fiber.Ctx) error {
63
	var registerStruct domain.Register
64
	err := c.BodyParser(&registerStruct)
65
	if err != nil {
66
		return c.Status(fiber.StatusBadRequest).JSON(views.NewHTTPResponseVMFromError(err))
67
	}
68
69
	newUser, err := a.auth.Register(registerStruct)
70
	if err != nil {
71
		return c.Status(fiber.StatusBadRequest).JSON(views.NewHTTPResponseVMFromError(errors.New("error creating user")))
72
	}
73
74
	return c.Status(fiber.StatusCreated).JSON(views.NewRegisterVM("user created", newUser.ToPublicUser()))
75
}
76
77
// Logout is the controller for the logout route
78
//
79
//	@Summary		Logout
80
//	@Description	Logout
81
//	@Tags			Auth
82
//	@Accept			json
83
//	@Produce		json
84
//	@Success		200	{object}	views.LoginTokenVM
85
//	@Failure		500	{object}	views.HTTPResponseVM
86
//	@Router			/v2/security/logout [post]
87
func (a *AuthController) Logout(c *fiber.Ctx) error {
88
	return c.Status(fiber.StatusOK).JSON(views.NewLoginTokenVM("", "logged out"))
89
}
90
91
// RefreshToken is the controller for the refresh token route
92
//
93
//	@Summary		Refresh token
94
//	@Description	Refresh token
95
//	@Tags			Auth
96
//	@Accept			json
97
//	@Produce		json
98
//	@Success		200	{object}	views.LoginTokenVM
99
//	@Failure		401	{object}	views.HTTPResponseVM
100
//	@Failure		500	{object}	views.HTTPResponseVM
101
//	@Router			/v2/security/refresh [post]
102
func (a *AuthController) RefreshToken(c *fiber.Ctx) error {
103
	newToken, err := a.auth.RefreshToken(*utils.GetUserFromContext(c))
104
	if err != nil {
105
		return c.Status(fiber.StatusUnauthorized).JSON(views.NewHTTPResponseVMFromError(err))
106
	}
107
108
	return c.Status(fiber.StatusOK).JSON(views.NewLoginTokenVM(newToken, ""))
109
}
110
111
// SearchKey function to search the key
112
//
113
//	@Description	Search the key
114
//	@Summary		searches the key
115
//	@Tags			security
116
//	@Produce		json
117
//	@Success		200	{object}	views.HTTPResponseVM
118
//	@Failure		401	{object}	views.HTTPResponseVM
119
//	@Router			/v2/security/key [get]
120
//	@Security		Beaver
121
func (a *AuthController) SearchKey(c *fiber.Ctx) error {
122
	// Search the key
123
	key, err := infrastructures.GetSearchKey()
124
	if err != nil {
125
		return err
126
	}
127
128
	// Return the keys
129
	return c.Status(fiber.StatusOK).JSON(views.NewLoginTokenVM(key.Key, ""))
130
}
131