This is an old revision of the document!
root@server:~# cat /usr/local/bin/roundcube_monitor.sh
#!/usr/bin/env bash
set -euo pipefail
ROUND_URL="${1:-http://server.corp13.un/mail/}"
LOGIN="${2:-student}"
PASSWORD="${3:-password}"
TMP_DIR="$(mktemp -d)"
COOKIE_JAR="$TMP_DIR/cookies.txt"
LOGIN_PAGE="$TMP_DIR/login.html"
RESPONSE_PAGE="$TMP_DIR/response.html"
LOGOUT_PAGE="$TMP_DIR/logout.html"
cleanup() {
rm -rf "$TMP_DIR"
}
trap cleanup EXIT
extract_token() {
local file="$1"
grep -oP 'name="_token"\s+value="\K[^"]+' "$file" | head -n1 || true
}
echo "1) Открываю форму входа: $ROUND_URL"
curl -ksSL \
-c "$COOKIE_JAR" \
-b "$COOKIE_JAR" \
"$ROUND_URL" \
-o "$LOGIN_PAGE"
TOKEN="$(extract_token "$LOGIN_PAGE")"
if [[ -z "$TOKEN" ]]; then
echo "CRITICAL: не найден _token на странице логина"
exit 2
fi
echo "2) Найден CSRF token"
echo "3) Отправляю форму логина"
curl -ksSL \
-c "$COOKIE_JAR" \
-b "$COOKIE_JAR" \
-e "$ROUND_URL" \
-A "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124 Safari/537.36" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "_token=$TOKEN" \
--data-urlencode "_task=login" \
--data-urlencode "_action=login" \
--data-urlencode "_timezone=Europe/Moscow" \
--data-urlencode "_url=" \
--data-urlencode "_user=$LOGIN" \
--data-urlencode "_pass=$PASSWORD" \
"$ROUND_URL?_task=login" \
-o "$RESPONSE_PAGE"
if grep -qiE 'Invalid request|Invalid security token|request token' "$RESPONSE_PAGE"; then
echo "CRITICAL: ошибка CSRF/token при логине"
exit 2
fi
if grep -qiE 'login failed|authentication failed|invalid password|failed to login' "$RESPONSE_PAGE"; then
echo "CRITICAL: логин не выполнен"
exit 2
fi
if grep -qi '_task=mail' "$RESPONSE_PAGE" || grep -qi 'logout' "$RESPONSE_PAGE"; then
echo "OK: вход в Roundcube выполнен"
else
echo "WARNING: результат логина неоднозначен"
exit 1
fi
echo "4) Выполняю logout"
POST_LOGIN_TOKEN="$(extract_token "$RESPONSE_PAGE")"
if [[ -z "$POST_LOGIN_TOKEN" ]]; then
POST_LOGIN_TOKEN="$TOKEN"
fi
curl -ksSL \
-c "$COOKIE_JAR" \
-b "$COOKIE_JAR" \
-e "$ROUND_URL?_task=mail" \
"$ROUND_URL?_task=logout&_token=$POST_LOGIN_TOKEN" \
-o "$LOGOUT_PAGE"
if grep -qiE 'request check failed|invalid security token' "$LOGOUT_PAGE"; then
echo "CRITICAL: logout не выполнен, ошибка token"
exit 2
fi
if grep -qiE 'login' "$LOGOUT_PAGE" || grep -qi 'logged out' "$LOGOUT_PAGE" || grep -qi '_task=login' "$LOGOUT_PAGE"; then
echo "OK: logout выполнен"
exit 0
fi
echo "WARNING: logout отправлен, но результат неоднозначен"
exit 1
root@server:~# cat /usr/local/bin/mywall.sh
#!/bin/sh
for MY_T in $(w | grep pts | awk '{print $2}')
do
echo "$1" | jq > /dev/$MY_T
done