Last active
January 21, 2024 01:40
-
-
Save bpirkle/add6448c1a9dd6795cfb2ed09ef9139c to your computer and use it in GitHub Desktop.
Example MediaWiki login script, based on https://gist.github.com/AaronSchulz/a859b366701beb7ea2419d7117f1cdff by AaronSchulz but customized for Reading Lists
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
SITE_URL=$1 | |
USER_NAME=$2 | |
COOKIE_PREFIX=$3 | |
if [[ -z "$SITE_URL" || -z "$USER_NAME" || -z "$COOKIE_PREFIX" ]]; then | |
echo "wiki_login <api.php url> <username> <site cookie prefix>" | |
echo "e.g. wiki_login https://localhost/core aaron my_wiki" | |
exit 1 | |
fi | |
API_URL="${SITE_URL}/api.php" | |
REST_URL="${SITE_URL}/rest.php" | |
echo "Getting (logged-out) session cookies and corresponding CSRF token..." | |
curl -s -i --insecure -a "${API_URL}?action=query&meta=tokens&type=login&format=json" | grep --color=always -e "^" -e "logintoken" -e "${COOKIE_PREFIX}_session" | |
echo | |
read -p "Enter ${COOKIE_PREFIX}_session from response cookies: " WEB_SESSION | |
read -p "Enter logintoken from response body (include backslashes): " LOGIN_TOKEN | |
echo "Checking if (logged-out) session persists (no set-cookie header should appear below)..." | |
curl -s -i --insecure -b "${COOKIE_PREFIX}_session=${WEB_SESSION}" -a "${API_URL}?action=query&meta=siteinfo&siprop=dbrepllag&sishowalldb=&format=json" | grep --color=always -e "set-cookie:" | |
echo | |
echo "...(no set-cookie header for ${COOKIE_PREFIX}_session should appear above)" | |
read -s -p "Enter user password: " USER_PASS | |
echo | |
echo "Getting (logged-in) session cookies via login..." | |
curl -s -i --insecure -b "${COOKIE_PREFIX}_session=${WEB_SESSION}" -X POST -H "content-type: application/x-www-form-urlencoded" -a "${API_URL}?action=clientlogin&format=json" --data-urlencode "username=${USER_NAME}" --data-urlencode "password=${USER_PASS}" --data-urlencode "logintoken=${LOGIN_TOKEN}" --data-urlencode "loginreturnurl=https://localhost/no_client_site_needed.php" | grep --color=always -e "^" -e "${COOKIE_PREFIX}_session" -e "${COOKIE_PREFIX}UserID" -e "${COOKIE_PREFIX}UserName" | |
echo | |
echo "...(a set-cookie header for session, UserID, and UserName should appear above)" | |
echo | |
read -p "Enter ${COOKIE_PREFIX}_session from response cookies: " WEB_SESSION | |
read -p "Enter ${COOKIE_PREFIX}UserID from response cookies: " WEB_SESSION_USERID | |
read -p "Enter ${COOKIE_PREFIX}UserName from response cookies: " WEB_SESSION_USERNAME | |
echo | |
# Test with api.php watchlistraw endpoint | |
echo "Getting logged-in user watchlist info..." | |
curl -s -i --insecure -b "${COOKIE_PREFIX}_session=${WEB_SESSION}" -b "${COOKIE_PREFIX}UserID=${WEB_SESSION_USERID}" -b "${COOKIE_PREFIX}UserName=${WEB_SESSION_USERNAME}" -a "${API_URL}?action=query&list=watchlistraw&format=json" | |
echo | |
echo "Getting (logged-in) session CRSF token..." | |
curl -s -i --insecure -b "${COOKIE_PREFIX}_session=${WEB_SESSION}" -b "${COOKIE_PREFIX}UserID=${WEB_SESSION_USERID}" -b "${COOKIE_PREFIX}UserName=${WEB_SESSION_USERNAME}" -a "${API_URL}?action=query&meta=tokens&type=csrf&format=json" | grep --color=always -e "^" -e "csrftoken" -e "${COOKIE_PREFIX}_session" | |
echo | |
read -p "Enter csrftoken from response (include slashes): " CSRF_TOKEN | |
echo | |
# Test with rest.php endpoint. Print the curl commands for easy manual reuse. | |
echo "Setting up Reading Lists..." | |
EMPTY_DATA="{\"token\":\"${CSRF_TOKEN}\\\"}" | |
LIST_DATA="{\"token\":\"${CSRF_TOKEN}\\\",\"name\":\"planets\",\"description\":\"planets of the solar system\"}" | |
#LIST_DATA="{\"token\":\"${CSRF_TOKEN}\\\",\"name\":\"PlanetsPlanetsPlanetsPlanetsPlanetsPlanetsPlanetsPlanetsPlanetsPlanetsPlanetsPlanetsPlanetsPlanetsPlanetsPlanetsPlanetsPlanetsPlanetsPlanetsPlanetsPlanetsPlanetsPlanetsPlanetsPlanetsPlanetsPlanetsPlanetsPlanetsPlanetsPlanetsPlanetsPlanetsPlanetsPlanetsPlanetsPlanetsPlanetsPlanetsPlanetsPlanets\",\"description\":\"Planets of the solar system\"}" | |
LIST_DATA_2="{\"token\":\"${CSRF_TOKEN}\\\",\"name\":\"Planets\",\"description\":\"Planets of the solar system\"}" | |
LIST_ENTRY_DATA="{\"token\":\"${CSRF_TOKEN}\\\",\"project\":\"http://default.mediawiki.mwdd.localhost/\",\"title\":\"Earth\"}" | |
set -x | |
# Ensure we are starting from a clean state. This will harmlessly fail if reading lists are not already set up for this user. | |
curl -s -i --insecure -X POST -b "${COOKIE_PREFIX}_session=${WEB_SESSION}" -b "${COOKIE_PREFIX}UserID=${WEB_SESSION_USERID}" -b "${COOKIE_PREFIX}UserName=${WEB_SESSION_USERNAME}" -a "${REST_URL}/readinglists/v0/teardown?csrf_token=${CSRF_TOKEN}\\" -H "Content-Type: application/json" --data "${EMPTY_DATA}" | |
echo | |
# Set up reading lists for this user. This will create a default list. | |
curl -s -i --insecure -X POST -b "${COOKIE_PREFIX}_session=${WEB_SESSION}" -b "${COOKIE_PREFIX}UserID=${WEB_SESSION_USERID}" -b "${COOKIE_PREFIX}UserName=${WEB_SESSION_USERNAME}" -a "${REST_URL}/readinglists/v0/setup?csrf_token=${CSRF_TOKEN}\\" -H "Content-Type: application/json" --data "${EMPTY_DATA}" | |
echo | |
# Retrieve the new default list | |
curl -s -i --insecure -b "${COOKIE_PREFIX}_session=${WEB_SESSION}" -b "${COOKIE_PREFIX}UserID=${WEB_SESSION_USERID}" -b "${COOKIE_PREFIX}UserName=${WEB_SESSION_USERNAME}" -a "${REST_URL}/readinglists/v0/lists" | |
echo | |
# Create a new non-default list | |
curl -s -i --insecure -X POST -b "${COOKIE_PREFIX}_session=${WEB_SESSION}" -b "${COOKIE_PREFIX}UserID=${WEB_SESSION_USERID}" -b "${COOKIE_PREFIX}UserName=${WEB_SESSION_USERNAME}" -a "${REST_URL}/readinglists/v0/lists?csrf_token=${CSRF_TOKEN}\\" -H "Content-Type: application/json" --data "${LIST_DATA}" | |
echo | |
read -p "Enter new list id from response JSON: " NEW_LIST_ID | |
# Modify the new non-default list | |
curl -s -i --insecure -X PUT -b "${COOKIE_PREFIX}_session=${WEB_SESSION}" -b "${COOKIE_PREFIX}UserID=${WEB_SESSION_USERID}" -b "${COOKIE_PREFIX}UserName=${WEB_SESSION_USERNAME}" -a "${REST_URL}/readinglists/v0/lists/${NEW_LIST_ID}?csrf_token=${CSRF_TOKEN}\\" -H "Content-Type: application/json" --data "${LIST_DATA_2}" | |
echo | |
# Retrieve both lists | |
curl -s -i --insecure -b "${COOKIE_PREFIX}_session=${WEB_SESSION}" -b "${COOKIE_PREFIX}UserID=${WEB_SESSION_USERID}" -b "${COOKIE_PREFIX}UserName=${WEB_SESSION_USERNAME}" -a "${REST_URL}/readinglists/v0/lists" | |
echo | |
# Retrieve lists with a limit of 1 | |
curl -s -i --insecure -b "${COOKIE_PREFIX}_session=${WEB_SESSION}" -b "${COOKIE_PREFIX}UserID=${WEB_SESSION_USERID}" -b "${COOKIE_PREFIX}UserName=${WEB_SESSION_USERNAME}" -a "${REST_URL}/readinglists/v0/lists?limit=1" | |
echo | |
# Add an entry to the non-default list | |
curl -s -i --insecure -X POST -b "${COOKIE_PREFIX}_session=${WEB_SESSION}" -b "${COOKIE_PREFIX}UserID=${WEB_SESSION_USERID}" -b "${COOKIE_PREFIX}UserName=${WEB_SESSION_USERNAME}" -a "${REST_URL}/readinglists/v0/lists/${NEW_LIST_ID}/entries?csrf_token=${CSRF_TOKEN}\\" -H "Content-Type: application/json" --data "${LIST_ENTRY_DATA}" | |
echo | |
# List the entry we just added | |
curl -s -i --insecure -b "${COOKIE_PREFIX}_session=${WEB_SESSION}" -b "${COOKIE_PREFIX}UserID=${WEB_SESSION_USERID}" -b "${COOKIE_PREFIX}UserName=${WEB_SESSION_USERNAME}" -a "${REST_URL}/readinglists/v0/lists/${NEW_LIST_ID}/entries" | |
echo | |
read -p "Enter new list entry id from response JSON: " NEW_LIST_ENTRY_ID | |
# Retrieve only lists containing pages by a specific title | |
curl -s -i --insecure -b "${COOKIE_PREFIX}_session=${WEB_SESSION}" -b "${COOKIE_PREFIX}UserID=${WEB_SESSION_USERID}" -b "${COOKIE_PREFIX}UserName=${WEB_SESSION_USERNAME}" -a "${REST_URL}/readinglists/v0/lists/pages/http%3A%2F%2Fdefault%2Emediawiki%2Emwdd%2Elocalhost%2F/Earth" | |
echo | |
# Retrieve only changes since a certain time (for this call, this should be all changes to both lists) | |
curl -s -i --insecure -b "${COOKIE_PREFIX}_session=${WEB_SESSION}" -b "${COOKIE_PREFIX}UserID=${WEB_SESSION_USERID}" -b "${COOKIE_PREFIX}UserName=${WEB_SESSION_USERNAME}" -a "${REST_URL}/readinglists/v0/lists/changes/since/2024-01-01T00%3A00%3A00Z" | |
echo | |
# Deletes the entry we just added | |
curl -s -i --insecure -X DELETE -b "${COOKIE_PREFIX}_session=${WEB_SESSION}" -b "${COOKIE_PREFIX}UserID=${WEB_SESSION_USERID}" -b "${COOKIE_PREFIX}UserName=${WEB_SESSION_USERNAME}" -a "${REST_URL}/readinglists/v0/lists/${NEW_LIST_ID}/entries/${NEW_LIST_ENTRY_ID}?csrf_token=${CSRF_TOKEN}\\" -H "Content-Type: application/json" --data "${EMPTY_DATA}" | |
echo | |
# Confirm the entry is gone | |
curl -s -i --insecure -b "${COOKIE_PREFIX}_session=${WEB_SESSION}" -b "${COOKIE_PREFIX}UserID=${WEB_SESSION_USERID}" -b "${COOKIE_PREFIX}UserName=${WEB_SESSION_USERNAME}" -a "${REST_URL}/readinglists/v0/lists/${NEW_LIST_ID}/entries" | |
echo | |
# Delete new non-default list | |
curl -s -i --insecure -X DELETE -b "${COOKIE_PREFIX}_session=${WEB_SESSION}" -b "${COOKIE_PREFIX}UserID=${WEB_SESSION_USERID}" -b "${COOKIE_PREFIX}UserName=${WEB_SESSION_USERNAME}" -a "${REST_URL}/readinglists/v0/lists/${NEW_LIST_ID}?csrf_token=${CSRF_TOKEN}\\" -H "Content-Type: application/json" --data "${EMPTY_DATA}" | |
echo | |
# Confirm the list is gone | |
curl -s -i --insecure -b "${COOKIE_PREFIX}_session=${WEB_SESSION}" -b "${COOKIE_PREFIX}UserID=${WEB_SESSION_USERID}" -b "${COOKIE_PREFIX}UserName=${WEB_SESSION_USERNAME}" -a "${REST_URL}/readinglists/v0/lists" | |
echo | |
# Tear down lists | |
curl -s -i --insecure -X POST -b "${COOKIE_PREFIX}_session=${WEB_SESSION}" -b "${COOKIE_PREFIX}UserID=${WEB_SESSION_USERID}" -b "${COOKIE_PREFIX}UserName=${WEB_SESSION_USERNAME}" -a "${REST_URL}/readinglists/v0/teardown?csrf_token=${CSRF_TOKEN}\\" -H "Content-Type: application/json" --data "${EMPTY_DATA}" | |
set +x | |
echo |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment