101 lines
2.2 KiB
Bash
101 lines
2.2 KiB
Bash
#! /bin/bash
|
|
|
|
notea() (
|
|
ncurl() {
|
|
curl -sS "$@"
|
|
}
|
|
|
|
ids() {
|
|
for id in $(_tree_ids); do
|
|
if ! _is_deleted $id; then
|
|
echo $id
|
|
fi
|
|
done
|
|
}
|
|
|
|
meta() {
|
|
local cache_key="notea cache meta $1"
|
|
if cache get "$cache_key"; then
|
|
return 0
|
|
fi
|
|
_meta "$@" | cache put "$cache_key"
|
|
}
|
|
|
|
_meta() {
|
|
ncurl $NOTEA_ADDR/api/notes/$1/meta
|
|
}
|
|
|
|
_is_deleted() {
|
|
local id="$1"
|
|
if [ "$id" == "root" ] || [ "$id" == "null" ]; then
|
|
return 1
|
|
fi
|
|
local meta="$(meta "$id")"
|
|
if echo "$meta" | jq .deleted | grep -q 1; then
|
|
return 0
|
|
fi
|
|
local pid="$(echo "$meta" | jq -r .pid)"
|
|
if [ -z "$pid" ]; then
|
|
return 0
|
|
fi
|
|
_is_deleted "$pid"
|
|
}
|
|
|
|
_tree_ids() {
|
|
ncurl $NOTEA_ADDR/api/tree \
|
|
| jq '.items | to_entries[].value.id' \
|
|
| grep -v '^null$' \
|
|
| jq -r . \
|
|
| grep -v '^root$'
|
|
}
|
|
|
|
get() {
|
|
local cache_key="notea cache $1"
|
|
if cache get "$cache_key"; then
|
|
return 0
|
|
fi
|
|
_get "$@" | cache put "$cache_key"
|
|
}
|
|
|
|
_get() {
|
|
ncurl $NOTEA_ADDR/api/notes/$1
|
|
}
|
|
|
|
put() {
|
|
set -u
|
|
local ret=0
|
|
if ! _put "$@"; then
|
|
ret=1
|
|
fi
|
|
set +u
|
|
return $ret
|
|
}
|
|
|
|
_put() {
|
|
local xsrf_key="xsrf-token"
|
|
local contains_tokens="$(ncurl -i $NOTEA_ADDR/api)"
|
|
local xsrf_token="$(echo "$contains_tokens" | grep -o '"csrfToken":[^,]*' | tr ':' '\n' | jq -r . | tail -n 1)"
|
|
local xsrf_cookie="$(echo "$contains_tokens" | grep ^set.cookie: | sed 's/^set.cookie: //' | tr ';' '\n' | head -n 1)"
|
|
local request="$(echo '{
|
|
"content": '"$(printf "%s\n" "$CONTENT" | jq -Rs)"',
|
|
"deleted": 0,
|
|
"id": '"$(echo "$ID" | jq -R)"',
|
|
"pid": '"$(echo "$PID" | jq -R)"',
|
|
"pinned": 0,
|
|
"shared": 0,
|
|
"title": '"$(echo "$TITLE [generated]" | jq -R)"'
|
|
}' | jq -c .)"
|
|
echo "$request" | ncurl \
|
|
-X POST \
|
|
-H "$xsrf_key: $xsrf_token" \
|
|
-b "$xsrf_cookie" \
|
|
-H "Content-Type: application/json" \
|
|
-d @- \
|
|
$NOTEA_ADDR/api/notes \
|
|
| grep -q "$ID"
|
|
}
|
|
|
|
"$@"
|
|
)
|
|
|