Clear BareRTC DMs history on account deletion
This commit is contained in:
parent
2f75059623
commit
2126c5ab84
|
@ -161,3 +161,61 @@ func DisconnectUserNow(user *models.User, message string) (int, error) {
|
||||||
|
|
||||||
return result.Removed, nil
|
return result.Removed, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// EraseChatHistory tells the chat room to clear DMs history for this user.
|
||||||
|
func EraseChatHistory(user *models.User) (int, error) {
|
||||||
|
// API request struct for BareRTC /api/message/clear endpoint.
|
||||||
|
var request = struct {
|
||||||
|
APIKey string
|
||||||
|
Username string
|
||||||
|
}{
|
||||||
|
APIKey: config.Current.CronAPIKey,
|
||||||
|
Username: user.Username,
|
||||||
|
}
|
||||||
|
|
||||||
|
type response struct {
|
||||||
|
OK bool
|
||||||
|
MessagesErased int
|
||||||
|
Error string `json:",omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// JSON request body.
|
||||||
|
jsonStr, err := json.Marshal(request)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make the API request to BareRTC.
|
||||||
|
var url = strings.TrimSuffix(config.Current.BareRTC.URL, "/") + "/api/message/clear"
|
||||||
|
req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr))
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
req.Header.Set("Content-Type", "application/json")
|
||||||
|
|
||||||
|
client := &http.Client{
|
||||||
|
Timeout: 10 * time.Second,
|
||||||
|
}
|
||||||
|
resp, err := client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
// Ingest the JSON response to see the count and error.
|
||||||
|
var (
|
||||||
|
result response
|
||||||
|
body, _ = io.ReadAll(resp.Body)
|
||||||
|
)
|
||||||
|
err = json.Unmarshal(body, &result)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if resp.StatusCode != http.StatusOK || !result.OK {
|
||||||
|
log.Error("EraseChatHistory: error from BareRTC: status %d body %s", resp.StatusCode, body)
|
||||||
|
return result.MessagesErased, errors.New(result.Error)
|
||||||
|
}
|
||||||
|
|
||||||
|
return result.MessagesErased, nil
|
||||||
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ package deletion
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
"code.nonshy.com/nonshy/website/pkg/chat"
|
||||||
"code.nonshy.com/nonshy/website/pkg/log"
|
"code.nonshy.com/nonshy/website/pkg/log"
|
||||||
"code.nonshy.com/nonshy/website/pkg/models"
|
"code.nonshy.com/nonshy/website/pkg/models"
|
||||||
"code.nonshy.com/nonshy/website/pkg/photo"
|
"code.nonshy.com/nonshy/website/pkg/photo"
|
||||||
|
@ -12,6 +13,17 @@ import (
|
||||||
func DeleteUser(user *models.User) error {
|
func DeleteUser(user *models.User) error {
|
||||||
log.Error("BEGIN DeleteUser(%d, %s)", user.ID, user.Username)
|
log.Error("BEGIN DeleteUser(%d, %s)", user.ID, user.Username)
|
||||||
|
|
||||||
|
// Clear their history on the chat room.
|
||||||
|
go func() {
|
||||||
|
i, err := chat.EraseChatHistory(user)
|
||||||
|
if err != nil {
|
||||||
|
log.Error("EraseChatHistory(%s): %s", user.Username, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Error("DeleteUser(%s): Cleared chat DMs history for user (%d messages erased)", user.Username, i)
|
||||||
|
}()
|
||||||
|
|
||||||
// Remove all linked tables and assets.
|
// Remove all linked tables and assets.
|
||||||
type remover struct {
|
type remover struct {
|
||||||
Step string
|
Step string
|
||||||
|
|
Loading…
Reference in New Issue
Block a user