From b0674d5fc925ab90c4bea072b0986a43be2471ef Mon Sep 17 00:00:00 2001 From: =?utf8?q?Paul=20H=C3=A4nsch?= Date: Wed, 18 Nov 2020 22:52:24 +0100 Subject: [PATCH] improved nick handling, allow disabling registration --- index.cgi | 10 ++++++++-- usernick.sh | 25 ++++++++++++++++++++----- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/index.cgi b/index.cgi index ff9e563..ac9a110 100755 --- a/index.cgi +++ b/index.cgi @@ -12,6 +12,12 @@ LOCATION="$(PATH "$PATH_INFO")" LOCATION="${LOCATION#/}" LOCATION="${LOCATION%%/*}" +NICK_REGISTRATION="${NICK_REGISTRATION:-on}" + +# ToDo: +# COOKIE_NICK_EXPIRE=$((86400 * 14)) +# REGEISTERED_NICK_EXPIRE=$((86400 * 365)) + yield_page(){ page="$1" printf '%s\r\n' 'Content-Type: text/html; charset=utf-8' \ @@ -42,9 +48,9 @@ settings_menu(){ fi printf ' [a .section href="#nick" Nickname] - [div #nick [input name="nickname" value="%s"][submit "action" "nick" Set Cookie]] + [div #nick [input name="nickname" placeholder="%s"][submit "action" "nick" Set Cookie]] ' "$(HTML "${nickname#\?}")" - printf ' + [ "$NICK_REGISTRATION" = on -a "$nickname" != '?Guest' ] && printf ' [a .section href="#register" Register Nickname] [div #register [p Registration will set a permanent Cookie in your Browser. diff --git a/usernick.sh b/usernick.sh index 3880fbe..13759ee 100755 --- a/usernick.sh +++ b/usernick.sh @@ -36,6 +36,8 @@ else 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 @@ -43,17 +45,30 @@ 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 - export ERROR=".nick This nickname has already been registered elsewhere" + 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)" @@ -61,7 +76,7 @@ case $(POST action) in SET_COOKIE +"$((86400 * 365))" "nick=$(URL "${regnick}")" REDIRECT "$(URL "/$LOCATION")" else - export ERROR=".register This nickname has already been registered elsewhere" + export ERROR=".register Registration failed, possibly due to faulty server configuration." fi ;; esac -- 2.39.2