mirror of
https://github.com/ente-io/ente.git
synced 2025-08-08 07:28:26 +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/empty", trashHandler.Empty)
|
||||
|
||||
emergencyCtrl := &emergency.Controller{
|
||||
Repo: &emergencyRepo.Repository{DB: db},
|
||||
UserRepo: userRepo,
|
||||
UserCtrl: userController,
|
||||
}
|
||||
userHandler := &api.UserHandler{
|
||||
UserController: userController,
|
||||
UserController: userController,
|
||||
EmergencyController: emergencyCtrl,
|
||||
}
|
||||
publicAPI.POST("/users/ott", userHandler.SendOTT)
|
||||
publicAPI.POST("/users/verify-email", userHandler.VerifyEmail)
|
||||
@ -606,11 +612,6 @@ func main() {
|
||||
familiesJwtAuthAPI.DELETE("/family/remove-member/:id", familyHandler.RemoveMember)
|
||||
familiesJwtAuthAPI.DELETE("/family/revoke-invite/:id", familyHandler.RevokeInvite)
|
||||
|
||||
emergencyCtrl := &emergency.Controller{
|
||||
Repo: &emergencyRepo.Repository{DB: db},
|
||||
UserRepo: userRepo,
|
||||
UserCtrl: userController,
|
||||
}
|
||||
emergencyHandler := &api.EmergencyHandler{
|
||||
Controller: emergencyCtrl,
|
||||
}
|
||||
@ -665,6 +666,7 @@ func main() {
|
||||
UserAuthRepo: userAuthRepo,
|
||||
UserController: userController,
|
||||
FamilyController: familyController,
|
||||
EmergencyController: emergencyCtrl,
|
||||
RemoteStoreController: remoteStoreController,
|
||||
FileRepo: fileRepo,
|
||||
StorageBonusRepo: storagBonusRepo,
|
||||
|
@ -3,6 +3,7 @@ package api
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/ente-io/museum/pkg/controller/emergency"
|
||||
"github.com/ente-io/museum/pkg/controller/remotestore"
|
||||
"github.com/ente-io/museum/pkg/repo/authenticator"
|
||||
"net/http"
|
||||
@ -47,6 +48,7 @@ type AdminHandler struct {
|
||||
StorageBonusRepo *storagebonus.Repository
|
||||
BillingController *controller.BillingController
|
||||
UserController *user.UserController
|
||||
EmergencyController *emergency.Controller
|
||||
FamilyController *family.Controller
|
||||
RemoteStoreController *remotestore.Controller
|
||||
ObjectCleanupController *controller.ObjectCleanupController
|
||||
@ -182,6 +184,13 @@ func (h *AdminHandler) DeleteUser(c *gin.Context) {
|
||||
"req_id": requestid.Get(c),
|
||||
"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)
|
||||
if err != nil {
|
||||
handler.Error(c, stacktrace.Propagate(err, ""))
|
||||
|
@ -4,6 +4,7 @@ import (
|
||||
"database/sql"
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/ente-io/museum/pkg/controller/emergency"
|
||||
"github.com/gin-contrib/requestid"
|
||||
"github.com/sirupsen/logrus"
|
||||
"net/http"
|
||||
@ -22,7 +23,8 @@ import (
|
||||
|
||||
// UserHandler exposes request handlers for all user related requests
|
||||
type UserHandler struct {
|
||||
UserController *user.UserController
|
||||
UserController *user.UserController
|
||||
EmergencyController *emergency.Controller
|
||||
}
|
||||
|
||||
// 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"))
|
||||
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)
|
||||
if err != nil {
|
||||
handler.Error(c, stacktrace.Propagate(err, ""))
|
||||
|
@ -64,6 +64,41 @@ func (c *Controller) UpdateContact(ctx *gin.Context,
|
||||
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 {
|
||||
if req.EmergencyContactID == req.UserID {
|
||||
return stacktrace.Propagate(ente.NewBadRequestWithMessage("contact and user can not be same"), "")
|
||||
|
Loading…
x
Reference in New Issue
Block a user