From 2da115b6b77ac2f6265dc5d7cd1c6498d48da4d5 Mon Sep 17 00:00:00 2001 From: mngshm Date: Tue, 4 Feb 2025 18:53:49 +0530 Subject: [PATCH] [server[ logic for blocking upload --- server/pkg/controller/usage.go | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/server/pkg/controller/usage.go b/server/pkg/controller/usage.go index 1cf27b7644..fa3980aa55 100644 --- a/server/pkg/controller/usage.go +++ b/server/pkg/controller/usage.go @@ -46,11 +46,11 @@ func (c *UsageController) CanUploadFile(ctx context.Context, userID int64, size var subscriptionUserIDs []int64 // if user is part of a family group, validate if subscription of familyAdmin is valid & member's total storage // is less than the storage accordingly to subscription plan of the admin + familyMembers, err := c.FamilyRepo.GetMembersWithStatus(*familyAdminID, repo.ActiveFamilyMemberStatus) + if err != nil { + return stacktrace.Propagate(err, "failed to fetch family members") + } if familyAdminID != nil { - familyMembers, err := c.FamilyRepo.GetMembersWithStatus(*familyAdminID, repo.ActiveFamilyMemberStatus) - if err != nil { - return stacktrace.Propagate(err, "failed to fetch family members") - } subscriptionAdminID = *familyAdminID for _, familyMember := range familyMembers { subscriptionUserIDs = append(subscriptionUserIDs, familyMember.MemberUserID) @@ -108,19 +108,23 @@ func (c *UsageController) CanUploadFile(ctx context.Context, userID int64, size // Get particular member's storage and check if the file size is larger than the size of the storage allocated // to the Member and fail if its too large. var memberStorage *int64 + for _, familyMember := range familyMembers { + memberStorage = familyMember.StorageLimit + break + } if subscriptionAdminID != userID { - familyMembers, err := c.FamilyRepo.GetMembersWithStatus(*familyAdminID, repo.ActiveFamilyMemberStatus) - if err != nil { - stacktrace.Propagate(err, "Failed to Get Family Members") + memberUsage, memberUsageErr := c.UsageRepo.GetUsage(userID) + if memberUsageErr != nil { + stacktrace.Propagate(memberUsageErr, "Couldn't get Members Usage") } - for _, familyMember := range familyMembers { - if familyMember.MemberUserID == userID { - memberStorage = familyMember.StorageLimit - break - } + if size != nil { + memberUsage += *size } + // Upload fail if memberStorage > memberUsage ((fileSize + total Usage) + StorageOverflowAboveSubscriptionLimit (50mb)) if memberStorage != nil { - return stacktrace.Propagate(ente.ErrStorageLimitExceeded, "Size of Files is larger than Family Members Allocated Storage") + if (memberUsage + StorageOverflowAboveSubscriptionLimit) > *memberStorage { + return ente.ErrStorageLimitExceeded + } } } return nil