diff --git a/server/ente/user.go b/server/ente/user.go index b8db33116b..7856304859 100644 --- a/server/ente/user.go +++ b/server/ente/user.go @@ -115,6 +115,7 @@ type DeleteChallengeResponse struct { // AllowDelete indicates whether the user is allowed to delete their account via app AllowDelete bool `json:"allowDelete"` EncryptedChallenge *string `json:"encryptedChallenge,omitempty"` + Apps []App `json:"apps"` } type DeleteAccountRequest struct { diff --git a/server/pkg/controller/user/user_delete.go b/server/pkg/controller/user/user_delete.go index 5bbf8ce0bb..8dddec5727 100644 --- a/server/pkg/controller/user/user_delete.go +++ b/server/pkg/controller/user/user_delete.go @@ -49,9 +49,15 @@ func (c *UserController) GetDeleteChallengeToken(ctx *gin.Context) (*ente.Delete if err != nil { return nil, stacktrace.Propagate(err, "") } + + apps, err := c.UserAuthRepo.GetAppsForUser(userID) + if err != nil { + return nil, stacktrace.Propagate(err, "") + } return &ente.DeleteChallengeResponse{ EncryptedChallenge: &encryptedToken, AllowDelete: true, + Apps: apps, }, nil } diff --git a/server/pkg/repo/userauth.go b/server/pkg/repo/userauth.go index b7fa8c88d1..c7cb3e3a77 100644 --- a/server/pkg/repo/userauth.go +++ b/server/pkg/repo/userauth.go @@ -66,6 +66,24 @@ func (repo *UserAuthRepository) GetUserTokenInfo(userID int64) ([]ente.TokenInfo return tokenInfos, nil } +func (repo *UserAuthRepository) GetAppsForUser(userID int64) ([]ente.App, error) { + rows, err := repo.DB.Query(`SELECT DISTINCT app FROM tokens WHERE user_id = $1`, userID) + if err != nil { + return nil, stacktrace.Propagate(err, "") + } + defer rows.Close() + apps := make([]ente.App, 0) + for rows.Next() { + var app ente.App + err := rows.Scan(&app) + if err != nil { + return nil, stacktrace.Propagate(err, "") + } + apps = append(apps, app) + } + return apps, nil +} + // GetValidOTTs returns the list of OTTs that haven't expired for a given user func (repo *UserAuthRepository) GetValidOTTs(emailHash string, app ente.App) ([]string, error) { rows, err := repo.DB.Query(`SELECT ott FROM otts WHERE email_hash = $1 AND app = $2 AND expiration_time > $3`,