mirror of
https://github.com/ente-io/ente.git
synced 2025-08-12 01:04:48 +00:00
[server] Clean up emergency contacts on account deletion
This commit is contained in:
parent
c648127ff8
commit
38d679f574
@ -461,8 +461,14 @@ func main() {
|
|||||||
privateAPI.POST("/trash/delete", trashHandler.Delete)
|
privateAPI.POST("/trash/delete", trashHandler.Delete)
|
||||||
privateAPI.POST("/trash/empty", trashHandler.Empty)
|
privateAPI.POST("/trash/empty", trashHandler.Empty)
|
||||||
|
|
||||||
|
emergencyCtrl := &emergency.Controller{
|
||||||
|
Repo: &emergencyRepo.Repository{DB: db},
|
||||||
|
UserRepo: userRepo,
|
||||||
|
UserCtrl: userController,
|
||||||
|
}
|
||||||
userHandler := &api.UserHandler{
|
userHandler := &api.UserHandler{
|
||||||
UserController: userController,
|
UserController: userController,
|
||||||
|
EmergencyController: emergencyCtrl,
|
||||||
}
|
}
|
||||||
publicAPI.POST("/users/ott", userHandler.SendOTT)
|
publicAPI.POST("/users/ott", userHandler.SendOTT)
|
||||||
publicAPI.POST("/users/verify-email", userHandler.VerifyEmail)
|
publicAPI.POST("/users/verify-email", userHandler.VerifyEmail)
|
||||||
@ -606,11 +612,6 @@ func main() {
|
|||||||
familiesJwtAuthAPI.DELETE("/family/remove-member/:id", familyHandler.RemoveMember)
|
familiesJwtAuthAPI.DELETE("/family/remove-member/:id", familyHandler.RemoveMember)
|
||||||
familiesJwtAuthAPI.DELETE("/family/revoke-invite/:id", familyHandler.RevokeInvite)
|
familiesJwtAuthAPI.DELETE("/family/revoke-invite/:id", familyHandler.RevokeInvite)
|
||||||
|
|
||||||
emergencyCtrl := &emergency.Controller{
|
|
||||||
Repo: &emergencyRepo.Repository{DB: db},
|
|
||||||
UserRepo: userRepo,
|
|
||||||
UserCtrl: userController,
|
|
||||||
}
|
|
||||||
emergencyHandler := &api.EmergencyHandler{
|
emergencyHandler := &api.EmergencyHandler{
|
||||||
Controller: emergencyCtrl,
|
Controller: emergencyCtrl,
|
||||||
}
|
}
|
||||||
@ -665,6 +666,7 @@ func main() {
|
|||||||
UserAuthRepo: userAuthRepo,
|
UserAuthRepo: userAuthRepo,
|
||||||
UserController: userController,
|
UserController: userController,
|
||||||
FamilyController: familyController,
|
FamilyController: familyController,
|
||||||
|
EmergencyController: emergencyCtrl,
|
||||||
RemoteStoreController: remoteStoreController,
|
RemoteStoreController: remoteStoreController,
|
||||||
FileRepo: fileRepo,
|
FileRepo: fileRepo,
|
||||||
StorageBonusRepo: storagBonusRepo,
|
StorageBonusRepo: storagBonusRepo,
|
||||||
|
@ -3,6 +3,7 @@ package api
|
|||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/ente-io/museum/pkg/controller/emergency"
|
||||||
"github.com/ente-io/museum/pkg/controller/remotestore"
|
"github.com/ente-io/museum/pkg/controller/remotestore"
|
||||||
"github.com/ente-io/museum/pkg/repo/authenticator"
|
"github.com/ente-io/museum/pkg/repo/authenticator"
|
||||||
"net/http"
|
"net/http"
|
||||||
@ -47,6 +48,7 @@ type AdminHandler struct {
|
|||||||
StorageBonusRepo *storagebonus.Repository
|
StorageBonusRepo *storagebonus.Repository
|
||||||
BillingController *controller.BillingController
|
BillingController *controller.BillingController
|
||||||
UserController *user.UserController
|
UserController *user.UserController
|
||||||
|
EmergencyController *emergency.Controller
|
||||||
FamilyController *family.Controller
|
FamilyController *family.Controller
|
||||||
RemoteStoreController *remotestore.Controller
|
RemoteStoreController *remotestore.Controller
|
||||||
ObjectCleanupController *controller.ObjectCleanupController
|
ObjectCleanupController *controller.ObjectCleanupController
|
||||||
@ -182,6 +184,13 @@ func (h *AdminHandler) DeleteUser(c *gin.Context) {
|
|||||||
"req_id": requestid.Get(c),
|
"req_id": requestid.Get(c),
|
||||||
"req_ctx": "account_deletion",
|
"req_ctx": "account_deletion",
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// todo: (neeraj) refactor this part, currently there's a circular dependency between user and emergency controllers
|
||||||
|
removeLegacyErr := h.EmergencyController.HandleAccountDeletion(c, user.ID, logger)
|
||||||
|
if removeLegacyErr != nil {
|
||||||
|
handler.Error(c, stacktrace.Propagate(removeLegacyErr, ""))
|
||||||
|
return
|
||||||
|
}
|
||||||
response, err := h.UserController.HandleAccountDeletion(c, user.ID, logger)
|
response, err := h.UserController.HandleAccountDeletion(c, user.ID, logger)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
handler.Error(c, stacktrace.Propagate(err, ""))
|
handler.Error(c, stacktrace.Propagate(err, ""))
|
||||||
|
@ -4,6 +4,7 @@ import (
|
|||||||
"database/sql"
|
"database/sql"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/ente-io/museum/pkg/controller/emergency"
|
||||||
"github.com/gin-contrib/requestid"
|
"github.com/gin-contrib/requestid"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
"net/http"
|
"net/http"
|
||||||
@ -23,6 +24,7 @@ import (
|
|||||||
// UserHandler exposes request handlers for all user related requests
|
// UserHandler exposes request handlers for all user related requests
|
||||||
type UserHandler struct {
|
type UserHandler struct {
|
||||||
UserController *user.UserController
|
UserController *user.UserController
|
||||||
|
EmergencyController *emergency.Controller
|
||||||
}
|
}
|
||||||
|
|
||||||
// SendOTT generates and sends an OTT to the provided email address
|
// SendOTT generates and sends an OTT to the provided email address
|
||||||
@ -529,6 +531,17 @@ func (h *UserHandler) DeleteUser(c *gin.Context) {
|
|||||||
handler.Error(c, stacktrace.Propagate(err, "Could not bind request params"))
|
handler.Error(c, stacktrace.Propagate(err, "Could not bind request params"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
// todo: (neeraj) refactor this part, currently there's a circular dependency between user and emergency controllers
|
||||||
|
removeLegacyErr := h.EmergencyController.HandleAccountDeletion(c, auth.GetUserID(c.Request.Header),
|
||||||
|
logrus.WithFields(logrus.Fields{
|
||||||
|
"user_id": auth.GetUserID(c.Request.Header),
|
||||||
|
"req_id": requestid.Get(c),
|
||||||
|
"req_ctx": "self_account_deletion",
|
||||||
|
}))
|
||||||
|
if removeLegacyErr != nil {
|
||||||
|
handler.Error(c, stacktrace.Propagate(removeLegacyErr, ""))
|
||||||
|
return
|
||||||
|
}
|
||||||
response, err := h.UserController.SelfDeleteAccount(c, request)
|
response, err := h.UserController.SelfDeleteAccount(c, request)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
handler.Error(c, stacktrace.Propagate(err, ""))
|
handler.Error(c, stacktrace.Propagate(err, ""))
|
||||||
|
@ -64,6 +64,41 @@ func (c *Controller) UpdateContact(ctx *gin.Context,
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Controller) HandleAccountDeletion(ctx *gin.Context, userID int64, logger *log.Entry) error {
|
||||||
|
logger.Info("Clean up emergency contacts on account deletion")
|
||||||
|
contacts, err := c.Repo.GetActiveContactForUser(ctx, userID)
|
||||||
|
if err != nil {
|
||||||
|
return stacktrace.Propagate(err, "")
|
||||||
|
}
|
||||||
|
if len(contacts) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
for _, contact := range contacts {
|
||||||
|
if contact.UserID == userID {
|
||||||
|
logger.Info("Removing emergency contact from user side")
|
||||||
|
removeErr := c.UpdateContact(ctx, userID, ente.UpdateContact{
|
||||||
|
UserID: userID,
|
||||||
|
EmergencyContactID: contact.EmergencyContactID,
|
||||||
|
State: ente.UserRevokedContact,
|
||||||
|
})
|
||||||
|
if removeErr != nil {
|
||||||
|
return stacktrace.Propagate(removeErr, "")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
logger.Info("Removing user from emergency contact side")
|
||||||
|
leaveErr := c.UpdateContact(ctx, userID, ente.UpdateContact{
|
||||||
|
UserID: contact.UserID,
|
||||||
|
EmergencyContactID: userID,
|
||||||
|
State: ente.ContactLeft,
|
||||||
|
})
|
||||||
|
if leaveErr != nil {
|
||||||
|
return stacktrace.Propagate(leaveErr, "")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func validateUpdateReq(userID int64, req ente.UpdateContact) error {
|
func validateUpdateReq(userID int64, req ente.UpdateContact) error {
|
||||||
if req.EmergencyContactID == req.UserID {
|
if req.EmergencyContactID == req.UserID {
|
||||||
return stacktrace.Propagate(ente.NewBadRequestWithMessage("contact and user can not be same"), "")
|
return stacktrace.Propagate(ente.NewBadRequestWithMessage("contact and user can not be same"), "")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user