Update lib/main.sh and process_event from pbot-ng, remove issue_tracker_change_detector, to fix hyperbot vunerability
This commit is contained in:
parent
7eb1df0ef4
commit
5ac26dc829
@ -1,94 +0,0 @@
|
|||||||
#! /bin/bash
|
|
||||||
|
|
||||||
while true
|
|
||||||
do
|
|
||||||
source common_codez
|
|
||||||
|
|
||||||
log_file=bug_sums
|
|
||||||
|
|
||||||
temp_file=$( mktemp )
|
|
||||||
|
|
||||||
temp_changes=$( mktemp )
|
|
||||||
|
|
||||||
changes="/tmp/un-provoked-message-store"
|
|
||||||
|
|
||||||
for url in $( curl --compressed "https://issues.hyperbola.info/bugs/issue?@pagesize=99999" 2> /dev/null | grep -E 'href="issue[[:digit:]]+' | cut -d '"' -f 2 )
|
|
||||||
do
|
|
||||||
tfile="$( mktemp )"
|
|
||||||
|
|
||||||
try_count=1
|
|
||||||
|
|
||||||
# Get the URL and make sure it's not empty.
|
|
||||||
until curl --compressed "https://issues.hyperbola.info/bugs/${url}" > "${tfile}" 2> /dev/null && (( $( wc -l "${tfile}" 2> /dev/null | cut -d ' ' -f 1 ) ))
|
|
||||||
do
|
|
||||||
# The time we sleep doubles each time up to a maximum of 512
|
|
||||||
# seconds, before restarting the entire script.
|
|
||||||
sleep "${try_count}"
|
|
||||||
|
|
||||||
if (( try_count < 512 ))
|
|
||||||
then
|
|
||||||
try_count=$(( try_count * 2 ))
|
|
||||||
else
|
|
||||||
continue 2
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "${url} $( md5sum < ${tfile} | cut -d ' ' -f 1 )" >> "${temp_file}"
|
|
||||||
|
|
||||||
rm "${tfile}"
|
|
||||||
done
|
|
||||||
|
|
||||||
# Check that the log file is not empty as a sanity check. TODO record WHEN
|
|
||||||
# it last checked the bug tracker for changes so we can also check if it was
|
|
||||||
# too long ago.
|
|
||||||
if (( $( wc -l "${log_file}" 2> /dev/null | cut -d ' ' -f 1 ) ))
|
|
||||||
then
|
|
||||||
cat "${temp_file}" |
|
|
||||||
while read -r line
|
|
||||||
do
|
|
||||||
bug_number="${line%% *}"
|
|
||||||
# If this bug is not in the log file then it must be new.
|
|
||||||
if { ! grep "${bug_number}" "${log_file}" > /dev/null ; }
|
|
||||||
then
|
|
||||||
tdir="$( mktemp -d )"
|
|
||||||
curl --compressed "https://issues.hyperbola.info/bugs/${bug_number}" 2> /dev/null | csplit -f "${tdir}/xx" - '%<title>%1'
|
|
||||||
bug_title=$( head -1 ${tdir}/xx* | replace_wierd_html_chars )
|
|
||||||
cat ${tdir}/xx* | csplit -f "${tdir}/gg" - '%<th class="required">Priority</th>%1'
|
|
||||||
priority=$( head -1 ${tdir}/gg* )
|
|
||||||
priority=${priority#*>}
|
|
||||||
priority=${priority%<*}
|
|
||||||
rm -r "${tdir}"
|
|
||||||
echo "${bug_number} created: https://issues.hyperbola.info/bugs/${bug_number} (${bug_title% - Hyperbola\'s issue tracker} [${priority}])" >> "${temp_changes}"
|
|
||||||
# It is in the log file so now we check if the entire line is there,
|
|
||||||
# because if it's not then the md5sum must have changed.
|
|
||||||
elif { ! grep "${line}" "${log_file}" > /dev/null ; }
|
|
||||||
then
|
|
||||||
tdir="$( mktemp -d )"
|
|
||||||
curl --compressed "https://issues.hyperbola.info/bugs/${bug_number}" 2> /dev/null | csplit -f "${tdir}/xx" - '%<title>%1'
|
|
||||||
bug_title=$( head -1 ${tdir}/xx* | replace_wierd_html_chars )
|
|
||||||
cat ${tdir}/xx* | csplit -f "${tdir}/gg" - '%<th class="required">Priority</th>%1'
|
|
||||||
priority=$( head -1 ${tdir}/gg* )
|
|
||||||
priority=${priority#*>}
|
|
||||||
priority=${priority%<*}
|
|
||||||
rm -r "${tdir}"
|
|
||||||
echo "${bug_number} changed: https://issues.hyperbola.info/bugs/${bug_number} (${bug_title% - Hyperbola\'s issue tracker} [${priority}])" >> "${temp_changes}"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
if (( $( wc -l "${temp_changes}" 2> /dev/null | cut -d ' ' -f 1 ) > 12 ))
|
|
||||||
then
|
|
||||||
echo "More than 12 changes have been detected on the bug tracker. Ignoring." >> "${changes}"
|
|
||||||
else
|
|
||||||
while read line
|
|
||||||
do
|
|
||||||
echo "${line}" >> "${changes}"
|
|
||||||
done < "${temp_changes}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
mv "${temp_file}" "${log_file}"
|
|
||||||
|
|
||||||
rm -f "${temp_changes}"
|
|
||||||
|
|
||||||
sleep 5m
|
|
||||||
done
|
|
21
lib/main.sh
21
lib/main.sh
@ -439,17 +439,7 @@ while true; do
|
|||||||
# Check if there is a command.
|
# Check if there is a command.
|
||||||
commands_call_command "$sender" "$target" "$query"
|
commands_call_command "$sender" "$target" "$query"
|
||||||
|
|
||||||
################################################################################
|
# What happens next is important
|
||||||
################################################################################
|
|
||||||
|
|
||||||
# Hack of all hacks!!!
|
|
||||||
|
|
||||||
# if [[ "${identified}" != yep ]]
|
|
||||||
# then
|
|
||||||
# send_msg "NickServ" "identify csukwHrqH9"
|
|
||||||
# identified=yep
|
|
||||||
# fi
|
|
||||||
|
|
||||||
config_update_time=-100
|
config_update_time=-100
|
||||||
|
|
||||||
time_n0w=$( date +%s )
|
time_n0w=$( date +%s )
|
||||||
@ -457,14 +447,11 @@ time_n0w=$( date +%s )
|
|||||||
# If it's been more than a minute since we updated the config.
|
# If it's been more than a minute since we updated the config.
|
||||||
if (( ( time_n0w - 60 ) > config_update_time ))
|
if (( ( time_n0w - 60 ) > config_update_time ))
|
||||||
then
|
then
|
||||||
source hack_of_all_hacks
|
source process_event
|
||||||
config_update_time=${time_n0w}
|
config_update_time=${time_n0w}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
l33t_codes
|
process_event
|
||||||
|
|
||||||
################################################################################
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
# Check return code
|
# Check return code
|
||||||
case $? in
|
case $? in
|
||||||
@ -566,7 +553,7 @@ l33t_codes
|
|||||||
|
|
||||||
if (( yepyep ))
|
if (( yepyep ))
|
||||||
then
|
then
|
||||||
if (( $(wc -l hack_of_all_hacks | cut -d ' ' -f 1) > 1 ))
|
if (( $(wc -l "announcements/people/${personoslashlower}/messages" | cut -d ' ' -f 1) > 1 ))
|
||||||
then
|
then
|
||||||
send_msg "${channel}" "${personoslash}: you have messages, type something to see them."
|
send_msg "${channel}" "${personoslash}: you have messages, type something to see them."
|
||||||
else
|
else
|
||||||
|
@ -62,7 +62,7 @@ function forget_fact
|
|||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
function l33t_codes
|
function process_event
|
||||||
{
|
{
|
||||||
my_own_name='hyperbot'
|
my_own_name='hyperbot'
|
||||||
|
|
||||||
@ -400,30 +400,42 @@ ${my_own_name}: when did you last see Jill?
|
|||||||
${my_own_name}: lemon is yummy
|
${my_own_name}: lemon is yummy
|
||||||
${my_own_name}: lemon isn't yummy
|
${my_own_name}: lemon isn't yummy
|
||||||
,lemon
|
,lemon
|
||||||
,tell jack about foo
|
|
||||||
EOF
|
EOF
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# ' this comment fixes a bug in emacs shell-script-mode that messes up the syntax highlighting
|
# ' this comment fixes a bug in emacs shell-script-mode that messes up the syntax highlighting
|
||||||
|
|
||||||
|
# I'm dissabling this feature for now as it was being abused
|
||||||
|
# and would need an overhaul to be abuse-proof + nobody uses it afaik
|
||||||
# ##########################
|
# ##########################
|
||||||
# answer nicks over query #
|
# # tell someone something #
|
||||||
# ##########################
|
# ##########################
|
||||||
|
|
||||||
if [[ "${line}" =~ ,tell\ [^\ ]+\ about\ [^\ ]+ ]]
|
# # TODO: this should be in the case statement
|
||||||
then
|
|
||||||
gotit="${BASH_REMATCH}" # will be like: `,tell jack about blah'
|
|
||||||
|
|
||||||
dudep1="${gotit#,tell }"
|
# if [[ "${sentence}" =~ ${my_own_name}: tell\ [^\ ]+\ about\ [^\ ]+ ]]
|
||||||
dude="${dudep1%% *}"
|
# then
|
||||||
thing="${gotit##* }"
|
# # TODO: There should be the following three constraints to
|
||||||
|
# # prevent abuse.
|
||||||
|
# # 1. People may only ask the bot to tell someone about
|
||||||
|
# # something in the #hyperbola channel, not by query.
|
||||||
|
# # 2. hyperbot will only tell someone something if they're a user
|
||||||
|
# # he has seen in the past week
|
||||||
|
# # 3. each person may use tell no more than 10 times in
|
||||||
|
# # three hours.
|
||||||
|
|
||||||
if [[ -n "${dude}" ]] && [[ -n "${thing}" ]]
|
# gotit="${BASH_REMATCH}" # will be like: `,tell jack about blah'
|
||||||
then
|
|
||||||
tell_fact "${thing}" "${dude}" || send_msg "${channel_it_came_from}" "${personoslash}: Error, failed to tell ${dude} about ${thing}"
|
# dudep1="${gotit#,tell }"
|
||||||
fi
|
# dude="${dudep1%% *}"
|
||||||
fi
|
# thing="${gotit##* }"
|
||||||
|
|
||||||
|
# if [[ -n "${dude}" ]] && [[ -n "${thing}" ]]
|
||||||
|
# then
|
||||||
|
# tell_fact "${thing}" "${dude}" || send_msg "${channel_it_came_from}" "${personoslash}: Error, failed to tell ${dude} about ${thing}"
|
||||||
|
# fi
|
||||||
|
# fi
|
||||||
|
|
||||||
# TODO: add a birthday announcement feature, cointoss feature, timer
|
# TODO: add a birthday announcement feature, cointoss feature, timer
|
||||||
# feature.
|
# feature.
|
Loading…
x
Reference in New Issue
Block a user