From dc1b9eab09a599e5681e5c5dda6aeabfa024e4f9 Mon Sep 17 00:00:00 2001 From: Sisi Date: Sun, 19 Apr 2026 18:40:02 +0200 Subject: [PATCH] add connection delevation option --- packages/Enums/WsEventType/WsMessageFrom.go | 1 + packages/httpRequest/connectionsAndDms.go | 47 +++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/packages/Enums/WsEventType/WsMessageFrom.go b/packages/Enums/WsEventType/WsMessageFrom.go index ac7c5ed..e86b56f 100644 --- a/packages/Enums/WsEventType/WsMessageFrom.go +++ b/packages/Enums/WsEventType/WsMessageFrom.go @@ -8,4 +8,5 @@ const ( ConnectionCreated ConnectionDeleted ConnectionElevated + ConnectionDeElevated ) diff --git a/packages/httpRequest/connectionsAndDms.go b/packages/httpRequest/connectionsAndDms.go index 73a5fd3..6304911 100644 --- a/packages/httpRequest/connectionsAndDms.go +++ b/packages/httpRequest/connectionsAndDms.go @@ -329,6 +329,53 @@ func HandleUserElevateConnection(response http.ResponseWriter, request *http.Req response.Write([]byte("waiting for second user to elevate")) } +func HandleUserDeElevateConnection(response http.ResponseWriter, request *http.Request) { + if !postValidCheckWithResponseOnFail(&response, request, postNormal) { + return + } + + ctx := request.Context() + user, err := getUserByToken(ctx, request.FormValue("token")) + if err != nil { + http.Error(response, "invalid token", http.StatusUnauthorized) + return + } + + conn, ok := getConnectionWithResponseOnFail(&response, request, user) + if !ok { + return + } + + if conn.State != ConnectionState.Stranger { + conn.State = ConnectionState.Stranger + err = postgresql.ConnectionUpdateState(ctx, conn) + if err != nil { + http.Error(response, "internal server error", http.StatusInternalServerError) + return + } + + var user2 *types.User + if conn.RequestorId == user.Id { + user2, err = getUserById(ctx, conn.RecipientId) + } else { + user2, err = getUserById(ctx, conn.RequestorId) + } + + wsServer.WsSendMessageCloseIfTimeout(user2, types.WsEventMessage{ + Type: WsEventType.ConnectionElevated, + Event: types.ConnectionElevationData{ + Id: conn.Id, + NewState: conn.State, + }, + }) + response.Write([]byte("de elevated")) + return + } + + response.WriteHeader(http.StatusConflict) + response.Write([]byte("already lowest possible")) +} + func HandleUserGetConnections(response http.ResponseWriter, request *http.Request) { if !postValidCheckWithResponseOnFail(&response, request, postNormal) { return