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
|
||||
}
|
||||
|
||||
// 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 (
|
||||
"fmt"
|
||||
|
||||
"code.nonshy.com/nonshy/website/pkg/chat"
|
||||
"code.nonshy.com/nonshy/website/pkg/log"
|
||||
"code.nonshy.com/nonshy/website/pkg/models"
|
||||
"code.nonshy.com/nonshy/website/pkg/photo"
|
||||
|
@ -12,6 +13,17 @@ import (
|
|||
func DeleteUser(user *models.User) error {
|
||||
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.
|
||||
type remover struct {
|
||||
Step string
|
||||
|
|
Loading…
Reference in New Issue
Block a user