Update slack

Use newest commit and newest version of patch.
This commit is contained in:
Daniel Siepmann 2023-09-19 13:12:58 +02:00
parent 1e5c2c7122
commit 8338341c4f
Signed by: Daniel Siepmann
GPG key ID: 33D6629915560EF4
2 changed files with 95 additions and 22 deletions

View file

@ -1,9 +1,10 @@
https://github.com/kacf/slack-libpurple/commit/8a09a6d94c1020aeb7aef1ab3b08a088e4fbfac0.patch
From 8a09a6d94c1020aeb7aef1ab3b08a088e4fbfac0 Mon Sep 17 00:00:00 2001
From d276ba4a0854ea243cb995a6042acc1b936f7d45 Mon Sep 17 00:00:00 2001
From: Kristian Amlie <kristian.amlie@northern.tech>
Date: Wed, 20 Jul 2022 15:43:03 +0200
Subject: [PATCH] Enable credentials using browser obtained token and cookie.
Subject: [PATCH 1/2] Enable credentials using browser obtained token and
cookie.
The way it works is that you need two tokens from the browser.
Currently, getting them is inconvenient, but let's start with the
@ -161,28 +162,28 @@ index 6463da0..6415a46 100644
void slack_api_disconnect(SlackAccount *sa);
diff --git a/slack-auth.c b/slack-auth.c
index 5a41f76..d157ee5 100644
index b1422ae..62ffcbb 100644
--- a/slack-auth.c
+++ b/slack-auth.c
@@ -49,7 +49,7 @@ slack_auth_login_finduser_cb(SlackAccount *sa, gpointer user_data, json_value *j
/* now do the actual login */
@@ -37,7 +37,7 @@ slack_auth_login_signin_cb(SlackAccount *sa, gpointer user_data, json_value *jso
static void
slack_auth_login_user(SlackAccount *sa, const char *user_id) {
slack_login_step(sa);
- slack_api_get(sa, slack_auth_login_signin_cb,
+ slack_api_post(sa, slack_auth_login_signin_cb,
NULL, "auth.signin",
"user", user_id,
"password", purple_account_get_password(sa->account),
@@ -75,7 +75,7 @@ slack_auth_login_findteam_cb(SlackAccount *sa, gpointer user_data, json_value *j
@@ -81,7 +81,7 @@ slack_auth_login_findteam_cb(SlackAccount *sa, gpointer user_data, json_value *j
/* now validate that the user exists and get their ID. */
slack_login_step(sa);
- slack_api_get(sa, slack_auth_login_finduser_cb,
+ slack_api_post(sa, slack_auth_login_finduser_cb,
NULL, "auth.findUser",
"email", sa->email,
"team", sa->team.id,
@@ -86,7 +86,7 @@ slack_auth_login_findteam_cb(SlackAccount *sa, gpointer user_data, json_value *j
if (strchr(sa->email, '@'))
- slack_api_get(sa, slack_auth_login_finduser_cb,
+ slack_api_post(sa, slack_auth_login_finduser_cb,
NULL, "auth.findUser",
"email", sa->email,
"team", sa->team.id,
@@ -94,7 +94,7 @@ slack_auth_login_findteam_cb(SlackAccount *sa, gpointer user_data, json_value *j
void
slack_auth_login(SlackAccount *sa) {
/* validate the team and get it's ID */
@ -192,10 +193,10 @@ index 5a41f76..d157ee5 100644
"domain", sa->host,
NULL);
diff --git a/slack-blist.c b/slack-blist.c
index be5c7ba..2756aef 100644
index 5f7612d..b039a48 100644
--- a/slack-blist.c
+++ b/slack-blist.c
@@ -140,7 +140,7 @@ struct roomlist_expand {
@@ -145,7 +145,7 @@ struct roomlist_expand {
};
#define ROOMLIST_CALL(sa, expand, ARGS...) \
@ -297,10 +298,10 @@ index 1a84e1f..d4ee8f2 100644
+ slack_api_post(sa, rtm_connect_cb, NULL, "rtm.connect", "batch_presence_aware", "1", "presence_sub", "true", NULL);
}
diff --git a/slack-thread.c b/slack-thread.c
index 75e2b9d..bf5ae00 100644
index ae86996..714781c 100644
--- a/slack-thread.c
+++ b/slack-thread.c
@@ -225,7 +225,7 @@ static void slack_thread_lookup_ts(SlackAccount *sa, slack_thread_lookup_ts_cb *
@@ -251,7 +251,7 @@ static void slack_thread_lookup_ts(SlackAccount *sa, slack_thread_lookup_ts_cb *
lookup->rest = g_strdup(rest);
const char *id = slack_conversation_id(conv);
@ -350,7 +351,7 @@ index 88292b4..3b3d151 100644
static void avatar_load_next(SlackAccount *sa);
diff --git a/slack.c b/slack.c
index 709baf6..5b8259a 100644
index 5b61b39..0cbcd38 100644
--- a/slack.c
+++ b/slack.c
@@ -282,14 +282,35 @@ static void slack_login(PurpleAccount *account) {
@ -411,3 +412,75 @@ index 2f6454e..490722a 100644
short login_step;
GQueue api_calls; /* SlackAPICall */
From 256c0ec77e27c0f7d333502eb2cbe82b1e4a1a91 Mon Sep 17 00:00:00 2001
From: Kristian Amlie <kristian.amlie@northern.tech>
Date: Tue, 19 Sep 2023 07:55:58 +0200
Subject: [PATCH 2/2] Start sending d-cookie in WebSocket requests.
Started being required by Slack around 2023-09-19.
Signed-off-by: Kristian Amlie <kristian.amlie@northern.tech>
---
purple-websocket.c | 5 +++--
purple-websocket.h | 2 +-
slack-rtm.c | 9 ++++++++-
3 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/purple-websocket.c b/purple-websocket.c
index 55eb371..07821c4 100644
--- a/purple-websocket.c
+++ b/purple-websocket.c
@@ -463,7 +463,7 @@ static void ws_connect_cb(gpointer data, gint source, const gchar *error_message
}
PurpleWebsocket *purple_websocket_connect(PurpleAccount *account,
- const char *url, const char *protocol,
+ const char *url, const char *protocol, const char *cookies,
PurpleWebsocketCallback callback, void *user_data) {
gboolean ssl = FALSE;
@@ -510,9 +510,10 @@ PurpleWebsocket *purple_websocket_connect(PurpleAccount *account,
GET /%s HTTP/1.1\r\n\
Host: %s\r\n\
Connection: Upgrade\r\n\
+Cookie: %s\r\n\
Upgrade: websocket\r\n\
Sec-WebSocket-Key: %s\r\n\
-Sec-WebSocket-Version: 13\r\n", path, host, ws->key);
+Sec-WebSocket-Version: 13\r\n", path, host, cookies, ws->key);
if (protocol)
g_string_append_printf(request, "Sec-WebSocket-Protocol: %s\r\n", protocol);
g_string_append(request, "\r\n");
diff --git a/purple-websocket.h b/purple-websocket.h
index 0416750..0f3eae0 100644
--- a/purple-websocket.h
+++ b/purple-websocket.h
@@ -17,7 +17,7 @@ typedef enum _PurpleWebsocketOp {
typedef void (*PurpleWebsocketCallback)(PurpleWebsocket *ws, gpointer user_data, PurpleWebsocketOp op, const guchar *msg, size_t len);
-PurpleWebsocket *purple_websocket_connect(PurpleAccount *account, const char *url, const char *protocol, PurpleWebsocketCallback callback, void *user_data);
+PurpleWebsocket *purple_websocket_connect(PurpleAccount *account, const char *url, const char *protocol, const char *cookies, PurpleWebsocketCallback callback, void *user_data);
void purple_websocket_send(PurpleWebsocket *ws, PurpleWebsocketOp op, const guchar *msg, size_t len);
void purple_websocket_abort(PurpleWebsocket *ws);
diff --git a/slack-rtm.c b/slack-rtm.c
index d4ee8f2..f79b9e2 100644
--- a/slack-rtm.c
+++ b/slack-rtm.c
@@ -187,8 +187,13 @@ static gboolean rtm_connect_cb(SlackAccount *sa, gpointer data, json_value *json
slack_blist_init(sa);
slack_login_step(sa);
+
+ gchar *cookie = g_strdup_printf("d=%s", sa->d_cookie ? sa->d_cookie : "");
+
purple_debug_info("slack", "RTM URL: %s\n", url);
- sa->rtm = purple_websocket_connect(sa->account, url, NULL, rtm_cb, sa);
+ sa->rtm = purple_websocket_connect(sa->account, url, NULL, cookie, rtm_cb, sa);
+
+ free(cookie);
sa->ping_timer = purple_timeout_add_seconds(60, ping_timer, sa);
return FALSE;

View file

@ -1,12 +1,12 @@
self: super: {
purple-slack = super.purple-slack.overrideAttrs(old: {
version = "2023-01-19";
version = "2023-05-15";
src = super.fetchFromGitHub {
owner = "dylex";
repo = "slack-libpurple";
rev = "6778b7c7ae28d9b62339262245c8ca7d11fb5a16";
sha256 = "sha256-smv2/bHLD5OJyUZhvgzqqzYO6NVWAY6d0dLamiXIEm4=";
rev = "1cfcf6694c0813d9362d31291e48b54fea1318b2";
sha256 = "ri6qFgWMVGQUse0A+q3VjvixoUC0zqCSMNw+vEIfgxI=";
};
# Further ideas to add: