# Remove trailing CR, which may have been added by browser
s;\r$;;;
# Collapse white spaces
- s;[\r\t\n ]+; ;;
+ s;[\r\t\n ]+; ;g;
# Remove starting and trailing white spaces
s;^ ;;; s; $;;;
# Usernames starting with & # ? @ + will be invalid
SET_COOKIE +"$((86400 * 365))" "user_client=${clientid}" HttpOnly
SET_COOKIE +"$((86400 * 365))" "nick=$(URL "${nickname}")"
else
+ export ERROR=".nick Your current nickname has been registered elsewhere."
+ QUERY_STRING=settings
nickname='?Guest'
fi
fi
case $(POST action) in
nick)
nick="$(POST nickname |username)"
- if [ ! -d "$_DATA/@$nick" ]; then
- SET_COOKIE +1209600 "nick=$(POST nickname |URL)"
+ if [ -d "$_DATA/@$nick" ]; then
+ export ERROR=".nick This nickname has already been registered elsewhere."
+ elif [ -z "$(POST nickname)" ]; then
+ SET_COOKIE +1209600 "nick=$(URL "${nickname#\?}")"
REDIRECT "$(URL "/$LOCATION")"
+ elif [ -z "$nick" ]; then
+ export ERROR='.nick Nicknames must be between 3 and 24 characters long. They may not start with "&", "#", "?", "@", or "+" and they must not contain a "/".'
else
- # ToDo: Return Error Message
- REDIRECT "$(URL "/$LOCATION")?settings#nick"
+ SET_COOKIE +1209600 "nick=$(URL $nick)"
+ REDIRECT "$(URL "/$LOCATION")"
fi
;;
register)
regnick="$(POST regnick |username)"
userdir="$_DATA/@${regnick}"
- if [ "$regnick" ] && mkdir "$userdir"; then
+ if [ "$NICK_REGISTRATION" != on ]; then
+ export ERROR='.register Nickname registration is disabled on this server.'
+ elif [ "$regnick" = Guest ]; then
+ export ERROR='.register The name "Guest" may not be registered as a permanent nickname.'
+ elif [ -z "$regnick" ]; then
+ export ERROR='.register Nicknames must be between 3 and 24 characters long. They may not start with "&", "#", "?", "@", or "+" and they must not contain a "/".'
+ elif [ -d "$userdir" ]; then
+ export ERROR=".register This nickname has already been registered elsewhere."
+ elif mkdir "$userdir"; then
secuid="$(randomid)"; clientid="$(randomid)"
printf %s\\n "$secuid" >"${userdir}/secuid"
clientid="${clientid}-$(printf '%s%s' "${clientid}" "${secuid}" |sha256sum |cut -d\ -f1)"
SET_COOKIE +"$((86400 * 365))" "nick=$(URL "${regnick}")"
REDIRECT "$(URL "/$LOCATION")"
else
- # ToDo: Return Error Message
- REDIRECT "$(URL "/$LOCATION")?settings#register"
+ export ERROR=".register Registration failed, possibly due to faulty server configuration."
fi
;;
esac