mirror of https://github.com/nostar/urfd.git
parent
cd30b7f771
commit
95e8c4d07a
@ -1,12 +1,7 @@
|
|||||||
*.o
|
*.o
|
||||||
*.d
|
*.d
|
||||||
.vscode
|
.vscode
|
||||||
reflector/urfd.blacklist
|
reflector/urfd.*
|
||||||
reflector/urfd.whitelist
|
urfd
|
||||||
reflector/urfd.interlink
|
|
||||||
reflector/urfd.terminal
|
|
||||||
configure.mk
|
|
||||||
wiresx/configure.php
|
|
||||||
urfd*
|
|
||||||
inicheck
|
inicheck
|
||||||
dbutil
|
dbutil
|
||||||
|
|||||||
@ -1,653 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
#
|
|
||||||
# Copyright (c) 2021 by Thomas A. Early N7TAE
|
|
||||||
#
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
CharCount () {
|
|
||||||
local haystack=$1
|
|
||||||
local test="\${haystack//[^$2]}"
|
|
||||||
eval local result=$test
|
|
||||||
return ${#result}
|
|
||||||
}
|
|
||||||
|
|
||||||
RemoveDupes () {
|
|
||||||
local -n s=$1
|
|
||||||
local i j
|
|
||||||
for (( i=0; i<${#s}-1; i++)); do
|
|
||||||
for (( j=$i+1; j<${#s}; j++)); do
|
|
||||||
if [[ ${s:$i:1} != "." ]]; then
|
|
||||||
if [[ ${s:$i:1} == ${s:$j:1} ]]; then
|
|
||||||
local l=$(($j + 1))
|
|
||||||
s="${s:0:$j}.${s:$l}"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
done
|
|
||||||
s=${s//.}
|
|
||||||
}
|
|
||||||
|
|
||||||
CheckModules () {
|
|
||||||
# only A through Z
|
|
||||||
modules=${1//[^A-Z]}
|
|
||||||
if (( ${#modules} < 1 )); then
|
|
||||||
unset modules
|
|
||||||
clear
|
|
||||||
echo "ERROR: You must specify at least one module, A to Z!"
|
|
||||||
echo
|
|
||||||
read -p "<Enter> to continue: " ans
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
RemoveDupes modules
|
|
||||||
tcmodules=${modules:0:1}
|
|
||||||
}
|
|
||||||
|
|
||||||
CheckTranscodedModules () {
|
|
||||||
local tc=${1//[^A-Z]}
|
|
||||||
local tcorig=$tc
|
|
||||||
if (( ${#tc} < 1 )); then
|
|
||||||
tcmodules=${modules:0:1}
|
|
||||||
clear
|
|
||||||
echo "ERROR: You must specify at least one module!"
|
|
||||||
echo "If you aren't using a transcoder, set the transcoder"
|
|
||||||
echo "address value to the default 'none'!"
|
|
||||||
echo
|
|
||||||
read -p "<Enter> to continue: " ans
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
RemoveDupes tc
|
|
||||||
|
|
||||||
local m=$modules_d
|
|
||||||
if [ ! -z ${modules+x} ]; then
|
|
||||||
m=$modules
|
|
||||||
fi
|
|
||||||
|
|
||||||
local i
|
|
||||||
for ((i=0; i<${#tc}; i++)); do
|
|
||||||
CharCount $m ${tc:$i:1}
|
|
||||||
local count=$?
|
|
||||||
if (( $count < 1 )); then
|
|
||||||
local j=$((i+1))
|
|
||||||
tc="${tc:0:$i}.${tc:$j}"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
tc=${tc//.}
|
|
||||||
|
|
||||||
if (( ${#tc} < 1 )); then
|
|
||||||
echo "ERROR: Module(s), '$tcorig', are not in the configure modules, '$m'!"
|
|
||||||
echo
|
|
||||||
read -p "<Enter> to continue: " ans
|
|
||||||
tcmodules=${modules:0:1}
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
tcmodules=$tc
|
|
||||||
}
|
|
||||||
|
|
||||||
SetBooleanValue ()
|
|
||||||
{
|
|
||||||
local dvname
|
|
||||||
local cv
|
|
||||||
if [ -z $2 ]; then
|
|
||||||
if [ -z ${!1+x} ]; then
|
|
||||||
if [[ "$1" == module_[abc]_* ]]; then
|
|
||||||
echo matches
|
|
||||||
dvname=${1//_[abc]_/_x_}
|
|
||||||
else
|
|
||||||
echo does not match
|
|
||||||
dvname=${1}_d
|
|
||||||
fi
|
|
||||||
cv=${!dvname}
|
|
||||||
else
|
|
||||||
cv=${!1}
|
|
||||||
fi
|
|
||||||
if [[ $cv == [tT]* ]]; then
|
|
||||||
eval ${1}=false
|
|
||||||
else
|
|
||||||
eval ${1}=true
|
|
||||||
fi
|
|
||||||
elif [[ "$2" == [tT]* ]]; then
|
|
||||||
eval ${1}=true
|
|
||||||
else
|
|
||||||
eval ${1}=false
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
EvaluateVar ()
|
|
||||||
{
|
|
||||||
if [ -z ${!1+x} ]; then
|
|
||||||
if [ -z "${!2}" ]; then
|
|
||||||
echo "'' <DEFAULT>"
|
|
||||||
else
|
|
||||||
echo "${!2} <DEFAULT>"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
if [ -z "${!1}" ]; then
|
|
||||||
echo "''"
|
|
||||||
else
|
|
||||||
echo "${!1}"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
TestGainValue ()
|
|
||||||
{
|
|
||||||
if [[ "$1" =~ ^[-]?[0-9]+$ ]]; then
|
|
||||||
if (( $1 >= -24 && $1 <= 24 )); then
|
|
||||||
return 0
|
|
||||||
else
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
AudioGainMenu ()
|
|
||||||
{
|
|
||||||
while [[ "$key" != q* ]]
|
|
||||||
do
|
|
||||||
clear
|
|
||||||
echo
|
|
||||||
echo " DVSI AMBE Chip Audio Gain Menu"
|
|
||||||
echo
|
|
||||||
echo " All values are in dB and can be from -24 to 24"
|
|
||||||
echo " 'input' means the audio amplitude is adjusted before encoding"
|
|
||||||
echo " 'output' means the audio amplitude is adjusted after decoding"
|
|
||||||
echo
|
|
||||||
echo " Non-zero values are generally not required!"
|
|
||||||
echo " USE AT YOUR OWN RISK!"
|
|
||||||
echo
|
|
||||||
echo -n "si : D-Star audio input = "; EvaluateVar dstar_in_gain{,_d}
|
|
||||||
echo -n "so : D-Star audio output = "; EvaluateVar dstar_out_gain{,_d}
|
|
||||||
echo -n "mi : DMR/YSF audio input = "; EvaluateVar dmr_in_gain{,_d}
|
|
||||||
echo -n "mo : DMR/YSF audio output = "; EvaluateVar dmr_out_gain{,_d}
|
|
||||||
echo
|
|
||||||
echo "q : Return to Main Menu"
|
|
||||||
echo "u : Unset the value of <key> (revert to the default value)."
|
|
||||||
echo
|
|
||||||
read -p "Please input <key> <value> : " key value
|
|
||||||
if [[ "$key" == si* ]]; then
|
|
||||||
TestGainValue "$value" && dstar_in_gain="$value"
|
|
||||||
elif [[ "$key" == so* ]]; then
|
|
||||||
TestGainValue "$value" && dstar_out_gain="$value"
|
|
||||||
elif [[ "$key" == mi* ]]; then
|
|
||||||
TestGainValue "$value" && dmr_in_gain="$value"
|
|
||||||
elif [[ "$key" == mo* ]]; then
|
|
||||||
TestGainValue "$value" && dmr_out_gain="$value"
|
|
||||||
elif [[ "$key" == u* ]]; then
|
|
||||||
if [[ "$value" == si* ]]; then
|
|
||||||
unset dstar_in_gain
|
|
||||||
elif [[ "$value" == so* ]]; then
|
|
||||||
unset dstar_out_gain
|
|
||||||
elif [[ "$value" == mi* ]]; then
|
|
||||||
unset dmr_in_gain
|
|
||||||
elif [[ "$value" == mo* ]]; then
|
|
||||||
unset dmr_out_gain
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
WriteMemFile ()
|
|
||||||
{
|
|
||||||
local file
|
|
||||||
file="$rcfg"
|
|
||||||
echo "# created on `date`" > $file
|
|
||||||
[ -z ${callsign+x} ] || echo "callsign='$callsign'" >> $file
|
|
||||||
[ -z ${modules+x} ] || echo "modules='$modules'" >> $file
|
|
||||||
[ -z ${ip4addr+x} ] || echo "ip4addr='$ip4addr'" >> $file
|
|
||||||
[ -z ${ip6addr+x} ] || echo "ip6addr='$ip6addr'" >> $file
|
|
||||||
[ -z ${tcaddress+x} ] || echo "tcaddress='$tcaddress'" >> $file
|
|
||||||
[ -z ${tcmodules+x} ] || echo "tcmodules='$tcmodules'" >> $file
|
|
||||||
[ -z ${dstar_in_gain+x} ] || echo "dstar_in_gain=$dstar_in_gain" >> $file
|
|
||||||
[ -z ${dstar_out_gain+x} ] || echo "dstar_out_gain=$dstar_out_gain" >> $file
|
|
||||||
[ -z ${dmr_in_gain+x} ] || echo "dmr_in_gain=$dmr_in_gain" >> $file
|
|
||||||
[ -z ${dmr_out_gain+x} ] || echo "dmr_out_gain=$dmr_out_gain" >> $file
|
|
||||||
[ -z ${dmrdbuseserver+x} ] || echo "dmrdbuseserver=$dmrdbuseserver" >> $file
|
|
||||||
[ -z ${dmrdbrefresh+x} ] || echo "dmrdbrefresh=$dmrdbrefresh" >> $file
|
|
||||||
[ -z ${dmrdbpath+x} ] || echo "dmrdbpath='$dmrdbpath'" >> $file
|
|
||||||
[ -z ${ysfautolink+x} ] || echo "ysfautolink=$ysfautolink" >> $file
|
|
||||||
[ -z ${ysfmodule+x} ] || echo "ysfmodule='$ysfmodule'" >> $file
|
|
||||||
[ -z ${ysflocaldb+x} ] || echo "ysflocaldb=$ysflocaldb" >> $file
|
|
||||||
[ -z ${ysfdbname+x} ] || echo "ysfdbname='$ysfdbname'" >> $file
|
|
||||||
[ -z ${ysfdbuser+x} ] || echo "ysfdbuser='$ysfdbuser'" >> $file
|
|
||||||
[ -z ${ysfrname+x} ] || echo "ysfrname='$ysfrname'" >> $file
|
|
||||||
[ -z ${ysfrdesc+x} ] || echo "ysfrdesc='$ysfrdesc'" >> $file
|
|
||||||
[ -z ${ysfdbpw+x} ] || echo "ysfdbpw='$ysfdbpw'" >> $file
|
|
||||||
[ -z ${g3support+x} ] || echo "g3support=$g3support" >> $file
|
|
||||||
[ -z ${dbsupport+x} ] || echo "dbsupport=$dbsupport" >> $file
|
|
||||||
}
|
|
||||||
|
|
||||||
WriteSRCHFile ()
|
|
||||||
{
|
|
||||||
local file m
|
|
||||||
file="$srch"
|
|
||||||
echo "// Created on `date`" > $file
|
|
||||||
echo "#define CALLSIGN \"${callsign}\"" >> $file
|
|
||||||
if [[ "$callsign" == XRF* ]]; then
|
|
||||||
echo "#define NO_XLX" >> $file
|
|
||||||
fi
|
|
||||||
if [ -z ${modules+x} ]; then
|
|
||||||
echo "#define ACTIVE_MODULES \"${modules_d}\"" >> $file
|
|
||||||
else
|
|
||||||
echo "#define ACTIVE_MODULES \"${modules}\"" >> $file
|
|
||||||
fi
|
|
||||||
if [ ! -z ${ip4addr+x} ]; then
|
|
||||||
echo "#define LISTEN_IPV4 \"${ip4addr}\"" >> $file
|
|
||||||
fi
|
|
||||||
if [ ! -z ${ip6addr+x} ]; then
|
|
||||||
echo "#define LISTEN_IPV6 \"${ip6addr}\"" >> $file
|
|
||||||
fi
|
|
||||||
if [ -z ${ysfautolink+x} ]; then
|
|
||||||
echo "#define YSF_AUTOLINK_ENABLE ${ysfautolink_d}" >> $file
|
|
||||||
else
|
|
||||||
echo "#define YSF_AUTOLINK_ENABLE ${ysfautolink}" >> $file
|
|
||||||
fi
|
|
||||||
if [ -z ${ysfmodule+x} ]; then
|
|
||||||
echo "#define YSF_AUTOLINK_MODULE '${ysfmodule_d}'" >> $file
|
|
||||||
else
|
|
||||||
echo "#define YSF_AUTOLINK_MODULE '${ysfmodule}'" >> $file
|
|
||||||
fi
|
|
||||||
if [ ! -z ${dmrdbuseserver+x} ]; then
|
|
||||||
if [[ "$dmrdbuseserver" == true ]]; then
|
|
||||||
m=1
|
|
||||||
else
|
|
||||||
m=0
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
m=1
|
|
||||||
fi
|
|
||||||
echo "#define DMRIDDB_USE_RLX_SERVER $m" >> $file
|
|
||||||
if [ ! -z ${dmrdbrefresh+x} ]; then
|
|
||||||
echo "#define DMRIDDB_REFRESH_RATE $dmrdbrefresh" >> $file
|
|
||||||
else
|
|
||||||
echo "#define DMRIDDB_REFRESH_RATE $dmrdbrefresh_d" >> $file
|
|
||||||
fi
|
|
||||||
if [ ! -z ${dmrdbpath+x} ]; then
|
|
||||||
echo "#define DMRIDDB_PATH \"$dmrdbpath\"" >> $file
|
|
||||||
else
|
|
||||||
echo "#define DMRIDDB_PATH \"$dmrdbpath_d\"" >> $file
|
|
||||||
fi
|
|
||||||
if [[ "$ysflocaldb" == true ]]; then
|
|
||||||
echo '#define YSF_DB_SUPPORT true' >> $file
|
|
||||||
echo "#define YSF_DB_NAME \"$ysfdbname\"" >> $file
|
|
||||||
echo "#define YSF_DB_USER \"$ysfdbuser\"" >> $file
|
|
||||||
echo "#define YSF_DB_PASSWORD \"$ysfdbpw\"" >> $file
|
|
||||||
else
|
|
||||||
echo '#define YSF_DB_SUPPORT false' >> $file
|
|
||||||
fi
|
|
||||||
if [ ! -z ${ysfrname+x} ]; then
|
|
||||||
echo "#define YSF_REFLECTOR_NAME \"$ysfrname\"" >> $file
|
|
||||||
fi
|
|
||||||
if [ ! -z ${ysfrdesc+x} ]; then
|
|
||||||
echo "#define YSF_REFLECTOR_DESCRIPTION \"$ysfrdesc\"" >> $file
|
|
||||||
fi
|
|
||||||
if [ ! -z ${tcaddress+x} ]; then
|
|
||||||
echo "#define TRANSCODER_IP \"${tcaddress}\"" >> $file
|
|
||||||
echo "#define TRANSCODED_MODULES \"${tcmodules}\"" >> $file
|
|
||||||
fi
|
|
||||||
if [ -z ${g3support+x} ]; then
|
|
||||||
m=${g3support_d}
|
|
||||||
else
|
|
||||||
m=${g3support}
|
|
||||||
fi
|
|
||||||
if [[ "$m" != true ]]; then
|
|
||||||
echo "#define NO_G3" >> $file
|
|
||||||
fi
|
|
||||||
if [ -n ${dbsupport+x} ]; then
|
|
||||||
if [ "$dbsupport" == true ]; then
|
|
||||||
echo "#define DEBUG" >> $file
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
WriteSRCMKFile ()
|
|
||||||
{
|
|
||||||
local file
|
|
||||||
file="$srcm"
|
|
||||||
echo "# Created on `date`" > $file
|
|
||||||
[ -z ${ip4addr+x} ] || echo "ipv4 = $ip4addr" >> $file
|
|
||||||
[ -z ${ip6addr+x} ] || echo "ipv6 = $ip6addr" >> $file
|
|
||||||
[ -z ${tcaddress+x} ] || echo "tc_ip = $tcaddress" >> $file
|
|
||||||
if [ -z ${g3support+x} ]; then
|
|
||||||
echo "use_g3 = $g3support_d" >> $file
|
|
||||||
else
|
|
||||||
echo "use_g3 = $g3support" >> $file
|
|
||||||
fi
|
|
||||||
if [ -z ${dbsupport+x} ]; then
|
|
||||||
echo "debug = $dbsupport_d" >> $file
|
|
||||||
else
|
|
||||||
echo "debug = $dbsupport" >> $file
|
|
||||||
fi
|
|
||||||
if [ -z ${ysflocaldb+x} ]; then
|
|
||||||
echo "ysf_db = $ysflocaldb_d" >> $file
|
|
||||||
else
|
|
||||||
echo "ysf_db = $ysflocaldb" >> $file
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
WriteTranscoderHFile ()
|
|
||||||
{
|
|
||||||
local file
|
|
||||||
file="$tcdh"
|
|
||||||
echo "// Created on `date`" > $file
|
|
||||||
if [ -n ${tcaddress+x} ] && [[ "$tcaddress" != "local" ]]; then
|
|
||||||
echo "#define TRANSCODER_IP \"${tcaddress}\"" >> $file
|
|
||||||
fi
|
|
||||||
if [ -n ${tcmodules+x} ]; then
|
|
||||||
echo "#define TRANSCODED_MODULES \"${tcmodules}\"" >> $file
|
|
||||||
fi
|
|
||||||
if [ -z ${dstar_in_gain+x} ]; then
|
|
||||||
echo "#define DSTAR_IN_GAIN $dstar_in_gain_d" >> $file
|
|
||||||
else
|
|
||||||
echo "#define DSTAR_IN_GAIN $dstar_in_gain" >> $file
|
|
||||||
fi
|
|
||||||
if [ -z ${dstar_out_gain+x} ]; then
|
|
||||||
echo "#define DSTAR_OUT_GAIN $dstar_out_gain_d" >> $file
|
|
||||||
else
|
|
||||||
echo "#define DSTAR_OUT_GAIN $dstar_out_gain" >> $file
|
|
||||||
fi
|
|
||||||
if [ -z ${dmr_in_gain+x} ]; then
|
|
||||||
echo "#define DMR_IN_GAIN $dmr_in_gain_d" >> $file
|
|
||||||
else
|
|
||||||
echo "#define DMR_IN_GAIN $dmr_in_gain" >> $file
|
|
||||||
fi
|
|
||||||
if [ -z ${dmr_out_gain+x} ]; then
|
|
||||||
echo "#define DMR_OUT_GAIN $dmr_out_gain_d" >> $file
|
|
||||||
else
|
|
||||||
echo "#define DMR_OUT_GAIN $dmr_out_gain" >> $file
|
|
||||||
fi
|
|
||||||
if [ -n ${dbsupport+x} ]; then
|
|
||||||
if [ "$dbsupport" == true ]; then
|
|
||||||
echo "#define DEBUG" >> $file
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
WriteTranscoderMKFile ()
|
|
||||||
{
|
|
||||||
local file
|
|
||||||
file="$tcdm"
|
|
||||||
echo "# created on `date`" > $file
|
|
||||||
if [ -z ${dbsupport+x} ]; then
|
|
||||||
echo "debug = $dbsupport_d" >> $file
|
|
||||||
else
|
|
||||||
echo "debug = $dbsupport" >> $file
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
WriteCfgPhpFile ()
|
|
||||||
{
|
|
||||||
cat << EOF > $ysfs
|
|
||||||
<?php
|
|
||||||
define('DB_SERVER', 'localhost');
|
|
||||||
define('DB_USERNAME', '${ysfdbuser}');
|
|
||||||
define('DB_PASSWORD', '${ysfdbpw}');
|
|
||||||
define('DB_NAME', '${ysfdbname}');
|
|
||||||
// Attempt to connect to MySQL database
|
|
||||||
\$link = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);
|
|
||||||
// Check connection
|
|
||||||
if (\$link === false) { die("ERROR: Could not connect. " . mysqli_connect_error()); }
|
|
||||||
?>
|
|
||||||
EOF
|
|
||||||
}
|
|
||||||
|
|
||||||
WriteDBCreateFile ()
|
|
||||||
{
|
|
||||||
cat << EOF > $dbcr
|
|
||||||
CREATE DATABASE IF NOT EXISTS ${ysfdbname};
|
|
||||||
USE ${ysfdbname};
|
|
||||||
CREATE TABLE IF NOT EXISTS ysfnodes (
|
|
||||||
callsign VARCHAR(7) PRIMARY KEY,
|
|
||||||
password VARCHAR(255) NOT NULL,
|
|
||||||
txfreq INT NOT NULL DEFAULT 446500000,
|
|
||||||
rxfreq INT NOT NULL DEFAULT 446500000,
|
|
||||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
||||||
);
|
|
||||||
CREATE USER IF NOT EXISTS '${ysfdbuser}'@'localhost' IDENTIFIED BY '${ysfdbpw}';
|
|
||||||
GRANT ALL PRIVILEGES ON $ysfdbname . ysfnodes TO '${ysfdbuser}'@'localhost';
|
|
||||||
FLUSH PRIVILEGES;
|
|
||||||
EOF
|
|
||||||
}
|
|
||||||
|
|
||||||
WriteCFGFiles ()
|
|
||||||
{
|
|
||||||
WriteMemFile
|
|
||||||
WriteSRCHFile
|
|
||||||
WriteSRCMKFile
|
|
||||||
if [ -z ${tcaddress+x} ]; then
|
|
||||||
rm -f $tcdh $tcdm
|
|
||||||
else
|
|
||||||
WriteTranscoderHFile
|
|
||||||
WriteTranscoderMKFile
|
|
||||||
fi
|
|
||||||
if [[ "$ysflocaldb" == true ]]; then
|
|
||||||
WriteCfgPhpFile
|
|
||||||
WriteDBCreateFile
|
|
||||||
else
|
|
||||||
rm -f $ysfs $dbcr
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
ListCFGFiles ()
|
|
||||||
{
|
|
||||||
echo "===========${rcfg}============="
|
|
||||||
cat $rcfg
|
|
||||||
echo "===========${srch}============="
|
|
||||||
cat $srch
|
|
||||||
echo "===========${srcm}============="
|
|
||||||
cat $srcm
|
|
||||||
if [ ! -z ${tcaddress+x} ]; then
|
|
||||||
echo "===========${tcdh}============="
|
|
||||||
cat $tcdh
|
|
||||||
echo "===========${tcdm}============="
|
|
||||||
cat $tcdm
|
|
||||||
fi
|
|
||||||
if [[ "$ysflocaldb" == true ]]; then
|
|
||||||
echo "===========${ysfs}============="
|
|
||||||
cat $ysfs
|
|
||||||
echo "===========${dbcr}============="
|
|
||||||
cat $dbcr
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Execution starts here!
|
|
||||||
# file locations
|
|
||||||
rcfg='reflector.cfg'
|
|
||||||
srch='reflector/configure.h'
|
|
||||||
srcm='reflector/configure.mk'
|
|
||||||
tcdh='../tcd/configure.h'
|
|
||||||
tcdm='../tcd/configure.mk'
|
|
||||||
ysfs='wiresx/configure.php'
|
|
||||||
dbcr='configure.sql'
|
|
||||||
urfserv='/etc/systemd/system/urfd.service'
|
|
||||||
|
|
||||||
# expert mode
|
|
||||||
if [[ "$1" == ex* ]]; then
|
|
||||||
expertmode="expertMode"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -e reflector.cfg ]; then
|
|
||||||
source reflector.cfg
|
|
||||||
else
|
|
||||||
echo 'No configuration file found...'
|
|
||||||
sleep 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# default values
|
|
||||||
callsign_d='CHNGME'
|
|
||||||
modules_d='ABCF'
|
|
||||||
ip4addr_d='none'
|
|
||||||
ip6addr_d='none'
|
|
||||||
tcaddress_d='none'
|
|
||||||
ysfautolink_d=false
|
|
||||||
ysfmodule_d='D'
|
|
||||||
g3support_d=false
|
|
||||||
dbsupport_d=false
|
|
||||||
dmrdbuseserver_d=true
|
|
||||||
dmrdbrefresh_d=180
|
|
||||||
dmrdbpath_d='/usr/local/etc/dmrid.dat'
|
|
||||||
ysflocaldb_d=false
|
|
||||||
ysfdbname_d=''
|
|
||||||
ysfdbuser_d=''
|
|
||||||
ysfdbpw_d=''
|
|
||||||
dstar_in_gain_d=0
|
|
||||||
dstar_out_gain_d=0
|
|
||||||
dmr_in_gain_d=0
|
|
||||||
dmr_out_gain_d=0
|
|
||||||
if [ -z ${callsign+x} ];then
|
|
||||||
ysfrname_d="$callsign_d"
|
|
||||||
else
|
|
||||||
ysfrname_d="$callsign"
|
|
||||||
fi
|
|
||||||
ysfrdesc_d='URF Reflector'
|
|
||||||
|
|
||||||
if [ -z ${expertmode+x} ]; then
|
|
||||||
if [ -e $urfserv ]; then
|
|
||||||
echo -n "You cannot change the configuration right now beacuse there is an "
|
|
||||||
if [ -e $urfserv ]; then
|
|
||||||
echo "URFD server running."
|
|
||||||
fi;
|
|
||||||
echo "===========${rcfg}============="
|
|
||||||
cat $rcfg
|
|
||||||
echo
|
|
||||||
echo "Please use radmin to uninstall the running server before attempting to modify the configuration."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
key='x'
|
|
||||||
# main loop
|
|
||||||
while [[ "$key" != q* ]]
|
|
||||||
do
|
|
||||||
clear
|
|
||||||
echo
|
|
||||||
echo " Reflector Configuration, Version #220326"
|
|
||||||
echo
|
|
||||||
echo " ******* REFLECTOR ********"
|
|
||||||
echo -n "cs : Reflector Callsign = "; EvaluateVar callsign{,_d}
|
|
||||||
echo -n "am : Active Modules = "; EvaluateVar modules{,_d}
|
|
||||||
echo -n "g3 : Icom G3 Support = "; EvaluateVar g3support{,_d}
|
|
||||||
echo " ******* ADDRESSES ********"
|
|
||||||
echo -n "i4 : IPv4 Listen Address = "; EvaluateVar ip4addr{,_d}
|
|
||||||
echo -n "i6 : IPv6 Listen Address = "; EvaluateVar ip6addr{,_d}
|
|
||||||
echo " ******* TRANSCODER ********"
|
|
||||||
echo " The only TC address supported is 'local' or the default 'none'"
|
|
||||||
echo -n "tc : Transcoder Address = "; EvaluateVar tcaddress{,_d}
|
|
||||||
if [ ! -z ${tcaddress+x} ]; then
|
|
||||||
echo -n "tm : Transcoder Modules = "; EvaluateVar tcmodules{,_d}
|
|
||||||
echo "ag : AMBE Audio Gain Sub-Menu"
|
|
||||||
if [ ! -z ${dstar_in_gain+x} ]; then
|
|
||||||
echo -n " D-Star Input gain = "; EvaluateVar dstar_in_gain{,_d}
|
|
||||||
fi
|
|
||||||
if [ ! -z ${dstar_out_gain+x} ]; then
|
|
||||||
echo -n " D-Star Output gain = "; EvaluateVar dstar_out_gain{,_d}
|
|
||||||
fi
|
|
||||||
if [ ! -z ${dmr_in_gain+x} ]; then
|
|
||||||
echo -n " DMR Input gain = "; EvaluateVar dmr_in_gain{,_d}
|
|
||||||
fi
|
|
||||||
if [ ! -z ${dmr_out_gain+x} ]; then
|
|
||||||
echo -n " DMR Output gain = "; EvaluateVar dmr_out_gain{,_d}
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
echo " ******* DMR Database ********"
|
|
||||||
echo -n "ds : Use RLX Server = "; EvaluateVar dmrdbuseserver{,_d}
|
|
||||||
echo -n "dt : Refresh time (in min) = "; EvaluateVar dmrdbrefresh{,_d}
|
|
||||||
echo -n "dp : Database path = "; EvaluateVar dmrdbpath{,_d}
|
|
||||||
echo " ******* SYSTEM FUSION ********"
|
|
||||||
echo -n "ye : YSF Autolink Enable = "; EvaluateVar ysfautolink{,_d}
|
|
||||||
if [ ! -z ${ysfautolink+x} ]; then
|
|
||||||
if [[ "$ysfautolink" == true ]]; then
|
|
||||||
echo -n "ym : YSF Autolink Module = "; EvaluateVar ysfmodule{,_d}
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
echo -n "yl : YSF Local Database = "; EvaluateVar ysflocaldb{,_d}
|
|
||||||
if [[ "$ysflocaldb" == true ]]; then
|
|
||||||
echo -n "yd : YSF Database Name = "; EvaluateVar ysfdbname{,_d}
|
|
||||||
echo -n "yu : YSF Database User = "; EvaluateVar ysfdbuser{,_d}
|
|
||||||
echo -n "yp : YSF Database Password = "; EvaluateVar ysfdbpw{,_d}
|
|
||||||
fi
|
|
||||||
echo " ******* YSFReflector Registry *******"
|
|
||||||
echo -n "rn : Registry Name = "; EvaluateVar ysfrname{,_d}
|
|
||||||
echo -n "rd : Registry Description = "; EvaluateVar ysfrdesc{,_d}
|
|
||||||
echo " ******* DEBUGGING ********"
|
|
||||||
echo -n "db : Debugging Support = "; EvaluateVar dbsupport{,_d}
|
|
||||||
echo
|
|
||||||
if [[ "$callsign" == URF* ]]; then
|
|
||||||
echo "w : Write configuration files (overwrites any existing files) and quit"
|
|
||||||
fi
|
|
||||||
echo "q : Quit without saving"
|
|
||||||
echo "u : Unset the value of <key> (revert to the default value)."
|
|
||||||
echo
|
|
||||||
read -p "Please input <key> <value> - omit value to toggle a true/false : " key value
|
|
||||||
|
|
||||||
if [[ "$key" == cs* && ${value^^} == URF* ]]; then
|
|
||||||
callsign="${value^^}"
|
|
||||||
callsign="${callsign:0:6}"
|
|
||||||
ysfrname_d="${callsign}"
|
|
||||||
unset tcaddress tcmodules ysf{autolink,module,localdb,dbname,dbuser,dbpw}
|
|
||||||
elif [[ "$key" == am* ]]; then CheckModules "${value^^}"
|
|
||||||
elif [[ "$key" == i4* ]]; then ip4addr="$value"
|
|
||||||
elif [[ "$key" == i6* ]]; then ip6addr="$value"
|
|
||||||
elif [[ "$key" == tc* ]]; then tcaddress="local"
|
|
||||||
elif [[ "$key" == tm* ]]; then CheckTranscodedModules "${value^^}"
|
|
||||||
elif [[ "$key" == ag* ]]; then
|
|
||||||
AudioGainMenu
|
|
||||||
key=x
|
|
||||||
elif [[ "$key" == ds* ]]; then SetBooleanValue dmrdbuseserver "$value"
|
|
||||||
elif [[ "$key" == dt* ]]; then dmrdbrefresh="$value"
|
|
||||||
elif [[ "$key" == dp* ]]; then dmrdbpath="$value"
|
|
||||||
elif [[ "$key" == ye* ]]; then SetBooleanValue ysfautolink "$value"
|
|
||||||
elif [[ "$key" == ym* ]]; then
|
|
||||||
ysfmodule="${value^^}"
|
|
||||||
ysfmodule="${ysfmodule:0:1}"
|
|
||||||
elif [[ "$key" == g3* ]]; then SetBooleanValue g3support "$value"
|
|
||||||
elif [[ "$key" == db* ]]; then SetBooleanValue dbsupport "$value"
|
|
||||||
elif [[ "$key" == yl* ]]; then SetBooleanValue ysflocaldb "$value"
|
|
||||||
elif [[ "$key" == yd* ]]; then ysfdbname="$value"
|
|
||||||
elif [[ "$key" == yu* ]]; then ysfdbuser="$value"
|
|
||||||
elif [[ "$key" == yp* ]]; then ysfdbpw="$value"
|
|
||||||
elif [[ "$key" == rn* ]]; then ysfrname="${value:0:16}"
|
|
||||||
elif [[ "$key" == rd* ]]; then ysfrdesc="${value:0:14}"
|
|
||||||
elif [[ "$key" == w* ]]; then
|
|
||||||
WriteCFGFiles
|
|
||||||
ListCFGFiles
|
|
||||||
exit 0
|
|
||||||
elif [[ "$key" == u* ]]; then
|
|
||||||
if [[ "$value" == cs* ]]; then unset callsign
|
|
||||||
elif [[ "$value" == am* ]]; then unset modules
|
|
||||||
elif [[ "$value" == i4* ]]; then unset ip4addr
|
|
||||||
elif [[ "$value" == i6* ]]; then unset ip6addr
|
|
||||||
elif [[ "$value" == tc* ]]; then unset tcaddress
|
|
||||||
elif [[ "$value" == tm* ]]; then tcmodules=${modules:0:1}
|
|
||||||
elif [[ "$value" == ds* ]]; then unset dmrdbuseserver
|
|
||||||
elif [[ "$value" == dt* ]]; then unset dmrdbrefresh
|
|
||||||
elif [[ "$value" == dp* ]]; then unset dmrdbpath
|
|
||||||
elif [[ "$value" == ye* ]]; then unset ysfautolink ysfmodule
|
|
||||||
elif [[ "$value" == ym* ]]; then unset ysfmodule
|
|
||||||
elif [[ "$value" == g3* ]]; then unset g3support
|
|
||||||
elif [[ "$value" == db* ]]; then unset dbsupport
|
|
||||||
elif [[ "$value" == yl* ]]; then unset ysflocaldb ysfdbname ysfdbuser ysfdbpw
|
|
||||||
elif [[ "$value" == yd* ]]; then unset ysfdbname
|
|
||||||
elif [[ "$value" == yu* ]]; then unset ysfdbuser
|
|
||||||
elif [[ "$value" == yp* ]]; then unset ysfdbpw
|
|
||||||
elif [[ "$value" == rn* ]]; then unset ysfrname
|
|
||||||
elif [[ "$value" == rd* ]]; then unset ysfrdesc
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
exit 0
|
|
||||||
File diff suppressed because it is too large
Load Diff
@ -1,73 +0,0 @@
|
|||||||
<?php
|
|
||||||
// Initialize the session
|
|
||||||
session_start();
|
|
||||||
|
|
||||||
// Check if the user is logged in, otherwise redirect to login page
|
|
||||||
if (!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true) {
|
|
||||||
header("location: login.php");
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Include config file
|
|
||||||
require_once "configure.php";
|
|
||||||
|
|
||||||
// find current frequencies and initialize
|
|
||||||
$sql = "SELECT txfreq, rxfreq FROM ysfnodes WHERE callsign = ?";
|
|
||||||
if ($stmt = mysqli_prepare($link, $sql)) {
|
|
||||||
// Bind variables to the prepared statement as parameters
|
|
||||||
mysqli_stmt_bind_param($stmt, "s", $_SESSION["callsign"]);
|
|
||||||
// Attempt to execute the prepared statement
|
|
||||||
if (mysqli_stmt_execute($stmt)) {
|
|
||||||
// Store result
|
|
||||||
mysqli_stmt_store_result($stmt);
|
|
||||||
|
|
||||||
// Check if callsign exists, if yes then verify password
|
|
||||||
if (mysqli_stmt_num_rows($stmt) == 1) {
|
|
||||||
// Bind result variables
|
|
||||||
mysqli_stmt_bind_result($stmt, $tx_freq_hz, $rx_freq_hz);
|
|
||||||
if (mysqli_stmt_fetch($stmt)) {
|
|
||||||
$txfreq = $tx_freq_hz / 1000000.0;
|
|
||||||
$rxfreq = $rx_freq_hz / 1000000.0;
|
|
||||||
} else {
|
|
||||||
die("Can't bind frequencies\n");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
die("Couldn't find one row for callsign\n");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
die("Trouble SELECTing row\n");
|
|
||||||
}
|
|
||||||
mysqli_stmt_close($stmt);
|
|
||||||
} else {
|
|
||||||
die("Couldn't prepare SELECT statement\n");
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<title>Set Frequency</title>
|
|
||||||
<link rel="stylesheet" href="bootstrap.css">
|
|
||||||
<style type="text/css">
|
|
||||||
body{ font: 14px sans-serif; text-align: center; }
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="page-header">
|
|
||||||
<h1>Summary for <?php echo htmlspecialchars($_SESSION["callsign"]); ?></h1>
|
|
||||||
</div>
|
|
||||||
<div class="wrapper">
|
|
||||||
<h2>Hot-Spot Frequencies Summary</h2>
|
|
||||||
<p>Hot-spot Callsign: <?php echo htmlspecialchars($_SESSION["callsign"]); ?></p>
|
|
||||||
<p>Transmit Frequency: <?php echo $txfreq; ?> MHz</p>
|
|
||||||
<p>Receive Frequency: <?php echo $rxfreq; ?> MHz</p>
|
|
||||||
<p>It can take up to 15 minutes for the frequency data to be available to the reflector. Please be patient.</p>
|
|
||||||
</div>
|
|
||||||
<p>
|
|
||||||
<a href="frequency.php" class="btn btn-primary">Reset Frequencies</a>
|
|
||||||
<a href="reset-password.php" class="btn btn-warning">Reset Your Password</a>
|
|
||||||
<a href="logout.php" class="btn btn-danger">Sign Out of Your Account</a>
|
|
||||||
</p>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@ -1,126 +0,0 @@
|
|||||||
<?php
|
|
||||||
// Initialize the session
|
|
||||||
session_start();
|
|
||||||
|
|
||||||
// Check if the user is logged in, otherwise redirect to login page
|
|
||||||
if (!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true) {
|
|
||||||
header("location: login.php");
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Include config file
|
|
||||||
require_once "configure.php";
|
|
||||||
|
|
||||||
// find current frequencies and initialize
|
|
||||||
$sql = "SELECT txfreq, rxfreq FROM ysfnodes WHERE callsign = ?";
|
|
||||||
if ($stmt = mysqli_prepare($link, $sql)) {
|
|
||||||
// Bind variables to the prepared statement as parameters
|
|
||||||
mysqli_stmt_bind_param($stmt, "s", $_SESSION["callsign"]);
|
|
||||||
// Attempt to execute the prepared statement
|
|
||||||
if (mysqli_stmt_execute($stmt)) {
|
|
||||||
// Store result
|
|
||||||
mysqli_stmt_store_result($stmt);
|
|
||||||
|
|
||||||
// Check if callsign exists, if yes then verify password
|
|
||||||
if (mysqli_stmt_num_rows($stmt) == 1) {
|
|
||||||
// Bind result variables
|
|
||||||
mysqli_stmt_bind_result($stmt, $tx_freq_hz, $rx_freq_hz);
|
|
||||||
if (mysqli_stmt_fetch($stmt)) {
|
|
||||||
$txfreq = $tx_freq_hz / 1000000.0;
|
|
||||||
$rxfreq = $rx_freq_hz / 1000000.0;
|
|
||||||
} else {
|
|
||||||
die("Can't bind frequencies\n");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
die("Couldn't find one row for callsign\n");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
die("Trouble SELECTing row\n");
|
|
||||||
}
|
|
||||||
mysqli_stmt_close($stmt);
|
|
||||||
} else {
|
|
||||||
die("Couldn't prepare SELECT statement\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Processing form data when form is submitted
|
|
||||||
if ($_SERVER["REQUEST_METHOD"] == "POST") {
|
|
||||||
|
|
||||||
// Validate new password
|
|
||||||
if ($txfreq > 1000.0 || $txfreq < 10.0) {
|
|
||||||
$txfreq_err = "TX out of range.";
|
|
||||||
}
|
|
||||||
// Validate confirm password
|
|
||||||
if ($rxfreq > 1000.0 || $rxfreq < 10.0) {
|
|
||||||
$rxfreq_err = "RX out of range.";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check input errors before updating the database
|
|
||||||
if (empty($txfreq_err) && empty($rxfreq_err)) {
|
|
||||||
// Prepare an update statement
|
|
||||||
$sql = "UPDATE ysfnodes SET txfreq = ?, rxfreq = ? WHERE callsign = ?";
|
|
||||||
|
|
||||||
if($stmt = mysqli_prepare($link, $sql)){
|
|
||||||
// Bind variables to the prepared statement as parameters
|
|
||||||
$tx_freq_hz = $_POST["txfreq"] * 1000000;
|
|
||||||
$rx_freq_hz = $_POST["rxfreq"] * 1000000;
|
|
||||||
mysqli_stmt_bind_param($stmt, "iis", $tx_freq_hz, $rx_freq_hz, $_SESSION["callsign"]);
|
|
||||||
|
|
||||||
// Attempt to execute the prepared statement
|
|
||||||
if(mysqli_stmt_execute($stmt)){
|
|
||||||
// Frequencies updated successfully, go to summary
|
|
||||||
header("location: finish.php");
|
|
||||||
exit();
|
|
||||||
} else{
|
|
||||||
echo "Oops! Something went wrong. Please try again later.";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Close statement
|
|
||||||
mysqli_stmt_close($stmt);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Close connection
|
|
||||||
mysqli_close($link);
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<title>Set Frequency</title>
|
|
||||||
<link rel="stylesheet" href="bootstrap.css">
|
|
||||||
<style type="text/css">
|
|
||||||
body{ width: 350px; padding: 20px; }
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="page-header">
|
|
||||||
<h1>Set Frequencies for <?php echo htmlspecialchars($_SESSION["callsign"]); ?></h1>
|
|
||||||
</div>
|
|
||||||
<div class="wrapper">
|
|
||||||
<h2>Hot-Spot Frequencies</h2>
|
|
||||||
<p>Set your hot-spot frequencies (in MHz) here.</p>
|
|
||||||
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
|
|
||||||
<div class="form-group <?php echo (!empty($new_txfreq_err)) ? 'has-error' : ''; ?>">
|
|
||||||
<label>Tx Frequency (MHz)</label>
|
|
||||||
<input type="number" size="12" name="txfreq" min="10" max="1000" step="0.0005" class="form-control" value="<?php echo $txfreq; ?>">
|
|
||||||
<span class="help-block"><?php echo $txfreq_err; ?></span>
|
|
||||||
</div>
|
|
||||||
<div class="form-group <?php echo (!empty($rxfreq_err)) ? 'has-error' : ''; ?>">
|
|
||||||
<label>Rx Frequency (MHz)</label>
|
|
||||||
<input type="number" size="12" name="rxfreq" min="10" max="1000" step="0.0005" class="form-control" value="<?php echo $rxfreq; ?>">
|
|
||||||
<span class="help-block"><?php echo $rxfreq_err; ?></span>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<input type="submit" class="btn btn-primary" value="Submit">
|
|
||||||
<a class="btn btn-link" href="finish.php">Cancel</a>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
<p>
|
|
||||||
<a href="reset-password.php" class="btn btn-warning">Reset Your Password</a>
|
|
||||||
<a href="logout.php" class="btn btn-danger">Sign Out of Your Account</a>
|
|
||||||
</p>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@ -1,123 +0,0 @@
|
|||||||
<?php
|
|
||||||
// Initialize the session
|
|
||||||
session_start();
|
|
||||||
|
|
||||||
// Check if the user is already logged in, if yes then redirect him to frequency page
|
|
||||||
if(isset($_SESSION["loggedin"]) && $_SESSION["loggedin"] === true){
|
|
||||||
header("location: frequency.php");
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Include config file
|
|
||||||
require_once "configure.php";
|
|
||||||
|
|
||||||
// Define variables and initialize with empty values
|
|
||||||
$callsign = $password = "";
|
|
||||||
$callsign_err = $password_err = "";
|
|
||||||
|
|
||||||
// Processing form data when form is submitted
|
|
||||||
if ($_SERVER["REQUEST_METHOD"] == "POST") {
|
|
||||||
|
|
||||||
// Check if callsign is empty
|
|
||||||
if (empty(trim($_POST["callsign"]))) {
|
|
||||||
$callsign_err = "Please enter your callsign.";
|
|
||||||
} else {
|
|
||||||
$callsign = strtoupper(trim($_POST["callsign"]));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if password is empty
|
|
||||||
if (empty(trim($_POST["password"]))) {
|
|
||||||
$password_err = "Please enter your password.";
|
|
||||||
} else {
|
|
||||||
$password = trim($_POST["password"]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Validate credentials
|
|
||||||
if (empty($callsign_err) && empty($password_err)) {
|
|
||||||
// Prepare a select statement
|
|
||||||
$sql = "SELECT callsign, password FROM ysfnodes WHERE callsign = ?";
|
|
||||||
|
|
||||||
if ($stmt = mysqli_prepare($link, $sql)) {
|
|
||||||
// Bind variables to the prepared statement as parameters
|
|
||||||
mysqli_stmt_bind_param($stmt, "s", $param_callsign);
|
|
||||||
|
|
||||||
// Set parameters
|
|
||||||
$param_callsign = $callsign;
|
|
||||||
|
|
||||||
// Attempt to execute the prepared statement
|
|
||||||
if (mysqli_stmt_execute($stmt)) {
|
|
||||||
// Store result
|
|
||||||
mysqli_stmt_store_result($stmt);
|
|
||||||
|
|
||||||
// Check if callsign exists, if yes then verify password
|
|
||||||
if (mysqli_stmt_num_rows($stmt) == 1) {
|
|
||||||
// Bind result variables
|
|
||||||
mysqli_stmt_bind_result($stmt, $callsign, $hashed_password);
|
|
||||||
if (mysqli_stmt_fetch($stmt)) {
|
|
||||||
if (password_verify($password, $hashed_password)) {
|
|
||||||
// Password is correct, so start a new session
|
|
||||||
session_start();
|
|
||||||
|
|
||||||
// Store data in session variables
|
|
||||||
$_SESSION["loggedin"] = true;
|
|
||||||
$_SESSION["callsign"] = $callsign;
|
|
||||||
|
|
||||||
// Redirect user to frequency page
|
|
||||||
header("location: frequency.php");
|
|
||||||
} else {
|
|
||||||
// Display an error message if password is not valid
|
|
||||||
$password_err = "The password you entered was not valid.";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Display an error message if callsign doesn't exist
|
|
||||||
$callsign_err = "No account found with that callsign.";
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
echo "Oops! Something went wrong. Please try again later.";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Close statement
|
|
||||||
mysqli_stmt_close($stmt);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Close connection
|
|
||||||
mysqli_close($link);
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<title>Login</title>
|
|
||||||
<link rel="stylesheet" href="bootstrap.css">
|
|
||||||
<style type="text/css">
|
|
||||||
body{ font: 14px sans-serif; }
|
|
||||||
.wrapper{ width: 350px; padding: 20px; }
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="wrapper">
|
|
||||||
<h2>Login</h2>
|
|
||||||
<p>Login with your hot-spot callsign.</p>
|
|
||||||
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
|
|
||||||
<div class="form-group <?php echo (!empty($callsign_err)) ? 'has-error' : ''; ?>">
|
|
||||||
<label>Username</label>
|
|
||||||
<input type="text" name="callsign" class="form-control" value="<?php echo $callsign; ?>">
|
|
||||||
<span class="help-block"><?php echo $callsign_err; ?></span>
|
|
||||||
</div>
|
|
||||||
<div class="form-group <?php echo (!empty($password_err)) ? 'has-error' : ''; ?>">
|
|
||||||
<label>Password</label>
|
|
||||||
<input type="password" name="password" class="form-control">
|
|
||||||
<span class="help-block"><?php echo $password_err; ?></span>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<input type="submit" class="btn btn-primary" value="Login">
|
|
||||||
</div>
|
|
||||||
<p>Don't have an account? <a href="register.php">Sign up now</a>.</p>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
<?php
|
|
||||||
// Initialize the session
|
|
||||||
session_start();
|
|
||||||
|
|
||||||
// Unset all of the session variables
|
|
||||||
$_SESSION = array();
|
|
||||||
|
|
||||||
// Destroy the session.
|
|
||||||
session_destroy();
|
|
||||||
|
|
||||||
// Redirect to login page
|
|
||||||
header("location: login.php");
|
|
||||||
exit;
|
|
||||||
?>
|
|
||||||
@ -1,148 +0,0 @@
|
|||||||
<?php
|
|
||||||
// Include config file
|
|
||||||
require_once "configure.php";
|
|
||||||
|
|
||||||
function IsValidCallsign(string $callsign)
|
|
||||||
{
|
|
||||||
$regex = '/^(([1-9][A-Z])|([A-PR-Z][0-9])|([A-PR-Z][A-Z][0-9]))[0-9A-Z]*[A-Z]$/';
|
|
||||||
$rval = preg_match($regex, $callsign);
|
|
||||||
if (FALSE === $rval)
|
|
||||||
die("trouble with callsign regular expression\n");
|
|
||||||
return $rval;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Define variables and initialize with empty values
|
|
||||||
$callsign = $password = $confirm_password = "";
|
|
||||||
$callsign_err = $password_err = $confirm_password_err = "";
|
|
||||||
|
|
||||||
// Processing form data when form is submitted
|
|
||||||
if ($_SERVER["REQUEST_METHOD"] == "POST") {
|
|
||||||
|
|
||||||
// Validate callsign
|
|
||||||
if (empty(trim($_POST["callsign"]))) {
|
|
||||||
$callsign_err = "Please enter your callsign.";
|
|
||||||
} else if (strlen(trim($_POST["callsign"])) > 7) {
|
|
||||||
$callsign_err = "Callsign is too long.";
|
|
||||||
} else if (! IsValidCallsign(strtoupper(trim($_POST["callsign"])))) {
|
|
||||||
$callsign_err = "Not a valid callsign.";
|
|
||||||
} else {
|
|
||||||
// Prepare a select statement
|
|
||||||
$sql = "SELECT * FROM ysfnodes WHERE callsign = ?";
|
|
||||||
|
|
||||||
if ($stmt = mysqli_prepare($link, $sql)) {
|
|
||||||
// Bind variables to the prepared statement as parameters
|
|
||||||
mysqli_stmt_bind_param($stmt, "s", $param_callsign);
|
|
||||||
|
|
||||||
// Set parameters
|
|
||||||
$param_callsign = strtoupper(trim($_POST["callsign"]));
|
|
||||||
|
|
||||||
// Attempt to execute the prepared statement
|
|
||||||
if (mysqli_stmt_execute($stmt)) {
|
|
||||||
/* store result */
|
|
||||||
mysqli_stmt_store_result($stmt);
|
|
||||||
|
|
||||||
if (mysqli_stmt_num_rows($stmt) == 1) {
|
|
||||||
$callsign_err = "This callsign is already taken.";
|
|
||||||
} else {
|
|
||||||
$callsign = strtoupper(trim($_POST["callsign"]));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
echo "Oops! Something went wrong. Please try again later.";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Close statement
|
|
||||||
mysqli_stmt_close($stmt);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Validate password
|
|
||||||
if (empty(trim($_POST["password"]))) {
|
|
||||||
$password_err = "Please enter a password.";
|
|
||||||
} elseif (strlen(trim($_POST["password"])) < 6) {
|
|
||||||
$password_err = "Password must have atleast 6 characters.";
|
|
||||||
} else {
|
|
||||||
$password = trim($_POST["password"]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Validate confirm password
|
|
||||||
if (empty(trim($_POST["confirm_password"]))) {
|
|
||||||
$confirm_password_err = "Please confirm password.";
|
|
||||||
} else {
|
|
||||||
$confirm_password = trim($_POST["confirm_password"]);
|
|
||||||
if(empty($password_err) && ($password != $confirm_password)){
|
|
||||||
$confirm_password_err = "Password did not match.";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check input errors before inserting in database
|
|
||||||
if (empty($callsign_err) && empty($password_err) && empty($confirm_password_err)) {
|
|
||||||
|
|
||||||
// Prepare an insert statement
|
|
||||||
$sql = "INSERT INTO ysfnodes (callsign, password) VALUES (?, ?)";
|
|
||||||
|
|
||||||
if ($stmt = mysqli_prepare($link, $sql)) {
|
|
||||||
// Bind variables to the prepared statement as parameters
|
|
||||||
mysqli_stmt_bind_param($stmt, "ss", $param_callsign, $param_password);
|
|
||||||
|
|
||||||
// Set parameters
|
|
||||||
$param_callsign = $callsign;
|
|
||||||
$param_password = password_hash($password, PASSWORD_DEFAULT); // Creates a password hash
|
|
||||||
|
|
||||||
// Attempt to execute the prepared statement
|
|
||||||
if (mysqli_stmt_execute($stmt)) {
|
|
||||||
// Redirect to login page
|
|
||||||
header("location: login.php");
|
|
||||||
} else {
|
|
||||||
echo "Something went wrong. Please try again later.";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Close statement
|
|
||||||
mysqli_stmt_close($stmt);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Close connection
|
|
||||||
mysqli_close($link);
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<title>Hot-Spot Frequency for WiresX Registration</title>
|
|
||||||
<link rel="stylesheet" href="bootstrap.css">
|
|
||||||
<style type="text/css">
|
|
||||||
body{ font: 14px sans-serif; }
|
|
||||||
.wrapper{ width: 350px; padding: 20px; }
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="wrapper">
|
|
||||||
<h2>Sign Up</h2>
|
|
||||||
<p>Please fill this form to create an account. Use your hot-spot callsign to register.</p>
|
|
||||||
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
|
|
||||||
<div class="form-group <?php echo (!empty($callsign_err)) ? 'has-error' : ''; ?>">
|
|
||||||
<label>Your Callsign</label>
|
|
||||||
<input type="text" name="callsign" class="form-control" value="<?php echo $callsign; ?>">
|
|
||||||
<span class="help-block"><?php echo $callsign_err; ?></span>
|
|
||||||
</div>
|
|
||||||
<div class="form-group <?php echo (!empty($password_err)) ? 'has-error' : ''; ?>">
|
|
||||||
<label>Password</label>
|
|
||||||
<input type="password" name="password" class="form-control" value="<?php echo $password; ?>">
|
|
||||||
<span class="help-block"><?php echo $password_err; ?></span>
|
|
||||||
</div>
|
|
||||||
<div class="form-group <?php echo (!empty($confirm_password_err)) ? 'has-error' : ''; ?>">
|
|
||||||
<label>Confirm Password</label>
|
|
||||||
<input type="password" name="confirm_password" class="form-control" value="<?php echo $confirm_password; ?>">
|
|
||||||
<span class="help-block"><?php echo $confirm_password_err; ?></span>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<input type="submit" class="btn btn-primary" value="Submit">
|
|
||||||
<input type="reset" class="btn btn-default" value="Reset">
|
|
||||||
</div>
|
|
||||||
<p>Already have an account? <a href="login.php">Login here</a>.</p>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@ -1,106 +0,0 @@
|
|||||||
<?php
|
|
||||||
// Initialize the session
|
|
||||||
session_start();
|
|
||||||
|
|
||||||
// Check if the user is logged in, otherwise redirect to login page
|
|
||||||
if (!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true) {
|
|
||||||
header("location: login.php");
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Include config file
|
|
||||||
require_once "configure.php";
|
|
||||||
|
|
||||||
// Define variables and initialize with empty values
|
|
||||||
$new_password = $confirm_password = "";
|
|
||||||
$new_password_err = $confirm_password_err = "";
|
|
||||||
|
|
||||||
// Processing form data when form is submitted
|
|
||||||
if ($_SERVER["REQUEST_METHOD"] == "POST") {
|
|
||||||
|
|
||||||
// Validate new password
|
|
||||||
if (empty(trim($_POST["new_password"]))) {
|
|
||||||
$new_password_err = "Please enter the new password.";
|
|
||||||
} elseif (strlen(trim($_POST["new_password"])) < 6) {
|
|
||||||
$new_password_err = "Password must have atleast 6 characters.";
|
|
||||||
} else{
|
|
||||||
$new_password = trim($_POST["new_password"]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Validate confirm password
|
|
||||||
if (empty(trim($_POST["confirm_password"]))) {
|
|
||||||
$confirm_password_err = "Please confirm the password.";
|
|
||||||
} else {
|
|
||||||
$confirm_password = trim($_POST["confirm_password"]);
|
|
||||||
if (empty($new_password_err) && ($new_password != $confirm_password)) {
|
|
||||||
$confirm_password_err = "Password did not match.";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check input errors before updating the database
|
|
||||||
if (empty($new_password_err) && empty($confirm_password_err)) {
|
|
||||||
// Prepare an update statement
|
|
||||||
$sql = "UPDATE ysfnodes SET password = ? WHERE callsign = ?";
|
|
||||||
|
|
||||||
if($stmt = mysqli_prepare($link, $sql)){
|
|
||||||
// Bind variables to the prepared statement as parameters
|
|
||||||
mysqli_stmt_bind_param($stmt, "ss", $param_password, $param_callsign);
|
|
||||||
|
|
||||||
// Set parameters
|
|
||||||
$param_password = password_hash($new_password, PASSWORD_DEFAULT);
|
|
||||||
$param_callsign = $_SESSION["callsign"];
|
|
||||||
|
|
||||||
// Attempt to execute the prepared statement
|
|
||||||
if(mysqli_stmt_execute($stmt)){
|
|
||||||
// Password updated successfully. Destroy the session, and redirect to login page
|
|
||||||
session_destroy();
|
|
||||||
header("location: login.php");
|
|
||||||
exit();
|
|
||||||
} else{
|
|
||||||
echo "Oops! Something went wrong. Please try again later.";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Close statement
|
|
||||||
mysqli_stmt_close($stmt);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Close connection
|
|
||||||
mysqli_close($link);
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<title>Reset Password</title>
|
|
||||||
<link rel="stylesheet" href="bootstrap.css">
|
|
||||||
<style type="text/css">
|
|
||||||
body{ font: 14px sans-serif; }
|
|
||||||
.wrapper{ width: 350px; padding: 20px; }
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="wrapper">
|
|
||||||
<h2>Reset Password</h2>
|
|
||||||
<p>Please fill out this form to reset your password.</p>
|
|
||||||
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
|
|
||||||
<div class="form-group <?php echo (!empty($new_password_err)) ? 'has-error' : ''; ?>">
|
|
||||||
<label>New Password</label>
|
|
||||||
<input type="password" name="new_password" class="form-control" value="<?php echo $new_password; ?>">
|
|
||||||
<span class="help-block"><?php echo $new_password_err; ?></span>
|
|
||||||
</div>
|
|
||||||
<div class="form-group <?php echo (!empty($confirm_password_err)) ? 'has-error' : ''; ?>">
|
|
||||||
<label>Confirm Password</label>
|
|
||||||
<input type="password" name="confirm_password" class="form-control">
|
|
||||||
<span class="help-block"><?php echo $confirm_password_err; ?></span>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<input type="submit" class="btn btn-primary" value="Submit">
|
|
||||||
<a class="btn btn-link" href="finish.php">Cancel</a>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
Loading…
Reference in new issue