Browse Source

[server][cast] Generate alphaNumberic codes for cast (#1595)

## Description

## Tests
Neeraj Gupta 1 năm trước cách đây
mục cha
commit
26e17d8464

+ 1 - 2
server/ente/cast/entity.go

@@ -9,8 +9,7 @@ type CastRequest struct {
 }
 
 type RegisterDeviceRequest struct {
-	DeviceCode *string `json:"deviceCode"`
-	PublicKey  string  `json:"publicKey" binding:"required"`
+	PublicKey string `json:"publicKey" binding:"required"`
 }
 
 type AuthContext struct {

+ 6 - 6
server/pkg/api/cast.go

@@ -1,16 +1,16 @@
 package api
 
 import (
-	entity "github.com/ente-io/museum/ente/cast"
-	"github.com/ente-io/museum/pkg/controller/cast"
-	"net/http"
-	"strconv"
-
 	"github.com/ente-io/museum/ente"
+	entity "github.com/ente-io/museum/ente/cast"
 	"github.com/ente-io/museum/pkg/controller"
+	"github.com/ente-io/museum/pkg/controller/cast"
 	"github.com/ente-io/museum/pkg/utils/handler"
 	"github.com/ente-io/stacktrace"
 	"github.com/gin-gonic/gin"
+	"net/http"
+	"strconv"
+	"strings"
 )
 
 // CastHandler exposes request handlers for publicly accessible collections
@@ -126,7 +126,7 @@ func (h *CastHandler) GetDiff(c *gin.Context) {
 }
 
 func getDeviceCode(c *gin.Context) string {
-	return c.Param("deviceCode")
+	return strings.ToUpper(c.Param("deviceCode"))
 }
 
 func (h *CastHandler) getFileForType(c *gin.Context, objectType ente.ObjectType) {

+ 1 - 3
server/pkg/controller/cast/controller.go

@@ -2,7 +2,6 @@ package cast
 
 import (
 	"context"
-	"github.com/ente-io/museum/ente"
 	"github.com/ente-io/museum/ente/cast"
 	"github.com/ente-io/museum/pkg/controller/access"
 	castRepo "github.com/ente-io/museum/pkg/repo/cast"
@@ -28,7 +27,7 @@ func NewController(castRepo *castRepo.Repository,
 }
 
 func (c *Controller) RegisterDevice(ctx *gin.Context, request *cast.RegisterDeviceRequest) (string, error) {
-	return c.CastRepo.AddCode(ctx, request.DeviceCode, request.PublicKey, network.GetClientIP(ctx))
+	return c.CastRepo.AddCode(ctx, request.PublicKey, network.GetClientIP(ctx))
 }
 
 func (c *Controller) GetPublicKey(ctx *gin.Context, deviceCode string) (string, error) {
@@ -42,7 +41,6 @@ func (c *Controller) GetPublicKey(ctx *gin.Context, deviceCode string) (string,
 			"ip":         ip,
 			"clientIP":   network.GetClientIP(ctx),
 		}).Warn("GetPublicKey: IP mismatch")
-		return "", &ente.ErrCastIPMismatch
 	}
 	return pubKey, nil
 }

+ 2 - 29
server/pkg/controller/storagebonus/referral.go

@@ -3,7 +3,7 @@ package storagebonus
 import (
 	"database/sql"
 	"errors"
-	"fmt"
+	"github.com/ente-io/museum/pkg/utils/random"
 
 	"github.com/ente-io/museum/ente"
 	entity "github.com/ente-io/museum/ente/storagebonus"
@@ -119,7 +119,7 @@ func (c *Controller) GetOrCreateReferralCode(ctx *gin.Context, userID int64) (*s
 		if !errors.Is(err, sql.ErrNoRows) {
 			return nil, stacktrace.Propagate(err, "failed to get storagebonus code")
 		}
-		code, err := generateAlphaNumString(codeLength)
+		code, err := random.GenerateAlphaNumString(codeLength)
 		if err != nil {
 			return nil, stacktrace.Propagate(err, "")
 		}
@@ -131,30 +131,3 @@ func (c *Controller) GetOrCreateReferralCode(ctx *gin.Context, userID int64) (*s
 	}
 	return referralCode, nil
 }
-
-// generateAlphaNumString returns AlphaNumeric code of given length
-// which exclude number 0 and letter O. The code always starts with an
-// alphabet
-func generateAlphaNumString(length int) (string, error) {
-	// Define the alphabet and numbers to be used in the string.
-	alphabet := "ABCDEFGHIJKLMNPQRSTUVWXYZ"
-	// Define the alphabet and numbers to be used in the string.
-	alphaNum := fmt.Sprintf("%s123456789", alphabet)
-	// Allocate a byte slice with the desired length.
-	result := make([]byte, length)
-	// Generate the first letter as an alphabet.
-	r0, err := auth.GenerateRandomInt(int64(len(alphabet)))
-	if err != nil {
-		return "", stacktrace.Propagate(err, "")
-	}
-	result[0] = alphabet[r0]
-	// Generate the remaining characters as alphanumeric.
-	for i := 1; i < length; i++ {
-		ri, err := auth.GenerateRandomInt(int64(len(alphaNum)))
-		if err != nil {
-			return "", stacktrace.Propagate(err, "")
-		}
-		result[i] = alphaNum[ri]
-	}
-	return string(result), nil
-}

+ 4 - 11
server/pkg/repo/cast/repo.go

@@ -8,23 +8,16 @@ import (
 	"github.com/ente-io/stacktrace"
 	"github.com/google/uuid"
 	log "github.com/sirupsen/logrus"
-	"strings"
 )
 
 type Repository struct {
 	DB *sql.DB
 }
 
-func (r *Repository) AddCode(ctx context.Context, code *string, pubKey string, ip string) (string, error) {
-	var codeValue string
-	var err error
-	if code == nil || *code == "" {
-		codeValue, err = random.GenerateSixDigitOtp()
-		if err != nil {
-			return "", stacktrace.Propagate(err, "")
-		}
-	} else {
-		codeValue = strings.TrimSpace(*code)
+func (r *Repository) AddCode(ctx context.Context, pubKey string, ip string) (string, error) {
+	codeValue, err := random.GenerateAlphaNumString(6)
+	if err != nil {
+		return "", err
 	}
 	_, err = r.DB.ExecContext(ctx, "INSERT INTO casting (code, public_key, id, ip) VALUES ($1, $2, $3, $4)", codeValue, pubKey, uuid.New(), ip)
 	if err != nil {

+ 27 - 0
server/pkg/utils/random/generate.go

@@ -13,3 +13,30 @@ func GenerateSixDigitOtp() (string, error) {
 	}
 	return fmt.Sprintf("%06d", n), nil
 }
+
+// GenerateAlphaNumString returns AlphaNumeric code of given length
+// which exclude number 0 and letter O. The code always starts with an
+// alphabet
+func GenerateAlphaNumString(length int) (string, error) {
+	// Define the alphabet and numbers to be used in the string.
+	alphabet := "ABCDEFGHIJKLMNPQRSTUVWXYZ"
+	// Define the alphabet and numbers to be used in the string.
+	alphaNum := fmt.Sprintf("%s123456789", alphabet)
+	// Allocate a byte slice with the desired length.
+	result := make([]byte, length)
+	// Generate the first letter as an alphabet.
+	r0, err := auth.GenerateRandomInt(int64(len(alphabet)))
+	if err != nil {
+		return "", stacktrace.Propagate(err, "")
+	}
+	result[0] = alphabet[r0]
+	// Generate the remaining characters as alphanumeric.
+	for i := 1; i < length; i++ {
+		ri, err := auth.GenerateRandomInt(int64(len(alphaNum)))
+		if err != nil {
+			return "", stacktrace.Propagate(err, "")
+		}
+		result[i] = alphaNum[ri]
+	}
+	return string(result), nil
+}