Find out how socket.io works in order to edit notes.
- Dominant language
- Shell
- Stars
- 166
- Forks
- 40
- PR merge metrics
- No merged PRs in 30d
Description
I'm trying to figure out how to edit a note directly from the command line, unfortunately I can't delete text successfully.
So I leave here what I found, and if someone can make it work, it would be a great addition to this client.
First of all, let's authentificate cf #9. (Idk if it's necessary)
```bash
codimd login --email user@email.com password
```
Then, connecting to the socket.
```bash
NOTEID=3_jUrZCYRTOtcEAJG6Oywg
# The socket url
URL=$CODIMD_SERVER/socket.io/?noteId=$NOTEID\&EIO=3\&transport=polling
# get the 'io' token
curl -c /tmp/codimd-cookies.txt \
-b /tmp/codimd-cookies.txt \
$URL\&t=$(python yeast.py) \
&> /dev/null
```
Then, all messages must be passed to `$SERVER/socket.io/?noteId=$NOTEID&EIO=3&transport=polling&t=$(python yeast.py)&sid\=$TOKEN`, TOKEN is the token we just picked up.
To do so:
```bash
TOKEN=$(cat /tmp/codimd-cookies.txt | grep io | awk '{print $7}')
curl -b /tmp/codimd-cookies.txt \
$URL\&t\=$(python yeast.py)\&sid\=$TOKEN \
-H "Content-Type: text/plain;charset=UTF-8" \
-d @msg_0
```
This will send the data from the file `msg_0` to the socket.
As an example, on a fresh new note:
```bash
#!/bin/bash
SERVER=https://xxxxxxxxxxxxxx
NOTEID=xxxxxxxxxxxxxxxxxxxxxx
URL=$SERVER/socket.io/?noteId=$NOTEID\&EIO=3\&transport=polling
curl -c /tmp/codimd-cookies.txt \
-b /tmp/codimd-cookies.txt \
$URL\&t=$(python yeast.py) \
&> /dev/null
TOKEN=$(cat /tmp/codimd-cookies.txt | grep io | awk '{print $7}')
curl -b /tmp/codimd-cookies.txt \
$URL\&t\=$(python yeast.py)\&sid\=$TOKEN \
-H "Content-Type: text/plain;charset=UTF-8" \
-d @msg_4
```
With msg_4 containing `61:42["operation",0,["test"],{"ranges":[{"anchor":4,"head":4}]}]`

Then, by analyzing the different possible messages I think the format is as follows:
`$1:42["operation",$2,["$3",$4],{"ranges":[{"anchor":$5,"head":$5}]}]`
- $1 is the len of the message after `:`
- $2 is the number of the operation (starts at 0, then must be increased by one at each request)
- $3 is the text that you want to add (optional)
- $4 is the number of chars to remove (optional)
- $5 is the location of the modification
For example:
- Add test to the note
- `61:42["operation",0,["test"],{"ranges":[{"anchor":4,"head":4}]}]`
- Remove test and replace it by 01234
- `65:42["operation",0,["01234",-4],{"ranges":[{"anchor":5,"head":5}]}]`
- Remove the last char
- `59:42["operation",0,[4,-1],{"ranges":[{"anchor":4,"head":4}]}]`
This payloads are working when I'm inspecting the network on my browser, but I can't reproduce it (text deletion) by using curl. Even if the socket returns `ok` to me every time.
I hope I can help, if someone can figure out how to do it.
This is the last thing before being able to edit notes from codimd-cli.
PS: [here](https://gist.github.com/Fumesover/3e5c5529a493635126a264878c2a1fa0) you can find the source file
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.