code refactor, implementing sockets
This commit is contained in:
@@ -9,7 +9,7 @@ import (
|
||||
"os"
|
||||
"relay-server/config"
|
||||
"relay-server/database"
|
||||
"relay-server/helpers"
|
||||
"relay-server/utils"
|
||||
"time"
|
||||
)
|
||||
|
||||
@@ -21,21 +21,21 @@ func Signup(c *fiber.Ctx) error {
|
||||
|
||||
u := new(SignupStruct)
|
||||
if err := c.BodyParser(u); err != nil {
|
||||
return helpers.NewError(helpers.ErrInvalidInput, "Invalid request body", err)
|
||||
return utils.NewError(utils.ErrInvalidInput, "Invalid request body", err)
|
||||
}
|
||||
|
||||
// Validate input
|
||||
if u.Username == "" {
|
||||
return helpers.NewError(helpers.ErrInvalidInput, "Username is empty", nil)
|
||||
return utils.NewError(utils.ErrInvalidInput, "Username is empty", nil)
|
||||
}
|
||||
if u.Password == "" {
|
||||
return helpers.NewError(helpers.ErrInvalidInput, "Password is empty", nil)
|
||||
return utils.NewError(utils.ErrInvalidInput, "Password is empty", nil)
|
||||
}
|
||||
if !helpers.IsValidPassword(u.Password) {
|
||||
return helpers.NewError(helpers.ErrInvalidInput, "Invalid password", nil)
|
||||
if !utils.IsValidPassword(u.Password) {
|
||||
return utils.NewError(utils.ErrInvalidInput, "Invalid password", nil)
|
||||
}
|
||||
if !helpers.IsValidUsername(u.Username) {
|
||||
return helpers.NewError(helpers.ErrInvalidInput, "Invalid username", nil)
|
||||
if !utils.IsValidUsername(u.Username) {
|
||||
return utils.NewError(utils.ErrInvalidInput, "Invalid username", nil)
|
||||
}
|
||||
|
||||
// Check if user exists
|
||||
@@ -44,13 +44,13 @@ func Signup(c *fiber.Ctx) error {
|
||||
return err
|
||||
}
|
||||
if exist {
|
||||
return helpers.NewError(helpers.ErrInvalidInput, "User already exists", nil)
|
||||
return utils.NewError(utils.ErrInvalidInput, "User already exists", nil)
|
||||
}
|
||||
|
||||
// Create password hash
|
||||
passwordHash, err := bcrypt.GenerateFromPassword([]byte(u.Password), config.BCRYPT_COST)
|
||||
if err != nil {
|
||||
return helpers.NewError(helpers.ErrInternal, "internal server error", fmt.Errorf("failed to generate password hash: %w", err))
|
||||
return utils.NewError(utils.ErrInternal, "internal server error", fmt.Errorf("failed to generate password hash: %w", err))
|
||||
}
|
||||
|
||||
// Insert user
|
||||
@@ -66,7 +66,7 @@ func Signup(c *fiber.Ctx) error {
|
||||
})
|
||||
signedToken, err := token.SignedString([]byte(os.Getenv("JWT_SECRET")))
|
||||
if err != nil {
|
||||
return helpers.NewError(helpers.ErrInternal, "Failed to generate auth token", err)
|
||||
return utils.NewError(utils.ErrInternal, "Failed to generate auth token", err)
|
||||
}
|
||||
|
||||
// Set token cookie
|
||||
@@ -91,21 +91,21 @@ func Login(c *fiber.Ctx) error {
|
||||
|
||||
u := new(loginStruct)
|
||||
if err := c.BodyParser(u); err != nil {
|
||||
return helpers.NewError(helpers.ErrInvalidInput, "Invalid request body", err)
|
||||
return utils.NewError(utils.ErrInvalidInput, "Invalid request body", err)
|
||||
}
|
||||
|
||||
// Validate input
|
||||
if u.Username == "" {
|
||||
return helpers.NewError(helpers.ErrInvalidInput, "Username is empty", nil)
|
||||
return utils.NewError(utils.ErrInvalidInput, "Username is empty", nil)
|
||||
}
|
||||
if u.Password == "" {
|
||||
return helpers.NewError(helpers.ErrInvalidInput, "Password is empty", nil)
|
||||
return utils.NewError(utils.ErrInvalidInput, "Password is empty", nil)
|
||||
}
|
||||
if !helpers.IsValidUsername(u.Username) {
|
||||
return helpers.NewError(helpers.ErrInvalidInput, "Invalid username", nil)
|
||||
if !utils.IsValidUsername(u.Username) {
|
||||
return utils.NewError(utils.ErrInvalidInput, "Invalid username", nil)
|
||||
}
|
||||
if !helpers.IsValidPassword(u.Password) {
|
||||
return helpers.NewError(helpers.ErrInvalidInput, "Invalid password", nil)
|
||||
if !utils.IsValidPassword(u.Password) {
|
||||
return utils.NewError(utils.ErrInvalidInput, "Invalid password", nil)
|
||||
}
|
||||
|
||||
// Check if user exists
|
||||
@@ -114,7 +114,7 @@ func Login(c *fiber.Ctx) error {
|
||||
return err
|
||||
}
|
||||
if !exist {
|
||||
return helpers.NewError(helpers.ErrNotFound, "User does not exist", nil)
|
||||
return utils.NewError(utils.ErrNotFound, "User does not exist", nil)
|
||||
}
|
||||
|
||||
// Verify password
|
||||
@@ -123,7 +123,7 @@ func Login(c *fiber.Ctx) error {
|
||||
return err
|
||||
}
|
||||
if err := bcrypt.CompareHashAndPassword([]byte(passwordHash), []byte(u.Password)); err != nil {
|
||||
return helpers.NewError(helpers.ErrInvalidInput, "Invalid password", nil)
|
||||
return utils.NewError(utils.ErrInvalidInput, "Invalid password", nil)
|
||||
}
|
||||
|
||||
// Get user ID
|
||||
@@ -139,7 +139,7 @@ func Login(c *fiber.Ctx) error {
|
||||
})
|
||||
signedToken, err := token.SignedString([]byte(os.Getenv("JWT_SECRET")))
|
||||
if err != nil {
|
||||
return helpers.NewError(helpers.ErrInternal, "Failed to generate token", err)
|
||||
return utils.NewError(utils.ErrInternal, "Failed to generate token", err)
|
||||
}
|
||||
|
||||
// Set token cookie
|
||||
@@ -159,13 +159,13 @@ func Login(c *fiber.Ctx) error {
|
||||
func ValidateToken(c *fiber.Ctx) error {
|
||||
username, ok := c.Locals("username").(string)
|
||||
if !ok {
|
||||
return helpers.NewError(helpers.ErrInvalidInput, "Invalid token: missing username", fmt.Errorf("missing username: %v", c.Locals("username")))
|
||||
return utils.NewError(utils.ErrInvalidInput, "Invalid token: missing username", fmt.Errorf("missing username: %v", c.Locals("username")))
|
||||
}
|
||||
|
||||
userIDVal := c.Locals("userID")
|
||||
userID, ok := userIDVal.(uuid.UUID)
|
||||
if !ok {
|
||||
return helpers.NewError(helpers.ErrUnauthorized, "unauthorized", fmt.Errorf("missing/invalid userID type: %T, value: %v\n", userIDVal, userIDVal))
|
||||
return utils.NewError(utils.ErrUnauthorized, "unauthorized", fmt.Errorf("missing/invalid userID type: %T, value: %v\n", userIDVal, userIDVal))
|
||||
}
|
||||
|
||||
return c.Status(fiber.StatusOK).JSON(fiber.Map{
|
||||
|
||||
@@ -4,7 +4,7 @@ import (
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"github.com/google/uuid"
|
||||
"relay-server/database"
|
||||
"relay-server/helpers"
|
||||
"relay-server/utils"
|
||||
)
|
||||
|
||||
func DeleteContact(c *fiber.Ctx) error {
|
||||
@@ -15,14 +15,14 @@ func DeleteContact(c *fiber.Ctx) error {
|
||||
|
||||
p := new(params)
|
||||
if err := c.ParamsParser(p); err != nil {
|
||||
return helpers.NewError(helpers.ErrInvalidInput, "Invalid params", err)
|
||||
return utils.NewError(utils.ErrInvalidInput, "Invalid params", err)
|
||||
}
|
||||
|
||||
if p.ContactID == uuid.Nil {
|
||||
return helpers.NewError(helpers.ErrInvalidInput, "contact ID is empty", nil)
|
||||
return utils.NewError(utils.ErrInvalidInput, "contact ID is empty", nil)
|
||||
}
|
||||
if p.ConversationID == uuid.Nil {
|
||||
return helpers.NewError(helpers.ErrInvalidInput, "conversation ID is empty", nil)
|
||||
return utils.NewError(utils.ErrInvalidInput, "conversation ID is empty", nil)
|
||||
}
|
||||
|
||||
err := database.DeleteContact(database.DB, p.ContactID, p.ConversationID)
|
||||
@@ -42,15 +42,15 @@ func InsertContact(c *fiber.Ctx) error {
|
||||
|
||||
p := new(params)
|
||||
if err := c.ParamsParser(p); err != nil {
|
||||
return helpers.NewError(helpers.ErrInvalidInput, "Invalid params", err)
|
||||
return utils.NewError(utils.ErrInvalidInput, "Invalid params", err)
|
||||
}
|
||||
|
||||
if p.ContactUsername == "" {
|
||||
return helpers.NewError(helpers.ErrInvalidInput, "contact username is empty", nil)
|
||||
return utils.NewError(utils.ErrInvalidInput, "contact username is empty", nil)
|
||||
}
|
||||
|
||||
if !helpers.IsValidUsername(p.ContactUsername) {
|
||||
return helpers.NewError(helpers.ErrInvalidInput, "invalid username", nil)
|
||||
if !utils.IsValidUsername(p.ContactUsername) {
|
||||
return utils.NewError(utils.ErrInvalidInput, "invalid username", nil)
|
||||
}
|
||||
|
||||
contactID, err := database.GetUserID(database.DB, p.ContactUsername)
|
||||
@@ -84,10 +84,10 @@ func GetContactSuggestions(c *fiber.Ctx) error {
|
||||
|
||||
p := new(params)
|
||||
if err := c.ParamsParser(p); err != nil {
|
||||
return helpers.NewError(helpers.ErrInvalidInput, "Invalid params", err)
|
||||
return utils.NewError(utils.ErrInvalidInput, "Invalid params", err)
|
||||
}
|
||||
if p.ContactUsername == "" {
|
||||
return helpers.NewError(helpers.ErrInvalidInput, "contact username is empty", nil)
|
||||
return utils.NewError(utils.ErrInvalidInput, "contact username is empty", nil)
|
||||
}
|
||||
|
||||
suggestions, err := database.ContactSuggestion(database.DB, p.ContactUsername)
|
||||
|
||||
@@ -6,7 +6,7 @@ import (
|
||||
"github.com/google/uuid"
|
||||
"log"
|
||||
"relay-server/database"
|
||||
"relay-server/helpers"
|
||||
"relay-server/utils"
|
||||
)
|
||||
|
||||
func CreateGroup(c *fiber.Ctx) error {
|
||||
@@ -18,11 +18,11 @@ func CreateGroup(c *fiber.Ctx) error {
|
||||
|
||||
var req createGroupRequest
|
||||
if err := c.BodyParser(&req); err != nil {
|
||||
return helpers.NewError(helpers.ErrInvalidInput, "Invalid request body", err)
|
||||
return utils.NewError(utils.ErrInvalidInput, "Invalid request body", err)
|
||||
}
|
||||
|
||||
if req.GroupName == "" {
|
||||
return helpers.NewError(helpers.ErrInvalidInput, "Group name is empty", nil)
|
||||
return utils.NewError(utils.ErrInvalidInput, "Group name is empty", nil)
|
||||
}
|
||||
|
||||
groupID, err := database.CreateGroup(database.DB, req.GroupName, userID)
|
||||
@@ -41,13 +41,13 @@ func AddMemberToGroup(c *fiber.Ctx) error {
|
||||
}
|
||||
var req addMemberToGroupRequest
|
||||
if err := c.BodyParser(&req); err != nil {
|
||||
return helpers.NewError(helpers.ErrInvalidInput, "Invalid request body", err)
|
||||
return utils.NewError(utils.ErrInvalidInput, "Invalid request body", err)
|
||||
}
|
||||
if req.GroupID == uuid.Nil {
|
||||
return helpers.NewError(helpers.ErrInvalidInput, "Group ID is empty", nil)
|
||||
return utils.NewError(utils.ErrInvalidInput, "Group ID is empty", nil)
|
||||
}
|
||||
if req.UserID == uuid.Nil {
|
||||
return helpers.NewError(helpers.ErrInvalidInput, "User ID is empty", nil)
|
||||
return utils.NewError(utils.ErrInvalidInput, "User ID is empty", nil)
|
||||
}
|
||||
|
||||
isAdmin, err := database.IsAdmin(database.DB, req.UserID, req.GroupID)
|
||||
@@ -55,7 +55,7 @@ func AddMemberToGroup(c *fiber.Ctx) error {
|
||||
return err
|
||||
}
|
||||
if !isAdmin {
|
||||
return helpers.NewError(helpers.ErrUnauthorized, "You are not a group administrator", nil)
|
||||
return utils.NewError(utils.ErrUnauthorized, "You are not a group administrator", nil)
|
||||
}
|
||||
|
||||
_, err = database.AddMemberToGroup(database.DB, req.GroupID, req.UserID)
|
||||
@@ -75,15 +75,15 @@ func GetMembers(c *fiber.Ctx) error {
|
||||
var p params
|
||||
|
||||
if err := c.ParamsParser(&p); err != nil {
|
||||
return helpers.NewError(helpers.ErrInvalidInput, "Invalid params", err)
|
||||
return utils.NewError(utils.ErrInvalidInput, "Invalid params", err)
|
||||
}
|
||||
|
||||
isMember, err := database.IsMember(database.DB, p.GroupID, c.Locals("userID").(uuid.UUID))
|
||||
isMember, err := database.IsMember(database.DB, c.Locals("userID").(uuid.UUID), p.GroupID)
|
||||
if err != nil {
|
||||
return helpers.NewError(helpers.ErrInternal, "Failed to get members", fmt.Errorf("failed to check if user is a member: %w", err))
|
||||
return utils.NewError(utils.ErrInternal, "Failed to get members", fmt.Errorf("failed to check if user is a member: %w", err))
|
||||
}
|
||||
if !isMember {
|
||||
return helpers.NewError(helpers.ErrForbidden, "You are not a member of this group", nil)
|
||||
return utils.NewError(utils.ErrForbidden, "You are not a member of this group", nil)
|
||||
}
|
||||
|
||||
members, err := database.GetMembers(database.DB, p.GroupID)
|
||||
@@ -91,5 +91,5 @@ func GetMembers(c *fiber.Ctx) error {
|
||||
return err
|
||||
}
|
||||
|
||||
return c.Status(fiber.StatusOK).JSON(fiber.Map{"members": members})
|
||||
return c.Status(fiber.StatusOK).JSON(members)
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ import (
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"github.com/google/uuid"
|
||||
"relay-server/database"
|
||||
"relay-server/helpers"
|
||||
"relay-server/utils"
|
||||
)
|
||||
|
||||
func GetMessages(c *fiber.Ctx) error {
|
||||
@@ -20,13 +20,13 @@ func GetMessages(c *fiber.Ctx) error {
|
||||
p := new(params)
|
||||
q := new(query)
|
||||
if err := c.ParamsParser(p); err != nil {
|
||||
return helpers.NewError(helpers.ErrInvalidInput, "Invalid params", err)
|
||||
return utils.NewError(utils.ErrInvalidInput, "Invalid params", err)
|
||||
}
|
||||
if err := c.QueryParser(q); err != nil {
|
||||
return helpers.NewError(helpers.ErrInvalidInput, "Invalid query", err)
|
||||
return utils.NewError(utils.ErrInvalidInput, "Invalid query", err)
|
||||
}
|
||||
if p.conversationID == uuid.Nil {
|
||||
return helpers.NewError(helpers.ErrInvalidInput, "conversation ID is empty", nil)
|
||||
return utils.NewError(utils.ErrInvalidInput, "conversation ID is empty", nil)
|
||||
}
|
||||
|
||||
messages, err := database.GetMessages(database.DB, userID, p.conversationID, q.limit, q.cursor)
|
||||
|
||||
Reference in New Issue
Block a user