diff options
Diffstat (limited to 'nexus/api/auth')
| -rw-r--r-- | nexus/api/auth/auth.go | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/nexus/api/auth/auth.go b/nexus/api/auth/auth.go new file mode 100644 index 0000000..36f2e5f --- /dev/null +++ b/nexus/api/auth/auth.go @@ -0,0 +1,69 @@ +package auth
+
+import (
+ "nexus/services/auth"
+ authTypes "nexus/types/auth"
+ "nexus/utils/meta"
+ "nexus/utils/shortcuts"
+
+ "github.com/gofiber/fiber/v2"
+)
+
+func Register(context *fiber.Ctx) error {
+ body, err := meta.Body[authTypes.RegisterRequest](context)
+ if err != nil {
+ return shortcuts.ServiceError(fiber.StatusBadRequest, err.Error())
+ }
+
+ account, serviceErr := auth.Register(body)
+ if serviceErr != nil {
+ return serviceErr
+ }
+
+ return shortcuts.Created(context, account.ToResponse())
+}
+
+func Login(context *fiber.Ctx) error {
+ body, err := meta.Body[authTypes.LoginRequest](context)
+ if err != nil {
+ return shortcuts.ServiceError(fiber.StatusBadRequest, err.Error())
+ }
+
+ req := meta.Request(context)
+
+ session, serviceErr := auth.Login(body, req.IP, req.Header("User-Agent"))
+ if serviceErr != nil {
+ return serviceErr
+ }
+
+ return shortcuts.JSON(context, authTypes.TokenResponse{
+ AuthToken: session.AuthToken,
+ RefreshToken: session.RefreshToken,
+ })
+}
+
+func Refresh(context *fiber.Ctx) error {
+ body, err := meta.Body[authTypes.RefreshRequest](context)
+ if err != nil {
+ return shortcuts.ServiceError(fiber.StatusBadRequest, err.Error())
+ }
+
+ req := meta.Request(context)
+
+ session, serviceErr := auth.Refresh(body.RefreshToken, req.IP, req.Header("User-Agent"))
+ if serviceErr != nil {
+ return serviceErr
+ }
+
+ return shortcuts.JSON(context, authTypes.TokenResponse{
+ AuthToken: session.AuthToken,
+ RefreshToken: session.RefreshToken,
+ })
+}
+
+func Logout(context *fiber.Ctx) error {
+ if serviceErr := auth.Logout(shortcuts.BearerToken(context)); serviceErr != nil {
+ return serviceErr
+ }
+ return shortcuts.NoContent(context)
+}
|
