From 2752f1dd7ed3e36afbb1cfcc239e79217bf3ee76 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 27 Apr 2020 09:48:50 -0700 Subject: [PATCH 001/255] Update install.sh --- install.sh | 78 +++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 63 insertions(+), 15 deletions(-) diff --git a/install.sh b/install.sh index 743f643..2ea4def 100755 --- a/install.sh +++ b/install.sh @@ -9,7 +9,7 @@ print_help () { # Ensure to be root if [ "$EUID" -ne 0 ]; then - echo "Please run as root" + echo "Please use sudo to run the script" exit fi @@ -19,15 +19,46 @@ if [ "$#" -ne 3 ]; then exit fi + +cd ~ +printf "\033[1m\n###################################### Installation Started #####################################\n" +sleep 2 +printf "\033[1m\n###################################### OS Detection #####################################\n" +# Detecting OS Distribution +OS=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f1 -d " ") +echo -e "# Detected: $OS #\r" +sleep 2 +printf "\033[1m\n\n#################################### Installing Prerequisites ####################################\n" +printf "\033[1m#################################### This will take long time ####################################\n" +apt update && sudo apt upgrade -y + +case $OS in + Ubuntu) + apt install -y openvpn apache2 mysql-server php php-mysql php-zip unzip git wget sed curl nodejs npm mc net-tools + ;; + Raspbian) + apt install -y openvpn apache2 mariadb-server php php-mysql php-zip unzip git wget sed curl nodejs npm + ;; + *) + echo "Can't detect OS distribution! you need to install prerequisites manully" + exit +esac +npm install -g bower + # Ensure there are the prerequisites for i in openvpn mysql php bower node unzip wget sed; do which $i > /dev/null if [ "$?" -ne 0 ]; then - echo "Miss $i" + echo "$i is missing. Please install $i manually." exit fi done +printf "\033[1m\n\n################################### Setting MySQL Configuration ####################################\n" +printf "\033[1m######################## Note the MySQL root password! you will need it soon ########################\n" +mysql_secure_installation + + www=$1 user=$2 group=$3 @@ -53,10 +84,10 @@ if [[ -z $openvpn_proto ]]; then openvpn_proto="tcp" fi -read -p "Port [443]: " server_port +read -p "Port [1194]: " server_port if [[ -z $server_port ]]; then - server_port="443" + server_port="1194" fi # Get root pass (to create the database and the user) @@ -103,7 +134,7 @@ read -p "Country Name (2 letter code) [US]: " cert_country read -p "State or Province Name (full name) [California]: " cert_province -read -p "Locality Name (eg, city) [San Francisco]: " cert_city +read -p "Locality Name (eg, city) [Mission Viejo]: " cert_city read -p "Organization Name (eg, company) [Copyleft Certificate Co]: " cert_org @@ -117,10 +148,15 @@ read -p "Common Name (eg, your name or your server's hostname) [ChangeMe]: " key printf "\n################## Creating the certificates ##################\n" # Get the rsa keys -wget "https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.6/EasyRSA-unix-v3.0.6.tgz" -tar -xaf "EasyRSA-unix-v3.0.6.tgz" -mv "EasyRSA-v3.0.6" /etc/openvpn/easy-rsa -rm "EasyRSA-unix-v3.0.6.tgz" +EASYRSA_VERSION=$(curl -s https://api.github.com/repos/OpenVPN/easy-rsa/releases/latest | grep "tag_name" | cut -f2 -d "v" | sed 's/[",]//g') +EASYRSA_LOCATION=$(curl -s https://api.github.com/repos/OpenVPN/easy-rsa/releases/latest \ +| grep "tag_name" \ +| awk '{print "https://github.com/OpenVPN/easy-rsa/releases/download/" substr($2, 2, length($2)-3) "/EasyRSA-" substr($2, 3, length($2)-4) ".tgz"}') \ +; curl -L -o easyrsa.tgz $EASYRSA_LOCATION + +tar -xaf "easyrsa.tgz" +mv "EasyRSA-$EASYRSA_VERSION" /etc/openvpn/easy-rsa +rm "easyrsa.tgz" cd /etc/openvpn/easy-rsa @@ -173,7 +209,7 @@ printf "\n################## Setup OpenVPN ##################\n" cp /etc/openvpn/easy-rsa/pki/{ca.crt,ta.key,issued/server.crt,private/server.key,dh.pem} "/etc/openvpn/" cp "$base_path/installation/server.conf" "/etc/openvpn/" mkdir "/etc/openvpn/ccd" -sed -i "s/port 443/port $server_port/" "/etc/openvpn/server.conf" +sed -i "s/port 1194/port $server_port/" "/etc/openvpn/server.conf" if [ $openvpn_proto = "udp" ]; then sed -i "s/proto tcp/proto $openvpn_proto/" "/etc/openvpn/server.conf" @@ -233,7 +269,7 @@ sed -i "s/\$pass = '';/\$pass = '$mysql_pass';/" "./include/config.php" # Replace in the client configurations with the ip of the server and openvpn protocol for file in $(find -name client.ovpn); do - sed -i "s/remote xxx\.xxx\.xxx\.xxx 443/remote $ip_server $server_port/" $file + sed -i "s/remote xxx\.xxx\.xxx\.xxx 1194/remote $ip_server $server_port/" $file echo "" >> $file cat "/etc/openvpn/ca.crt" >> $file echo "" >> $file @@ -255,11 +291,23 @@ done bower --allow-root install chown -R "$user:$group" "$openvpn_admin" -printf "\033[1m\n#################################### Finish ####################################\n" +printf "\033[1m\n\n################################### Setting Apache Configuration ####################################\n" +cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/openvpn.conf +sed -i 's/\/var\/www\/html/\/var\/www\/openvpn-admin/g' /etc/apache2/sites-available/openvpn.conf +a2dissite 000-default +a2ensite openvpn +systemctl restart apache2 + +printf "\033[1m\n\n################################# Setting OpenVPN Configuration ####################################\n" +sed -i 's/explicit-exit-notify 1/# explicit-exit-notify 1/g' /etc/openvpn/server.conf +sed -i 's/80.67.169.12/8.8.8.8/g' /etc/openvpn/server.conf +sed -i 's/80.67.169.40/8.8.4.4/g' /etc/openvpn/server.conf +systemctl start openvpn@server + +printf "\033[1m\n################################################################################\n" +printf "\033[1m#################################### Finish ####################################\n" echo -e "# Congratulations, you have successfully setup OpenVPN-Admin! #\r" -echo -e "Please, finish the installation by configuring your web server (Apache, NGinx...)" echo -e "and install the web application by visiting http://your-installation/index.php?installation\r" -echo -e "Then, you will be able to run OpenVPN with systemctl start openvpn@server\r" -echo "Please, report any issues here https://github.com/Chocobozzz/OpenVPN-Admin" +echo "Please, report any issues here https://github.com/arvage/OpenVPN-Admin" printf "\n################################################################################ \033[0m\n" From 07f9a6c4bc8890d5d8ed8e4197e7aff73905e012 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 27 Apr 2020 09:57:50 -0700 Subject: [PATCH 002/255] Update README.md --- README.md | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 8448ab7..e3743c7 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# OpenVPN Admin +# Raspberry Pi OpenVPN Admin (Supported Ubuntu and Raspbian) ## Summary Administrate its OpenVPN with a web interface (logs visualisations, users managing...) and a SQL database. @@ -21,14 +21,13 @@ Administrate its OpenVPN with a web interface (logs visualisations, users managi * wget * sed * curl + * node + * npm -### Debian 8 Jessie +### Debian 10, Raspbian Buster, Ubuntu 20 (Focal Fossa) + +# just let the script take care of everything -```` -# apt-get install openvpn apache2 php5-mysql mysql-server php5 nodejs unzip git wget sed npm curl -# npm install -g bower -# ln -s /usr/bin/nodejs /usr/bin/node -```` ### Debian 9 Stretch @@ -40,30 +39,32 @@ In order to install `npm`, [stretch-backports need to be added to your sources.l # npm install -g bower ```` -### CentOS 7 + +### Debian 8 Jessie ```` -# yum install epel-release -# yum install openvpn httpd php-mysql mariadb-server php nodejs unzip git wget sed npm +# apt-get install openvpn apache2 php5-mysql mysql-server php5 nodejs unzip git wget sed npm curl # npm install -g bower -# systemctl enable mariadb -# systemctl start mariadb +# ln -s /usr/bin/nodejs /usr/bin/node ```` + ### Other distribution... (PR welcome) +not supported and tested + ## Tests -Only tested on Debian Jessie. Feel free to open issues. +Only tested on Ubuntu 20.04 LTS (Focal Fossa) and Raspbian Buster. Feel free to open issues. ## Installation * Setup OpenVPN and the web application: - $ cd ~/my_coding_workspace - $ git clone https://github.com/Chocobozzz/OpenVPN-Admin openvpn-admin + $ cd ~ + $ git clone https://github.com/arvage/OpenVPN-Admin openvpn-admin $ cd openvpn-admin - # ./install.sh /var/www www-data www-data + # sudo ./install.sh /var/www www-data www-data * Setup the web server (Apache, NGinx...) to serve the web application. * Create the admin of the web application by visiting `http://your-installation/index.php?installation` From f95f6704a7190d50605d3002eb4270542baac903 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 27 Apr 2020 10:02:20 -0700 Subject: [PATCH 003/255] Update README.md --- README.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index e3743c7..4d10b62 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Raspberry Pi OpenVPN Admin (Supported Ubuntu and Raspbian) +# Raspberry Pi OpenVPN Admin (Tested on Ubuntu and Raspbian using Apache2) ## Summary Administrate its OpenVPN with a web interface (logs visualisations, users managing...) and a SQL database. @@ -26,7 +26,7 @@ Administrate its OpenVPN with a web interface (logs visualisations, users managi ### Debian 10, Raspbian Buster, Ubuntu 20 (Focal Fossa) -# just let the script take care of everything +just let the script take care of everything ### Debian 9 Stretch @@ -67,11 +67,10 @@ Only tested on Ubuntu 20.04 LTS (Focal Fossa) and Raspbian Buster. Feel free to # sudo ./install.sh /var/www www-data www-data * Setup the web server (Apache, NGinx...) to serve the web application. - * Create the admin of the web application by visiting `http://your-installation/index.php?installation` + * Create the admin of the web application by visiting `http://your_hostname_or_ip/index.php?installation` ## Usage - * Start OpenVPN on the server (for example `systemctl start openvpn@server`) * Connect to the web application as an admin * Create an user * User get the configurations files via the web application (and put them in */etc/openvpn*) From f74fbca1033f1882f82527e38640d35fd2c6637b Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 27 Apr 2020 10:05:35 -0700 Subject: [PATCH 004/255] Update server.conf --- installation/server.conf | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/installation/server.conf b/installation/server.conf index 5fcf597..0acf5e3 100644 --- a/installation/server.conf +++ b/installation/server.conf @@ -1,9 +1,9 @@ ## GENERAL ## -# TCP or UDP, port 443, tunneling +# TCP or UDP, port 1194, tunneling mode server proto tcp -port 443 +port 1194 dev tun ## KEY, CERTS AND NETWORK CONFIGURATION ## @@ -29,16 +29,16 @@ server 10.8.0.0 255.255.255.0 push "redirect-gateway def1" # Alternatives DNS (FDN) -push "dhcp-option DNS 80.67.169.12" -push "dhcp-option DNS 80.67.169.40" +# push "dhcp-option DNS 80.67.169.12" +# push "dhcp-option DNS 80.67.169.40" # (OpenDNS) # push "dhcp-option DNS 208.67.222.222" # push "dhcp-option DNS 208.67.220.220" # (Google) -# push "dhcp-option DNS 8.8.8.8" -# push "dhcp-option DNS 8.8.4.4" +push "dhcp-option DNS 8.8.8.8" +push "dhcp-option DNS 8.8.4.4" # Ping every 10 seconds and if after 120 seconds the client doesn't respond we disconnect keepalive 10 120 @@ -91,4 +91,4 @@ client-disconnect scripts/disconnect.sh # Notify the client that when the server restarts so it # can automatically reconnect. -explicit-exit-notify 1 +#explicit-exit-notify 1 From ada07c90246174f443299c1c646f5e8d201e6b08 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 27 Apr 2020 12:22:30 -0700 Subject: [PATCH 005/255] Update install.sh --- install.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/install.sh b/install.sh index 2ea4def..cb163d1 100755 --- a/install.sh +++ b/install.sh @@ -20,7 +20,6 @@ if [ "$#" -ne 3 ]; then fi -cd ~ printf "\033[1m\n###################################### Installation Started #####################################\n" sleep 2 printf "\033[1m\n###################################### OS Detection #####################################\n" From d22b09f247417ced47497165a6233bbb3a4ba93e Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 27 Apr 2020 12:23:18 -0700 Subject: [PATCH 006/255] Update install.sh --- install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.sh b/install.sh index cb163d1..1f810f2 100755 --- a/install.sh +++ b/install.sh @@ -36,7 +36,7 @@ case $OS in apt install -y openvpn apache2 mysql-server php php-mysql php-zip unzip git wget sed curl nodejs npm mc net-tools ;; Raspbian) - apt install -y openvpn apache2 mariadb-server php php-mysql php-zip unzip git wget sed curl nodejs npm + apt install -y openvpn apache2 mariadb-server php php-mysql php-zip unzip git wget sed curl nodejs npm mc ;; *) echo "Can't detect OS distribution! you need to install prerequisites manully" From ef3f6bc5a716021ca2d4ff670e32c6c77bd93f3b Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 27 Apr 2020 14:07:42 -0700 Subject: [PATCH 007/255] Update install.sh --- install.sh | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/install.sh b/install.sh index 1f810f2..b14c72b 100755 --- a/install.sh +++ b/install.sh @@ -28,7 +28,7 @@ OS=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut - echo -e "# Detected: $OS #\r" sleep 2 printf "\033[1m\n\n#################################### Installing Prerequisites ####################################\n" -printf "\033[1m#################################### This will take long time ####################################\n" +printf "\033[1m#################################### This could take long time ####################################\n" apt update && sudo apt upgrade -y case $OS in @@ -303,6 +303,18 @@ sed -i 's/80.67.169.12/8.8.8.8/g' /etc/openvpn/server.conf sed -i 's/80.67.169.40/8.8.4.4/g' /etc/openvpn/server.conf systemctl start openvpn@server +printf "\033[1m\n\n################################# Let'sEncrypt SSL Certificate ####################################\n" +printf "\033[1m###### NOTE: You need port 80 on the public facing side to be open and forwarded to this instance #####\n" +read -p "Do you wish to setup Let'sEncrypt SSL? (y/n) " yn +case $yn in + [Yy]*) + read -p "provide the domain name without www.: " domain_name; + apt install -y python-certbot-apache; + certbot -n --apache -d $domain_name -d www.$domain_name --agree-tos -m $cert_email --no-redirect ;; + [Nn]*) + ;; +esac + printf "\033[1m\n################################################################################\n" printf "\033[1m#################################### Finish ####################################\n" From 69b0985817e2bf1172ff2c7e003aac2d11fc2206 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 27 Apr 2020 14:27:25 -0700 Subject: [PATCH 008/255] Update install.sh --- install.sh | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/install.sh b/install.sh index b14c72b..b03c139 100755 --- a/install.sh +++ b/install.sh @@ -9,7 +9,8 @@ print_help () { # Ensure to be root if [ "$EUID" -ne 0 ]; then - echo "Please use sudo to run the script" + echo "Please use sudo to run the script. e.g:" + echo "sudo ./install.sh /var/www www-data www-data" exit fi @@ -137,7 +138,7 @@ read -p "Locality Name (eg, city) [Mission Viejo]: " cert_city read -p "Organization Name (eg, company) [Copyleft Certificate Co]: " cert_org -read -p "Organizational Unit Name (eg, section) [My Organizational Unit]: " cert_ou +read -p "Organizational Unit Name (eg, section) [IT]: " cert_ou read -p "Email Address [me@example.net]: " cert_email @@ -298,9 +299,9 @@ a2ensite openvpn systemctl restart apache2 printf "\033[1m\n\n################################# Setting OpenVPN Configuration ####################################\n" -sed -i 's/explicit-exit-notify 1/# explicit-exit-notify 1/g' /etc/openvpn/server.conf -sed -i 's/80.67.169.12/8.8.8.8/g' /etc/openvpn/server.conf -sed -i 's/80.67.169.40/8.8.4.4/g' /etc/openvpn/server.conf +#sed -i 's/explicit-exit-notify 1/# explicit-exit-notify 1/g' /etc/openvpn/server.conf +#sed -i 's/80.67.169.12/8.8.8.8/g' /etc/openvpn/server.conf +#sed -i 's/80.67.169.40/8.8.4.4/g' /etc/openvpn/server.conf systemctl start openvpn@server printf "\033[1m\n\n################################# Let'sEncrypt SSL Certificate ####################################\n" From c207baaa727fa06b8db9d8c1251e62c244fff2a6 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 27 Apr 2020 14:30:06 -0700 Subject: [PATCH 009/255] Update install.sh --- install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.sh b/install.sh index b03c139..8b825aa 100755 --- a/install.sh +++ b/install.sh @@ -26,7 +26,7 @@ sleep 2 printf "\033[1m\n###################################### OS Detection #####################################\n" # Detecting OS Distribution OS=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f1 -d " ") -echo -e "# Detected: $OS #\r" +echo -e "Detected OS: $OS \r" sleep 2 printf "\033[1m\n\n#################################### Installing Prerequisites ####################################\n" printf "\033[1m#################################### This could take long time ####################################\n" From 115a35257e9a7e619b4d8cef5b4b56530aa012b3 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 27 Apr 2020 14:35:48 -0700 Subject: [PATCH 010/255] Update install.sh --- install.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/install.sh b/install.sh index 8b825aa..7b4c4aa 100755 --- a/install.sh +++ b/install.sh @@ -28,8 +28,8 @@ printf "\033[1m\n###################################### OS Detection ### OS=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f1 -d " ") echo -e "Detected OS: $OS \r" sleep 2 -printf "\033[1m\n\n#################################### Installing Prerequisites ####################################\n" -printf "\033[1m#################################### This could take long time ####################################\n" +printf "\033[1m\n\n#################################### Installing Prerequisites ###################################\n" +printf "\033[1m################################### This could take long time ###################################\n" apt update && sudo apt upgrade -y case $OS in @@ -55,7 +55,7 @@ for i in openvpn mysql php bower node unzip wget sed; do done printf "\033[1m\n\n################################### Setting MySQL Configuration ####################################\n" -printf "\033[1m######################## Note the MySQL root password! you will need it soon ########################\n" +printf "\033[1m######################## Note the MySQL root password! you will need it soon #######################\n" mysql_secure_installation @@ -74,7 +74,7 @@ fi base_path=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) -printf "\n################## Server informations ##################\n" +printf "\n#################### Server informations ####################\n" read -p "Server Hostname/IP: " ip_server @@ -203,7 +203,7 @@ fi openvpn --genkey --secret pki/ta.key -printf "\n################## Setup OpenVPN ##################\n" +printf "\n##################### Setup OpenVPN #####################\n" # Copy certificates and the server configuration in the openvpn directory cp /etc/openvpn/easy-rsa/pki/{ca.crt,ta.key,issued/server.crt,private/server.key,dh.pem} "/etc/openvpn/" @@ -218,7 +218,7 @@ fi nobody_group=$(id -ng nobody) sed -i "s/group nogroup/group $nobody_group/" "/etc/openvpn/server.conf" -printf "\n################## Setup firewall ##################\n" +printf "\n################## Setup firewall ####################\n" # Make ip forwading and make it persistent echo 1 > "/proc/sys/net/ipv4/ip_forward" From ddff86233b1e8e52832c48ce8663d1c8f0c5b473 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 27 Apr 2020 14:37:51 -0700 Subject: [PATCH 011/255] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4d10b62..f71e840 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,8 @@ Administrate its OpenVPN with a web interface (logs visualisations, users managi ### Debian 10, Raspbian Buster, Ubuntu 20 (Focal Fossa) -just let the script take care of everything +skip to "Install" section +Just download and run the install.sh script. ### Debian 9 Stretch From c35d9a62722cba66c663292342503935103b6989 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 27 Apr 2020 14:38:16 -0700 Subject: [PATCH 012/255] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f71e840..76ef557 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Raspberry Pi OpenVPN Admin (Tested on Ubuntu and Raspbian using Apache2) +## Raspberry Pi OpenVPN Admin (Tested on Ubuntu and Raspbian using Apache2) ## Summary Administrate its OpenVPN with a web interface (logs visualisations, users managing...) and a SQL database. From fac2d7d26151be0cac54817c61d002e160894535 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 27 Apr 2020 15:08:12 -0700 Subject: [PATCH 013/255] Delete icon.png --- css/icon.png | Bin 2335 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 css/icon.png diff --git a/css/icon.png b/css/icon.png deleted file mode 100644 index bb57ee6b0200ec38a2e0205edcd80ca2e602c3b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2335 zcmV+)3E=jLP)Pki3J8jdv?7R93Zm0Nr+7j|4OTl- zl{!U&b~HMpMNJ7JQtnF&5`++rq$K1bo9u2jo9y|!e{cV&o$07ZB0hh<$Go3;-)Fwh z_XVyhD+>Vcy!kKyV8Q&ybqBUSI_Ha;=k|PDy=E+~QS6l_Ha_5uyx0QK?6`fHMw_7#g5zOjJ`9J z^a;J8U_?jJRz~EltjhtrgCO7+5blXDmnf}>)@2x4o5RPJKl%2D*LVZ_=v|xN-WW}> zBTMrx%%F50=vB%vs=$)P8Xcf0283vk`EJPJASO@Ec}HVC07F6SZ7TtAZ2&bJK7V#{ z(dEZgS^(d#fZ~JD5gDw`1quu(LO>CK)2E|!h6k!30vf=m1Bh$-y+ic?{rv%r7OiJa z4hN@a;2c>1O%-7>a{#9Y1@hf00*Wxu6c#kaKnT^$wtG;iccb=5uXJ2fx zRBhjXATg*X$jub;2u*>acrXk=AOflk3OxLN2e$mJ4*3N)p>~^yKu-z)g&WIs5E8wB z7)8H7h~F%6th=?sqN+KfX7yOE4XAjJF#wqAxo2|?+pgMl4@O&^9PC&0*IAl?P%@MVc1)q%!sW3_Iq zq~5AJj9I=*C{1=DcNhc7U_p(x7>B=^fK1y~y#AU3A(lc_<#{Y!?1H9Vc{#zB}R@70iz3||R=g;(g`a$ikb62f|r`n5VyK`c@I-5tMJ$f4D6ZJ3*x4@7P z@Q_-CC98HKy`l`N>V{tD$1{~K?Ech%%yb9R9H&5t3q*jX!f ze^86719Ufq_hoTAPHm`MbVGcr0=vfy)@g#OV}O8!ueNq!<_H!#V;Xn~*k6+dZ@L@) zU;(6A>sXt5Md zx6vMHqi98igd+?x_;sXL48 zVjoPp81`?;KuLZV?7~SLZ^*p3>685z2OUOh)-5(%FUuti;hvX5fmz9DFXt=tAZNH9 z*<*Kv;@w6dl6bR0@j`bsi_^3q@@mD)J8nL>C51d(hvZq zPaN-fYPzRCJ3|L#q+`THFLdc?P-8)8N)n902Abjkh6ADgn-y}h2mRfb;l6$%zWK5t zG2y|lb0MDZA5IP@ef~v^K%a5b!>t1-XqF`)x(5wboQ(<5FzZC0JJo|oDO9lX<*k_jbh?&!p zAki+w6&EN?g%a_D5Ct^Hps-j&cfbYz2@W=67{f9x@jjiCkNJ~*Z`J0le(#IwuBQ5< z7*$p=bbwXsYuZXnA80ARK`ctiP8gLKE*#UNpfCc~#)2qr5EbBf9dwKjAO4dAV?yHV zR`1B8$KOi;!1`5-u6X#5#_{(xe#}khxPKhHI ze~0On&EbJ`QPGNuJZj0&v&|m^z@fUc_}NeJ`U}6sinUvgES)lG-ksyGdpFCaWI#?! zoWBs$QfgZK^u>TDBqy0B-jI3hU~O#WqPymK`F4!3>d7^?l<%YWA!w{;c%BE=_$4`M;CSa46^YU5VJ)(r`?trLsXF!{8HNY!H+k&&(A7* z_nrBLWaon;yPUY6UAOSolI{2BtLXR$Zf+M@0<$2%Xst~dia3on0hTwfX%9E~r2vg;=Su4uwF zt5;K-H&@Yby!z^!GnTB_(jDkFW>qZEjVz)(Q+=(zfrtQM)UQx7XAYHmSSJ z--4{k)1WFH44WXu%c}NQU(@x!vi_yow$^sicB!50*}adXQb{7pBB_66Jo)%f>quWD zLI@$`#Lla`mej+t@)T^Zh7v|Q?d z(cysJXo98y&CbPelud=%WCj3?zI_?=H_U_8W&!|sODhnFXW(*FYWmp#40tis+Y^Zf zx_ZxD4oOaX8U#U9Qqfpn2T%JIXds#jNfPD8hQ@wl;Vs`;ia-!V>0q>A``W+nta|y^ zvxaWM=PUn$4Qqb~0GK;vvT@uU_vVi)^reYHYM`dJwmr9S3{_m1KYB#Ahv~fB-TzVb z`~FGuAGs&jrp>iljsHsViO=s__(0QZ3n%00tw(+m;6DPe=Vb_Kp0@x1002ovPDHLk FV1g|HPU-*v From c1b119bfd09ceab208f5b3f5c4004b5fee6b3ba9 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 27 Apr 2020 15:08:52 -0700 Subject: [PATCH 014/255] Add files via upload --- css/icon.png | Bin 0 -> 839 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 css/icon.png diff --git a/css/icon.png b/css/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9cf04255a8f186a4281fb8f448ea70f74af57c9d GIT binary patch literal 839 zcmV-N1GxN&P)nu~K~z|U?UzkR6k!<0fA6d=yMBe61)-QJ)S-hGiM~@jSy}Cr1T+#4^8WT_v*RNN}ezaP;=#; zGdFwffk3tcN|G{7B0AUAypEBchrxXVXu8^3VY6v(f#arVVKNd?F1~;5oiZv+b|z7I zJRZeni*#EU4shINi*$QD9>aXYf|1FYb`Z63rW9ic(Tt`QqiMwm(To&h@tvY}t2eb$ zeg%y!EspGP)*|5C>EPvJu5#1o^{TP8?$*|9*Shus$&DC0sMoJg!xDgmym&+TZ3K{5qsy=Y@Hg}yAo)Hp=xiLEI{Fl`vjbKXEqyFGusWS8 zFtAckI<-)EHfl&F8!G&FXb29N2N-g+1CPv{fd$>AKGbOpFr0q~sRjW1J_Cdi*(KEd znvXSixd+th3=C&0Q>{)kv-EW`AB17rXy6DRew3mJN$s&|s*2}KFvxrp0LJS1dXi_K zPDj^o#!qnj%qW*D$1P`Behim_4!XZo>HMzGRjh;@nFp9!aIvZB+cq_Y@AIzA1C$?J zN_wo!wVZhXS5A<+a=*^6E1#w)*Z5tvX8?eXbHmh>%|zGLrL){`8cHWBJpe^W3UhXT zbr(8A*c5C3FZKig5LhmVex6;`J>HoIm|fWc`1vmYVsE&^dFyEd?6wnbnrVD|sXv{0 zx@`RwkXYYO&1#oyJwW}&1d_fC4DX|UW5O5!AZz0~;04UQ;*2y0c(*fk`U8!J^77g7 RzFhzS002ovPDHLkV1lAVc>@3d literal 0 HcmV?d00001 From 868bf13981558ea12273f234b7cea8f1c489209d Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 27 Apr 2020 16:08:52 -0700 Subject: [PATCH 015/255] Update install.sh --- install.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/install.sh b/install.sh index 7b4c4aa..a0d073f 100755 --- a/install.sh +++ b/install.sh @@ -270,6 +270,7 @@ sed -i "s/\$pass = '';/\$pass = '$mysql_pass';/" "./include/config.php" # Replace in the client configurations with the ip of the server and openvpn protocol for file in $(find -name client.ovpn); do sed -i "s/remote xxx\.xxx\.xxx\.xxx 1194/remote $ip_server $server_port/" $file + sed -i "s/remote xxx\.xxx\.xxx\.xxx 443/remote $ip_server $server_port/" $file echo "" >> $file cat "/etc/openvpn/ca.crt" >> $file echo "" >> $file From 10e244a2cbd461d956189fbb2e7c606f0a5a8439 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 27 Apr 2020 16:09:48 -0700 Subject: [PATCH 016/255] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 76ef557..e1e7d98 100644 --- a/README.md +++ b/README.md @@ -86,7 +86,7 @@ Only tested on Ubuntu 20.04 LTS (Focal Fossa) and Raspbian Buster. Feel free to ## Desinstall It will remove all installed components (OpenVPN keys and configurations, the web application, iptables rules...). - # ./desinstall.sh /var/www + # sudo ./desinstall.sh /var/www ## Use of From 6954c98be326ef2f9cb73f51ab9cf0e62667e61d Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 27 Apr 2020 17:18:57 -0700 Subject: [PATCH 017/255] Update install.sh --- install.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/install.sh b/install.sh index a0d073f..1d3bec8 100755 --- a/install.sh +++ b/install.sh @@ -324,3 +324,4 @@ echo -e "# Congratulations, you have successfully setup OpenVPN-Admin! #\r" echo -e "and install the web application by visiting http://your-installation/index.php?installation\r" echo "Please, report any issues here https://github.com/arvage/OpenVPN-Admin" printf "\n################################################################################ \033[0m\n" +systemctl restart openvpn@server From b85b6c650e7c2a5314911c63ffac1ef9f47c4a13 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 27 Apr 2020 17:25:38 -0700 Subject: [PATCH 018/255] Update install.sh --- install.sh | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/install.sh b/install.sh index 1d3bec8..f2a10ea 100755 --- a/install.sh +++ b/install.sh @@ -305,17 +305,17 @@ printf "\033[1m\n\n################################# Setting OpenVPN Configurati #sed -i 's/80.67.169.40/8.8.4.4/g' /etc/openvpn/server.conf systemctl start openvpn@server -printf "\033[1m\n\n################################# Let'sEncrypt SSL Certificate ####################################\n" -printf "\033[1m###### NOTE: You need port 80 on the public facing side to be open and forwarded to this instance #####\n" -read -p "Do you wish to setup Let'sEncrypt SSL? (y/n) " yn -case $yn in - [Yy]*) - read -p "provide the domain name without www.: " domain_name; - apt install -y python-certbot-apache; - certbot -n --apache -d $domain_name -d www.$domain_name --agree-tos -m $cert_email --no-redirect ;; - [Nn]*) - ;; -esac +#printf "\033[1m\n\n################################# Let'sEncrypt SSL Certificate ####################################\n" +#printf "\033[1m###### NOTE: You need port 80 on the public facing side to be open and forwarded to this instance #####\n" +#read -p "Do you wish to setup Let'sEncrypt SSL? (y/n) " yn +#case $yn in +# [Yy]*) +# read -p "provide the domain name without www.: " domain_name; +# apt install -y python-certbot-apache; +# certbot -n --apache -d $domain_name -d www.$domain_name --agree-tos -m $cert_email --no-redirect ;; +# [Nn]*) +# ;; +#esac printf "\033[1m\n################################################################################\n" printf "\033[1m#################################### Finish ####################################\n" From c4552dd03ccb824c52b118dc9b7289d7f05350d1 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 27 Apr 2020 20:53:12 -0700 Subject: [PATCH 019/255] Update index.php --- index.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/index.php b/index.php index 457b46e..161ac5b 100644 --- a/index.php +++ b/index.php @@ -12,7 +12,9 @@ } // Get the configuration files ? - if(isset($_POST['configuration_get'], $_POST['configuration_username'], $_POST['configuration_pass'], $_POST['configuration_os']) +// if(isset($_POST['configuration_get'], $_POST['configuration_username'], $_POST['configuration_pass'], $_POST['configuration_os']) + if(isset($_POST['configuration_get'], $_POST['configuration_username'], $_POST['configuration_pass']) + && !empty($_POST['configuration_pass'])) { $req = $bdd->prepare('SELECT * FROM user WHERE user_id = ?'); $req->execute(array($_POST['configuration_username'])); From 074b8686682e1d105377c89323470d741d94bf5f Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 27 Apr 2020 20:55:38 -0700 Subject: [PATCH 020/255] Update configuration.php --- include/html/form/configuration.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/html/form/configuration.php b/include/html/form/configuration.php index 294d18a..70b9b51 100644 --- a/include/html/form/configuration.php +++ b/include/html/form/configuration.php @@ -17,7 +17,7 @@ - + From d6514ab729d5fe0e14e51ccb29adf93b1902a2b5 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 27 Apr 2020 21:40:09 -0700 Subject: [PATCH 021/255] Update index.php --- index.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/index.php b/index.php index 161ac5b..029f577 100644 --- a/index.php +++ b/index.php @@ -23,13 +23,13 @@ // Error ? if($data && passEqual($_POST['configuration_pass'], $data['user_pass'])) { // Thanks http://stackoverflow.com/questions/4914750/how-to-zip-a-whole-folder-using-php - if($_POST['configuration_os'] == "gnu_linux") { - $conf_dir = 'gnu-linux'; - } elseif($_POST['configuration_os'] == "osx_viscosity") { - $conf_dir = 'osx-viscosity'; - } else { +// if($_POST['configuration_os'] == "gnu_linux") { +// $conf_dir = 'gnu-linux'; +// } elseif($_POST['configuration_os'] == "osx_viscosity") { +// $conf_dir = 'osx-viscosity'; +// } else { $conf_dir = 'windows'; - } +// } $rootPath = realpath("./client-conf/$conf_dir"); // Initialize archive object ;;;; why doing this every time the user logs in, when the cert is static? From d821641fbdc6a9236956a78aa573a7089a9fda30 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Tue, 28 Apr 2020 14:35:30 -0700 Subject: [PATCH 022/255] Update index.php --- index.php | 46 ++++++---------------------------------------- 1 file changed, 6 insertions(+), 40 deletions(-) diff --git a/index.php b/index.php index 029f577..eed3f64 100644 --- a/index.php +++ b/index.php @@ -22,49 +22,15 @@ // Error ? if($data && passEqual($_POST['configuration_pass'], $data['user_pass'])) { - // Thanks http://stackoverflow.com/questions/4914750/how-to-zip-a-whole-folder-using-php -// if($_POST['configuration_os'] == "gnu_linux") { -// $conf_dir = 'gnu-linux'; -// } elseif($_POST['configuration_os'] == "osx_viscosity") { -// $conf_dir = 'osx-viscosity'; -// } else { - $conf_dir = 'windows'; -// } - $rootPath = realpath("./client-conf/$conf_dir"); - - // Initialize archive object ;;;; why doing this every time the user logs in, when the cert is static? - $archive_base_name = "openvpn-$conf_dir"; - $archive_name = "$archive_base_name.zip"; - $archive_path = "./client-conf/$archive_name"; - $zip = new ZipArchive(); - $zip->open($archive_path, ZipArchive::CREATE | ZipArchive::OVERWRITE); - - $files = new RecursiveIteratorIterator( - new RecursiveDirectoryIterator($rootPath), - RecursiveIteratorIterator::LEAVES_ONLY - ); - - foreach ($files as $name => $file) { - // Skip directories (they would be added automatically) - if (!$file->isDir()) { - // Get real and relative path for current file - $filePath = $file->getRealPath(); - $relativePath = substr($filePath, strlen($rootPath) + 1); - - // Add current file to archive - $zip->addFile($filePath, "$archive_base_name/$relativePath"); - } - } - - // Zip archive will be created only after closing object - $zip->close(); + $file_name = "client.ovpn"; + $file_folder = "windows"; + $file_full_path = './client-conf/' . $file_folder . '/' . $file_name; - //then send the headers to foce download the zip file - header("Content-type: application/zip"); - header("Content-Disposition: attachment; filename=$archive_name"); + header("Content-type: application/ovpn"); + header("Content-disposition: attachment; filename=$file_name"); header("Pragma: no-cache"); header("Expires: 0"); - readfile($archive_path); + readfile($file_full_path); } else { $error = true; From c3bad153e3899adc0ece330c3f31f371b7ec0e0a Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Thu, 30 Apr 2020 22:53:29 -0700 Subject: [PATCH 023/255] Update install.sh --- install.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install.sh b/install.sh index f2a10ea..b7d23b3 100755 --- a/install.sh +++ b/install.sh @@ -34,10 +34,10 @@ apt update && sudo apt upgrade -y case $OS in Ubuntu) - apt install -y openvpn apache2 mysql-server php php-mysql php-zip unzip git wget sed curl nodejs npm mc net-tools + apt install -y openvpn apache2 mysql-server php php-mysql php-zip php-mcrypt unzip git wget sed curl nodejs npm mc net-tools ;; Raspbian) - apt install -y openvpn apache2 mariadb-server php php-mysql php-zip unzip git wget sed curl nodejs npm mc + apt install -y openvpn apache2 mariadb-server php php-mysql php-zip php-mcrypt unzip git wget sed curl nodejs npm mc ;; *) echo "Can't detect OS distribution! you need to install prerequisites manully" From 47e526aa685d2825d70a9e0635329a69b7dddf28 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Fri, 1 May 2020 10:01:57 -0700 Subject: [PATCH 024/255] Update install.sh --- install.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/install.sh b/install.sh index b7d23b3..d320ccc 100755 --- a/install.sh +++ b/install.sh @@ -34,10 +34,10 @@ apt update && sudo apt upgrade -y case $OS in Ubuntu) - apt install -y openvpn apache2 mysql-server php php-mysql php-zip php-mcrypt unzip git wget sed curl nodejs npm mc net-tools + apt install -y openvpn apache2 mysql-server php php-mysql php-zip unzip git wget sed curl nodejs npm mc net-tools ;; Raspbian) - apt install -y openvpn apache2 mariadb-server php php-mysql php-zip php-mcrypt unzip git wget sed curl nodejs npm mc + apt install -y openvpn apache2 mariadb-server php php-mysql php-zip unzip git wget sed curl nodejs npm mc ;; *) echo "Can't detect OS distribution! you need to install prerequisites manully" @@ -295,6 +295,8 @@ chown -R "$user:$group" "$openvpn_admin" printf "\033[1m\n\n################################### Setting Apache Configuration ####################################\n" cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/openvpn.conf sed -i 's/\/var\/www\/html/\/var\/www\/openvpn-admin/g' /etc/apache2/sites-available/openvpn.conf +sed -i '/<\/VirtualHost>/i \\n\t\n\t\tOptions Indexes FollowSymLinks\n\t\tAllowOverride All\n\t\tRequire all granted\n\t<\/Directory>' /etc/apache2/sites-available/openvpn.conf + a2dissite 000-default a2ensite openvpn systemctl restart apache2 From 6e5ba472a827fa45c394362d61a6809e7d6f1e70 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Fri, 1 May 2020 10:10:25 -0700 Subject: [PATCH 025/255] Create .htaccess --- installation/client-conf/.htaccess | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 installation/client-conf/.htaccess diff --git a/installation/client-conf/.htaccess b/installation/client-conf/.htaccess new file mode 100644 index 0000000..e06c64e --- /dev/null +++ b/installation/client-conf/.htaccess @@ -0,0 +1,6 @@ +Options -Indexes + +AuthType Basic +AuthName "restricted area" +AuthUserFile /var/www/.htpasswd +require valid-user From 8056284f86b60c778430e84a9aca5fc15c0eab51 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Fri, 1 May 2020 11:12:48 -0700 Subject: [PATCH 026/255] Update install.sh creating .htpasswd and generating secure password for client-config --- install.sh | 66 ++++++++++++++++++++++++++++++++---------------------- 1 file changed, 39 insertions(+), 27 deletions(-) diff --git a/install.sh b/install.sh index d320ccc..534f761 100755 --- a/install.sh +++ b/install.sh @@ -1,5 +1,13 @@ #!/bin/bash +NC='\033[0m' # No Color +Red='\033[1;31m' # Light Red +Yellow='\033[0;33m' # Yellow +Green='\033[0;32m' # Green +Cyan='\033[0;36m' # Cyan +Purple='\033[0;35m' # Purple + + print_help () { echo -e "./install.sh www_basedir user group" echo -e "\tbase_dir: The place where the web application will be put in" @@ -9,8 +17,8 @@ print_help () { # Ensure to be root if [ "$EUID" -ne 0 ]; then - echo "Please use sudo to run the script. e.g:" - echo "sudo ./install.sh /var/www www-data www-data" + echo -e "${Red}Please use sudo to run the script. e.g:${NC}" + echo -e "${Green}sudo ./install.sh /var/www www-data www-data${NC}" exit fi @@ -21,15 +29,15 @@ if [ "$#" -ne 3 ]; then fi -printf "\033[1m\n###################################### Installation Started #####################################\n" +echo -e "${Green}###################################### Installation Started #####################################" sleep 2 -printf "\033[1m\n###################################### OS Detection #####################################\n" +echo -e "${Purple}###################################### OS Detection #####################################" # Detecting OS Distribution OS=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f1 -d " ") -echo -e "Detected OS: $OS \r" +echo -e "${Cyan}Detected OS: $OS \r" sleep 2 -printf "\033[1m\n\n#################################### Installing Prerequisites ###################################\n" -printf "\033[1m################################### This could take long time ###################################\n" +echo -e "${Green}#################################### Installing Prerequisites ###################################" +echo -e "################################### This could take long time ###################################${NC}" apt update && sudo apt upgrade -y case $OS in @@ -40,7 +48,7 @@ case $OS in apt install -y openvpn apache2 mariadb-server php php-mysql php-zip unzip git wget sed curl nodejs npm mc ;; *) - echo "Can't detect OS distribution! you need to install prerequisites manully" + echo -e "${Red}Can't detect OS distribution! you need to install prerequisites manully${NC}" exit esac npm install -g bower @@ -49,13 +57,13 @@ npm install -g bower for i in openvpn mysql php bower node unzip wget sed; do which $i > /dev/null if [ "$?" -ne 0 ]; then - echo "$i is missing. Please install $i manually." + echo -e "${Red}$i is missing. Please install $i manually.${NC}" exit fi done -printf "\033[1m\n\n################################### Setting MySQL Configuration ####################################\n" -printf "\033[1m######################## Note the MySQL root password! you will need it soon #######################\n" +echo -e "${Green}################################### Setting MySQL Configuration ####################################" +echo -e "######################## Note the MySQL root password! you will need it soon #######################${NC}" mysql_secure_installation @@ -74,7 +82,7 @@ fi base_path=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) -printf "\n#################### Server informations ####################\n" +echo -e "${Green}#################### Server informations ####################${NC}" read -p "Server Hostname/IP: " ip_server @@ -121,8 +129,7 @@ read -p "MySQL user password for OpenVPN-Admin: " -s mysql_pass; echo # TODO MySQL port & host ? - -printf "\n################## Certificates informations ##################\n" +echo -e "${Green}################## Certificates informations ##################${NC}" read -p "Key size (1024, 2048 or 4096) [2048]: " key_size @@ -145,7 +152,7 @@ read -p "Email Address [me@example.net]: " cert_email read -p "Common Name (eg, your name or your server's hostname) [ChangeMe]: " key_cn -printf "\n################## Creating the certificates ##################\n" +echo -e "${Green}################## Creating the certificates ##################${Yellow}" # Get the rsa keys EASYRSA_VERSION=$(curl -s https://api.github.com/repos/OpenVPN/easy-rsa/releases/latest | grep "tag_name" | cut -f2 -d "v" | sed 's/[",]//g') @@ -203,7 +210,7 @@ fi openvpn --genkey --secret pki/ta.key -printf "\n##################### Setup OpenVPN #####################\n" +echo -e "${Green}##################### Setup OpenVPN #####################${NC}" # Copy certificates and the server configuration in the openvpn directory cp /etc/openvpn/easy-rsa/pki/{ca.crt,ta.key,issued/server.crt,private/server.key,dh.pem} "/etc/openvpn/" @@ -218,7 +225,7 @@ fi nobody_group=$(id -ng nobody) sed -i "s/group nogroup/group $nobody_group/" "/etc/openvpn/server.conf" -printf "\n################## Setup firewall ####################\n" +echo -e "${Green}################## Setup firewall ####################${NC}" # Make ip forwading and make it persistent echo 1 > "/proc/sys/net/ipv4/ip_forward" @@ -238,7 +245,7 @@ iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o $primary_nic -j MASQUERADE iptables -t nat -A POSTROUTING -s 10.8.0.2/24 -o $primary_nic -j MASQUERADE -printf "\n################## Setup MySQL database ##################\n" +echo -e "${Green}################## Setup MySQL database ##################${NC}" echo "CREATE DATABASE \`openvpn-admin\`" | mysql -u root --password="$mysql_root_pass" echo "CREATE USER $mysql_user@localhost IDENTIFIED BY '$mysql_pass'" | mysql -u root --password="$mysql_root_pass" @@ -246,7 +253,7 @@ echo "GRANT ALL PRIVILEGES ON \`openvpn-admin\`.* TO $mysql_user@localhost" | m echo "FLUSH PRIVILEGES" | mysql -u root --password="$mysql_root_pass" -printf "\n################## Setup web application ##################\n" +echo -e "${Green}################## Setup web application ##################${NC}" # Copy bash scripts (which will insert row in MySQL) cp -r "$base_path/installation/scripts" "/etc/openvpn/" @@ -292,16 +299,21 @@ done bower --allow-root install chown -R "$user:$group" "$openvpn_admin" -printf "\033[1m\n\n################################### Setting Apache Configuration ####################################\n" +echo -e "${Green}################################### Setting Apache Configuration ####################################${NC}" cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/openvpn.conf sed -i 's/\/var\/www\/html/\/var\/www\/openvpn-admin/g' /etc/apache2/sites-available/openvpn.conf sed -i '/<\/VirtualHost>/i \\n\t\n\t\tOptions Indexes FollowSymLinks\n\t\tAllowOverride All\n\t\tRequire all granted\n\t<\/Directory>' /etc/apache2/sites-available/openvpn.conf - +touch /var/www/.htpasswd +chown www-data:www-data /var/www/.htpasswd +echo -e "${Yellow}It's time to secure client configuration folder from anonymous browser and assign a super admin user to be only able to browse it.\r" +echo -e "This username / password will only applies to http:// your-site/client-config and all sub directories\r${NC}" +read -p "Client Configuration Web Access Username: " client_folder_username +htpasswd /var/www/.htpasswd $client_folder_username a2dissite 000-default a2ensite openvpn systemctl restart apache2 -printf "\033[1m\n\n################################# Setting OpenVPN Configuration ####################################\n" +echo -e "${Green}################################# Setting OpenVPN Configuration ####################################${NC}" #sed -i 's/explicit-exit-notify 1/# explicit-exit-notify 1/g' /etc/openvpn/server.conf #sed -i 's/80.67.169.12/8.8.8.8/g' /etc/openvpn/server.conf #sed -i 's/80.67.169.40/8.8.4.4/g' /etc/openvpn/server.conf @@ -319,11 +331,11 @@ systemctl start openvpn@server # ;; #esac -printf "\033[1m\n################################################################################\n" -printf "\033[1m#################################### Finish ####################################\n" +echo -e "${Cyan}################################################################################" +echo -e "#################################### Finish ####################################" -echo -e "# Congratulations, you have successfully setup OpenVPN-Admin! #\r" +echo -e "${Purple}# Congratulations, you have successfully setup OpenVPN-Admin! #\r" echo -e "and install the web application by visiting http://your-installation/index.php?installation\r" -echo "Please, report any issues here https://github.com/arvage/OpenVPN-Admin" -printf "\n################################################################################ \033[0m\n" +echo -e "Please, report any issues here https://github.com/arvage/OpenVPN-Admin" +echo -e "${Cyan}################################################################################${NC}" systemctl restart openvpn@server From 27dfb33287c274334229541fdf97b71649175cb8 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Fri, 1 May 2020 11:30:51 -0700 Subject: [PATCH 027/255] Update install.sh some installation visual touchups --- install.sh | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/install.sh b/install.sh index 534f761..1cdebb5 100755 --- a/install.sh +++ b/install.sh @@ -29,15 +29,15 @@ if [ "$#" -ne 3 ]; then fi -echo -e "${Green}###################################### Installation Started #####################################" +echo -e "${Green}###################################### Installation Started #####################################\r" sleep 2 -echo -e "${Purple}###################################### OS Detection #####################################" +echo -e "${Purple}###################################### OS Detection #####################################\r" # Detecting OS Distribution OS=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f1 -d " ") echo -e "${Cyan}Detected OS: $OS \r" sleep 2 -echo -e "${Green}#################################### Installing Prerequisites ###################################" -echo -e "################################### This could take long time ###################################${NC}" +echo -e "${Green}#################################### Installing Prerequisites ###################################\r" +echo -e "################################### This could take long time ###################################\r${NC}" apt update && sudo apt upgrade -y case $OS in @@ -62,8 +62,8 @@ for i in openvpn mysql php bower node unzip wget sed; do fi done -echo -e "${Green}################################### Setting MySQL Configuration ####################################" -echo -e "######################## Note the MySQL root password! you will need it soon #######################${NC}" +echo -e "${Green}################################### Setting MySQL Configuration ####################################\r" +echo -e "######################## Note the MySQL root password! you will need it soon #######################\r${NC}" mysql_secure_installation @@ -82,7 +82,7 @@ fi base_path=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) -echo -e "${Green}#################### Server informations ####################${NC}" +echo -e "${Green}#################### Server informations ####################\r${NC}" read -p "Server Hostname/IP: " ip_server @@ -129,7 +129,7 @@ read -p "MySQL user password for OpenVPN-Admin: " -s mysql_pass; echo # TODO MySQL port & host ? -echo -e "${Green}################## Certificates informations ##################${NC}" +echo -e "${Green}################## Certificates informations ##################\r${NC}" read -p "Key size (1024, 2048 or 4096) [2048]: " key_size @@ -152,7 +152,7 @@ read -p "Email Address [me@example.net]: " cert_email read -p "Common Name (eg, your name or your server's hostname) [ChangeMe]: " key_cn -echo -e "${Green}################## Creating the certificates ##################${Yellow}" +echo -e "${Green}################## Creating the certificates ##################\r${Yellow}" # Get the rsa keys EASYRSA_VERSION=$(curl -s https://api.github.com/repos/OpenVPN/easy-rsa/releases/latest | grep "tag_name" | cut -f2 -d "v" | sed 's/[",]//g') @@ -210,7 +210,7 @@ fi openvpn --genkey --secret pki/ta.key -echo -e "${Green}##################### Setup OpenVPN #####################${NC}" +echo -e "${Green}##################### Setup OpenVPN #####################\r${NC}" # Copy certificates and the server configuration in the openvpn directory cp /etc/openvpn/easy-rsa/pki/{ca.crt,ta.key,issued/server.crt,private/server.key,dh.pem} "/etc/openvpn/" @@ -225,7 +225,7 @@ fi nobody_group=$(id -ng nobody) sed -i "s/group nogroup/group $nobody_group/" "/etc/openvpn/server.conf" -echo -e "${Green}################## Setup firewall ####################${NC}" +echo -e "${Green}################## Setup firewall ####################\r${NC}" # Make ip forwading and make it persistent echo 1 > "/proc/sys/net/ipv4/ip_forward" @@ -245,7 +245,7 @@ iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o $primary_nic -j MASQUERADE iptables -t nat -A POSTROUTING -s 10.8.0.2/24 -o $primary_nic -j MASQUERADE -echo -e "${Green}################## Setup MySQL database ##################${NC}" +echo -e "${Green}################## Setup MySQL database ##################\r${NC}" echo "CREATE DATABASE \`openvpn-admin\`" | mysql -u root --password="$mysql_root_pass" echo "CREATE USER $mysql_user@localhost IDENTIFIED BY '$mysql_pass'" | mysql -u root --password="$mysql_root_pass" @@ -253,7 +253,7 @@ echo "GRANT ALL PRIVILEGES ON \`openvpn-admin\`.* TO $mysql_user@localhost" | m echo "FLUSH PRIVILEGES" | mysql -u root --password="$mysql_root_pass" -echo -e "${Green}################## Setup web application ##################${NC}" +echo -e "${Green}################## Setup web application ##################\r${NC}" # Copy bash scripts (which will insert row in MySQL) cp -r "$base_path/installation/scripts" "/etc/openvpn/" @@ -299,7 +299,7 @@ done bower --allow-root install chown -R "$user:$group" "$openvpn_admin" -echo -e "${Green}################################### Setting Apache Configuration ####################################${NC}" +echo -e "${Green}################################### Setting Apache Configuration ####################################\r${NC}" cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/openvpn.conf sed -i 's/\/var\/www\/html/\/var\/www\/openvpn-admin/g' /etc/apache2/sites-available/openvpn.conf sed -i '/<\/VirtualHost>/i \\n\t\n\t\tOptions Indexes FollowSymLinks\n\t\tAllowOverride All\n\t\tRequire all granted\n\t<\/Directory>' /etc/apache2/sites-available/openvpn.conf @@ -313,7 +313,7 @@ a2dissite 000-default a2ensite openvpn systemctl restart apache2 -echo -e "${Green}################################# Setting OpenVPN Configuration ####################################${NC}" +echo -e "${Green}################################# Setting OpenVPN Configuration ####################################\r${NC}" #sed -i 's/explicit-exit-notify 1/# explicit-exit-notify 1/g' /etc/openvpn/server.conf #sed -i 's/80.67.169.12/8.8.8.8/g' /etc/openvpn/server.conf #sed -i 's/80.67.169.40/8.8.4.4/g' /etc/openvpn/server.conf @@ -334,8 +334,8 @@ systemctl start openvpn@server echo -e "${Cyan}################################################################################" echo -e "#################################### Finish ####################################" -echo -e "${Purple}# Congratulations, you have successfully setup OpenVPN-Admin! #\r" -echo -e "and install the web application by visiting http://your-installation/index.php?installation\r" -echo -e "Please, report any issues here https://github.com/arvage/OpenVPN-Admin" +echo -e "${Purple}# Congratulations, you have successfully setup OpenVPN-Admin! #" +echo -e "# Finish the install using http://your-installation/index.php?installation #" +echo -e "# Please, report any issues here https://github.com/arvage/OpenVPN-Admin #" echo -e "${Cyan}################################################################################${NC}" systemctl restart openvpn@server From 00a8f9f187cef2c7cdb4d4cfec28b7df9b3697e8 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Fri, 1 May 2020 11:38:45 -0700 Subject: [PATCH 028/255] Update install.sh --- install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.sh b/install.sh index 1cdebb5..a5cba7f 100755 --- a/install.sh +++ b/install.sh @@ -225,7 +225,7 @@ fi nobody_group=$(id -ng nobody) sed -i "s/group nogroup/group $nobody_group/" "/etc/openvpn/server.conf" -echo -e "${Green}################## Setup firewall ####################\r${NC}" +echo -e "${Green}################## Setup Firewall ####################\r${NC}" # Make ip forwading and make it persistent echo 1 > "/proc/sys/net/ipv4/ip_forward" From 145f04769fb51fe4b87d347b8fc1e38716dad6fe Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Fri, 1 May 2020 11:49:24 -0700 Subject: [PATCH 029/255] Fixed client conf download --- include/html/form/configuration.php | 10 ---------- index.php | 6 ++---- 2 files changed, 2 insertions(+), 14 deletions(-) diff --git a/include/html/form/configuration.php b/include/html/form/configuration.php index 70b9b51..81df9de 100644 --- a/include/html/form/configuration.php +++ b/include/html/form/configuration.php @@ -17,16 +17,6 @@ - diff --git a/index.php b/index.php index eed3f64..b65c0ea 100644 --- a/index.php +++ b/index.php @@ -12,10 +12,7 @@ } // Get the configuration files ? -// if(isset($_POST['configuration_get'], $_POST['configuration_username'], $_POST['configuration_pass'], $_POST['configuration_os']) - if(isset($_POST['configuration_get'], $_POST['configuration_username'], $_POST['configuration_pass']) - - && !empty($_POST['configuration_pass'])) { + if(isset($_POST['configuration_get'], $_POST['configuration_username'], $_POST['configuration_pass']) && !empty($_POST['configuration_pass'])) { $req = $bdd->prepare('SELECT * FROM user WHERE user_id = ?'); $req->execute(array($_POST['configuration_username'])); $data = $req->fetch(); @@ -31,6 +28,7 @@ header("Pragma: no-cache"); header("Expires: 0"); readfile($file_full_path); + exit; } else { $error = true; From d3ee3a7cd7b31ca9b5ce0bd8d8cf386236f7ede3 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Fri, 1 May 2020 11:54:35 -0700 Subject: [PATCH 030/255] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index e1e7d98..5ab807e 100644 --- a/README.md +++ b/README.md @@ -26,9 +26,7 @@ Administrate its OpenVPN with a web interface (logs visualisations, users managi ### Debian 10, Raspbian Buster, Ubuntu 20 (Focal Fossa) -skip to "Install" section -Just download and run the install.sh script. - +Skip to "Installation" section ### Debian 9 Stretch @@ -58,6 +56,8 @@ not supported and tested Only tested on Ubuntu 20.04 LTS (Focal Fossa) and Raspbian Buster. Feel free to open issues. + + ## Installation * Setup OpenVPN and the web application: From 00e29a76e37b4ad5eb7c3ae1c5fc26c006f2e3c6 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Fri, 1 May 2020 12:16:41 -0700 Subject: [PATCH 031/255] Visual touchups --- install.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/install.sh b/install.sh index a5cba7f..0cc9f49 100755 --- a/install.sh +++ b/install.sh @@ -334,8 +334,8 @@ systemctl start openvpn@server echo -e "${Cyan}################################################################################" echo -e "#################################### Finish ####################################" -echo -e "${Purple}# Congratulations, you have successfully setup OpenVPN-Admin! #" -echo -e "# Finish the install using http://your-installation/index.php?installation #" -echo -e "# Please, report any issues here https://github.com/arvage/OpenVPN-Admin #" +echo -e "${Cyan}#${Purple} Congratulations, you have successfully setup OpenVPN-Admin! ${Cyan}#" +echo -e "${Cyan}#${Purple} Finish the install using http://your-installation/index.php?installation ${Cyan}#" +echo -e "${Cyan}#${Purple} Please, report any issues here https://github.com/arvage/OpenVPN-Admin ${Cyan}#" echo -e "${Cyan}################################################################################${NC}" systemctl restart openvpn@server From b025f20cde6e618f5b392b9857c40577476fd289 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Fri, 1 May 2020 12:22:52 -0700 Subject: [PATCH 032/255] visual touchups --- install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.sh b/install.sh index 0cc9f49..ca3ccf0 100755 --- a/install.sh +++ b/install.sh @@ -306,7 +306,7 @@ sed -i '/<\/VirtualHost>/i \\n\t\n\t\tOptio touch /var/www/.htpasswd chown www-data:www-data /var/www/.htpasswd echo -e "${Yellow}It's time to secure client configuration folder from anonymous browser and assign a super admin user to be only able to browse it.\r" -echo -e "This username / password will only applies to http:// your-site/client-config and all sub directories\r${NC}" +echo -e "This username / password will only applies to http://your-site/client-config and all sub directories\r${NC}" read -p "Client Configuration Web Access Username: " client_folder_username htpasswd /var/www/.htpasswd $client_folder_username a2dissite 000-default From 5e88c7becd989611308b04671e8a67c61b939684 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Fri, 1 May 2020 12:26:43 -0700 Subject: [PATCH 033/255] added git as prerequisite --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 5ab807e..bd686b2 100644 --- a/README.md +++ b/README.md @@ -62,6 +62,8 @@ Only tested on Ubuntu 20.04 LTS (Focal Fossa) and Raspbian Buster. Feel free to * Setup OpenVPN and the web application: + $ sudo apt update + $ sudo apt install -y git $ cd ~ $ git clone https://github.com/arvage/OpenVPN-Admin openvpn-admin $ cd openvpn-admin From acf5dccfeca0910e369750dc5fe52dc1020b0c49 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Fri, 1 May 2020 12:51:57 -0700 Subject: [PATCH 034/255] fixed configuration file name on save --- index.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/index.php b/index.php index b65c0ea..619094d 100644 --- a/index.php +++ b/index.php @@ -19,12 +19,13 @@ // Error ? if($data && passEqual($_POST['configuration_pass'], $data['user_pass'])) { + $download_name = $_POST['configuration_username']; $file_name = "client.ovpn"; $file_folder = "windows"; $file_full_path = './client-conf/' . $file_folder . '/' . $file_name; header("Content-type: application/ovpn"); - header("Content-disposition: attachment; filename=$file_name"); + header("Content-disposition: attachment; filename=$download_name.ovpn"); header("Pragma: no-cache"); header("Expires: 0"); readfile($file_full_path); From d38654383eea3d2b6aa83e9c1866655bede8bcf5 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Fri, 1 May 2020 14:09:21 -0700 Subject: [PATCH 035/255] Update install.sh --- install.sh | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/install.sh b/install.sh index ca3ccf0..ca9e7fb 100755 --- a/install.sh +++ b/install.sh @@ -117,7 +117,13 @@ fi # Check if the user doesn't already exist -read -p "MySQL user name for OpenVPN-Admin (will be created): " mysql_user +read -p "MySQL user name for OpenVPN-Admin (required, please specify one): " mysql_user + +if [[ -z "$mysql_user" ]]; then + printf '%s\n' "No input entered" + read -p "MySQL user name for OpenVPN-Admin (required, please specify one): " mysql_user +else +fi echo "SHOW GRANTS FOR $mysql_user@localhost" | mysql -u root --password="$mysql_root_pass" &> /dev/null if [ $? -eq 0 ]; then @@ -125,7 +131,12 @@ if [ $? -eq 0 ]; then exit fi -read -p "MySQL user password for OpenVPN-Admin: " -s mysql_pass; echo +read -p "MySQL user password for OpenVPN-Admin (required, please specify one): " -s mysql_pass; echo +if [[ -z "$mysql_pass" ]]; then + printf '%s\n' "No input entered" + read -p "MySQL user password for OpenVPN-Admin (required, please specify one): " mysql_pass +else +fi # TODO MySQL port & host ? From e15d057707996281c32961464a8444445165b57a Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Fri, 1 May 2020 14:16:18 -0700 Subject: [PATCH 036/255] Update install.sh --- install.sh | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/install.sh b/install.sh index ca9e7fb..0853d38 100755 --- a/install.sh +++ b/install.sh @@ -119,12 +119,6 @@ fi # Check if the user doesn't already exist read -p "MySQL user name for OpenVPN-Admin (required, please specify one): " mysql_user -if [[ -z "$mysql_user" ]]; then - printf '%s\n' "No input entered" - read -p "MySQL user name for OpenVPN-Admin (required, please specify one): " mysql_user -else -fi - echo "SHOW GRANTS FOR $mysql_user@localhost" | mysql -u root --password="$mysql_root_pass" &> /dev/null if [ $? -eq 0 ]; then echo "The MySQL user already exists." @@ -132,11 +126,6 @@ if [ $? -eq 0 ]; then fi read -p "MySQL user password for OpenVPN-Admin (required, please specify one): " -s mysql_pass; echo -if [[ -z "$mysql_pass" ]]; then - printf '%s\n' "No input entered" - read -p "MySQL user password for OpenVPN-Admin (required, please specify one): " mysql_pass -else -fi # TODO MySQL port & host ? From 0cbe2be0f63cbd819c2625130500808896b0f2bd Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Fri, 1 May 2020 14:42:43 -0700 Subject: [PATCH 037/255] Update install.sh --- install.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/install.sh b/install.sh index 0853d38..4d4c63a 100755 --- a/install.sh +++ b/install.sh @@ -331,11 +331,13 @@ systemctl start openvpn@server # ;; #esac -echo -e "${Cyan}################################################################################" +echo -e "${Cyan}\n\n\n################################################################################" echo -e "#################################### Finish ####################################" echo -e "${Cyan}#${Purple} Congratulations, you have successfully setup OpenVPN-Admin! ${Cyan}#" echo -e "${Cyan}#${Purple} Finish the install using http://your-installation/index.php?installation ${Cyan}#" echo -e "${Cyan}#${Purple} Please, report any issues here https://github.com/arvage/OpenVPN-Admin ${Cyan}#" echo -e "${Cyan}################################################################################${NC}" +echo -e "${Cyan}################################################################################${NC}" + systemctl restart openvpn@server From 3620a035044ca1404b021ae0040bd44f78b6c3c4 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Fri, 1 May 2020 15:12:38 -0700 Subject: [PATCH 038/255] fixed error when no sql user provided --- install.sh | 39 +++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/install.sh b/install.sh index 4d4c63a..87f276d 100755 --- a/install.sh +++ b/install.sh @@ -29,14 +29,14 @@ if [ "$#" -ne 3 ]; then fi -echo -e "${Green}###################################### Installation Started #####################################\r" +echo -e "${Green}\r###################################### Installation Started #####################################\r" sleep 2 -echo -e "${Purple}###################################### OS Detection #####################################\r" +echo -e "${Purple}\r###################################### OS Detection #####################################\r" # Detecting OS Distribution OS=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f1 -d " ") echo -e "${Cyan}Detected OS: $OS \r" sleep 2 -echo -e "${Green}#################################### Installing Prerequisites ###################################\r" +echo -e "${Green}\r#################################### Installing Prerequisites ###################################\r" echo -e "################################### This could take long time ###################################\r${NC}" apt update && sudo apt upgrade -y @@ -62,8 +62,8 @@ for i in openvpn mysql php bower node unzip wget sed; do fi done -echo -e "${Green}################################### Setting MySQL Configuration ####################################\r" -echo -e "######################## Note the MySQL root password! you will need it soon #######################\r${NC}" +echo -e "${Green}\r################################### Setting MySQL Configuration ####################################\r" +echo -e "${Red}####################### Note: the MySQL root password! you will need it soon #######################\r${NC}" mysql_secure_installation @@ -82,7 +82,7 @@ fi base_path=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) -echo -e "${Green}#################### Server informations ####################\r${NC}" +echo -e "${Green}\r#################### Server informations ####################\r${NC}" read -p "Server Hostname/IP: " ip_server @@ -115,9 +115,13 @@ if [ "$sql_result" != "" ]; then exit fi +echo -e "${Green}\r################## Creating OpenVPN-Admin SQL DB user credentials ##################\r${NC}" # Check if the user doesn't already exist read -p "MySQL user name for OpenVPN-Admin (required, please specify one): " mysql_user +while [[ $mysql_user = "" ]]; do + read -p "MySQL user name for OpenVPN-Admin (required, please specify one): " mysql_user +done echo "SHOW GRANTS FOR $mysql_user@localhost" | mysql -u root --password="$mysql_root_pass" &> /dev/null if [ $? -eq 0 ]; then @@ -126,10 +130,13 @@ if [ $? -eq 0 ]; then fi read -p "MySQL user password for OpenVPN-Admin (required, please specify one): " -s mysql_pass; echo +while [[ $mysql_pass = "" ]]; do + read -p "MySQL user password for OpenVPN-Admin (required, please specify one): " -s mysql_pass; echo +done # TODO MySQL port & host ? -echo -e "${Green}################## Certificates informations ##################\r${NC}" +echo -e "${Green}\r################## Certificates informations ##################\r${NC}" read -p "Key size (1024, 2048 or 4096) [2048]: " key_size @@ -152,7 +159,7 @@ read -p "Email Address [me@example.net]: " cert_email read -p "Common Name (eg, your name or your server's hostname) [ChangeMe]: " key_cn -echo -e "${Green}################## Creating the certificates ##################\r${Yellow}" +echo -e "${Green}\r################## Creating the certificates ##################\r${Yellow}" # Get the rsa keys EASYRSA_VERSION=$(curl -s https://api.github.com/repos/OpenVPN/easy-rsa/releases/latest | grep "tag_name" | cut -f2 -d "v" | sed 's/[",]//g') @@ -210,7 +217,7 @@ fi openvpn --genkey --secret pki/ta.key -echo -e "${Green}##################### Setup OpenVPN #####################\r${NC}" +echo -e "${Green}\r##################### Setup OpenVPN #####################\r${NC}" # Copy certificates and the server configuration in the openvpn directory cp /etc/openvpn/easy-rsa/pki/{ca.crt,ta.key,issued/server.crt,private/server.key,dh.pem} "/etc/openvpn/" @@ -225,7 +232,7 @@ fi nobody_group=$(id -ng nobody) sed -i "s/group nogroup/group $nobody_group/" "/etc/openvpn/server.conf" -echo -e "${Green}################## Setup Firewall ####################\r${NC}" +echo -e "${Green}\r################## Setup Firewall ####################\r${NC}" # Make ip forwading and make it persistent echo 1 > "/proc/sys/net/ipv4/ip_forward" @@ -245,7 +252,7 @@ iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o $primary_nic -j MASQUERADE iptables -t nat -A POSTROUTING -s 10.8.0.2/24 -o $primary_nic -j MASQUERADE -echo -e "${Green}################## Setup MySQL database ##################\r${NC}" +echo -e "${Green}\r################## Setup MySQL Database ##################\r${NC}" echo "CREATE DATABASE \`openvpn-admin\`" | mysql -u root --password="$mysql_root_pass" echo "CREATE USER $mysql_user@localhost IDENTIFIED BY '$mysql_pass'" | mysql -u root --password="$mysql_root_pass" @@ -253,7 +260,7 @@ echo "GRANT ALL PRIVILEGES ON \`openvpn-admin\`.* TO $mysql_user@localhost" | m echo "FLUSH PRIVILEGES" | mysql -u root --password="$mysql_root_pass" -echo -e "${Green}################## Setup web application ##################\r${NC}" +echo -e "${Green}\r################## Setup Web Application ##################\r${NC}" # Copy bash scripts (which will insert row in MySQL) cp -r "$base_path/installation/scripts" "/etc/openvpn/" @@ -299,7 +306,7 @@ done bower --allow-root install chown -R "$user:$group" "$openvpn_admin" -echo -e "${Green}################################### Setting Apache Configuration ####################################\r${NC}" +echo -e "${Green}\r################################### Setting Apache Configuration ####################################\r${NC}" cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/openvpn.conf sed -i 's/\/var\/www\/html/\/var\/www\/openvpn-admin/g' /etc/apache2/sites-available/openvpn.conf sed -i '/<\/VirtualHost>/i \\n\t\n\t\tOptions Indexes FollowSymLinks\n\t\tAllowOverride All\n\t\tRequire all granted\n\t<\/Directory>' /etc/apache2/sites-available/openvpn.conf @@ -313,7 +320,7 @@ a2dissite 000-default a2ensite openvpn systemctl restart apache2 -echo -e "${Green}################################# Setting OpenVPN Configuration ####################################\r${NC}" +echo -e "${Green}\r################################# Finalizing OpenVPN Configuration ####################################\r${NC}" #sed -i 's/explicit-exit-notify 1/# explicit-exit-notify 1/g' /etc/openvpn/server.conf #sed -i 's/80.67.169.12/8.8.8.8/g' /etc/openvpn/server.conf #sed -i 's/80.67.169.40/8.8.4.4/g' /etc/openvpn/server.conf @@ -331,8 +338,8 @@ systemctl start openvpn@server # ;; #esac -echo -e "${Cyan}\n\n\n################################################################################" -echo -e "#################################### Finish ####################################" +echo -e "${Cyan}\r\r\r################################################################################" +echo -e "################################### Finished ###################################" echo -e "${Cyan}#${Purple} Congratulations, you have successfully setup OpenVPN-Admin! ${Cyan}#" echo -e "${Cyan}#${Purple} Finish the install using http://your-installation/index.php?installation ${Cyan}#" From fb0c55466cf42f11bf1ea2f777b31a450b8e14bd Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Fri, 1 May 2020 15:24:37 -0700 Subject: [PATCH 039/255] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index bd686b2..77af026 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ Administrate its OpenVPN with a web interface (logs visualisations, users managi * node * npm -### Debian 10, Raspbian Buster, Ubuntu 20 (Focal Fossa) +### Raspbian Buster, Ubuntu 20 (Focal Fossa) and Debian 10 Skip to "Installation" section @@ -69,8 +69,8 @@ Only tested on Ubuntu 20.04 LTS (Focal Fossa) and Raspbian Buster. Feel free to $ cd openvpn-admin # sudo ./install.sh /var/www www-data www-data - * Setup the web server (Apache, NGinx...) to serve the web application. - * Create the admin of the web application by visiting `http://your_hostname_or_ip/index.php?installation` + * If you are using any other web server than Apache like NGinx, you need to set it up manually to serve the web application. + * Once the installation is finished browse to `http://your_hostname_or_ip/index.php?installation` to create your admin user. ## Usage From 5d719eab4032ff1fa1fe0253f378d034adbb8d08 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Fri, 1 May 2020 15:27:21 -0700 Subject: [PATCH 040/255] Update install.sh --- install.sh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/install.sh b/install.sh index 87f276d..867ba25 100755 --- a/install.sh +++ b/install.sh @@ -37,7 +37,7 @@ OS=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut - echo -e "${Cyan}Detected OS: $OS \r" sleep 2 echo -e "${Green}\r#################################### Installing Prerequisites ###################################\r" -echo -e "################################### This could take long time ###################################\r${NC}" +echo -e "${Red}################################### This could take long time ###################################\r${NC}" apt update && sudo apt upgrade -y case $OS in @@ -82,7 +82,7 @@ fi base_path=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) -echo -e "${Green}\r#################### Server informations ####################\r${NC}" +echo -e "${Green}\r#################### Server Informations ####################\r${NC}" read -p "Server Hostname/IP: " ip_server @@ -116,6 +116,7 @@ if [ "$sql_result" != "" ]; then fi echo -e "${Green}\r################## Creating OpenVPN-Admin SQL DB user credentials ##################\r${NC}" +echo -e "${Red}\r################## This is needed for web app to communicate with SQL ##################\r${NC}" # Check if the user doesn't already exist read -p "MySQL user name for OpenVPN-Admin (required, please specify one): " mysql_user @@ -136,7 +137,7 @@ done # TODO MySQL port & host ? -echo -e "${Green}\r################## Certificates informations ##################\r${NC}" +echo -e "${Green}\r################## Certificates Information ##################\r${NC}" read -p "Key size (1024, 2048 or 4096) [2048]: " key_size From 4fc47e4b46f130eaba058b710a8999622def2419 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Fri, 1 May 2020 16:02:55 -0700 Subject: [PATCH 041/255] Update README.md --- README.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 77af026..f5e4187 100644 --- a/README.md +++ b/README.md @@ -62,12 +62,12 @@ Only tested on Ubuntu 20.04 LTS (Focal Fossa) and Raspbian Buster. Feel free to * Setup OpenVPN and the web application: - $ sudo apt update - $ sudo apt install -y git - $ cd ~ - $ git clone https://github.com/arvage/OpenVPN-Admin openvpn-admin - $ cd openvpn-admin - # sudo ./install.sh /var/www www-data www-data + sudo apt update + sudo apt install -y git + cd ~ + git clone https://github.com/arvage/OpenVPN-Admin openvpn-admin + cd openvpn-admin + sudo ./install.sh /var/www www-data www-data * If you are using any other web server than Apache like NGinx, you need to set it up manually to serve the web application. * Once the installation is finished browse to `http://your_hostname_or_ip/index.php?installation` to create your admin user. @@ -82,13 +82,13 @@ Only tested on Ubuntu 20.04 LTS (Focal Fossa) and Raspbian Buster. Feel free to ## Update - $ git pull origin master - # ./update.sh /var/www + git pull origin master + ./update.sh /var/www ## Desinstall It will remove all installed components (OpenVPN keys and configurations, the web application, iptables rules...). - # sudo ./desinstall.sh /var/www + sudo ./desinstall.sh /var/www ## Use of From 4d7dca51576f8c21a7fd05ff73d821c70914e098 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Fri, 1 May 2020 16:10:42 -0700 Subject: [PATCH 042/255] Update install.sh --- install.sh | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/install.sh b/install.sh index 867ba25..2f2d52d 100755 --- a/install.sh +++ b/install.sh @@ -29,15 +29,15 @@ if [ "$#" -ne 3 ]; then fi -echo -e "${Green}\r###################################### Installation Started #####################################\r" +echo -e "${Green}\n###################################### Installation Started #####################################\n" sleep 2 -echo -e "${Purple}\r###################################### OS Detection #####################################\r" +echo -e "${Purple}\n###################################### OS Detection #####################################\n" # Detecting OS Distribution OS=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f1 -d " ") -echo -e "${Cyan}Detected OS: $OS \r" +echo -e "${Cyan}Detected OS: $OS \n" sleep 2 -echo -e "${Green}\r#################################### Installing Prerequisites ###################################\r" -echo -e "${Red}################################### This could take long time ###################################\r${NC}" +echo -e "${Green}\n#################################### Installing Prerequisites ###################################\n" +echo -e "${Red}################################### This could take long time ###################################\n${NC}" apt update && sudo apt upgrade -y case $OS in @@ -62,8 +62,8 @@ for i in openvpn mysql php bower node unzip wget sed; do fi done -echo -e "${Green}\r################################### Setting MySQL Configuration ####################################\r" -echo -e "${Red}####################### Note: the MySQL root password! you will need it soon #######################\r${NC}" +echo -e "${Green}\n################################### Setting MySQL Configuration ####################################\n" +echo -e "${Red}####################### Note: the MySQL root password! you will need it soon #######################\n${NC}" mysql_secure_installation @@ -82,7 +82,7 @@ fi base_path=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) -echo -e "${Green}\r#################### Server Informations ####################\r${NC}" +echo -e "${Green}\n#################### Server Informations ####################\n${NC}" read -p "Server Hostname/IP: " ip_server @@ -115,8 +115,8 @@ if [ "$sql_result" != "" ]; then exit fi -echo -e "${Green}\r################## Creating OpenVPN-Admin SQL DB user credentials ##################\r${NC}" -echo -e "${Red}\r################## This is needed for web app to communicate with SQL ##################\r${NC}" +echo -e "${Green}\n################## Creating OpenVPN-Admin SQL DB user credentials ##################\n${NC}" +echo -e "${Red}\n################## This is needed for web app to communicate with SQL ##################\n${NC}" # Check if the user doesn't already exist read -p "MySQL user name for OpenVPN-Admin (required, please specify one): " mysql_user @@ -137,7 +137,7 @@ done # TODO MySQL port & host ? -echo -e "${Green}\r################## Certificates Information ##################\r${NC}" +echo -e "${Green}\n################## Certificates Information ##################\n${NC}" read -p "Key size (1024, 2048 or 4096) [2048]: " key_size @@ -160,7 +160,7 @@ read -p "Email Address [me@example.net]: " cert_email read -p "Common Name (eg, your name or your server's hostname) [ChangeMe]: " key_cn -echo -e "${Green}\r################## Creating the certificates ##################\r${Yellow}" +echo -e "${Green}\n################## Creating the certificates ##################\n${Yellow}" # Get the rsa keys EASYRSA_VERSION=$(curl -s https://api.github.com/repos/OpenVPN/easy-rsa/releases/latest | grep "tag_name" | cut -f2 -d "v" | sed 's/[",]//g') @@ -218,7 +218,7 @@ fi openvpn --genkey --secret pki/ta.key -echo -e "${Green}\r##################### Setup OpenVPN #####################\r${NC}" +echo -e "${Green}\n##################### Setup OpenVPN #####################\n${NC}" # Copy certificates and the server configuration in the openvpn directory cp /etc/openvpn/easy-rsa/pki/{ca.crt,ta.key,issued/server.crt,private/server.key,dh.pem} "/etc/openvpn/" @@ -233,7 +233,7 @@ fi nobody_group=$(id -ng nobody) sed -i "s/group nogroup/group $nobody_group/" "/etc/openvpn/server.conf" -echo -e "${Green}\r################## Setup Firewall ####################\r${NC}" +echo -e "${Green}\n################## Setup Firewall ####################\n${NC}" # Make ip forwading and make it persistent echo 1 > "/proc/sys/net/ipv4/ip_forward" @@ -253,7 +253,7 @@ iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o $primary_nic -j MASQUERADE iptables -t nat -A POSTROUTING -s 10.8.0.2/24 -o $primary_nic -j MASQUERADE -echo -e "${Green}\r################## Setup MySQL Database ##################\r${NC}" +echo -e "${Green}\n################## Setup MySQL Database ##################\n${NC}" echo "CREATE DATABASE \`openvpn-admin\`" | mysql -u root --password="$mysql_root_pass" echo "CREATE USER $mysql_user@localhost IDENTIFIED BY '$mysql_pass'" | mysql -u root --password="$mysql_root_pass" @@ -261,7 +261,7 @@ echo "GRANT ALL PRIVILEGES ON \`openvpn-admin\`.* TO $mysql_user@localhost" | m echo "FLUSH PRIVILEGES" | mysql -u root --password="$mysql_root_pass" -echo -e "${Green}\r################## Setup Web Application ##################\r${NC}" +echo -e "${Green}\n################## Setup Web Application ##################\n${NC}" # Copy bash scripts (which will insert row in MySQL) cp -r "$base_path/installation/scripts" "/etc/openvpn/" @@ -307,21 +307,21 @@ done bower --allow-root install chown -R "$user:$group" "$openvpn_admin" -echo -e "${Green}\r################################### Setting Apache Configuration ####################################\r${NC}" +echo -e "${Green}\n################################### Setting Apache Configuration ####################################\n${NC}" cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/openvpn.conf sed -i 's/\/var\/www\/html/\/var\/www\/openvpn-admin/g' /etc/apache2/sites-available/openvpn.conf sed -i '/<\/VirtualHost>/i \\n\t\n\t\tOptions Indexes FollowSymLinks\n\t\tAllowOverride All\n\t\tRequire all granted\n\t<\/Directory>' /etc/apache2/sites-available/openvpn.conf touch /var/www/.htpasswd chown www-data:www-data /var/www/.htpasswd -echo -e "${Yellow}It's time to secure client configuration folder from anonymous browser and assign a super admin user to be only able to browse it.\r" -echo -e "This username / password will only applies to http://your-site/client-config and all sub directories\r${NC}" +echo -e "${Yellow}It's time to secure client configuration folder from anonymous browser and assign a super admin user to be only able to browse it.\n" +echo -e "This username / password will only applies to http://your-site/client-config and all sub directories\n${NC}" read -p "Client Configuration Web Access Username: " client_folder_username htpasswd /var/www/.htpasswd $client_folder_username a2dissite 000-default a2ensite openvpn systemctl restart apache2 -echo -e "${Green}\r################################# Finalizing OpenVPN Configuration ####################################\r${NC}" +echo -e "${Green}\n################################# Finalizing OpenVPN Configuration ####################################\n${NC}" #sed -i 's/explicit-exit-notify 1/# explicit-exit-notify 1/g' /etc/openvpn/server.conf #sed -i 's/80.67.169.12/8.8.8.8/g' /etc/openvpn/server.conf #sed -i 's/80.67.169.40/8.8.4.4/g' /etc/openvpn/server.conf @@ -339,7 +339,7 @@ systemctl start openvpn@server # ;; #esac -echo -e "${Cyan}\r\r\r################################################################################" +echo -e "${Cyan}\n\n\n################################################################################" echo -e "################################### Finished ###################################" echo -e "${Cyan}#${Purple} Congratulations, you have successfully setup OpenVPN-Admin! ${Cyan}#" From b3b69687732f15ee7511315bf0d907d7148a2cc7 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Fri, 1 May 2020 16:16:34 -0700 Subject: [PATCH 043/255] added instruction button --- include/html/form/configuration.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/html/form/configuration.php b/include/html/form/configuration.php index 81df9de..00ad454 100644 --- a/include/html/form/configuration.php +++ b/include/html/form/configuration.php @@ -18,6 +18,8 @@ + + From 2ed02ffbaf34540a86dd3c4d4038b4e519366332 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Fri, 1 May 2020 16:28:58 -0700 Subject: [PATCH 044/255] manual --- .../Download and install the OpenVPN GUI.pdf | Bin 0 -> 399569 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 installation/client-conf/windows/Download and install the OpenVPN GUI.pdf diff --git a/installation/client-conf/windows/Download and install the OpenVPN GUI.pdf b/installation/client-conf/windows/Download and install the OpenVPN GUI.pdf new file mode 100644 index 0000000000000000000000000000000000000000..51bd22a3d9900d1a7000d2eacaef2fae405eebef GIT binary patch literal 399569 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�d{Dc198J~ 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πblg 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

nb`lt1HJOMes5yoM1W!dqE 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

W6HoPAM?%bV-mM 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 literal 0 HcmV?d00001 From 4d38c24ed4a5d30b20c57043e3cb956c280f36f5 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Fri, 1 May 2020 16:32:48 -0700 Subject: [PATCH 045/255] download instructions --- index.php | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/index.php b/index.php index 619094d..de9a339 100644 --- a/index.php +++ b/index.php @@ -10,6 +10,22 @@ header("Location: ."); exit(-1); } +// Get the instruction file ? +if(isset($_POST['configuration_get'])) { + $file_name = "Download and install the OpenVPN GUI.pdf"; + $file_folder = "windows"; + $file_full_path = './client-conf/' . $file_folder . '/' . $file_name; + + header("Content-type: application/ovpn"); + header("Content-disposition: attachment; filename=$file_name"); + header("Pragma: no-cache"); + header("Expires: 0"); + readfile($file_full_path); + exit; + } + else { + $error = true; + } // Get the configuration files ? if(isset($_POST['configuration_get'], $_POST['configuration_username'], $_POST['configuration_pass']) && !empty($_POST['configuration_pass'])) { From 2e9123011d150870995996cfdfb113018a0025f6 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Fri, 1 May 2020 16:33:06 -0700 Subject: [PATCH 046/255] download instructions --- index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.php b/index.php index de9a339..664cbc5 100644 --- a/index.php +++ b/index.php @@ -16,7 +16,7 @@ $file_folder = "windows"; $file_full_path = './client-conf/' . $file_folder . '/' . $file_name; - header("Content-type: application/ovpn"); + header("Content-type: application/pdf"); header("Content-disposition: attachment; filename=$file_name"); header("Pragma: no-cache"); header("Expires: 0"); From 67ee746ad76f92abd4a8f5c89816cc6455dea1a6 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Fri, 1 May 2020 16:39:10 -0700 Subject: [PATCH 047/255] get instructions --- index.php | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/index.php b/index.php index 664cbc5..7fdcb39 100644 --- a/index.php +++ b/index.php @@ -10,8 +10,8 @@ header("Location: ."); exit(-1); } -// Get the instruction file ? -if(isset($_POST['configuration_get'])) { + // Get the instruction file ? + if(isset($_POST['instruction_get'])) { $file_name = "Download and install the OpenVPN GUI.pdf"; $file_folder = "windows"; $file_full_path = './client-conf/' . $file_folder . '/' . $file_name; @@ -23,9 +23,6 @@ readfile($file_full_path); exit; } - else { - $error = true; - } // Get the configuration files ? if(isset($_POST['configuration_get'], $_POST['configuration_username'], $_POST['configuration_pass']) && !empty($_POST['configuration_pass'])) { From 8841a5ef48e1e1fe99c11eebd14dec4744ed097f Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Fri, 1 May 2020 17:14:05 -0700 Subject: [PATCH 048/255] instruction ger --- include/html/form/configuration.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/html/form/configuration.php b/include/html/form/configuration.php index 00ad454..1aded65 100644 --- a/include/html/form/configuration.php +++ b/include/html/form/configuration.php @@ -18,7 +18,7 @@ - + From c76c04b62a6023d73ce6a11a8d941fc94b8e0866 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Sat, 2 May 2020 12:59:06 -0700 Subject: [PATCH 049/255] Fully automated install --- install.sh | 75 +++++++++++++++++++----------------------------------- 1 file changed, 26 insertions(+), 49 deletions(-) diff --git a/install.sh b/install.sh index 2f2d52d..8590a1e 100755 --- a/install.sh +++ b/install.sh @@ -28,9 +28,9 @@ if [ "$#" -ne 3 ]; then exit fi - -echo -e "${Green}\n###################################### Installation Started #####################################\n" +echo -e "${Green}\n################################# Automated Installation Started ################################\n" sleep 2 + echo -e "${Purple}\n###################################### OS Detection #####################################\n" # Detecting OS Distribution OS=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f1 -d " ") @@ -45,7 +45,7 @@ case $OS in apt install -y openvpn apache2 mysql-server php php-mysql php-zip unzip git wget sed curl nodejs npm mc net-tools ;; Raspbian) - apt install -y openvpn apache2 mariadb-server php php-mysql php-zip unzip git wget sed curl nodejs npm mc + apt install -y openvpn apache2 mariadb-server php php-mysql php-zip unzip git wget sed curl nodejs npm mc expect ;; *) echo -e "${Red}Can't detect OS distribution! you need to install prerequisites manully${NC}" @@ -64,8 +64,15 @@ done echo -e "${Green}\n################################### Setting MySQL Configuration ####################################\n" echo -e "${Red}####################### Note: the MySQL root password! you will need it soon #######################\n${NC}" -mysql_secure_installation +mysql_root_pass=$(openssl rand -base64 12) +mysql -u root <<-EOF +UPDATE mysql.user SET Password=PASSWORD('$mysql_root_pass') WHERE User='root'; +DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1'); +DELETE FROM mysql.user WHERE User=''; +DELETE FROM mysql.db WHERE Db='test' OR Db='test_%'; +FLUSH PRIVILEGES; +EOF www=$1 user=$2 @@ -83,27 +90,14 @@ base_path=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) echo -e "${Green}\n#################### Server Informations ####################\n${NC}" - -read -p "Server Hostname/IP: " ip_server - -read -p "OpenVPN protocol (tcp or udp) [tcp]: " openvpn_proto - -if [[ -z $openvpn_proto ]]; then - openvpn_proto="tcp" -fi - -read -p "Port [1194]: " server_port - -if [[ -z $server_port ]]; then - server_port="1194" -fi +ip_server=$(hostname -I) +openvpn_proto="udp" +server_port="1194" # Get root pass (to create the database and the user) -mysql_root_pass="" status_code=1 while [ $status_code -ne 0 ]; do - read -p "MySQL root password: " -s mysql_root_pass; echo echo "SHOW DATABASES" | mysql -u root --password="$mysql_root_pass" &> /dev/null status_code=$? done @@ -119,10 +113,8 @@ echo -e "${Green}\n################## Creating OpenVPN-Admin SQL DB user credent echo -e "${Red}\n################## This is needed for web app to communicate with SQL ##################\n${NC}" # Check if the user doesn't already exist -read -p "MySQL user name for OpenVPN-Admin (required, please specify one): " mysql_user -while [[ $mysql_user = "" ]]; do - read -p "MySQL user name for OpenVPN-Admin (required, please specify one): " mysql_user -done +mysql_user="openvpn" +mysql_pass=$(openssl rand -base64 12) echo "SHOW GRANTS FOR $mysql_user@localhost" | mysql -u root --password="$mysql_root_pass" &> /dev/null if [ $? -eq 0 ]; then @@ -130,35 +122,20 @@ if [ $? -eq 0 ]; then exit fi -read -p "MySQL user password for OpenVPN-Admin (required, please specify one): " -s mysql_pass; echo -while [[ $mysql_pass = "" ]]; do - read -p "MySQL user password for OpenVPN-Admin (required, please specify one): " -s mysql_pass; echo -done - # TODO MySQL port & host ? echo -e "${Green}\n################## Certificates Information ##################\n${NC}" -read -p "Key size (1024, 2048 or 4096) [2048]: " key_size - -read -p "Root certificate expiration (in days) [3650]: " ca_expire - -read -p "Certificate expiration (in days) [3650]: " cert_expire - -read -p "Country Name (2 letter code) [US]: " cert_country - -read -p "State or Province Name (full name) [California]: " cert_province - -read -p "Locality Name (eg, city) [Mission Viejo]: " cert_city - -read -p "Organization Name (eg, company) [Copyleft Certificate Co]: " cert_org - -read -p "Organizational Unit Name (eg, section) [IT]: " cert_ou - -read -p "Email Address [me@example.net]: " cert_email - -read -p "Common Name (eg, your name or your server's hostname) [ChangeMe]: " key_cn - +key_size="2048" +ca_expire="3650" +cert_expire="3650" +cert_country="US" +cert_province="California" +cert_city="Mission Viejo" +cert_org="Arvage" +cert_ou="IT" +cert_email="example@test.net" +key_cn=$(hostname -I) echo -e "${Green}\n################## Creating the certificates ##################\n${Yellow}" From 23e0763e5a5ccf898fe00c363666b246c51e7709 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Sat, 2 May 2020 13:00:19 -0700 Subject: [PATCH 050/255] removed unnecessary package install --- install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.sh b/install.sh index 8590a1e..eeca2d9 100755 --- a/install.sh +++ b/install.sh @@ -45,7 +45,7 @@ case $OS in apt install -y openvpn apache2 mysql-server php php-mysql php-zip unzip git wget sed curl nodejs npm mc net-tools ;; Raspbian) - apt install -y openvpn apache2 mariadb-server php php-mysql php-zip unzip git wget sed curl nodejs npm mc expect + apt install -y openvpn apache2 mariadb-server php php-mysql php-zip unzip git wget sed curl nodejs npm mc ;; *) echo -e "${Red}Can't detect OS distribution! you need to install prerequisites manully${NC}" From 831198e6c3669adcfa0c8b4405b33b75151c1b8d Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Sat, 2 May 2020 14:20:08 -0700 Subject: [PATCH 051/255] fix easy-rsa --- install.sh | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/install.sh b/install.sh index eeca2d9..ffed3bb 100755 --- a/install.sh +++ b/install.sh @@ -31,7 +31,7 @@ fi echo -e "${Green}\n################################# Automated Installation Started ################################\n" sleep 2 -echo -e "${Purple}\n###################################### OS Detection #####################################\n" +#echo -e "${Purple}\n###################################### OS Detection #####################################\n" # Detecting OS Distribution OS=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f1 -d " ") echo -e "${Cyan}Detected OS: $OS \n" @@ -63,8 +63,6 @@ for i in openvpn mysql php bower node unzip wget sed; do done echo -e "${Green}\n################################### Setting MySQL Configuration ####################################\n" -echo -e "${Red}####################### Note: the MySQL root password! you will need it soon #######################\n${NC}" - mysql_root_pass=$(openssl rand -base64 12) mysql -u root <<-EOF UPDATE mysql.user SET Password=PASSWORD('$mysql_root_pass') WHERE User='root'; @@ -73,6 +71,7 @@ DELETE FROM mysql.user WHERE User=''; DELETE FROM mysql.db WHERE Db='test' OR Db='test_%'; FLUSH PRIVILEGES; EOF +echo "Auto Generated MySQL Root Password: $mysql_root_pass" www=$1 user=$2 @@ -87,9 +86,6 @@ if [ ! -d "$www" ] || ! grep -q "$user" "/etc/passwd" || ! grep -q "$group" "/e fi base_path=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) - - -echo -e "${Green}\n#################### Server Informations ####################\n${NC}" ip_server=$(hostname -I) openvpn_proto="udp" server_port="1194" @@ -109,12 +105,13 @@ if [ "$sql_result" != "" ]; then exit fi -echo -e "${Green}\n################## Creating OpenVPN-Admin SQL DB user credentials ##################\n${NC}" -echo -e "${Red}\n################## This is needed for web app to communicate with SQL ##################\n${NC}" +echo -e "${Green}\n################## Generating OpenVPN-Admin SQL DB user credentials ##################\n${NC}" # Check if the user doesn't already exist mysql_user="openvpn" mysql_pass=$(openssl rand -base64 12) +echo "Auto Generated OpenVPN-Admin MySQL Username: $mysql_user" +echo "Auto Generated OpenVPN-Admin MySQL Password: $mysql_pass" echo "SHOW GRANTS FOR $mysql_user@localhost" | mysql -u root --password="$mysql_root_pass" &> /dev/null if [ $? -eq 0 ]; then @@ -122,10 +119,6 @@ if [ $? -eq 0 ]; then exit fi -# TODO MySQL port & host ? - -echo -e "${Green}\n################## Certificates Information ##################\n${NC}" - key_size="2048" ca_expire="3650" cert_expire="3650" @@ -182,7 +175,8 @@ fi if [[ ! -z $key_cn ]]; then export EASYRSA_REQ_CN=$key_cn fi - + +export EASYRSA_BATCH=1 # Init PKI dirs and build CA certs ./easyrsa init-pki ./easyrsa build-ca nopass @@ -288,12 +282,12 @@ echo -e "${Green}\n################################### Setting Apache Configurat cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/openvpn.conf sed -i 's/\/var\/www\/html/\/var\/www\/openvpn-admin/g' /etc/apache2/sites-available/openvpn.conf sed -i '/<\/VirtualHost>/i \\n\t\n\t\tOptions Indexes FollowSymLinks\n\t\tAllowOverride All\n\t\tRequire all granted\n\t<\/Directory>' /etc/apache2/sites-available/openvpn.conf -touch /var/www/.htpasswd -chown www-data:www-data /var/www/.htpasswd -echo -e "${Yellow}It's time to secure client configuration folder from anonymous browser and assign a super admin user to be only able to browse it.\n" -echo -e "This username / password will only applies to http://your-site/client-config and all sub directories\n${NC}" -read -p "Client Configuration Web Access Username: " client_folder_username -htpasswd /var/www/.htpasswd $client_folder_username +#touch /var/www/.htpasswd +#chown www-data:www-data /var/www/.htpasswd +#echo -e "${Yellow}It's time to secure client configuration folder from anonymous browser and assign a super admin user to be only able to browse it.\n" +#echo -e "This username / password will only applies to http://your-site/client-config and all sub directories\n${NC}" +#read -p "Client Configuration Web Access Username: " client_folder_username +#htpasswd /var/www/.htpasswd $client_folder_username a2dissite 000-default a2ensite openvpn systemctl restart apache2 From f6064e8441fa8800b905b744de35e860074910e0 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Sat, 2 May 2020 15:58:27 -0700 Subject: [PATCH 052/255] Update README.md --- README.md | 49 ++++--------------------------------------------- 1 file changed, 4 insertions(+), 45 deletions(-) diff --git a/README.md b/README.md index f5e4187..14ec549 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -## Raspberry Pi OpenVPN Admin (Tested on Ubuntu and Raspbian using Apache2) +## Raspberry Pi OpenVPN Admin using Apache2 ## Summary Administrate its OpenVPN with a web interface (logs visualisations, users managing...) and a SQL database. @@ -9,53 +9,12 @@ Administrate its OpenVPN with a web interface (logs visualisations, users managi ## Prerequisite - * GNU/Linux with Bash and root access - * Fresh install of OpenVPN - * Web server (NGinx, Apache...) - * MySQL - * PHP >= 5.5 with modules: - * zip - * pdo_mysql - * bower - * unzip - * wget - * sed - * curl - * node - * npm - -### Raspbian Buster, Ubuntu 20 (Focal Fossa) and Debian 10 - -Skip to "Installation" section - -### Debian 9 Stretch - -In order to install `npm`, [stretch-backports need to be added to your sources.list](https://backports.debian.org/Instructions/#index2h2). - -```` -# apt-get install -t stretch-backports npm nodejs -# apt-get install openvpn apache2 php-mysql mysql-server php-zip php unzip git wget sed curl -# npm install -g bower -```` - - -### Debian 8 Jessie - -```` -# apt-get install openvpn apache2 php5-mysql mysql-server php5 nodejs unzip git wget sed npm curl -# npm install -g bower -# ln -s /usr/bin/nodejs /usr/bin/node -```` - - -### Other distribution... (PR welcome) - -not supported and tested + * Raspbian with Bash access or remote SSH + * Git ## Tests -Only tested on Ubuntu 20.04 LTS (Focal Fossa) and Raspbian Buster. Feel free to open issues. - +Only tested on Raspberry Pi 3 with Raspbian Buster. Feel free to open issues. ## Installation From 2db974b2eca58fe17a4c5fcf96779fd54e255a61 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Sat, 2 May 2020 16:06:30 -0700 Subject: [PATCH 053/255] online install created --- README.md | 1 - online-install.sh | 8 ++++++++ 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 online-install.sh diff --git a/README.md b/README.md index 14ec549..d7b9901 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,6 @@ Administrate its OpenVPN with a web interface (logs visualisations, users managi Only tested on Raspberry Pi 3 with Raspbian Buster. Feel free to open issues. - ## Installation * Setup OpenVPN and the web application: diff --git a/online-install.sh b/online-install.sh new file mode 100644 index 0000000..d40d7b3 --- /dev/null +++ b/online-install.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +sudo apt update +sudo apt install -y git +cd ~ +git clone https://github.com/arvage/OpenVPN-Admin openvpn-admin +cd openvpn-admin +sudo ./install.sh /var/www www-data www-data \ No newline at end of file From 975c65d5a551d16546852484de1f273e87189e50 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Sat, 2 May 2020 16:11:56 -0700 Subject: [PATCH 054/255] online install --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d7b9901..bf64fe6 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,8 @@ Administrate its OpenVPN with a web interface (logs visualisations, users managi Only tested on Raspberry Pi 3 with Raspbian Buster. Feel free to open issues. ## Installation - + * for online automated install + wget -O - https://raw.githubusercontent.com/arvage/OpenVPN-Admin/master/online-install.sh | bash * Setup OpenVPN and the web application: sudo apt update From 66de7fba165d5f695bdb734d87078e914eed65dc Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Sat, 2 May 2020 16:16:49 -0700 Subject: [PATCH 055/255] automated install --- online-install.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/online-install.sh b/online-install.sh index d40d7b3..f94755a 100644 --- a/online-install.sh +++ b/online-install.sh @@ -1,5 +1,6 @@ #!/bin/bash +echo -e "${Green}\n############################### Updating and Getting Ready #############################\n" sudo apt update sudo apt install -y git cd ~ From 04608ce096013d568859eda7195f86e54da830c8 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Sun, 3 May 2020 09:06:16 -0700 Subject: [PATCH 056/255] Updating client-conf folder web security --- installation/client-conf/.htaccess | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/installation/client-conf/.htaccess b/installation/client-conf/.htaccess index e06c64e..36a9b18 100644 --- a/installation/client-conf/.htaccess +++ b/installation/client-conf/.htaccess @@ -1,6 +1,14 @@ +# Disabling Directory Browsing Options -Indexes -AuthType Basic -AuthName "restricted area" -AuthUserFile /var/www/.htpasswd -require valid-user +# Block files starting with dot(.) like .htaaccess + +Order allow,deny +Deny from all + + +# Block files with any extenstion (this is for blocking ovpn files) + +Order allow,deny +Deny from all + From 7a121d0c1acd6b156926bbd91cec1fddc03a0b54 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Sun, 3 May 2020 09:14:42 -0700 Subject: [PATCH 057/255] Providing auto-generated information when finished --- install.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/install.sh b/install.sh index ffed3bb..924a53d 100755 --- a/install.sh +++ b/install.sh @@ -71,7 +71,6 @@ DELETE FROM mysql.user WHERE User=''; DELETE FROM mysql.db WHERE Db='test' OR Db='test_%'; FLUSH PRIVILEGES; EOF -echo "Auto Generated MySQL Root Password: $mysql_root_pass" www=$1 user=$2 @@ -108,10 +107,8 @@ fi echo -e "${Green}\n################## Generating OpenVPN-Admin SQL DB user credentials ##################\n${NC}" # Check if the user doesn't already exist -mysql_user="openvpn" +mysql_user=$(openssl rand -base64 12) mysql_pass=$(openssl rand -base64 12) -echo "Auto Generated OpenVPN-Admin MySQL Username: $mysql_user" -echo "Auto Generated OpenVPN-Admin MySQL Password: $mysql_pass" echo "SHOW GRANTS FOR $mysql_user@localhost" | mysql -u root --password="$mysql_root_pass" &> /dev/null if [ $? -eq 0 ]; then @@ -312,10 +309,13 @@ systemctl start openvpn@server echo -e "${Cyan}\n\n\n################################################################################" echo -e "################################### Finished ###################################" - echo -e "${Cyan}#${Purple} Congratulations, you have successfully setup OpenVPN-Admin! ${Cyan}#" -echo -e "${Cyan}#${Purple} Finish the install using http://your-installation/index.php?installation ${Cyan}#" +echo -e "${Cyan}#${Purple} Finish the install using http://$ip_server/index.php?installation ${Cyan}#" echo -e "${Cyan}#${Purple} Please, report any issues here https://github.com/arvage/OpenVPN-Admin ${Cyan}#" +echo -e "${Cyan}#${Purple} Auto Generated MySQL Root Password: $mysql_root_pass ${Cyan}#" +echo -e "${Cyan}#${Purple} Auto Generated OpenVPN-Admin MySQL Username: $mysql_user ${Cyan}#" +echo -e "${Cyan}#${Purple} Auto Generated OpenVPN-Admin MySQL Password: $mysql_pass ${Cyan}#" + echo -e "${Cyan}################################################################################${NC}" echo -e "${Cyan}################################################################################${NC}" From 3e730fe2836a5c6bd496e0056edaf7219159811e Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Sun, 3 May 2020 10:49:43 -0700 Subject: [PATCH 058/255] fixed hostname --- install.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/install.sh b/install.sh index 924a53d..d8e206b 100755 --- a/install.sh +++ b/install.sh @@ -36,7 +36,7 @@ sleep 2 OS=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f1 -d " ") echo -e "${Cyan}Detected OS: $OS \n" sleep 2 -echo -e "${Green}\n#################################### Installing Prerequisites ###################################\n" +echo -e "${Green}\n#################################### Installing Prerequisites ###################################" echo -e "${Red}################################### This could take long time ###################################\n${NC}" apt update && sudo apt upgrade -y @@ -85,7 +85,7 @@ if [ ! -d "$www" ] || ! grep -q "$user" "/etc/passwd" || ! grep -q "$group" "/e fi base_path=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) -ip_server=$(hostname -I) +ip_server=$(hostname -I | cut -f1 -d\ ) openvpn_proto="udp" server_port="1194" @@ -125,7 +125,7 @@ cert_city="Mission Viejo" cert_org="Arvage" cert_ou="IT" cert_email="example@test.net" -key_cn=$(hostname -I) +key_cn=$(hostname -I | cut -f1 -d\ ) echo -e "${Green}\n################## Creating the certificates ##################\n${Yellow}" @@ -310,11 +310,11 @@ systemctl start openvpn@server echo -e "${Cyan}\n\n\n################################################################################" echo -e "################################### Finished ###################################" echo -e "${Cyan}#${Purple} Congratulations, you have successfully setup OpenVPN-Admin! ${Cyan}#" -echo -e "${Cyan}#${Purple} Finish the install using http://$ip_server/index.php?installation ${Cyan}#" +echo -e "${Cyan}#${Purple}Finish the install using http://$ip_server/index.php?installation ${Cyan}#" echo -e "${Cyan}#${Purple} Please, report any issues here https://github.com/arvage/OpenVPN-Admin ${Cyan}#" echo -e "${Cyan}#${Purple} Auto Generated MySQL Root Password: $mysql_root_pass ${Cyan}#" -echo -e "${Cyan}#${Purple} Auto Generated OpenVPN-Admin MySQL Username: $mysql_user ${Cyan}#" -echo -e "${Cyan}#${Purple} Auto Generated OpenVPN-Admin MySQL Password: $mysql_pass ${Cyan}#" +echo -e "${Cyan}#${Purple} Auto Generated OpenVPN-Admin MySQL Username: $mysql_user ${Cyan}#" +echo -e "${Cyan}#${Purple} Auto Generated OpenVPN-Admin MySQL Password: $mysql_pass ${Cyan}#" echo -e "${Cyan}################################################################################${NC}" echo -e "${Cyan}################################################################################${NC}" From 65b36ecda8eaf734efdc0e974018995e9aa7c512 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Sun, 3 May 2020 11:01:17 -0700 Subject: [PATCH 059/255] fixed error on auto install --- install.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/install.sh b/install.sh index d8e206b..7b43206 100755 --- a/install.sh +++ b/install.sh @@ -310,11 +310,11 @@ systemctl start openvpn@server echo -e "${Cyan}\n\n\n################################################################################" echo -e "################################### Finished ###################################" echo -e "${Cyan}#${Purple} Congratulations, you have successfully setup OpenVPN-Admin! ${Cyan}#" -echo -e "${Cyan}#${Purple}Finish the install using http://$ip_server/index.php?installation ${Cyan}#" +echo -e "${Cyan}#${Purple} Finish the install using http://$ip_server/index.php?installation ${Cyan}#" echo -e "${Cyan}#${Purple} Please, report any issues here https://github.com/arvage/OpenVPN-Admin ${Cyan}#" echo -e "${Cyan}#${Purple} Auto Generated MySQL Root Password: $mysql_root_pass ${Cyan}#" -echo -e "${Cyan}#${Purple} Auto Generated OpenVPN-Admin MySQL Username: $mysql_user ${Cyan}#" -echo -e "${Cyan}#${Purple} Auto Generated OpenVPN-Admin MySQL Password: $mysql_pass ${Cyan}#" +echo -e "${Cyan}#${Purple} Auto Generated OpenVPN-Admin MySQL Username: $mysql_user ${Cyan}#" +echo -e "${Cyan}#${Purple} Auto Generated OpenVPN-Admin MySQL Password: $mysql_pass ${Cyan}#" echo -e "${Cyan}################################################################################${NC}" echo -e "${Cyan}################################################################################${NC}" From 005350f6e20ddeb5ace98df7a84dabe5a7a04a2b Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Sun, 3 May 2020 11:04:26 -0700 Subject: [PATCH 060/255] fixed final messages --- install.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/install.sh b/install.sh index 7b43206..12a8db2 100755 --- a/install.sh +++ b/install.sh @@ -309,12 +309,12 @@ systemctl start openvpn@server echo -e "${Cyan}\n\n\n################################################################################" echo -e "################################### Finished ###################################" -echo -e "${Cyan}#${Purple} Congratulations, you have successfully setup OpenVPN-Admin! ${Cyan}#" -echo -e "${Cyan}#${Purple} Finish the install using http://$ip_server/index.php?installation ${Cyan}#" -echo -e "${Cyan}#${Purple} Please, report any issues here https://github.com/arvage/OpenVPN-Admin ${Cyan}#" -echo -e "${Cyan}#${Purple} Auto Generated MySQL Root Password: $mysql_root_pass ${Cyan}#" -echo -e "${Cyan}#${Purple} Auto Generated OpenVPN-Admin MySQL Username: $mysql_user ${Cyan}#" -echo -e "${Cyan}#${Purple} Auto Generated OpenVPN-Admin MySQL Password: $mysql_pass ${Cyan}#" +echo -e "${Purple} Congratulations, you have successfully setup OpenVPN-Admin! " +echo -e " Finish the install using http://$ip_server/index.php?installation " +echo -e " Please, report any issues here https://github.com/arvage/OpenVPN-Admin " +echo -e " Auto Generated MySQL Root Password: $mysql_root_pass " +echo -e " Auto Generated OpenVPN-Admin MySQL Username: $mysql_user " +echo -e " Auto Generated OpenVPN-Admin MySQL Password: $mysql_pass " echo -e "${Cyan}################################################################################${NC}" echo -e "${Cyan}################################################################################${NC}" From d43130778f3b1df0bf3e1166d12bbd42fa7bbc70 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Sun, 3 May 2020 12:15:25 -0700 Subject: [PATCH 061/255] rearranged the script --- install.sh | 110 +++++++++++++++++++++++----------------------- online-install.sh | 4 +- 2 files changed, 56 insertions(+), 58 deletions(-) diff --git a/install.sh b/install.sh index 12a8db2..85a1711 100755 --- a/install.sh +++ b/install.sh @@ -1,5 +1,32 @@ #!/bin/bash +### Variables +OS=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f1 -d " ") +www=$1 +user=$2 +group=$3 +# OpenVPN +openvpn_admin="$www/openvpn-admin" +base_path=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) +ip_server=$(hostname -I | cut -f1 -d\ ) +openvpn_proto="udp" +server_port="1194" +# MySQL Variables +mysql_root_pass=$(openssl rand -base64 12) +mysql_user=$(openssl rand -base64 12) +mysql_pass=$(openssl rand -base64 12) +# Certificates Variables +key_size="2048" +ca_expire="3650" +cert_expire="3650" +cert_country="US" +cert_province="California" +cert_city="Mission Viejo" +cert_org="Arvage" +cert_ou="IT" +cert_email="example@test.net" +key_cn=$(hostname -I | cut -f1 -d\ ) +# Colors NC='\033[0m' # No Color Red='\033[1;31m' # Light Red Yellow='\033[0;33m' # Yellow @@ -7,18 +34,17 @@ Green='\033[0;32m' # Green Cyan='\033[0;36m' # Cyan Purple='\033[0;35m' # Purple - print_help () { - echo -e "./install.sh www_basedir user group" - echo -e "\tbase_dir: The place where the web application will be put in" - echo -e "\tuser: User of the web application" - echo -e "\tgroup: Group of the web application" + echo -e "sudo ./install.sh www_basedir user group" + echo -e "\tbase_dir: The place where the web application will be put in (e.g. /var/www)" + echo -e "\tuser: User of the web application (e.g. www-data)" + echo -e "\tgroup: Group of the web application (e.g. www-data)" } # Ensure to be root if [ "$EUID" -ne 0 ]; then echo -e "${Red}Please use sudo to run the script. e.g:${NC}" - echo -e "${Green}sudo ./install.sh /var/www www-data www-data${NC}" + echo -e "${Green}sudo ./install.sh /var/www www-data www-data${NC}" exit fi @@ -28,16 +54,14 @@ if [ "$#" -ne 3 ]; then exit fi -echo -e "${Green}\n################################# Automated Installation Started ################################\n" +echo -e "${Green}\nAutomated Installation Started${NC}" sleep 2 -#echo -e "${Purple}\n###################################### OS Detection #####################################\n" # Detecting OS Distribution -OS=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f1 -d " ") echo -e "${Cyan}Detected OS: $OS \n" sleep 2 -echo -e "${Green}\n#################################### Installing Prerequisites ###################################" -echo -e "${Red}################################### This could take long time ###################################\n${NC}" +# Installing prerequisites +echo -e "${Green}Installing Prerequisites ${Red}(This could take long time)${NC}" apt update && sudo apt upgrade -y case $OS in @@ -54,7 +78,7 @@ esac npm install -g bower # Ensure there are the prerequisites -for i in openvpn mysql php bower node unzip wget sed; do +for i in openvpn apache2 mariadb-server php php-mysql php-zip unzip git wget sed curl nodejs npm; do which $i > /dev/null if [ "$?" -ne 0 ]; then echo -e "${Red}$i is missing. Please install $i manually.${NC}" @@ -62,8 +86,7 @@ for i in openvpn mysql php bower node unzip wget sed; do fi done -echo -e "${Green}\n################################### Setting MySQL Configuration ####################################\n" -mysql_root_pass=$(openssl rand -base64 12) +echo -e "${Green}Setting MySQL Configuration" mysql -u root <<-EOF UPDATE mysql.user SET Password=PASSWORD('$mysql_root_pass') WHERE User='root'; DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1'); @@ -72,23 +95,12 @@ DELETE FROM mysql.db WHERE Db='test' OR Db='test_%'; FLUSH PRIVILEGES; EOF -www=$1 -user=$2 -group=$3 - -openvpn_admin="$www/openvpn-admin" - # Check the validity of the arguments if [ ! -d "$www" ] || ! grep -q "$user" "/etc/passwd" || ! grep -q "$group" "/etc/group" ; then print_help exit fi -base_path=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) -ip_server=$(hostname -I | cut -f1 -d\ ) -openvpn_proto="udp" -server_port="1194" - # Get root pass (to create the database and the user) status_code=1 @@ -104,30 +116,16 @@ if [ "$sql_result" != "" ]; then exit fi -echo -e "${Green}\n################## Generating OpenVPN-Admin SQL DB user credentials ##################\n${NC}" +echo -e "${Green}Generating OpenVPN-Admin SQL DB user credentials\n" # Check if the user doesn't already exist -mysql_user=$(openssl rand -base64 12) -mysql_pass=$(openssl rand -base64 12) - echo "SHOW GRANTS FOR $mysql_user@localhost" | mysql -u root --password="$mysql_root_pass" &> /dev/null if [ $? -eq 0 ]; then echo "The MySQL user already exists." exit fi -key_size="2048" -ca_expire="3650" -cert_expire="3650" -cert_country="US" -cert_province="California" -cert_city="Mission Viejo" -cert_org="Arvage" -cert_ou="IT" -cert_email="example@test.net" -key_cn=$(hostname -I | cut -f1 -d\ ) - -echo -e "${Green}\n################## Creating the certificates ##################\n${Yellow}" +echo -e "${Green}Creating the Certificates${Yellow}" # Get the rsa keys EASYRSA_VERSION=$(curl -s https://api.github.com/repos/OpenVPN/easy-rsa/releases/latest | grep "tag_name" | cut -f2 -d "v" | sed 's/[",]//g') @@ -186,7 +184,7 @@ export EASYRSA_BATCH=1 openvpn --genkey --secret pki/ta.key -echo -e "${Green}\n##################### Setup OpenVPN #####################\n${NC}" +echo -e "${Green}Setup OpenVPN${NC}" # Copy certificates and the server configuration in the openvpn directory cp /etc/openvpn/easy-rsa/pki/{ca.crt,ta.key,issued/server.crt,private/server.key,dh.pem} "/etc/openvpn/" @@ -201,7 +199,7 @@ fi nobody_group=$(id -ng nobody) sed -i "s/group nogroup/group $nobody_group/" "/etc/openvpn/server.conf" -echo -e "${Green}\n################## Setup Firewall ####################\n${NC}" +echo -e "${Green}Setup Firewall${NC}" # Make ip forwading and make it persistent echo 1 > "/proc/sys/net/ipv4/ip_forward" @@ -221,7 +219,7 @@ iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o $primary_nic -j MASQUERADE iptables -t nat -A POSTROUTING -s 10.8.0.2/24 -o $primary_nic -j MASQUERADE -echo -e "${Green}\n################## Setup MySQL Database ##################\n${NC}" +echo -e "${Green}Setup MySQL Database${NC}" echo "CREATE DATABASE \`openvpn-admin\`" | mysql -u root --password="$mysql_root_pass" echo "CREATE USER $mysql_user@localhost IDENTIFIED BY '$mysql_pass'" | mysql -u root --password="$mysql_root_pass" @@ -229,7 +227,7 @@ echo "GRANT ALL PRIVILEGES ON \`openvpn-admin\`.* TO $mysql_user@localhost" | m echo "FLUSH PRIVILEGES" | mysql -u root --password="$mysql_root_pass" -echo -e "${Green}\n################## Setup Web Application ##################\n${NC}" +echo -e "${Green}Setup Web Application${NC}" # Copy bash scripts (which will insert row in MySQL) cp -r "$base_path/installation/scripts" "/etc/openvpn/" @@ -275,7 +273,7 @@ done bower --allow-root install chown -R "$user:$group" "$openvpn_admin" -echo -e "${Green}\n################################### Setting Apache Configuration ####################################\n${NC}" +echo -e "${Green}Setting Apache Configuration${NC}" cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/openvpn.conf sed -i 's/\/var\/www\/html/\/var\/www\/openvpn-admin/g' /etc/apache2/sites-available/openvpn.conf sed -i '/<\/VirtualHost>/i \\n\t\n\t\tOptions Indexes FollowSymLinks\n\t\tAllowOverride All\n\t\tRequire all granted\n\t<\/Directory>' /etc/apache2/sites-available/openvpn.conf @@ -289,7 +287,7 @@ a2dissite 000-default a2ensite openvpn systemctl restart apache2 -echo -e "${Green}\n################################# Finalizing OpenVPN Configuration ####################################\n${NC}" +echo -e "${Green}Finalizing OpenVPN Configuration${NC}" #sed -i 's/explicit-exit-notify 1/# explicit-exit-notify 1/g' /etc/openvpn/server.conf #sed -i 's/80.67.169.12/8.8.8.8/g' /etc/openvpn/server.conf #sed -i 's/80.67.169.40/8.8.4.4/g' /etc/openvpn/server.conf @@ -306,16 +304,16 @@ systemctl start openvpn@server # [Nn]*) # ;; #esac - -echo -e "${Cyan}\n\n\n################################################################################" +echo -e "\n\n\n${Cyan}" +echo -e "################################################################################" echo -e "################################### Finished ###################################" -echo -e "${Purple} Congratulations, you have successfully setup OpenVPN-Admin! " -echo -e " Finish the install using http://$ip_server/index.php?installation " -echo -e " Please, report any issues here https://github.com/arvage/OpenVPN-Admin " -echo -e " Auto Generated MySQL Root Password: $mysql_root_pass " -echo -e " Auto Generated OpenVPN-Admin MySQL Username: $mysql_user " -echo -e " Auto Generated OpenVPN-Admin MySQL Password: $mysql_pass " - +echo -e "${Purple}Congratulations, you have successfully setup OpenVPN-Admin!" +echo -e " Finish the install by goint to" +echo -e " http://$ip_server/index.php?installation" +echo -e " Please, report any issues here https://github.com/arvage/OpenVPN-Admin" +echo -e " Auto Generated MySQL Root Password: $mysql_root_pass" +echo -e " Auto Generated OpenVPN-Admin MySQL Username: $mysql_user" +echo -e " Auto Generated OpenVPN-Admin MySQL Password: $mysql_pass ${NC}" echo -e "${Cyan}################################################################################${NC}" echo -e "${Cyan}################################################################################${NC}" diff --git a/online-install.sh b/online-install.sh index f94755a..767a2f1 100644 --- a/online-install.sh +++ b/online-install.sh @@ -1,6 +1,6 @@ #!/bin/bash - -echo -e "${Green}\n############################### Updating and Getting Ready #############################\n" +clear +echo -e "${Green}Updating and Getting Ready" sudo apt update sudo apt install -y git cd ~ From 6f06ac0844f244a248da09a17bdfbc97c7f318e0 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Sun, 3 May 2020 12:19:38 -0700 Subject: [PATCH 062/255] Update README.md --- README.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index bf64fe6..7ecf807 100644 --- a/README.md +++ b/README.md @@ -17,9 +17,12 @@ Administrate its OpenVPN with a web interface (logs visualisations, users managi Only tested on Raspberry Pi 3 with Raspbian Buster. Feel free to open issues. ## Installation - * for online automated install - wget -O - https://raw.githubusercontent.com/arvage/OpenVPN-Admin/master/online-install.sh | bash - * Setup OpenVPN and the web application: + + * For online automated install + + wget -O - https://raw.githubusercontent.com/arvage/OpenVPN-Admin/master/online-install.sh | bash + + * For manual Setup OpenVPN and the web application: sudo apt update sudo apt install -y git From e36329ea03072eb1d8e86619a22518f45ac1ac0a Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Sun, 3 May 2020 12:29:54 -0700 Subject: [PATCH 063/255] added auto admin install --- README.md | 3 ++- index.php | 7 +++++++ install.sh | 4 ++-- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index bf64fe6..4d2c859 100644 --- a/README.md +++ b/README.md @@ -14,11 +14,12 @@ Administrate its OpenVPN with a web interface (logs visualisations, users managi ## Tests -Only tested on Raspberry Pi 3 with Raspbian Buster. Feel free to open issues. +Only tested on Raspberry Pi 3 with Raspbian Buster (No GUI). ## Installation * for online automated install wget -O - https://raw.githubusercontent.com/arvage/OpenVPN-Admin/master/online-install.sh | bash + * Setup OpenVPN and the web application: sudo apt update diff --git a/index.php b/index.php index 7fdcb39..be12958 100644 --- a/index.php +++ b/index.php @@ -4,6 +4,13 @@ require(dirname(__FILE__) . '/include/functions.php'); require(dirname(__FILE__) . '/include/connect.php'); + // --------------- INSTALLATION --------------- + if(isset($_GET['installation'])) { + if(isInstalled($bdd) == false) { + printError('OpenVPN-Admin admin user not created. Redirecting.'); + header( "refresh:2;url=index.php?installation" ); + exit(-1); + } // Disconnecting ? if(isset($_GET['logout'])){ session_destroy(); diff --git a/install.sh b/install.sh index 85a1711..8456426 100755 --- a/install.sh +++ b/install.sh @@ -308,8 +308,8 @@ echo -e "\n\n\n${Cyan}" echo -e "################################################################################" echo -e "################################### Finished ###################################" echo -e "${Purple}Congratulations, you have successfully setup OpenVPN-Admin!" -echo -e " Finish the install by goint to" -echo -e " http://$ip_server/index.php?installation" +echo -e " Finish the install by going to" +echo -e " http://$ip_server/" echo -e " Please, report any issues here https://github.com/arvage/OpenVPN-Admin" echo -e " Auto Generated MySQL Root Password: $mysql_root_pass" echo -e " Auto Generated OpenVPN-Admin MySQL Username: $mysql_user" From 3744d9ecb76a4f96dd345cf976334891660936cb Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Sun, 3 May 2020 12:34:23 -0700 Subject: [PATCH 064/255] fixed an error --- index.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/index.php b/index.php index be12958..388b8f3 100644 --- a/index.php +++ b/index.php @@ -11,6 +11,8 @@ header( "refresh:2;url=index.php?installation" ); exit(-1); } + } + // Disconnecting ? if(isset($_GET['logout'])){ session_destroy(); From 74bc50780642f1cb719e274c9247ae53e2b6fcb2 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Sun, 3 May 2020 12:57:18 -0700 Subject: [PATCH 065/255] fixed mariadb error --- install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.sh b/install.sh index 8456426..101fd7a 100755 --- a/install.sh +++ b/install.sh @@ -78,7 +78,7 @@ esac npm install -g bower # Ensure there are the prerequisites -for i in openvpn apache2 mariadb-server php php-mysql php-zip unzip git wget sed curl nodejs npm; do +for i in openvpn apache2 mysql php php-mysql php-zip unzip git wget sed curl nodejs npm; do which $i > /dev/null if [ "$?" -ne 0 ]; then echo -e "${Red}$i is missing. Please install $i manually.${NC}" From 6e374f74c8c37fbbf8b83cadfc441bcf693304e3 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Sun, 3 May 2020 13:20:24 -0700 Subject: [PATCH 066/255] fixed prerequisite checkups --- install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.sh b/install.sh index 101fd7a..8eea4bf 100755 --- a/install.sh +++ b/install.sh @@ -78,7 +78,7 @@ esac npm install -g bower # Ensure there are the prerequisites -for i in openvpn apache2 mysql php php-mysql php-zip unzip git wget sed curl nodejs npm; do +for i in openvpn apache2 mysql php unzip git wget sed curl nodejs npm; do which $i > /dev/null if [ "$?" -ne 0 ]; then echo -e "${Red}$i is missing. Please install $i manually.${NC}" From 0e87d08fe4cb03bf2c28e12e39ed3592fa27c0b6 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Sun, 3 May 2020 14:19:51 -0700 Subject: [PATCH 067/255] error fix --- index.php | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/index.php b/index.php index 388b8f3..0cc751a 100644 --- a/index.php +++ b/index.php @@ -4,21 +4,13 @@ require(dirname(__FILE__) . '/include/functions.php'); require(dirname(__FILE__) . '/include/connect.php'); - // --------------- INSTALLATION --------------- - if(isset($_GET['installation'])) { - if(isInstalled($bdd) == false) { - printError('OpenVPN-Admin admin user not created. Redirecting.'); - header( "refresh:2;url=index.php?installation" ); - exit(-1); - } - } - // Disconnecting ? if(isset($_GET['logout'])){ session_destroy(); header("Location: ."); exit(-1); } + // Get the instruction file ? if(isset($_POST['instruction_get'])) { $file_name = "Download and install the OpenVPN GUI.pdf"; @@ -147,11 +139,10 @@ header( "refresh:3;url=index.php?admin" ); } // Print the installation form - else { + else { require(dirname(__FILE__) . '/include/html/menu.php'); require(dirname(__FILE__) . '/include/html/form/installation.php'); } - exit(-1); } @@ -193,7 +184,7 @@ + ?>

From 6f41b85d012534f9c5f7d36fb2017207a94dfa4f Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Sun, 3 May 2020 14:25:19 -0700 Subject: [PATCH 068/255] script touchups --- install.sh | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/install.sh b/install.sh index 8eea4bf..5d6f04c 100755 --- a/install.sh +++ b/install.sh @@ -307,13 +307,18 @@ systemctl start openvpn@server echo -e "\n\n\n${Cyan}" echo -e "################################################################################" echo -e "################################### Finished ###################################" +echo echo -e "${Purple}Congratulations, you have successfully setup OpenVPN-Admin!" -echo -e " Finish the install by going to" +echo +echo -e "Finish the install by going to" echo -e " http://$ip_server/" -echo -e " Please, report any issues here https://github.com/arvage/OpenVPN-Admin" +echo echo -e " Auto Generated MySQL Root Password: $mysql_root_pass" echo -e " Auto Generated OpenVPN-Admin MySQL Username: $mysql_user" echo -e " Auto Generated OpenVPN-Admin MySQL Password: $mysql_pass ${NC}" +echo +echo -e " Please, report any issues here https://github.com/arvage/OpenVPN-Admin" +echo echo -e "${Cyan}################################################################################${NC}" echo -e "${Cyan}################################################################################${NC}" From 4f4376027c86048eb5932c47fca5691cdda617e6 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Sun, 3 May 2020 22:47:22 -0700 Subject: [PATCH 069/255] add user auto start date to date --- include/grids.php | 2 +- install.sh | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/include/grids.php b/include/grids.php index 2f04363..c019617 100644 --- a/include/grids.php +++ b/include/grids.php @@ -136,7 +136,7 @@ $phone = ""; $online = 0; $enable = 1; - $start = null; + $start = date("Y-m-d"); $end = null; $req = $bdd->prepare('INSERT INTO user (user_id, user_pass, user_mail, user_phone, user_online, user_enable, user_start_date, user_end_date) diff --git a/install.sh b/install.sh index 5d6f04c..44dfbc6 100755 --- a/install.sh +++ b/install.sh @@ -2,6 +2,7 @@ ### Variables OS=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f1 -d " ") +$timezone = "America/Los_Angeles" www=$1 user=$2 group=$3 @@ -86,7 +87,7 @@ for i in openvpn apache2 mysql php unzip git wget sed curl nodejs npm; do fi done -echo -e "${Green}Setting MySQL Configuration" +echo -e "${Green}Setting MySQL Configuration${NC}" mysql -u root <<-EOF UPDATE mysql.user SET Password=PASSWORD('$mysql_root_pass') WHERE User='root'; DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1'); @@ -277,6 +278,7 @@ echo -e "${Green}Setting Apache Configuration${NC}" cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/openvpn.conf sed -i 's/\/var\/www\/html/\/var\/www\/openvpn-admin/g' /etc/apache2/sites-available/openvpn.conf sed -i '/<\/VirtualHost>/i \\n\t\n\t\tOptions Indexes FollowSymLinks\n\t\tAllowOverride All\n\t\tRequire all granted\n\t<\/Directory>' /etc/apache2/sites-available/openvpn.conf +sed -i "/;date.timezone =/a date.timezone = $timezone" /etc/php/7.3/apache2/php.ini #touch /var/www/.htpasswd #chown www-data:www-data /var/www/.htpasswd #echo -e "${Yellow}It's time to secure client configuration folder from anonymous browser and assign a super admin user to be only able to browse it.\n" @@ -311,7 +313,7 @@ echo echo -e "${Purple}Congratulations, you have successfully setup OpenVPN-Admin!" echo echo -e "Finish the install by going to" -echo -e " http://$ip_server/" +echo -e " http://$ip_server/index.php?installation" echo echo -e " Auto Generated MySQL Root Password: $mysql_root_pass" echo -e " Auto Generated OpenVPN-Admin MySQL Username: $mysql_user" From 7a69e86cd34771c2c269e6b3e245d1647f672ebc Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Sun, 3 May 2020 22:51:14 -0700 Subject: [PATCH 070/255] static timezone added --- install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.sh b/install.sh index 44dfbc6..020ae25 100755 --- a/install.sh +++ b/install.sh @@ -2,7 +2,7 @@ ### Variables OS=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f1 -d " ") -$timezone = "America/Los_Angeles" +timezone = "America/Los_Angeles" www=$1 user=$2 group=$3 From 526fd0e77f99aad7ce2f677986a216316819502f Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Sun, 3 May 2020 22:52:02 -0700 Subject: [PATCH 071/255] static timezone added --- install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.sh b/install.sh index 020ae25..514bfdd 100755 --- a/install.sh +++ b/install.sh @@ -2,7 +2,7 @@ ### Variables OS=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f1 -d " ") -timezone = "America/Los_Angeles" +timezone="America/Los_Angeles" www=$1 user=$2 group=$3 From 92c64afc5a66e460d6df81fa9f8169443120de24 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Sun, 3 May 2020 23:18:54 -0700 Subject: [PATCH 072/255] fixed sql user or pass error --- install.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/install.sh b/install.sh index 514bfdd..d7b8173 100755 --- a/install.sh +++ b/install.sh @@ -13,9 +13,9 @@ ip_server=$(hostname -I | cut -f1 -d\ ) openvpn_proto="udp" server_port="1194" # MySQL Variables -mysql_root_pass=$(openssl rand -base64 12) -mysql_user=$(openssl rand -base64 12) -mysql_pass=$(openssl rand -base64 12) +mysql_root_pass=$(openssl rand -base64 12 | sed 's/[^a-zA-Z0-9]//g') +mysql_user=$(openssl rand -base64 12 | sed 's/[^a-zA-Z0-9]//g') +mysql_pass=$(openssl rand -base64 12 | sed 's/[^a-zA-Z0-9]//g') # Certificates Variables key_size="2048" ca_expire="3650" From c5e17dacaf50157b0fc4eea03621edd36a03e172 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Sun, 3 May 2020 23:36:08 -0700 Subject: [PATCH 073/255] added download conf to admin page --- include/html/grids.php | 1 + 1 file changed, 1 insertion(+) diff --git a/include/html/grids.php b/include/html/grids.php index ff3dd6e..ea9e99f 100644 --- a/include/html/grids.php +++ b/include/html/grids.php @@ -32,6 +32,7 @@ function getHistory($cfg_file, $accordion_id, $open_first_history_tab = false) {
  • Web Admins
  • Configs
  • +
  • Download Configuratio
  • From b2302d9634560d3fec86dee023ad22be38e548ed Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Sun, 3 May 2020 23:59:04 -0700 Subject: [PATCH 074/255] added configurations table --- include/html/grids.php | 1 - sql/schema-5.sql | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/include/html/grids.php b/include/html/grids.php index ea9e99f..ff3dd6e 100644 --- a/include/html/grids.php +++ b/include/html/grids.php @@ -32,7 +32,6 @@ function getHistory($cfg_file, $accordion_id, $open_first_history_tab = false) {
  • OpenVPN logs
  • Web Admins
  • Configs
  • -
  • Download Configuratio
  • diff --git a/sql/schema-5.sql b/sql/schema-5.sql index a67cf2c..b3f8a93 100644 --- a/sql/schema-5.sql +++ b/sql/schema-5.sql @@ -7,3 +7,5 @@ ALTER TABLE `log` CHANGE `log_end_time` `log_end_time` TIMESTAMP NULL DEFAULT NU UPDATE `user` SET `user_start_date` = NULL WHERE `user_start_date` = '0000-00-00'; UPDATE `user` SET `user_end_date` = NULL WHERE `user_end_date` = '0000-00-00'; UPDATE `log` SET `log_end_time` = NULL WHERE `log_end_time` = '0000-00-00'; + +CREATE TABLE `configuration` ( `admin_created` BOOLEAN, `timezone` VARCHAR(100) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; \ No newline at end of file From 3423248597c8ac9419f4afcd38d620ee54b61659 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 4 May 2020 00:25:53 -0700 Subject: [PATCH 075/255] update --- README.md | 7 ------- 1 file changed, 7 deletions(-) diff --git a/README.md b/README.md index 17571f1..fc3f64e 100644 --- a/README.md +++ b/README.md @@ -17,19 +17,12 @@ Administrate its OpenVPN with a web interface (logs visualisations, users managi Only tested on Raspberry Pi 3 with Raspbian Buster (No GUI). ## Installation -<<<<<<< HEAD - * for online automated install - wget -O - https://raw.githubusercontent.com/arvage/OpenVPN-Admin/master/online-install.sh | bash - - * Setup OpenVPN and the web application: -======= * For online automated install wget -O - https://raw.githubusercontent.com/arvage/OpenVPN-Admin/master/online-install.sh | bash * For manual Setup OpenVPN and the web application: ->>>>>>> 6f06ac0844f244a248da09a17bdfbc97c7f318e0 sudo apt update sudo apt install -y git From e340daddaa983015ae340db0982c41b24b97269a Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 4 May 2020 00:26:56 -0700 Subject: [PATCH 076/255] update --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index fc3f64e..3ae2b00 100644 --- a/README.md +++ b/README.md @@ -12,10 +12,6 @@ Administrate its OpenVPN with a web interface (logs visualisations, users managi * Raspbian with Bash access or remote SSH * Git -## Tests - -Only tested on Raspberry Pi 3 with Raspbian Buster (No GUI). - ## Installation * For online automated install @@ -34,6 +30,10 @@ Only tested on Raspberry Pi 3 with Raspbian Buster (No GUI). * If you are using any other web server than Apache like NGinx, you need to set it up manually to serve the web application. * Once the installation is finished browse to `http://your_hostname_or_ip/index.php?installation` to create your admin user. +## Tests + +Only tested on Raspberry Pi 3 with Raspbian Buster (No GUI). + ## Usage * Connect to the web application as an admin From 10110efba5c4f1401cba17ec8eee3b485edd6f81 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 4 May 2020 00:38:55 -0700 Subject: [PATCH 077/255] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3ae2b00..7daeab9 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -## Raspberry Pi OpenVPN Admin using Apache2 +## Raspberry Pi OpenVPN Admin using LAMP ## Summary Administrate its OpenVPN with a web interface (logs visualisations, users managing...) and a SQL database. From dcbf6d2cb4ddb5f68bb20d90f46a974c52dc6f9c Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 4 May 2020 00:40:08 -0700 Subject: [PATCH 078/255] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7daeab9..37afb88 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ ## Raspberry Pi OpenVPN Admin using LAMP ## Summary -Administrate its OpenVPN with a web interface (logs visualisations, users managing...) and a SQL database. +Administer OpenVPN Server with a web interface (Users Management, Logs, Visualizations) ![Previsualisation configuration](https://lutim.cpy.re/fUq2rxqz) ![Previsualisation administration](https://lutim.cpy.re/wwYMkHcM) From 6c0a59c648886ad659aacb71a10a0a1edfa4bc0f Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 4 May 2020 00:41:01 -0700 Subject: [PATCH 079/255] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 37afb88..6493ce1 100644 --- a/README.md +++ b/README.md @@ -14,11 +14,11 @@ Administer OpenVPN Server with a web interface (Users Management, Logs, Visualiz ## Installation - * For online automated install + * Method 1: wget -O - https://raw.githubusercontent.com/arvage/OpenVPN-Admin/master/online-install.sh | bash - * For manual Setup OpenVPN and the web application: + * Method 2: sudo apt update sudo apt install -y git From c51fdbdd3ca12471232d0057f6b739035c19bf62 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 4 May 2020 13:26:58 -0700 Subject: [PATCH 080/255] added config download button to admin page --- index.php | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/index.php b/index.php index 0cc751a..dcc0afb 100644 --- a/index.php +++ b/index.php @@ -25,7 +25,20 @@ exit; } - // Get the configuration files ? + // Get configuration file from admin page + if(isset($_GET['admin_configuration_get']) && !empty($_SESSION['admin_id']) ) { + $file_name = "client.ovpn"; + $file_folder = "windows"; + $file_full_path = './client-conf/' . $file_folder . '/' . $file_name; + header("Content-type: application/ovpn"); + header("Content-disposition: attachment; filename=$file_name"); + header("Pragma: no-cache"); + header("Expires: 0"); + readfile($file_full_path); + exit; + } + + // Get the configuration files from configuration page if(isset($_POST['configuration_get'], $_POST['configuration_username'], $_POST['configuration_pass']) && !empty($_POST['configuration_pass'])) { $req = $bdd->prepare('SELECT * FROM user WHERE user_id = ?'); $req->execute(array($_POST['configuration_username'])); @@ -176,6 +189,7 @@
    From ccd09cc6ca10909aa5480364224f030e49434012 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 4 May 2020 13:46:08 -0700 Subject: [PATCH 081/255] updated unistall --- install.sh | 2 +- desinstall.sh => uninstall.sh | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) rename desinstall.sh => uninstall.sh (96%) diff --git a/install.sh b/install.sh index d7b8173..7f78740 100755 --- a/install.sh +++ b/install.sh @@ -278,7 +278,7 @@ echo -e "${Green}Setting Apache Configuration${NC}" cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/openvpn.conf sed -i 's/\/var\/www\/html/\/var\/www\/openvpn-admin/g' /etc/apache2/sites-available/openvpn.conf sed -i '/<\/VirtualHost>/i \\n\t\n\t\tOptions Indexes FollowSymLinks\n\t\tAllowOverride All\n\t\tRequire all granted\n\t<\/Directory>' /etc/apache2/sites-available/openvpn.conf -sed -i "/;date.timezone =/a date.timezone = $timezone" /etc/php/7.3/apache2/php.ini +sed -i "/;date.timezone =/a date.timezone = $timezone ; added by openvpn-admin" /etc/php/7.3/apache2/php.ini #touch /var/www/.htpasswd #chown www-data:www-data /var/www/.htpasswd #echo -e "${Yellow}It's time to secure client configuration folder from anonymous browser and assign a super admin user to be only able to browse it.\n" diff --git a/desinstall.sh b/uninstall.sh similarity index 96% rename from desinstall.sh rename to uninstall.sh index 2a23c59..444529e 100755 --- a/desinstall.sh +++ b/uninstall.sh @@ -70,4 +70,6 @@ iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE iptables -t nat -D POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE iptables -t nat -D POSTROUTING -s 10.8.0.2/24 -o eth0 -j MASQUERADE + +sed -i "/added by openvpn-admin/d" /etc/php/7.3/apache2/php.ini echo "The application has been completely removed!" From dc93d3c59f6dcbd1491b3e4d8bbc6384a6aacad6 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 4 May 2020 13:46:52 -0700 Subject: [PATCH 082/255] update --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6493ce1..bcc53b8 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ Only tested on Raspberry Pi 3 with Raspbian Buster (No GUI). ## Desinstall It will remove all installed components (OpenVPN keys and configurations, the web application, iptables rules...). - sudo ./desinstall.sh /var/www + sudo ./uninstall.sh /var/www ## Use of From d33ba6144a72d6d5d3421e8d52fecdd74bf0a1be Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 4 May 2020 15:05:10 -0700 Subject: [PATCH 083/255] auto first time admin install --- index.php | 6 ++++++ install.sh | 10 +++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/index.php b/index.php index dcc0afb..06d4f20 100644 --- a/index.php +++ b/index.php @@ -4,6 +4,12 @@ require(dirname(__FILE__) . '/include/functions.php'); require(dirname(__FILE__) . '/include/connect.php'); + // first time install + if(($_SERVER[REQUEST_URI] != "/index.php?installation") && (isInstalled($bdd) == false)) { + header("Location: index.php?installation"); + exit(-1); + } + // Disconnecting ? if(isset($_GET['logout'])){ session_destroy(); diff --git a/install.sh b/install.sh index 7f78740..bc4caa5 100755 --- a/install.sh +++ b/install.sh @@ -306,14 +306,14 @@ systemctl start openvpn@server # [Nn]*) # ;; #esac -echo -e "\n\n\n${Cyan}" +echo -e "\n\n\n${Purple}" echo -e "################################################################################" echo -e "################################### Finished ###################################" echo -echo -e "${Purple}Congratulations, you have successfully setup OpenVPN-Admin!" +echo -e "${Cyan}Congratulations, you have successfully setup OpenVPN-Admin!" echo echo -e "Finish the install by going to" -echo -e " http://$ip_server/index.php?installation" +echo -e " http://$ip_server" echo echo -e " Auto Generated MySQL Root Password: $mysql_root_pass" echo -e " Auto Generated OpenVPN-Admin MySQL Username: $mysql_user" @@ -321,7 +321,7 @@ echo -e " Auto Generated OpenVPN-Admin MySQL Password: $mysql_pass $ echo echo -e " Please, report any issues here https://github.com/arvage/OpenVPN-Admin" echo -echo -e "${Cyan}################################################################################${NC}" -echo -e "${Cyan}################################################################################${NC}" +echo -e "${Purple}################################################################################${NC}" +echo -e "${Purple}################################################################################${NC}" systemctl restart openvpn@server From 5eb6b86245a5c02166c5739f3c8d243e52c09bc4 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 4 May 2020 16:56:58 -0700 Subject: [PATCH 084/255] updated public ip and hotname --- install.sh | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/install.sh b/install.sh index bc4caa5..8c54878 100755 --- a/install.sh +++ b/install.sh @@ -58,6 +58,14 @@ fi echo -e "${Green}\nAutomated Installation Started${NC}" sleep 2 +echo -p "Public IP/Hostname [$public_ip]: " public_hostname +if [ -z "$public_hostname" ] +then + public_ip=$(host myip.opendns.com resolver1.opendns.com | grep "myip.opendns.com has" | awk '{print $4}') +else + $public_ip=$public_hostname +fi + # Detecting OS Distribution echo -e "${Cyan}Detected OS: $OS \n" sleep 2 @@ -251,8 +259,8 @@ sed -i "s/\$pass = '';/\$pass = '$mysql_pass';/" "./include/config.php" # Replace in the client configurations with the ip of the server and openvpn protocol for file in $(find -name client.ovpn); do - sed -i "s/remote xxx\.xxx\.xxx\.xxx 1194/remote $ip_server $server_port/" $file - sed -i "s/remote xxx\.xxx\.xxx\.xxx 443/remote $ip_server $server_port/" $file + sed -i "s/remote xxx\.xxx\.xxx\.xxx 1194/remote $public_ip $server_port/" $file + sed -i "s/remote xxx\.xxx\.xxx\.xxx 443/remote $public_ip $server_port/" $file echo "" >> $file cat "/etc/openvpn/ca.crt" >> $file echo "" >> $file From b75916f3961f8643721590b701b30ba59ad02667 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 4 May 2020 16:58:22 -0700 Subject: [PATCH 085/255] update install --- install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.sh b/install.sh index 8c54878..c846d32 100755 --- a/install.sh +++ b/install.sh @@ -58,7 +58,7 @@ fi echo -e "${Green}\nAutomated Installation Started${NC}" sleep 2 -echo -p "Public IP/Hostname [$public_ip]: " public_hostname +read -p "Public IP/Hostname [$public_ip]: " public_hostname if [ -z "$public_hostname" ] then public_ip=$(host myip.opendns.com resolver1.opendns.com | grep "myip.opendns.com has" | awk '{print $4}') From e0b36ea71afe2ed561d8a788a9f68c9efe507c8b Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 4 May 2020 17:00:22 -0700 Subject: [PATCH 086/255] updated install --- install.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/install.sh b/install.sh index c846d32..10e369c 100755 --- a/install.sh +++ b/install.sh @@ -10,6 +10,7 @@ group=$3 openvpn_admin="$www/openvpn-admin" base_path=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) ip_server=$(hostname -I | cut -f1 -d\ ) +public_ip=$(host myip.opendns.com resolver1.opendns.com | grep "myip.opendns.com has" | awk '{print $4}') openvpn_proto="udp" server_port="1194" # MySQL Variables From 80c75a906e58a12bcc2c6cad506650a229db998e Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 4 May 2020 17:04:44 -0700 Subject: [PATCH 087/255] updated install script --- install.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/install.sh b/install.sh index 10e369c..1178efb 100755 --- a/install.sh +++ b/install.sh @@ -63,10 +63,13 @@ read -p "Public IP/Hostname [$public_ip]: " public_hostname if [ -z "$public_hostname" ] then public_ip=$(host myip.opendns.com resolver1.opendns.com | grep "myip.opendns.com has" | awk '{print $4}') + echo -e "\n${Red}Selected IP: $public_ip ${NC}" else $public_ip=$public_hostname + echo -e "\n${Red}Selected IP/Hostname: $public_ip ${NC}" fi + # Detecting OS Distribution echo -e "${Cyan}Detected OS: $OS \n" sleep 2 From 946a6e974f453154b71dddd26fc2703cf09d3b12 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 4 May 2020 17:08:19 -0700 Subject: [PATCH 088/255] updated install script --- install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.sh b/install.sh index 1178efb..98aaf7d 100755 --- a/install.sh +++ b/install.sh @@ -65,7 +65,7 @@ then public_ip=$(host myip.opendns.com resolver1.opendns.com | grep "myip.opendns.com has" | awk '{print $4}') echo -e "\n${Red}Selected IP: $public_ip ${NC}" else - $public_ip=$public_hostname + public_ip=$public_hostname echo -e "\n${Red}Selected IP/Hostname: $public_ip ${NC}" fi From a1bf476c16de28bc62f1b3953c4ba0c7e61a9e93 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 4 May 2020 17:12:04 -0700 Subject: [PATCH 089/255] Update install.sh --- install.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/install.sh b/install.sh index 98aaf7d..45badaa 100755 --- a/install.sh +++ b/install.sh @@ -56,10 +56,10 @@ if [ "$#" -ne 3 ]; then exit fi -echo -e "${Green}\nAutomated Installation Started${NC}" +echo -e "${Green}\nAutomated Installation Started\n" sleep 2 -read -p "Public IP/Hostname [$public_ip]: " public_hostname +read -p "Provide your public IP/Hostname [Detected IP: $public_ip]: " public_hostname if [ -z "$public_hostname" ] then public_ip=$(host myip.opendns.com resolver1.opendns.com | grep "myip.opendns.com has" | awk '{print $4}') @@ -68,10 +68,10 @@ else public_ip=$public_hostname echo -e "\n${Red}Selected IP/Hostname: $public_ip ${NC}" fi - +sleep 2 # Detecting OS Distribution -echo -e "${Cyan}Detected OS: $OS \n" +echo -e "${Cyan}\nDetected OS: $OS\n" sleep 2 # Installing prerequisites echo -e "${Green}Installing Prerequisites ${Red}(This could take long time)${NC}" From 7a53df2dff9c90726aa5d4d9ff2423c859109101 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 4 May 2020 18:49:11 -0700 Subject: [PATCH 090/255] updated install script --- install.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/install.sh b/install.sh index 45badaa..5b500f9 100755 --- a/install.sh +++ b/install.sh @@ -327,6 +327,7 @@ echo echo -e "Finish the install by going to" echo -e " http://$ip_server" echo +echo -e " Your Public URL: http://$public_ip" echo -e " Auto Generated MySQL Root Password: $mysql_root_pass" echo -e " Auto Generated OpenVPN-Admin MySQL Username: $mysql_user" echo -e " Auto Generated OpenVPN-Admin MySQL Password: $mysql_pass ${NC}" From 9a8b442a304c9ddb1df80b6757faf586a1b87047 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 4 May 2020 19:00:08 -0700 Subject: [PATCH 091/255] timeout for hostname input for automated install --- install.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/install.sh b/install.sh index 5b500f9..5f07b0e 100755 --- a/install.sh +++ b/install.sh @@ -59,7 +59,8 @@ fi echo -e "${Green}\nAutomated Installation Started\n" sleep 2 -read -p "Provide your public IP/Hostname [Detected IP: $public_ip]: " public_hostname + +read -t 10 -p "Provide your public IP/Hostname [Detected IP: $public_ip]: " public_hostname if [ -z "$public_hostname" ] then public_ip=$(host myip.opendns.com resolver1.opendns.com | grep "myip.opendns.com has" | awk '{print $4}') From 6c330d2388908f43277b3cc55ed810d8aa85b065 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 4 May 2020 19:27:28 -0700 Subject: [PATCH 092/255] updated install script --- install.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install.sh b/install.sh index 5f07b0e..73c8121 100755 --- a/install.sh +++ b/install.sh @@ -59,8 +59,8 @@ fi echo -e "${Green}\nAutomated Installation Started\n" sleep 2 - -read -t 10 -p "Provide your public IP/Hostname [Detected IP: $public_ip]: " public_hostname +echo -e "${Red}$public_ip detected as your Public IP and will be used automatically if you don't choose anything else.\nTimeout: 60 Seconds" +read -t 60 -p "Need to use another public IP/Hostname? Type it here: " public_hostname if [ -z "$public_hostname" ] then public_ip=$(host myip.opendns.com resolver1.opendns.com | grep "myip.opendns.com has" | awk '{print $4}') From f03b705d6e4c0c2905076d7bc60c61920907cd65 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 4 May 2020 19:28:43 -0700 Subject: [PATCH 093/255] update --- install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.sh b/install.sh index 73c8121..278c719 100755 --- a/install.sh +++ b/install.sh @@ -59,7 +59,7 @@ fi echo -e "${Green}\nAutomated Installation Started\n" sleep 2 -echo -e "${Red}$public_ip detected as your Public IP and will be used automatically if you don't choose anything else.\nTimeout: 60 Seconds" +echo -e "${Red}$public_ip ${NC}detected as your Public IP and will be used automatically if you don't choose anything else.\nTimeout: 60 Seconds" read -t 60 -p "Need to use another public IP/Hostname? Type it here: " public_hostname if [ -z "$public_hostname" ] then From 3860451c970d40d4562a3f48b2d2f90745fb3fcc Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 4 May 2020 19:33:26 -0700 Subject: [PATCH 094/255] update --- install.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install.sh b/install.sh index 278c719..42acfcc 100755 --- a/install.sh +++ b/install.sh @@ -64,10 +64,10 @@ read -t 60 -p "Need to use another public IP/Hostname? Type it here: " public_ho if [ -z "$public_hostname" ] then public_ip=$(host myip.opendns.com resolver1.opendns.com | grep "myip.opendns.com has" | awk '{print $4}') - echo -e "\n${Red}Selected IP: $public_ip ${NC}" + echo -e "\n${NC}Selected IP: ${Red}$public_ip ${NC}" else public_ip=$public_hostname - echo -e "\n${Red}Selected IP/Hostname: $public_ip ${NC}" + echo -e "\n${NC}Selected IP/Hostname: ${Red}$public_ip ${NC}" fi sleep 2 From a32f9fc3f09171a0144651d6e52a4e526c34fc73 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 4 May 2020 19:38:16 -0700 Subject: [PATCH 095/255] update --- install.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/install.sh b/install.sh index 42acfcc..cfa7168 100755 --- a/install.sh +++ b/install.sh @@ -60,7 +60,7 @@ echo -e "${Green}\nAutomated Installation Started\n" sleep 2 echo -e "${Red}$public_ip ${NC}detected as your Public IP and will be used automatically if you don't choose anything else.\nTimeout: 60 Seconds" -read -t 60 -p "Need to use another public IP/Hostname? Type it here: " public_hostname +read -t 60 -p "Need to use another public IP/Hostname? Type it here or hit enter to continue: " public_hostname if [ -z "$public_hostname" ] then public_ip=$(host myip.opendns.com resolver1.opendns.com | grep "myip.opendns.com has" | awk '{print $4}') @@ -72,7 +72,7 @@ fi sleep 2 # Detecting OS Distribution -echo -e "${Cyan}\nDetected OS: $OS\n" +echo -e "${NC}Detected OS: ${Red}$OS\n" sleep 2 # Installing prerequisites echo -e "${Green}Installing Prerequisites ${Red}(This could take long time)${NC}" @@ -319,11 +319,11 @@ systemctl start openvpn@server # [Nn]*) # ;; #esac -echo -e "\n\n\n${Purple}" +echo -e "\n\n\n${Yellow}" echo -e "################################################################################" echo -e "################################### Finished ###################################" echo -echo -e "${Cyan}Congratulations, you have successfully setup OpenVPN-Admin!" +echo -e "${Green}Congratulations, you have successfully setup OpenVPN-Admin!" echo echo -e "Finish the install by going to" echo -e " http://$ip_server" @@ -335,7 +335,7 @@ echo -e " Auto Generated OpenVPN-Admin MySQL Password: $mysql_pass $ echo echo -e " Please, report any issues here https://github.com/arvage/OpenVPN-Admin" echo -echo -e "${Purple}################################################################################${NC}" -echo -e "${Purple}################################################################################${NC}" +echo -e "${Yellow}################################################################################${NC}" +echo -e "${Yellow}################################################################################${NC}" systemctl restart openvpn@server From 3911af01d82fad588f29058e13fe7ad92e0bd01e Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 4 May 2020 20:16:16 -0700 Subject: [PATCH 096/255] added mysql timezone to install script --- install.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/install.sh b/install.sh index cfa7168..44b9661 100755 --- a/install.sh +++ b/install.sh @@ -3,6 +3,7 @@ ### Variables OS=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f1 -d " ") timezone="America/Los_Angeles" +gmt_offset="-8:00" www=$1 user=$2 group=$3 @@ -239,8 +240,8 @@ echo "CREATE DATABASE \`openvpn-admin\`" | mysql -u root --password="$mysql_root echo "CREATE USER $mysql_user@localhost IDENTIFIED BY '$mysql_pass'" | mysql -u root --password="$mysql_root_pass" echo "GRANT ALL PRIVILEGES ON \`openvpn-admin\`.* TO $mysql_user@localhost" | mysql -u root --password="$mysql_root_pass" echo "FLUSH PRIVILEGES" | mysql -u root --password="$mysql_root_pass" - - +echo "SET GLOBAL time_zone = '$gmt_offset';" | mysql -u root --password="$mysql_root_pass" +systemctl restart mysql echo -e "${Green}Setup Web Application${NC}" # Copy bash scripts (which will insert row in MySQL) From 94e51f483bd15694985bd75742e36df33aaa4b36 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 4 May 2020 20:32:58 -0700 Subject: [PATCH 097/255] fixed MySQL timezone. added more comments --- install.sh | 49 ++++++++++++++++++++++++++++--------------------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/install.sh b/install.sh index 44b9661..33a0840 100755 --- a/install.sh +++ b/install.sh @@ -1,26 +1,29 @@ #!/bin/bash ### Variables -OS=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f1 -d " ") -timezone="America/Los_Angeles" -gmt_offset="-8:00" +OS=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f1 -d " ") # Don't change this unless you know what you're doing +timezone="America/Los_Angeles" # this is PHP timezone +gmt_offset="-8:00" # this is MySQL timezone www=$1 user=$2 group=$3 + # OpenVPN openvpn_admin="$www/openvpn-admin" base_path=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) -ip_server=$(hostname -I | cut -f1 -d\ ) -public_ip=$(host myip.opendns.com resolver1.opendns.com | grep "myip.opendns.com has" | awk '{print $4}') -openvpn_proto="udp" -server_port="1194" -# MySQL Variables -mysql_root_pass=$(openssl rand -base64 12 | sed 's/[^a-zA-Z0-9]//g') -mysql_user=$(openssl rand -base64 12 | sed 's/[^a-zA-Z0-9]//g') -mysql_pass=$(openssl rand -base64 12 | sed 's/[^a-zA-Z0-9]//g') +ip_server=$(hostname -I | cut -f1 -d\ ) # added cut to remove openvpn tunnel IP from the string +public_ip=$(host myip.opendns.com resolver1.opendns.com | grep "myip.opendns.com has" | awk '{print $4}') # don't change this +openvpn_proto="udp" # UDP is a faster protocol than TCP +server_port="1194" # OpenVPN default port is 1194 + +# MySQL Variables +mysql_root_pass=$(openssl rand -base64 12 | sed 's/[^a-zA-Z0-9]//g') # Random ceated secure string without special chatacters +mysql_user=$(openssl rand -base64 12 | sed 's/[^a-zA-Z0-9]//g') # Random ceated secure string without special chatacters +mysql_pass=$(openssl rand -base64 12 | sed 's/[^a-zA-Z0-9]//g') # Random ceated secure string without special chatacters + # Certificates Variables -key_size="2048" -ca_expire="3650" +key_size="2048" # anything less than 2048 may get rejected by some OSes. bigger sizes will take forever to generate! +ca_expire="3650" # 10 Years cert_expire="3650" cert_country="US" cert_province="California" @@ -28,15 +31,15 @@ cert_city="Mission Viejo" cert_org="Arvage" cert_ou="IT" cert_email="example@test.net" -key_cn=$(hostname -I | cut -f1 -d\ ) -# Colors +key_cn=$public_ip # will be changed when asking for public IP/Hostname user input + +# On-Screen Colors NC='\033[0m' # No Color Red='\033[1;31m' # Light Red Yellow='\033[0;33m' # Yellow Green='\033[0;32m' # Green -Cyan='\033[0;36m' # Cyan -Purple='\033[0;35m' # Purple +# show on-screen help print_help () { echo -e "sudo ./install.sh www_basedir user group" echo -e "\tbase_dir: The place where the web application will be put in (e.g. /var/www)" @@ -60,6 +63,7 @@ fi echo -e "${Green}\nAutomated Installation Started\n" sleep 2 +# hostname / IP settings echo -e "${Red}$public_ip ${NC}detected as your Public IP and will be used automatically if you don't choose anything else.\nTimeout: 60 Seconds" read -t 60 -p "Need to use another public IP/Hostname? Type it here or hit enter to continue: " public_hostname if [ -z "$public_hostname" ] @@ -68,6 +72,7 @@ then echo -e "\n${NC}Selected IP: ${Red}$public_ip ${NC}" else public_ip=$public_hostname + key_cn=$public_ip echo -e "\n${NC}Selected IP/Hostname: ${Red}$public_ip ${NC}" fi sleep 2 @@ -75,6 +80,7 @@ sleep 2 # Detecting OS Distribution echo -e "${NC}Detected OS: ${Red}$OS\n" sleep 2 + # Installing prerequisites echo -e "${Green}Installing Prerequisites ${Red}(This could take long time)${NC}" apt update && sudo apt upgrade -y @@ -92,7 +98,7 @@ case $OS in esac npm install -g bower -# Ensure there are the prerequisites +# Ensure the prerequisites are installed for i in openvpn apache2 mysql php unzip git wget sed curl nodejs npm; do which $i > /dev/null if [ "$?" -ne 0 ]; then @@ -101,6 +107,7 @@ for i in openvpn apache2 mysql php unzip git wget sed curl nodejs npm; do fi done +# setting up MySQL and secure it echo -e "${Green}Setting MySQL Configuration${NC}" mysql -u root <<-EOF UPDATE mysql.user SET Password=PASSWORD('$mysql_root_pass') WHERE User='root'; @@ -184,9 +191,10 @@ if [[ ! -z $cert_email ]]; then fi if [[ ! -z $key_cn ]]; then export EASYRSA_REQ_CN=$key_cn -fi - +fi + export EASYRSA_BATCH=1 + # Init PKI dirs and build CA certs ./easyrsa init-pki ./easyrsa build-ca nopass @@ -198,7 +206,6 @@ export EASYRSA_BATCH=1 # Generate shared-secret for TLS Authentication openvpn --genkey --secret pki/ta.key - echo -e "${Green}Setup OpenVPN${NC}" # Copy certificates and the server configuration in the openvpn directory From 463776c4f83dfa7a84b63239b0c7d4ba24149fd3 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 4 May 2020 20:44:35 -0700 Subject: [PATCH 098/255] fix --- install.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/install.sh b/install.sh index 33a0840..49e27f8 100755 --- a/install.sh +++ b/install.sh @@ -65,7 +65,6 @@ sleep 2 # hostname / IP settings echo -e "${Red}$public_ip ${NC}detected as your Public IP and will be used automatically if you don't choose anything else.\nTimeout: 60 Seconds" -read -t 60 -p "Need to use another public IP/Hostname? Type it here or hit enter to continue: " public_hostname if [ -z "$public_hostname" ] then public_ip=$(host myip.opendns.com resolver1.opendns.com | grep "myip.opendns.com has" | awk '{print $4}') From bab61665bc3f143af86493f4d6f9e0ea6ef98167 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 4 May 2020 20:45:03 -0700 Subject: [PATCH 099/255] fix --- install.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/install.sh b/install.sh index 49e27f8..33a0840 100755 --- a/install.sh +++ b/install.sh @@ -65,6 +65,7 @@ sleep 2 # hostname / IP settings echo -e "${Red}$public_ip ${NC}detected as your Public IP and will be used automatically if you don't choose anything else.\nTimeout: 60 Seconds" +read -t 60 -p "Need to use another public IP/Hostname? Type it here or hit enter to continue: " public_hostname if [ -z "$public_hostname" ] then public_ip=$(host myip.opendns.com resolver1.opendns.com | grep "myip.opendns.com has" | awk '{print $4}') From 8891733bc6a24dc3871b61d21bd1b40810edaba0 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 4 May 2020 21:13:08 -0700 Subject: [PATCH 100/255] update --- install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.sh b/install.sh index 33a0840..76a535c 100755 --- a/install.sh +++ b/install.sh @@ -65,7 +65,7 @@ sleep 2 # hostname / IP settings echo -e "${Red}$public_ip ${NC}detected as your Public IP and will be used automatically if you don't choose anything else.\nTimeout: 60 Seconds" -read -t 60 -p "Need to use another public IP/Hostname? Type it here or hit enter to continue: " public_hostname +read -t 60 -p "Need to use another public IP or Hostname? Type it here or hit enter to continue: " public_hostname if [ -z "$public_hostname" ] then public_ip=$(host myip.opendns.com resolver1.opendns.com | grep "myip.opendns.com has" | awk '{print $4}') From 9fb12eda6b422df4b3a22f0a6cc4e6c3f14ec36c Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 4 May 2020 21:17:48 -0700 Subject: [PATCH 101/255] fix --- install.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/install.sh b/install.sh index 76a535c..9069b0a 100755 --- a/install.sh +++ b/install.sh @@ -64,8 +64,10 @@ echo -e "${Green}\nAutomated Installation Started\n" sleep 2 # hostname / IP settings -echo -e "${Red}$public_ip ${NC}detected as your Public IP and will be used automatically if you don't choose anything else.\nTimeout: 60 Seconds" -read -t 60 -p "Need to use another public IP or Hostname? Type it here or hit enter to continue: " public_hostname +echo -e "${Red}$public_ip ${NC}detected as your Public IP and will be used automatically if you don't choose anything else." +echo -e "Timeout: 60 Seconds" +echo -e "Need to use another public IP or Hostname?" +read -t 60 -p "Type it here or hit enter to continue: " public_hostname if [ -z "$public_hostname" ] then public_ip=$(host myip.opendns.com resolver1.opendns.com | grep "myip.opendns.com has" | awk '{print $4}') From 7b1d0238eacb4edc356d62e1d03071052095f093 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 4 May 2020 21:20:16 -0700 Subject: [PATCH 102/255] fix --- install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.sh b/install.sh index 9069b0a..ad6dcd6 100755 --- a/install.sh +++ b/install.sh @@ -67,7 +67,7 @@ sleep 2 echo -e "${Red}$public_ip ${NC}detected as your Public IP and will be used automatically if you don't choose anything else." echo -e "Timeout: 60 Seconds" echo -e "Need to use another public IP or Hostname?" -read -t 60 -p "Type it here or hit enter to continue: " public_hostname +read -p "Type it here or hit enter to continue with detected IP: " public_hostname if [ -z "$public_hostname" ] then public_ip=$(host myip.opendns.com resolver1.opendns.com | grep "myip.opendns.com has" | awk '{print $4}') From 9e2af7208ac7aab3d206f82113dba33ba8bbb8d9 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 4 May 2020 21:31:15 -0700 Subject: [PATCH 103/255] fix --- install.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/install.sh b/install.sh index ad6dcd6..6a74e6f 100755 --- a/install.sh +++ b/install.sh @@ -67,7 +67,8 @@ sleep 2 echo -e "${Red}$public_ip ${NC}detected as your Public IP and will be used automatically if you don't choose anything else." echo -e "Timeout: 60 Seconds" echo -e "Need to use another public IP or Hostname?" -read -p "Type it here or hit enter to continue with detected IP: " public_hostname +read -p "Type it here or hit enter to continue with detected IP: " public_hostname Date: Mon, 4 May 2020 21:34:52 -0700 Subject: [PATCH 104/255] added npm update line --- install.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/install.sh b/install.sh index 6a74e6f..55cbef9 100755 --- a/install.sh +++ b/install.sh @@ -99,6 +99,7 @@ case $OS in echo -e "${Red}Can't detect OS distribution! you need to install prerequisites manully${NC}" exit esac +npm install npm@latest -g npm install -g bower # Ensure the prerequisites are installed From fdf0368c5cebacdfc9cf665a9085ce1b814e42d7 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Mon, 4 May 2020 22:22:37 -0700 Subject: [PATCH 105/255] update --- install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.sh b/install.sh index 55cbef9..55c5bd8 100755 --- a/install.sh +++ b/install.sh @@ -78,6 +78,7 @@ else key_cn=$public_ip echo -e "\n${NC}Selected IP/Hostname: ${Red}$public_ip ${NC}" fi +echo -e "${Yellow}\nNow sit back and wait for the script to finish the install${NC}" sleep 2 # Detecting OS Distribution @@ -99,7 +100,6 @@ case $OS in echo -e "${Red}Can't detect OS distribution! you need to install prerequisites manully${NC}" exit esac -npm install npm@latest -g npm install -g bower # Ensure the prerequisites are installed From a0fcbe082176c3bbbe7c14bc574d5e8985885701 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Wed, 6 May 2020 08:05:33 -0700 Subject: [PATCH 106/255] added ip_forward for ubuntu --- install.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/install.sh b/install.sh index 55c5bd8..7cf5f50 100755 --- a/install.sh +++ b/install.sh @@ -228,8 +228,12 @@ sed -i "s/group nogroup/group $nobody_group/" "/etc/openvpn/server.conf" echo -e "${Green}Setup Firewall${NC}" # Make ip forwading and make it persistent -echo 1 > "/proc/sys/net/ipv4/ip_forward" -echo "net.ipv4.ip_forward = 1" >> "/etc/sysctl.conf" +case $OS in + Ubuntu) + sysctl -w net.ipv4.ip_forward=1 + Raspbian) + echo 1 > "/proc/sys/net/ipv4/ip_forward" + echo "net.ipv4.ip_forward = 1" >> "/etc/sysctl.conf" # Get primary NIC device name primary_nic=`route | grep '^default' | grep -o '[^ ]*$'` From c6ae7be8f46abeedbf66a60578101114a27284ec Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Wed, 6 May 2020 08:54:07 -0700 Subject: [PATCH 107/255] welcome ubuntu full install --- install.sh | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/install.sh b/install.sh index 7cf5f50..f9a02eb 100755 --- a/install.sh +++ b/install.sh @@ -1,7 +1,7 @@ #!/bin/bash ### Variables -OS=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f1 -d " ") # Don't change this unless you know what you're doing +sudo OS=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f1 -d " ") # Don't change this unless you know what you're doing timezone="America/Los_Angeles" # this is PHP timezone gmt_offset="-8:00" # this is MySQL timezone www=$1 @@ -231,9 +231,11 @@ echo -e "${Green}Setup Firewall${NC}" case $OS in Ubuntu) sysctl -w net.ipv4.ip_forward=1 + ;; Raspbian) echo 1 > "/proc/sys/net/ipv4/ip_forward" echo "net.ipv4.ip_forward = 1" >> "/etc/sysctl.conf" + ;; # Get primary NIC device name primary_nic=`route | grep '^default' | grep -o '[^ ]*$'` @@ -304,10 +306,13 @@ bower --allow-root install chown -R "$user:$group" "$openvpn_admin" echo -e "${Green}Setting Apache Configuration${NC}" +# finding PHP version (major and minor only as OS uses x.x format in /etc/php folder) +php_version=$(php -v | head -n1 | cut -f2 -d\ | cut -f1,2 -d.) + cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/openvpn.conf sed -i 's/\/var\/www\/html/\/var\/www\/openvpn-admin/g' /etc/apache2/sites-available/openvpn.conf sed -i '/<\/VirtualHost>/i \\n\t\n\t\tOptions Indexes FollowSymLinks\n\t\tAllowOverride All\n\t\tRequire all granted\n\t<\/Directory>' /etc/apache2/sites-available/openvpn.conf -sed -i "/;date.timezone =/a date.timezone = $timezone ; added by openvpn-admin" /etc/php/7.3/apache2/php.ini +sed -i "/;date.timezone =/a date.timezone = $timezone ; added by openvpn-admin" /etc/php/$php_version/apache2/php.ini #touch /var/www/.htpasswd #chown www-data:www-data /var/www/.htpasswd #echo -e "${Yellow}It's time to secure client configuration folder from anonymous browser and assign a super admin user to be only able to browse it.\n" From 474cff9528e8f36708f6e5f743f6f22e1d978768 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Wed, 6 May 2020 09:27:53 -0700 Subject: [PATCH 108/255] grammar typo fixed. fixed KB and MB --- include/grids.php | 4 ++-- js/grids.js | 2 +- sql/schema-5.sql | 4 +--- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/include/grids.php b/include/grids.php index c019617..194e64c 100644 --- a/include/grids.php +++ b/include/grids.php @@ -77,8 +77,8 @@ do { // Better in Kb or Mb - $received = ($data['log_received'] > 1000000) ? $data['log_received']/1000000 . " Mo" : $data['log_received']/1000 . " Ko"; - $sent = ($data['log_send'] > 1000000) ? $data['log_send']/1000000 . " Mo" : $data['log_send']/1000 . " Ko"; + $received = ($data['log_received'] > 1000000) ? $data['log_received']/1000000 . " MB" : $data['log_received']/1000 . " KB"; + $sent = ($data['log_send'] > 1000000) ? $data['log_send']/1000000 . " MB" : $data['log_send']/1000 . " KB"; // We add to the array the new line of logs array_push($list, array( diff --git a/js/grids.js b/js/grids.js index 0bc94fe..a569722 100644 --- a/js/grids.js +++ b/js/grids.js @@ -301,7 +301,7 @@ $(function () { { title: "Remote Port", field: "log_remote_port", filterControl : 'select' }, { title: "Start Time", field: "log_start_time" }, { title: "End Time", field: "log_end_time" }, - { title: "Receveid", field: "log_received" }, + { title: "Received", field: "log_received" }, { title: "Sent", field: "log_send" } ] }); diff --git a/sql/schema-5.sql b/sql/schema-5.sql index b3f8a93..a37b112 100644 --- a/sql/schema-5.sql +++ b/sql/schema-5.sql @@ -6,6 +6,4 @@ ALTER TABLE `log` CHANGE `log_end_time` `log_end_time` TIMESTAMP NULL DEFAULT NU UPDATE `user` SET `user_start_date` = NULL WHERE `user_start_date` = '0000-00-00'; UPDATE `user` SET `user_end_date` = NULL WHERE `user_end_date` = '0000-00-00'; -UPDATE `log` SET `log_end_time` = NULL WHERE `log_end_time` = '0000-00-00'; - -CREATE TABLE `configuration` ( `admin_created` BOOLEAN, `timezone` VARCHAR(100) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; \ No newline at end of file +UPDATE `log` SET `log_end_time` = NULL WHERE `log_end_time` = '0000-00-00'; \ No newline at end of file From 07e34b37dfe18c95605d14453f26d41676d88b47 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Wed, 6 May 2020 09:31:59 -0700 Subject: [PATCH 109/255] removed 2 columns from logs table --- js/grids.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/js/grids.js b/js/grids.js index a569722..ff3461e 100644 --- a/js/grids.js +++ b/js/grids.js @@ -295,10 +295,10 @@ $(function () { columns: [ { title: "Log ID", field: "log_id" }, { title: "User ID", field: "user_id", filterControl : 'select' }, - { title: "Trusted IP", field: "log_trusted_ip", filterControl : 'select' }, - { title: "Trusted Port", field: "log_trusted_port", filterControl : 'select' }, - { title: "Remote IP", field: "log_remote_ip", filterControl : 'select' }, - { title: "Remote Port", field: "log_remote_port", filterControl : 'select' }, + { title: "Client IP", field: "log_trusted_ip", filterControl : 'select' }, + //{ title: "Trusted Port", field: "log_trusted_port", filterControl : 'select' }, + { title: "Local IP", field: "log_remote_ip", filterControl : 'select' }, + //{ title: "Remote Port", field: "log_remote_port", filterControl : 'select' }, { title: "Start Time", field: "log_start_time" }, { title: "End Time", field: "log_end_time" }, { title: "Received", field: "log_received" }, From 0d282d1719062da8d76b14a404fbd191c71f96e8 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Wed, 6 May 2020 11:31:07 -0700 Subject: [PATCH 110/255] removed decimals from bytes send and received --- include/grids.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/grids.php b/include/grids.php index 194e64c..186d9d5 100644 --- a/include/grids.php +++ b/include/grids.php @@ -77,8 +77,8 @@ do { // Better in Kb or Mb - $received = ($data['log_received'] > 1000000) ? $data['log_received']/1000000 . " MB" : $data['log_received']/1000 . " KB"; - $sent = ($data['log_send'] > 1000000) ? $data['log_send']/1000000 . " MB" : $data['log_send']/1000 . " KB"; + $received = ($data['log_received'] > 1000000) ? floor($data['log_received']/1000000) . " MB" : floor($data['log_received']/1000) . " KB"; + $sent = ($data['log_send'] > 1000000) ? floor($data['log_send']/1000000) . " MB" : floor($data['log_send']/1000) . " KB"; // We add to the array the new line of logs array_push($list, array( From 0b814e64aa868f3ac9d6a97cbce9a7702a1f246f Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Wed, 6 May 2020 12:04:14 -0700 Subject: [PATCH 111/255] added coloring to logs based on MB KB --- css/index.css | 6 ++++++ js/grids.js | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/css/index.css b/css/index.css index 87ed970..5b91757 100644 --- a/css/index.css +++ b/css/index.css @@ -67,4 +67,10 @@ https://bootsnipp.com/snippets/jvP6z #save-config-btn.saved-success a { background-color: #5cb85c; /* green */ color: white; +} +td.kb { + background-color: green; +} +td.mb { + background-color: red; } \ No newline at end of file diff --git a/js/grids.js b/js/grids.js index ff3461e..db0f86d 100644 --- a/js/grids.js +++ b/js/grids.js @@ -37,6 +37,11 @@ $(function () { return '
    '; } + function cellStyle(value, row, index) { + return { + classes: value.trim() === 'KB' ? 'kb' : 'mb' + }; +} // ------------------------- USERS definitions ------------------------- var $userTable = $('#table-users'); var $modalUserAdd = $('#modal-user-add'); From 17a04be20c8ead6027ec7417d31e55684b9d0e00 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Wed, 6 May 2020 12:42:52 -0700 Subject: [PATCH 112/255] coloring logs --- css/index.css | 6 ------ js/grids.js | 11 +++++------ 2 files changed, 5 insertions(+), 12 deletions(-) diff --git a/css/index.css b/css/index.css index 5b91757..87ed970 100644 --- a/css/index.css +++ b/css/index.css @@ -67,10 +67,4 @@ https://bootsnipp.com/snippets/jvP6z #save-config-btn.saved-success a { background-color: #5cb85c; /* green */ color: white; -} -td.kb { - background-color: green; -} -td.mb { - background-color: red; } \ No newline at end of file diff --git a/js/grids.js b/js/grids.js index db0f86d..0892666 100644 --- a/js/grids.js +++ b/js/grids.js @@ -37,11 +37,10 @@ $(function () { return '
    '; } - function cellStyle(value, row, index) { - return { - classes: value.trim() === 'KB' ? 'kb' : 'mb' - }; -} + function BytesFormatter(value, row, index) { + return '
    '; + } + // ------------------------- USERS definitions ------------------------- var $userTable = $('#table-users'); var $modalUserAdd = $('#modal-user-add'); @@ -307,7 +306,7 @@ $(function () { { title: "Start Time", field: "log_start_time" }, { title: "End Time", field: "log_end_time" }, { title: "Received", field: "log_received" }, - { title: "Sent", field: "log_send" } + { title: "Sent", field: "log_send", formatter : BytesFormatter } ] }); From 11f09e7dd42d80f0f14c588eb6817504818a4ed0 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Wed, 6 May 2020 12:46:39 -0700 Subject: [PATCH 113/255] logs coloring --- css/index.css | 6 ++++++ js/grids.js | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/css/index.css b/css/index.css index 87ed970..5432d7e 100644 --- a/css/index.css +++ b/css/index.css @@ -67,4 +67,10 @@ https://bootsnipp.com/snippets/jvP6z #save-config-btn.saved-success a { background-color: #5cb85c; /* green */ color: white; +} +.td-kb { + background-color: green; +} +.td-mb { + background-color: red; } \ No newline at end of file diff --git a/js/grids.js b/js/grids.js index 0892666..830b139 100644 --- a/js/grids.js +++ b/js/grids.js @@ -38,7 +38,7 @@ $(function () { } function BytesFormatter(value, row, index) { - return '
    '; + return '
    '; } // ------------------------- USERS definitions ------------------------- From 4ebbedec53348eff88d09b20202cf66d4a0e271d Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Wed, 6 May 2020 16:18:42 -0700 Subject: [PATCH 114/255] logs coloring --- css/index.css | 6 ------ js/grids.js | 4 ++-- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/css/index.css b/css/index.css index 5432d7e..87ed970 100644 --- a/css/index.css +++ b/css/index.css @@ -67,10 +67,4 @@ https://bootsnipp.com/snippets/jvP6z #save-config-btn.saved-success a { background-color: #5cb85c; /* green */ color: white; -} -.td-kb { - background-color: green; -} -.td-mb { - background-color: red; } \ No newline at end of file diff --git a/js/grids.js b/js/grids.js index 830b139..1019bb5 100644 --- a/js/grids.js +++ b/js/grids.js @@ -38,7 +38,7 @@ $(function () { } function BytesFormatter(value, row, index) { - return '
    '; + return '
    '; } // ------------------------- USERS definitions ------------------------- @@ -306,7 +306,7 @@ $(function () { { title: "Start Time", field: "log_start_time" }, { title: "End Time", field: "log_end_time" }, { title: "Received", field: "log_received" }, - { title: "Sent", field: "log_send", formatter : BytesFormatter } + { title: "Sent", field: "log_send" } ] }); From 5941e18b3a922b2e05122f63cf9a6b9904482792 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Wed, 6 May 2020 21:21:36 -0700 Subject: [PATCH 115/255] logs coloring --- js/grids.js | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/js/grids.js b/js/grids.js index 1019bb5..9f26f6b 100644 --- a/js/grids.js +++ b/js/grids.js @@ -37,9 +37,21 @@ $(function () { return '
    '; } - function BytesFormatter(value, row, index) { - return '
    '; - } + function bytesStyle(value, row, index, field) { + if (value.includes("KB")===true){ + return { + classes: 'text-nowrap another-class', + css: {"background-color": "rgba(20, 200, 20, 0.3);"} + }; + } + else { + return { + classes: 'text-nowrap another-class', + css: {"background-color": "rgba(255, 0, 0, 0.3);"} + }; + } + } + // ------------------------- USERS definitions ------------------------- var $userTable = $('#table-users'); @@ -303,10 +315,10 @@ $(function () { //{ title: "Trusted Port", field: "log_trusted_port", filterControl : 'select' }, { title: "Local IP", field: "log_remote_ip", filterControl : 'select' }, //{ title: "Remote Port", field: "log_remote_port", filterControl : 'select' }, - { title: "Start Time", field: "log_start_time" }, - { title: "End Time", field: "log_end_time" }, - { title: "Received", field: "log_received" }, - { title: "Sent", field: "log_send" } + { title: "Start Time", field: "log_start_time", align: "center" }, + { title: "End Time", field: "log_end_time", align: "center" }, + { title: "Received", field: "log_received", align: "center", cellStyle: bytesStyle }, + { title: "Sent", field: "log_send", align: "center", cellStyle: bytesStyle } ] }); From ea68f6705442ac536c5c301ba0a754aaeb7e2b0e Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Wed, 6 May 2020 21:26:24 -0700 Subject: [PATCH 116/255] log table text align --- js/grids.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/js/grids.js b/js/grids.js index 9f26f6b..f98bf8d 100644 --- a/js/grids.js +++ b/js/grids.js @@ -309,11 +309,11 @@ $(function () { return params; }, columns: [ - { title: "Log ID", field: "log_id" }, - { title: "User ID", field: "user_id", filterControl : 'select' }, - { title: "Client IP", field: "log_trusted_ip", filterControl : 'select' }, + { title: "Log ID", field: "log_id", align: "center" }, + { title: "User ID", field: "user_id", filterControl : 'select', align: "center" }, + { title: "Client IP", field: "log_trusted_ip", filterControl : 'select', align: "center" }, //{ title: "Trusted Port", field: "log_trusted_port", filterControl : 'select' }, - { title: "Local IP", field: "log_remote_ip", filterControl : 'select' }, + { title: "Local IP", field: "log_remote_ip", filterControl : 'select', align: "center" }, //{ title: "Remote Port", field: "log_remote_port", filterControl : 'select' }, { title: "Start Time", field: "log_start_time", align: "center" }, { title: "End Time", field: "log_end_time", align: "center" }, From 0104ea31ccde0cdb8a682398221378fe5845081e Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Wed, 6 May 2020 21:30:30 -0700 Subject: [PATCH 117/255] update --- js/grids.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/js/grids.js b/js/grids.js index f98bf8d..e3b961d 100644 --- a/js/grids.js +++ b/js/grids.js @@ -41,13 +41,13 @@ $(function () { if (value.includes("KB")===true){ return { classes: 'text-nowrap another-class', - css: {"background-color": "rgba(20, 200, 20, 0.3);"} + css: {"background-color": "rgba(0, 100, 0, 0.3);"} }; } else { return { classes: 'text-nowrap another-class', - css: {"background-color": "rgba(255, 0, 0, 0.3);"} + css: {"background-color": "rgba(100, 0, 0, 0.3);"} }; } } From 3147dc71c07a93ae091c66375f299d12c5d89238 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Wed, 6 May 2020 21:59:20 -0700 Subject: [PATCH 118/255] added download filename selection to install script --- index.php | 10 +++++----- install.sh | 4 ++++ 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/index.php b/index.php index 06d4f20..da2aa14 100644 --- a/index.php +++ b/index.php @@ -19,12 +19,12 @@ // Get the instruction file ? if(isset($_POST['instruction_get'])) { - $file_name = "Download and install the OpenVPN GUI.pdf"; + $download_file_name = "Download and install the OpenVPN GUI.pdf"; $file_folder = "windows"; $file_full_path = './client-conf/' . $file_folder . '/' . $file_name; header("Content-type: application/pdf"); - header("Content-disposition: attachment; filename=$file_name"); + header("Content-disposition: attachment; filename=$download_file_name"); header("Pragma: no-cache"); header("Expires: 0"); readfile($file_full_path); @@ -37,7 +37,7 @@ $file_folder = "windows"; $file_full_path = './client-conf/' . $file_folder . '/' . $file_name; header("Content-type: application/ovpn"); - header("Content-disposition: attachment; filename=$file_name"); + header("Content-disposition: attachment; filename=$file_name.ovpn"); header("Pragma: no-cache"); header("Expires: 0"); readfile($file_full_path); @@ -52,13 +52,13 @@ // Error ? if($data && passEqual($_POST['configuration_pass'], $data['user_pass'])) { - $download_name = $_POST['configuration_username']; + //$download_name = $_POST['configuration_username']; $file_name = "client.ovpn"; $file_folder = "windows"; $file_full_path = './client-conf/' . $file_folder . '/' . $file_name; header("Content-type: application/ovpn"); - header("Content-disposition: attachment; filename=$download_name.ovpn"); + header("Content-disposition: attachment; filename=$file_name.ovpn"); header("Pragma: no-cache"); header("Expires: 0"); readfile($file_full_path); diff --git a/install.sh b/install.sh index f9a02eb..780e4aa 100755 --- a/install.sh +++ b/install.sh @@ -78,6 +78,9 @@ else key_cn=$public_ip echo -e "\n${NC}Selected IP/Hostname: ${Red}$public_ip ${NC}" fi +echo -e "Select the file name for showing up in your OpenVPN client." +echo -e "This will help the user identify which VPN user is connecting to if they have multiple connection configuration" +read -p "You may use your company Name (ovpn config filename): " company_name Date: Wed, 6 May 2020 22:10:04 -0700 Subject: [PATCH 119/255] added config file manual setup in install script --- install.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/install.sh b/install.sh index 780e4aa..7a0e3e1 100755 --- a/install.sh +++ b/install.sh @@ -1,7 +1,7 @@ #!/bin/bash ### Variables -sudo OS=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f1 -d " ") # Don't change this unless you know what you're doing +OS=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f1 -d " ") # Don't change this unless you know what you're doing timezone="America/Los_Angeles" # this is PHP timezone gmt_offset="-8:00" # this is MySQL timezone www=$1 @@ -78,8 +78,8 @@ else key_cn=$public_ip echo -e "\n${NC}Selected IP/Hostname: ${Red}$public_ip ${NC}" fi -echo -e "Select the file name for showing up in your OpenVPN client." -echo -e "This will help the user identify which VPN user is connecting to if they have multiple connection configuration" +echo -e "\nSelect the VPN connection name for showing up on your OpenVPN client." +echo -e "This will help the user identify which VPN the user is connecting to if they have multiple connection configuration." read -p "You may use your company Name (ovpn config filename): " company_name Date: Thu, 7 May 2020 07:03:03 -0700 Subject: [PATCH 120/255] fixed error --- install.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/install.sh b/install.sh index 7a0e3e1..0b3a668 100755 --- a/install.sh +++ b/install.sh @@ -239,6 +239,7 @@ case $OS in echo 1 > "/proc/sys/net/ipv4/ip_forward" echo "net.ipv4.ip_forward = 1" >> "/etc/sysctl.conf" ;; +esac # Get primary NIC device name primary_nic=`route | grep '^default' | grep -o '[^ ]*$'` From 276200df9046c8c4e10bfd6b28584211d4029c48 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Thu, 7 May 2020 07:34:45 -0700 Subject: [PATCH 121/255] download filename selection on install script --- index.php | 7 ++++--- install.sh | 27 ++++++++++++++++++++++----- uninstall.sh | 2 +- 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/index.php b/index.php index da2aa14..fb4654b 100644 --- a/index.php +++ b/index.php @@ -36,8 +36,9 @@ $file_name = "client.ovpn"; $file_folder = "windows"; $file_full_path = './client-conf/' . $file_folder . '/' . $file_name; + $save_name = $file_name; header("Content-type: application/ovpn"); - header("Content-disposition: attachment; filename=$file_name.ovpn"); + header("Content-disposition: attachment; filename=$save_name"); header("Pragma: no-cache"); header("Expires: 0"); readfile($file_full_path); @@ -52,13 +53,13 @@ // Error ? if($data && passEqual($_POST['configuration_pass'], $data['user_pass'])) { - //$download_name = $_POST['configuration_username']; $file_name = "client.ovpn"; $file_folder = "windows"; $file_full_path = './client-conf/' . $file_folder . '/' . $file_name; + $save_name = $_POST['configuration_username'].'.ovpn'; header("Content-type: application/ovpn"); - header("Content-disposition: attachment; filename=$file_name.ovpn"); + header("Content-disposition: attachment; filename=$save_name"); header("Pragma: no-cache"); header("Expires: 0"); readfile($file_full_path); diff --git a/install.sh b/install.sh index 0b3a668..b735b47 100755 --- a/install.sh +++ b/install.sh @@ -67,7 +67,7 @@ sleep 2 echo -e "${Red}$public_ip ${NC}detected as your Public IP and will be used automatically if you don't choose anything else." echo -e "Timeout: 60 Seconds" echo -e "Need to use another public IP or Hostname?" -read -p "Type it here or hit enter to continue with detected IP: " public_hostname Date: Thu, 7 May 2020 07:41:17 -0700 Subject: [PATCH 122/255] fixed error on changing file name --- install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.sh b/install.sh index b735b47..0385994 100755 --- a/install.sh +++ b/install.sh @@ -345,7 +345,7 @@ echo -e "${Green}Finalizing OpenVPN Configuration${NC}" #sed -i 's/80.67.169.40/8.8.4.4/g' /etc/openvpn/server.conf if [ -z "$company_name" ] then - + echo else sed -i "s/filename=\$save_name/filename=$company_name/g" /var/www/openvpn-admin/index.php fi From 7b870aacbba11d5850d7b4c00ce2e6eda330bbfa Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Thu, 7 May 2020 08:41:05 -0700 Subject: [PATCH 123/255] updated install script user outputs --- install.sh | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/install.sh b/install.sh index 0385994..cd22194 100755 --- a/install.sh +++ b/install.sh @@ -366,16 +366,18 @@ echo -e "\n\n\n${Yellow}" echo -e "################################################################################" echo -e "################################### Finished ###################################" echo -echo -e "${Green}Congratulations, you have successfully setup OpenVPN-Admin!" +echo -e "${Green}Congratulations, you have successfully setup OpenVPN-Admin!${NC}" echo -echo -e "Finish the install by going to" -echo -e " http://$ip_server" +echo -e "Finish the install by going to: ${Red}" +echo -e " http://$ip_server${NC}" +echo +echo -e "Here are more details:" +echo -e " Your Public URL: ${Red}http://$public_ip ${NC}" +echo -e " Auto Generated MySQL Root Password: ${Red}$mysql_root_pass ${NC}" +echo -e " Auto Generated OpenVPN-Admin MySQL Username: ${Red}$mysql_user ${NC}" +echo -e " Auto Generated OpenVPN-Admin MySQL Password: ${Red}$mysql_pass ${NC}" +echo -e " Selected download file name: ${Red}$company_name.ovpn ${NC}" echo -echo -e " Your Public URL: http://$public_ip" -echo -e " Auto Generated MySQL Root Password: $mysql_root_pass" -echo -e " Auto Generated OpenVPN-Admin MySQL Username: $mysql_user" -echo -e " Auto Generated OpenVPN-Admin MySQL Password: $mysql_pass ${NC}" -echo echo -e " Please, report any issues here https://github.com/arvage/OpenVPN-Admin" echo echo -e "${Yellow}################################################################################${NC}" From 067966f8196831bd082dec926ac499d7d7700473 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Thu, 7 May 2020 08:42:19 -0700 Subject: [PATCH 124/255] updated user outputs --- install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.sh b/install.sh index cd22194..2f3bdd2 100755 --- a/install.sh +++ b/install.sh @@ -78,7 +78,7 @@ else key_cn=$public_ip echo -e "\n${NC}Selected IP/Hostname: ${Red}$public_ip ${NC}" fi -echo -e "\nSelect the VPN connection name for showing up on your client OpenVPN application." +echo -e "\n\n\nSelect the VPN connection name for showing up on your client OpenVPN application." echo -e "This will help the user identify which VPN he is connecting to if he has multiple connection configuration." echo -e "Default file names will be used if you don't choose any. You may use your company Name." echo -e "Timeout: 60 Seconds" From ec5440c4f7e442886bd3398dedbf5ac5fdf69159 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Thu, 7 May 2020 08:55:46 -0700 Subject: [PATCH 125/255] fixed file save name --- install.sh | 2 +- uninstall.sh | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/install.sh b/install.sh index 2f3bdd2..47a92e6 100755 --- a/install.sh +++ b/install.sh @@ -347,7 +347,7 @@ if [ -z "$company_name" ] then echo else - sed -i "s/filename=\$save_name/filename=$company_name/g" /var/www/openvpn-admin/index.php + sed -i "s/filename=\$save_name/filename=$company_name.ovpn/g" /var/www/openvpn-admin/index.php fi systemctl start openvpn@server diff --git a/uninstall.sh b/uninstall.sh index fce32f3..71a7cee 100755 --- a/uninstall.sh +++ b/uninstall.sh @@ -70,6 +70,9 @@ iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE iptables -t nat -D POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE iptables -t nat -D POSTROUTING -s 10.8.0.2/24 -o eth0 -j MASQUERADE +a2dissite openvpn +a2ensite 000-default +systemctl restart apache2 sed -i "/added by openvpn-admin/d" /etc/php/7.3/apache2/php.ini echo "The application has been completely removed!" From e81debeeba811d72918d391f6db65df88c51e43d Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Thu, 7 May 2020 09:16:11 -0700 Subject: [PATCH 126/255] updated user comments --- install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.sh b/install.sh index 47a92e6..394eb88 100755 --- a/install.sh +++ b/install.sh @@ -82,7 +82,7 @@ echo -e "\n\n\nSelect the VPN connection name for showing up on your client Open echo -e "This will help the user identify which VPN he is connecting to if he has multiple connection configuration." echo -e "Default file names will be used if you don't choose any. You may use your company Name." echo -e "Timeout: 60 Seconds" -read -t 60 -p "Type it here or hit enter to use default naming (ovpn config filename): " company_name Date: Thu, 7 May 2020 09:32:38 -0700 Subject: [PATCH 127/255] fixed download file extension --- install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.sh b/install.sh index 394eb88..7091192 100755 --- a/install.sh +++ b/install.sh @@ -347,7 +347,7 @@ if [ -z "$company_name" ] then echo else - sed -i "s/filename=\$save_name/filename=$company_name.ovpn/g" /var/www/openvpn-admin/index.php + sed -i "s/filename=\$save_name/filename=$company_name\.ovpn/g" /var/www/openvpn-admin/index.php fi systemctl start openvpn@server From 6825b7e33dceb8ac442ea3ff976c55e890c1689d Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Thu, 7 May 2020 09:33:57 -0700 Subject: [PATCH 128/255] quick fix --- install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.sh b/install.sh index 7091192..1e284b4 100755 --- a/install.sh +++ b/install.sh @@ -93,7 +93,7 @@ fi -echo -e "${Yellow}\nNow sit back and wait for the script to finish the install${NC}" +echo -e "${Yellow}\nNow sit back and wait for the script to finish the install\n${NC}" sleep 2 # Detecting OS Distribution From 599de1b1968a6f42e92f8a7ed04b36e08da37e35 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Wed, 15 Jul 2020 11:21:45 -0700 Subject: [PATCH 129/255] force iptables save rules on Ubuntu iptables rules weren't saved persistent and was not applying after each reboot --- install.sh | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/install.sh b/install.sh index 1e284b4..6f21e45 100755 --- a/install.sh +++ b/install.sh @@ -242,17 +242,6 @@ sed -i "s/group nogroup/group $nobody_group/" "/etc/openvpn/server.conf" echo -e "${Green}Setup Firewall${NC}" -# Make ip forwading and make it persistent -case $OS in - Ubuntu) - sysctl -w net.ipv4.ip_forward=1 - ;; - Raspbian) - echo 1 > "/proc/sys/net/ipv4/ip_forward" - echo "net.ipv4.ip_forward = 1" >> "/etc/sysctl.conf" - ;; -esac - # Get primary NIC device name primary_nic=`route | grep '^default' | grep -o '[^ ]*$'` @@ -266,6 +255,23 @@ iptables -t nat -A POSTROUTING -o $primary_nic -j MASQUERADE iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o $primary_nic -j MASQUERADE iptables -t nat -A POSTROUTING -s 10.8.0.2/24 -o $primary_nic -j MASQUERADE +# Make ip forwading and make it persistent +case $OS in + Ubuntu) + sysctl -w net.ipv4.ip_forward=1 + iptables-save ./rules.v4 + if [[ ! -d "/etc/iptables" ]] + then + mkdir /etc/iptables + fi + mv ./rules.v4 /etc/iptables + apt-get install -y iptables-persistent + ;; + Raspbian) + echo 1 > "/proc/sys/net/ipv4/ip_forward" + echo "net.ipv4.ip_forward = 1" >> "/etc/sysctl.conf" + ;; +esac echo -e "${Green}Setup MySQL Database${NC}" From 0003e30a56a4b89546b9c3de6dce335aae61ae12 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Wed, 21 Oct 2020 10:10:17 -0700 Subject: [PATCH 130/255] Added MAC instructions --- index.php | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/index.php b/index.php index fb4654b..e484edd 100644 --- a/index.php +++ b/index.php @@ -19,15 +19,24 @@ // Get the instruction file ? if(isset($_POST['instruction_get'])) { - $download_file_name = "Download and install the OpenVPN GUI.pdf"; - $file_folder = "windows"; - $file_full_path = './client-conf/' . $file_folder . '/' . $file_name; - + $download_file_name1 = "Download and install the OpenVPN GUI (Windows).pdf"; + $file_folder1 = "windows"; + $file_full_path1 = './client-conf/' . $file_folder1 . '/' . $download_file_name1; header("Content-type: application/pdf"); - header("Content-disposition: attachment; filename=$download_file_name"); + header("Content-disposition: attachment; filename=$download_file_name1"); header("Pragma: no-cache"); header("Expires: 0"); - readfile($file_full_path); + readfile($file_full_path1); + + $download_file_name2 = "Download and install the OpenVPN GUI (MAC).pdf"; + $file_folder2 = "osx-viscosity"; + $file_full_path2 = './client-conf/' . $file_folder2 . '/' . $download_file_name2; + header("Content-type: application/pdf"); + header("Content-disposition: attachment; filename=$download_file_name2"); + header("Pragma: no-cache"); + header("Expires: 0"); + readfile($file_full_path2); + exit; } From 29116751ef1f86cb3fe6946168abc0cfc6a0e582 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Wed, 21 Oct 2020 10:16:19 -0700 Subject: [PATCH 131/255] MAC instructions --- ...nload and install the OpenVPN GUI (MAC).pdf | Bin 0 -> 445739 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 installation/client-conf/osx-viscosity/Download and install the OpenVPN GUI (MAC).pdf diff --git a/installation/client-conf/osx-viscosity/Download and install the OpenVPN GUI (MAC).pdf b/installation/client-conf/osx-viscosity/Download and install the OpenVPN GUI (MAC).pdf new file mode 100644 index 0000000000000000000000000000000000000000..3354c58ec1453d54cbd1b33ca32be63a1d97e213 GIT binary patch literal 445739 zcmeFYRX|ox8#qWxmvp}%AYGEu9n#(1E#2MS-5?uwgwjP+}t1rDPtQ`M>7yB zFr)xt5H+`QG`0txR{D;{!p4TSM#dmsUU&ybdt-fTcvtXxwNEh%Y^d!As!|T|eyKF^ z?$@&v)^SAXZ&>GrrUN!yU9twQe_T7q`K-izC=~fUU*EuQ#lQZkXN|i(Z4KL9Om}zx zr_Qv2EbiYw2#Cf*n^P`G+KTe*UzxtCO~-toHX_&gfuXd`IXXM|)5=7A`Y?U!go5Q> zm~S-o&Oux{$~@etp-A5#t@a$!XQ!eVM>g>6>#ES&77jx=L}W`_x#`2zwf?lt4zX$m ze)^Iv+wiqei-u>>?e@FJ?~4_c9nEPyNAcZ563o|ylgsmX%D=ZG{m8zY#YgO}(Yl#? zn7Uz=N*UvtjbJGy(t=tuean&3gOE5zpQQK3%iwS&UC<*7?;$&M&e2;9cQ>x}1r=G? z=okW7jJxTi6+)v^1~;|Zb=^N^`yW>SrPbc62-OQ!fLGY^Sg95v+#+4%sLin6nQ0` zXSqeXt0jR#@00tmfyXc5sf0Yv7|+d}?3`Fg7RP?;v^D`Q2@g`-^IV(5ZnU>B5Mqjx z^$lN#hEqSE$XNvPc&tS3rHTHYN1o`J^zYDqgqUdtx5zpm<=pqTL)A1>R#2b)I$|#E zrk})fy-=yk>1!D?{3T;?>IyV}X#}kkxv@pH>d0(ZpV2;_RghMGwya4&c*HKxzzsDN zxUYA-;*dcBC%SBRKOfV?s_Pcz=`?Q51jPj2G!z#d*}^J8P4P~K;>T8GP-eYhn
    - + + From ee7e4a310ed5a5e9a2316610110d3849d94518d1 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Thu, 2 Sep 2021 11:34:47 -0700 Subject: [PATCH 143/255] now saving ovpn file based on filename in configs --- index.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/index.php b/index.php index d89d93c..5c9d9ba 100644 --- a/index.php +++ b/index.php @@ -17,6 +17,9 @@ exit(-1); } + // Read ovpn file contents + $ovpn_filename= file_get_contents("./client-conf/windows/filename"); + // Get the Windows instruction file if(isset($_POST['windows_instruction_get'])) { $download_file_name1 = "Download and install the OpenVPN GUI (Windows).pdf"; @@ -49,9 +52,8 @@ $file_name = "client.ovpn"; $file_folder = "windows"; $file_full_path = './client-conf/' . $file_folder . '/' . $file_name; - $save_name = $file_name; header("Content-type: application/ovpn"); - header("Content-disposition: attachment; filename=$save_name"); + header("Content-disposition: attachment; filename=$ovpn_filename.ovpn"); header("Pragma: no-cache"); header("Expires: 0"); readfile($file_full_path); @@ -69,10 +71,8 @@ $file_name = "client.ovpn"; $file_folder = "windows"; $file_full_path = './client-conf/' . $file_folder . '/' . $file_name; - $save_name = $_POST['configuration_username'].'.ovpn'; - header("Content-type: application/ovpn"); - header("Content-disposition: attachment; filename=$save_name"); + header("Content-disposition: attachment; filename=$ovpn_filename.ovpn"); header("Pragma: no-cache"); header("Expires: 0"); readfile($file_full_path); From 28859949d77de8407f683ea3f3f4fcdabfd518cc Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Thu, 2 Sep 2021 11:35:44 -0700 Subject: [PATCH 144/255] Create filename --- installation/client-conf/windows/filename | 1 + 1 file changed, 1 insertion(+) create mode 100644 installation/client-conf/windows/filename diff --git a/installation/client-conf/windows/filename b/installation/client-conf/windows/filename new file mode 100644 index 0000000..fe4e549 --- /dev/null +++ b/installation/client-conf/windows/filename @@ -0,0 +1 @@ +VPN From 4bbbe090462d2bde71039bbaa3039aab637ef030 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Thu, 2 Sep 2021 11:52:49 -0700 Subject: [PATCH 145/255] Update grids.php --- include/html/grids.php | 1 + 1 file changed, 1 insertion(+) diff --git a/include/html/grids.php b/include/html/grids.php index 0aef013..89f00bb 100644 --- a/include/html/grids.php +++ b/include/html/grids.php @@ -32,6 +32,7 @@ function getHistory($cfg_file, $accordion_id, $open_first_history_tab = false) {
  • OpenVPN logs
  • Web Admins
  • Configs
  • +
  • File name
  • From 0e0b86c4061790e25b4fa03363ab39d91e201e62 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Thu, 2 Sep 2021 12:33:30 -0700 Subject: [PATCH 146/255] Update install.sh --- install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.sh b/install.sh index 4a3a52f..e331b1f 100755 --- a/install.sh +++ b/install.sh @@ -367,7 +367,7 @@ if [ -z "$company_name" ] then echo else - sed -i "s/filename=\$save_name/filename=$company_name\.ovpn/g" /var/www/openvpn-admin/index.php + sed -i "s/VPN/$company_name/g" /var/www/openvpn-admin/client-conf/windows/filename fi systemctl start openvpn@server From 7722f71ea0e0cdc4b4e722c87cbb0ded633a94b4 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Thu, 2 Sep 2021 12:42:30 -0700 Subject: [PATCH 147/255] touchups :) --- install.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/install.sh b/install.sh index e331b1f..14277fa 100755 --- a/install.sh +++ b/install.sh @@ -394,7 +394,11 @@ echo -e "After install, Access GUI at: ${Red}" echo -e " http://$ip_server/${NC}" echo echo -e "Here are more details:" -echo -e " Your Public URL: ${Red}http://$public_ip ${NC}" +echo -e " Your Public URL: ${Red}http://$public_ip" +echo +echo -e " We recommend only forward UDP port 1194 if you're behind a firewall" +echo -e " Publishing TCP port 80 over the web is a high risk and NOT recommended${NC} +echo echo -e " Auto Generated MySQL Root Password: ${Red}$mysql_root_pass ${NC}" echo -e " Auto Generated OpenVPN-Admin MySQL Username: ${Red}$mysql_user ${NC}" echo -e " Auto Generated OpenVPN-Admin MySQL Password: ${Red}$mysql_pass ${NC}" From 38fa71da2328b40c6b76d39974d4ee98f702a668 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Thu, 2 Sep 2021 12:43:26 -0700 Subject: [PATCH 148/255] Update online-install.sh --- online-install.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/online-install.sh b/online-install.sh index 767a2f1..4a3c7ba 100644 --- a/online-install.sh +++ b/online-install.sh @@ -1,9 +1,9 @@ #!/bin/bash clear echo -e "${Green}Updating and Getting Ready" -sudo apt update +sudo apt update && sudo apt upgrade -y sudo apt install -y git cd ~ git clone https://github.com/arvage/OpenVPN-Admin openvpn-admin cd openvpn-admin -sudo ./install.sh /var/www www-data www-data \ No newline at end of file +sudo ./install.sh /var/www www-data www-data From a0a025beb16b0ad65e321eb815b511bbb6a74b09 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Wed, 15 Sep 2021 13:18:58 -0700 Subject: [PATCH 149/255] fixed a missing quotation --- install.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install.sh b/install.sh index 14277fa..4d69852 100755 --- a/install.sh +++ b/install.sh @@ -396,8 +396,8 @@ echo echo -e "Here are more details:" echo -e " Your Public URL: ${Red}http://$public_ip" echo -echo -e " We recommend only forward UDP port 1194 if you're behind a firewall" -echo -e " Publishing TCP port 80 over the web is a high risk and NOT recommended${NC} +echo -e " We recommend only forward UDP port 1194 if you are behind a firewall" +echo -e " Publishing TCP port 80 over the web is a high risk and NOT recommended${NC}" echo echo -e " Auto Generated MySQL Root Password: ${Red}$mysql_root_pass ${NC}" echo -e " Auto Generated OpenVPN-Admin MySQL Username: ${Red}$mysql_user ${NC}" From 5bad8e4123b482a48a4b0717aa93a4195724b2cb Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Fri, 8 Oct 2021 09:05:41 -0700 Subject: [PATCH 150/255] Fixed IP forward issue after reboots --- install.sh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/install.sh b/install.sh index 4d69852..a5c0f9f 100755 --- a/install.sh +++ b/install.sh @@ -259,6 +259,7 @@ iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o $primary_nic -j MASQUERADE iptables -t nat -A POSTROUTING -s 10.8.0.2/24 -o $primary_nic -j MASQUERADE # Make ip forwading and make it persistent +echo "net.ipv4.ip_forward = 1" >> "/etc/sysctl.conf" case $OS in Ubuntu) sysctl -w net.ipv4.ip_forward=1 @@ -268,10 +269,11 @@ case $OS in mkdir /etc/iptables fi mv ./rules.v4 /etc/iptables + echo iptables-persistent iptables-persistent/autosave_v4 boolean true | sudo debconf-set-selections + echo iptables-persistent iptables-persistent/autosave_v6 boolean true | sudo debconf-set-selections apt-get install -y iptables-persistent ;; Debian) - echo "net.ipv4.ip_forward = 1" >> "/etc/sysctl.conf" sysctl -w net.ipv4.ip_forward=1 iptables-save -f ./rules.v4 if [[ ! -d "/etc/iptables" ]] @@ -279,11 +281,12 @@ case $OS in mkdir /etc/iptables fi mv ./rules.v4 /etc/iptables + echo iptables-persistent iptables-persistent/autosave_v4 boolean true | sudo debconf-set-selections + echo iptables-persistent iptables-persistent/autosave_v6 boolean true | sudo debconf-set-selections apt-get install -y iptables-persistent ;; Raspbian) echo 1 > "/proc/sys/net/ipv4/ip_forward" - echo "net.ipv4.ip_forward = 1" >> "/etc/sysctl.conf" ;; esac From d279b0cf1e56b4a66f82e8c0b004d10be235521f Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Thu, 14 Oct 2021 09:23:18 -0700 Subject: [PATCH 151/255] Update install.sh --- install.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/install.sh b/install.sh index a5c0f9f..659fec4 100755 --- a/install.sh +++ b/install.sh @@ -259,10 +259,10 @@ iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o $primary_nic -j MASQUERADE iptables -t nat -A POSTROUTING -s 10.8.0.2/24 -o $primary_nic -j MASQUERADE # Make ip forwading and make it persistent -echo "net.ipv4.ip_forward = 1" >> "/etc/sysctl.conf" case $OS in Ubuntu) sysctl -w net.ipv4.ip_forward=1 + sed -i "s/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/" "/etc/sysctl.conf" iptables-save ./rules.v4 if [[ ! -d "/etc/iptables" ]] then @@ -275,6 +275,7 @@ case $OS in ;; Debian) sysctl -w net.ipv4.ip_forward=1 + sed -i "s/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/" "/etc/sysctl.conf" iptables-save -f ./rules.v4 if [[ ! -d "/etc/iptables" ]] then From 4a8d153dbef83616cae1eec5a31d9871ac981d19 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Thu, 14 Oct 2021 09:43:26 -0700 Subject: [PATCH 152/255] fixed .ovpn file save --- install.sh | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/install.sh b/install.sh index 659fec4..f9e0bcf 100755 --- a/install.sh +++ b/install.sh @@ -371,21 +371,13 @@ if [ -z "$company_name" ] then echo else - sed -i "s/VPN/$company_name/g" /var/www/openvpn-admin/client-conf/windows/filename + sed -i "s/VPN/$company_name/" /var/www/openvpn-admin/client-conf/windows/filename fi systemctl start openvpn@server -#printf "\033[1m\n\n################################# Let'sEncrypt SSL Certificate ####################################\n" -#printf "\033[1m###### NOTE: You need port 80 on the public facing side to be open and forwarded to this instance #####\n" -#read -p "Do you wish to setup Let'sEncrypt SSL? (y/n) " yn -#case $yn in -# [Yy]*) -# read -p "provide the domain name without www.: " domain_name; -# apt install -y python-certbot-apache; -# certbot -n --apache -d $domain_name -d www.$domain_name --agree-tos -m $cert_email --no-redirect ;; -# [Nn]*) -# ;; -#esac +echo "Auto Generated MySQL Root Password: ${Red}$mysql_root_pass" > ~/OpenVPN_Creds +echo "Auto Generated OpenVPN-Admin MySQL Username: ${Red}$mysql_user" > ~/OpenVPN_Creds +echo "Auto Generated OpenVPN-Admin MySQL Password: ${Red}$mysql_pass" > ~/OpenVPN_Creds echo -e "\n\n\n${Yellow}" echo -e "################################################################################" echo -e "################################### Finished ###################################" @@ -408,7 +400,7 @@ echo -e " Auto Generated OpenVPN-Admin MySQL Username: ${Red}$mysql_ echo -e " Auto Generated OpenVPN-Admin MySQL Password: ${Red}$mysql_pass ${NC}" echo -e " Selected download file name: ${Red}$company_name.ovpn ${NC}" echo -echo -e " Please, report any issues here https://github.com/arvage/OpenVPN-Admin" +echo -e " Please, report any issues here https://github.com/arvage/OpenVPN-Admin (Armin Gorji)" echo echo -e "${Yellow}################################################################################${NC}" echo -e "${Yellow}################################################################################${NC}" From 5bb52b362aeb50822b650fcec28a5a73c3ba414d Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Thu, 14 Oct 2021 09:46:31 -0700 Subject: [PATCH 153/255] Update online-install.sh --- online-install.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/online-install.sh b/online-install.sh index 4a3c7ba..4fecb58 100644 --- a/online-install.sh +++ b/online-install.sh @@ -6,4 +6,5 @@ sudo apt install -y git cd ~ git clone https://github.com/arvage/OpenVPN-Admin openvpn-admin cd openvpn-admin +chmod +x ./install.sh sudo ./install.sh /var/www www-data www-data From fa77b962f5a8b649d1690e628ada8f117a2bdeaa Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Thu, 14 Oct 2021 09:50:54 -0700 Subject: [PATCH 154/255] Update online-install.sh --- online-install.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/online-install.sh b/online-install.sh index 4fecb58..5a77a23 100644 --- a/online-install.sh +++ b/online-install.sh @@ -1,6 +1,10 @@ #!/bin/bash +NC='\033[0m' # No Color +Red='\033[1;31m' # Light Red +Yellow='\033[0;33m' # Yellow +Green='\033[0;32m' # Green clear -echo -e "${Green}Updating and Getting Ready" +echo -e "${Green}Updating and Getting Ready${NC}" sudo apt update && sudo apt upgrade -y sudo apt install -y git cd ~ From 28ac14bade38fdddfecd60acca322d1f4f6b04ab Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Thu, 14 Oct 2021 10:00:14 -0700 Subject: [PATCH 155/255] Update online-install.sh --- online-install.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/online-install.sh b/online-install.sh index 5a77a23..034af65 100644 --- a/online-install.sh +++ b/online-install.sh @@ -4,11 +4,13 @@ Red='\033[1;31m' # Light Red Yellow='\033[0;33m' # Yellow Green='\033[0;32m' # Green clear -echo -e "${Green}Updating and Getting Ready${NC}" +echo -e "${Green}Updating and Getting Ready${Yellow}" sudo apt update && sudo apt upgrade -y sudo apt install -y git cd ~ +echo -e "${Red}" git clone https://github.com/arvage/OpenVPN-Admin openvpn-admin +echo -e "${NC}" cd openvpn-admin chmod +x ./install.sh sudo ./install.sh /var/www www-data www-data From 9ace20039d288a67308b656fbf1b89c883e75fec Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Thu, 14 Oct 2021 10:28:28 -0700 Subject: [PATCH 156/255] Update online-install.sh --- online-install.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/online-install.sh b/online-install.sh index 034af65..3636baa 100644 --- a/online-install.sh +++ b/online-install.sh @@ -13,4 +13,5 @@ git clone https://github.com/arvage/OpenVPN-Admin openvpn-admin echo -e "${NC}" cd openvpn-admin chmod +x ./install.sh -sudo ./install.sh /var/www www-data www-data +echo -e "${Yellow}Now run below command:" +echo -e "${Green}sudo ./install.sh /var/www www-data www-data${NC}" From b6f840376df68174ae34487f98f7ff48cf21dfb1 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Thu, 14 Oct 2021 10:30:58 -0700 Subject: [PATCH 157/255] Update README.md --- README.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/README.md b/README.md index bcc53b8..dd272d8 100644 --- a/README.md +++ b/README.md @@ -3,9 +3,6 @@ ## Summary Administer OpenVPN Server with a web interface (Users Management, Logs, Visualizations) -![Previsualisation configuration](https://lutim.cpy.re/fUq2rxqz) -![Previsualisation administration](https://lutim.cpy.re/wwYMkHcM) - ## Prerequisite @@ -47,7 +44,7 @@ Only tested on Raspberry Pi 3 with Raspbian Buster (No GUI). git pull origin master ./update.sh /var/www -## Desinstall +## Uninstall It will remove all installed components (OpenVPN keys and configurations, the web application, iptables rules...). sudo ./uninstall.sh /var/www From 06dfa13eec395890c2b889f910c928a4ef3db0c5 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Thu, 14 Oct 2021 10:33:18 -0700 Subject: [PATCH 158/255] Update online-install.sh --- online-install.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/online-install.sh b/online-install.sh index 3636baa..efc591e 100644 --- a/online-install.sh +++ b/online-install.sh @@ -13,5 +13,8 @@ git clone https://github.com/arvage/OpenVPN-Admin openvpn-admin echo -e "${NC}" cd openvpn-admin chmod +x ./install.sh +clear echo -e "${Yellow}Now run below command:" +echo echo -e "${Green}sudo ./install.sh /var/www www-data www-data${NC}" +echo From ca21625d62871dba6f0deabac531d90e86c596c9 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Thu, 14 Oct 2021 10:35:35 -0700 Subject: [PATCH 159/255] Update online-install.sh --- online-install.sh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/online-install.sh b/online-install.sh index efc591e..cb80316 100644 --- a/online-install.sh +++ b/online-install.sh @@ -11,10 +11,11 @@ cd ~ echo -e "${Red}" git clone https://github.com/arvage/OpenVPN-Admin openvpn-admin echo -e "${NC}" -cd openvpn-admin + chmod +x ./install.sh clear -echo -e "${Yellow}Now run below command:" +echo -e "${Yellow}Now run below commands:" echo -echo -e "${Green}sudo ./install.sh /var/www www-data www-data${NC}" +echo -e "${Green}cd openvpn-admin" +echo -e "sudo ./install.sh /var/www www-data www-data${NC}" echo From 219d718421f26c00fbe4e4785d04ac706314fe93 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Thu, 14 Oct 2021 10:50:22 -0700 Subject: [PATCH 160/255] Update filename From 603713f9979b9ce5b69ebd531fe25ffabbb7a248 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Thu, 14 Oct 2021 11:01:45 -0700 Subject: [PATCH 161/255] fixed MySQL root password reset --- install.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install.sh b/install.sh index f9e0bcf..f35f5d4 100755 --- a/install.sh +++ b/install.sh @@ -132,7 +132,7 @@ done # setting up MySQL and secure it echo -e "${Green}Setting MySQL Configuration${NC}" mysql -u root <<-EOF -UPDATE mysql.user SET Password=PASSWORD('$mysql_root_pass') WHERE User='root'; +ALTER USER 'root'@'localhost' IDENTIFIED BY '$mysql_root_pass'; DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1'); DELETE FROM mysql.user WHERE User=''; DELETE FROM mysql.db WHERE Db='test' OR Db='test_%'; @@ -263,7 +263,7 @@ case $OS in Ubuntu) sysctl -w net.ipv4.ip_forward=1 sed -i "s/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/" "/etc/sysctl.conf" - iptables-save ./rules.v4 + iptables-save -f ./rules.v4 if [[ ! -d "/etc/iptables" ]] then mkdir /etc/iptables From bad7a71af20142369ca274fe23397b53ce91b83b Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Thu, 14 Oct 2021 11:03:05 -0700 Subject: [PATCH 162/255] Update online-install.sh --- online-install.sh | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/online-install.sh b/online-install.sh index cb80316..034af65 100644 --- a/online-install.sh +++ b/online-install.sh @@ -11,11 +11,6 @@ cd ~ echo -e "${Red}" git clone https://github.com/arvage/OpenVPN-Admin openvpn-admin echo -e "${NC}" - +cd openvpn-admin chmod +x ./install.sh -clear -echo -e "${Yellow}Now run below commands:" -echo -echo -e "${Green}cd openvpn-admin" -echo -e "sudo ./install.sh /var/www www-data www-data${NC}" -echo +sudo ./install.sh /var/www www-data www-data From e96d4337bae9b217196f0ba65a62f69d3836624e Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Thu, 14 Oct 2021 11:28:33 -0700 Subject: [PATCH 163/255] Update install.sh --- install.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/install.sh b/install.sh index f35f5d4..697e65f 100755 --- a/install.sh +++ b/install.sh @@ -369,10 +369,11 @@ echo -e "${Green}Finalizing OpenVPN Configuration${NC}" #sed -i 's/80.67.169.40/8.8.4.4/g' /etc/openvpn/server.conf if [ -z "$company_name" ] then - echo + company_name="VPN" else sed -i "s/VPN/$company_name/" /var/www/openvpn-admin/client-conf/windows/filename fi +truncate -s -1 /var/www/openvpn-admin/client-conf/windows/filename systemctl start openvpn@server echo "Auto Generated MySQL Root Password: ${Red}$mysql_root_pass" > ~/OpenVPN_Creds From 6ed245a358b129c45f0027a4588571aa6d98e0ec Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Thu, 14 Oct 2021 11:32:17 -0700 Subject: [PATCH 164/255] Update install.sh --- install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.sh b/install.sh index 697e65f..2e97950 100755 --- a/install.sh +++ b/install.sh @@ -86,7 +86,7 @@ read -t 120 -p "Type it here or hit enter to use default naming (without .ovpn): if [ -z "$company_name" ] then - echo -e "\nDefault file naming selected." + echo -e "\nDefault file name VPN.ovpn selected." else echo -e "\nSelected file name: ${Red}$company_name.ovpn${NC}" fi From 22ff51a66ff44e628effe6665dc4a592728fc191 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Thu, 14 Oct 2021 12:32:53 -0700 Subject: [PATCH 165/255] Update README.md --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index dd272d8..92608d5 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,7 @@ Administer OpenVPN Server with a web interface (Users Management, Logs, Visualiz ## Prerequisite - * Raspbian with Bash access or remote SSH - * Git + * Debian,Raspbian or Ubuntu with Bash access or remote SSH ## Installation @@ -24,17 +23,18 @@ Administer OpenVPN Server with a web interface (Users Management, Logs, Visualiz cd openvpn-admin sudo ./install.sh /var/www www-data www-data - * If you are using any other web server than Apache like NGinx, you need to set it up manually to serve the web application. * Once the installation is finished browse to `http://your_hostname_or_ip/index.php?installation` to create your admin user. ## Tests -Only tested on Raspberry Pi 3 with Raspbian Buster (No GUI). +Rasbian: Only tested on Raspberry Pi 3 with Raspbian Buster (No GUI). +Ubuntu 20.04 LTS: Tested successfully +Debian 11 (Bullseye): Tested successfully ## Usage * Connect to the web application as an admin - * Create an user + * Create a user * User get the configurations files via the web application (and put them in */etc/openvpn*) * Users on GNU/Linux systems, run `chmod +x /etc/openvpn/update-resolv.sh` as root * User run OpenVPN (for example `systemctl start openvpn@client`) From cdba39a7bc20590aa2ba2ecbefaded8662166bec Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Thu, 14 Oct 2021 12:33:29 -0700 Subject: [PATCH 166/255] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 92608d5..36ad1da 100644 --- a/README.md +++ b/README.md @@ -27,9 +27,9 @@ Administer OpenVPN Server with a web interface (Users Management, Logs, Visualiz ## Tests -Rasbian: Only tested on Raspberry Pi 3 with Raspbian Buster (No GUI). -Ubuntu 20.04 LTS: Tested successfully -Debian 11 (Bullseye): Tested successfully +* Rasbian: Only tested on Raspberry Pi 3 with Raspbian Buster (No GUI). +* Ubuntu 20.04 LTS: Tested successfully +* Debian 11 (Bullseye): Tested successfully ## Usage From 342a1b59622d3db4aef37de6117f42990baf1f7b Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Thu, 14 Oct 2021 15:31:57 -0700 Subject: [PATCH 167/255] Update install.sh --- install.sh | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/install.sh b/install.sh index 2e97950..202c5fd 100755 --- a/install.sh +++ b/install.sh @@ -91,8 +91,6 @@ else echo -e "\nSelected file name: ${Red}$company_name.ovpn${NC}" fi - - echo -e "${Yellow}\nNow sit back and wait for the script to finish the install\n${NC}" sleep 2 @@ -102,14 +100,17 @@ sleep 2 # Installing prerequisites echo -e "${Green}Installing Prerequisites ${Red}(This could take long time)${NC}" -apt update && sudo apt upgrade -y case $OS in Ubuntu) - apt install -y openvpn apache2 mysql-server php php-mysql php-zip unzip git wget sed curl nodejs npm mc net-tools + apt update && sudo apt upgrade -y + apt install -y openvpn apache2 mysql-server php php-mysql php-zip unzip git wget sed curl nodejs npm mc net-tools ;; Debian) - apt-get install -y openvpn apache2 mysql-server php php-mysql php-zip unzip git wget sed curl nodejs npm mc net-tools + echo "deb http://deb.debian.org/debian/ bullseye main contrib" > /etc/apt/sources.list + echo "deb-src http://deb.debian.org/debian/ bullseye main contrib" > /etc/apt/sources.list + apt update && sudo apt upgrade -y + apt-get install -y openvpn apache2 mariadb-server php php-mysql php-zip unzip git wget sed curl nodejs npm mc net-tools ;; Raspbian) apt install -y openvpn apache2 mariadb-server php php-mysql php-zip unzip git wget sed curl nodejs npm mc @@ -226,7 +227,7 @@ export EASYRSA_BATCH=1 ./easyrsa build-server-full server nopass # Generate shared-secret for TLS Authentication -openvpn --genkey --secret pki/ta.key +openvpn --genkey secret pki/ta.key echo -e "${Green}Setup OpenVPN${NC}" @@ -249,14 +250,15 @@ echo -e "${Green}Setup Firewall${NC}" primary_nic=`route | grep '^default' | grep -o '[^ ]*$'` # Iptable rules -iptables -I FORWARD -i tun0 -j ACCEPT -iptables -I FORWARD -o tun0 -j ACCEPT -iptables -I OUTPUT -o tun0 -j ACCEPT +if [ $OS -ne "Debian" ]; then + iptables -I FORWARD -i tun0 -j ACCEPT + iptables -I FORWARD -o tun0 -j ACCEPT + iptables -I OUTPUT -o tun0 -j ACCEPT -iptables -A FORWARD -i tun0 -o $primary_nic -j ACCEPT -iptables -t nat -A POSTROUTING -o $primary_nic -j MASQUERADE -iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o $primary_nic -j MASQUERADE -iptables -t nat -A POSTROUTING -s 10.8.0.2/24 -o $primary_nic -j MASQUERADE + iptables -A FORWARD -i tun0 -o $primary_nic -j ACCEPT + iptables -t nat -A POSTROUTING -o $primary_nic -j MASQUERADE + iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o $primary_nic -j MASQUERADE + iptables -t nat -A POSTROUTING -s 10.8.0.2/24 -o $primary_nic -j MASQUERADE # Make ip forwading and make it persistent case $OS in @@ -274,6 +276,14 @@ case $OS in apt-get install -y iptables-persistent ;; Debian) + sudo iptables -I FORWARD -i tun0 -j ACCEPT + sudo iptables -I FORWARD -o tun0 -j ACCEPT + sudo iptables -I OUTPUT -o tun0 -j ACCEPT + + sudo iptables -A FORWARD -i tun0 -o $primary_nic -j ACCEPT + sudo iptables -t nat -A POSTROUTING -o $primary_nic -j MASQUERADE + sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o $primary_nic -j MASQUERADE + sudo iptables -t nat -A POSTROUTING -s 10.8.0.2/24 -o $primary_nic -j MASQUERADE sysctl -w net.ipv4.ip_forward=1 sed -i "s/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/" "/etc/sysctl.conf" iptables-save -f ./rules.v4 From 241b82fd876d07caf056efe7d62ef11d8afdc64e Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Thu, 14 Oct 2021 16:35:07 -0700 Subject: [PATCH 168/255] Update install.sh --- install.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install.sh b/install.sh index 202c5fd..5f1d540 100755 --- a/install.sh +++ b/install.sh @@ -107,8 +107,8 @@ case $OS in apt install -y openvpn apache2 mysql-server php php-mysql php-zip unzip git wget sed curl nodejs npm mc net-tools ;; Debian) - echo "deb http://deb.debian.org/debian/ bullseye main contrib" > /etc/apt/sources.list - echo "deb-src http://deb.debian.org/debian/ bullseye main contrib" > /etc/apt/sources.list + echo "deb http://deb.debian.org/debian/ bullseye main contrib" >> /etc/apt/sources.list + echo "deb-src http://deb.debian.org/debian/ bullseye main contrib" >> /etc/apt/sources.list apt update && sudo apt upgrade -y apt-get install -y openvpn apache2 mariadb-server php php-mysql php-zip unzip git wget sed curl nodejs npm mc net-tools ;; From 6c56b8b94b8f480c7803dd14bb47e9465544f4a9 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Thu, 14 Oct 2021 16:45:41 -0700 Subject: [PATCH 169/255] Update install.sh --- install.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/install.sh b/install.sh index 5f1d540..67cb2ce 100755 --- a/install.sh +++ b/install.sh @@ -259,6 +259,7 @@ if [ $OS -ne "Debian" ]; then iptables -t nat -A POSTROUTING -o $primary_nic -j MASQUERADE iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o $primary_nic -j MASQUERADE iptables -t nat -A POSTROUTING -s 10.8.0.2/24 -o $primary_nic -j MASQUERADE +fi # Make ip forwading and make it persistent case $OS in From 7779a3dbc37a88bfa91bfd6d377a08bac09ad73c Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Thu, 14 Oct 2021 16:48:14 -0700 Subject: [PATCH 170/255] Update README.md --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 36ad1da..4adeade 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Administer OpenVPN Server with a web interface (Users Management, Logs, Visualiz ## Prerequisite - * Debian,Raspbian or Ubuntu with Bash access or remote SSH + * Raspbian or Ubuntu with Bash access or remote SSH ## Installation @@ -29,7 +29,6 @@ Administer OpenVPN Server with a web interface (Users Management, Logs, Visualiz * Rasbian: Only tested on Raspberry Pi 3 with Raspbian Buster (No GUI). * Ubuntu 20.04 LTS: Tested successfully -* Debian 11 (Bullseye): Tested successfully ## Usage From 59e714bf8948ef1a3ac31634005ce2d2395d2b98 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Thu, 14 Oct 2021 16:53:14 -0700 Subject: [PATCH 171/255] Update install.sh --- install.sh | 49 ++++++++++++------------------------------------- 1 file changed, 12 insertions(+), 37 deletions(-) diff --git a/install.sh b/install.sh index 67cb2ce..12d267b 100755 --- a/install.sh +++ b/install.sh @@ -2,6 +2,11 @@ ### Variables OS=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f1 -d " ") # Don't change this unless you know what you're doing +if [ $OS -ne "Ubuntu" ] || [ $OS -ne "Raspbian"]; then +echo -e "${Red}Oops! Only Ubuntu and Raspbian OS are supported.${NC}" +exit +fi + timezone="America/Los_Angeles" # this is PHP timezone gmt_offset="-8:00" # this is MySQL timezone www=$1 @@ -106,12 +111,6 @@ case $OS in apt update && sudo apt upgrade -y apt install -y openvpn apache2 mysql-server php php-mysql php-zip unzip git wget sed curl nodejs npm mc net-tools ;; - Debian) - echo "deb http://deb.debian.org/debian/ bullseye main contrib" >> /etc/apt/sources.list - echo "deb-src http://deb.debian.org/debian/ bullseye main contrib" >> /etc/apt/sources.list - apt update && sudo apt upgrade -y - apt-get install -y openvpn apache2 mariadb-server php php-mysql php-zip unzip git wget sed curl nodejs npm mc net-tools - ;; Raspbian) apt install -y openvpn apache2 mariadb-server php php-mysql php-zip unzip git wget sed curl nodejs npm mc ;; @@ -250,16 +249,13 @@ echo -e "${Green}Setup Firewall${NC}" primary_nic=`route | grep '^default' | grep -o '[^ ]*$'` # Iptable rules -if [ $OS -ne "Debian" ]; then - iptables -I FORWARD -i tun0 -j ACCEPT - iptables -I FORWARD -o tun0 -j ACCEPT - iptables -I OUTPUT -o tun0 -j ACCEPT - - iptables -A FORWARD -i tun0 -o $primary_nic -j ACCEPT - iptables -t nat -A POSTROUTING -o $primary_nic -j MASQUERADE - iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o $primary_nic -j MASQUERADE - iptables -t nat -A POSTROUTING -s 10.8.0.2/24 -o $primary_nic -j MASQUERADE -fi +iptables -I FORWARD -i tun0 -j ACCEPT +iptables -I FORWARD -o tun0 -j ACCEPT +iptables -I OUTPUT -o tun0 -j ACCEPT +iptables -A FORWARD -i tun0 -o $primary_nic -j ACCEPT +iptables -t nat -A POSTROUTING -o $primary_nic -j MASQUERADE +iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o $primary_nic -j MASQUERADE +iptables -t nat -A POSTROUTING -s 10.8.0.2/24 -o $primary_nic -j MASQUERADE # Make ip forwading and make it persistent case $OS in @@ -276,27 +272,6 @@ case $OS in echo iptables-persistent iptables-persistent/autosave_v6 boolean true | sudo debconf-set-selections apt-get install -y iptables-persistent ;; - Debian) - sudo iptables -I FORWARD -i tun0 -j ACCEPT - sudo iptables -I FORWARD -o tun0 -j ACCEPT - sudo iptables -I OUTPUT -o tun0 -j ACCEPT - - sudo iptables -A FORWARD -i tun0 -o $primary_nic -j ACCEPT - sudo iptables -t nat -A POSTROUTING -o $primary_nic -j MASQUERADE - sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o $primary_nic -j MASQUERADE - sudo iptables -t nat -A POSTROUTING -s 10.8.0.2/24 -o $primary_nic -j MASQUERADE - sysctl -w net.ipv4.ip_forward=1 - sed -i "s/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/" "/etc/sysctl.conf" - iptables-save -f ./rules.v4 - if [[ ! -d "/etc/iptables" ]] - then - mkdir /etc/iptables - fi - mv ./rules.v4 /etc/iptables - echo iptables-persistent iptables-persistent/autosave_v4 boolean true | sudo debconf-set-selections - echo iptables-persistent iptables-persistent/autosave_v6 boolean true | sudo debconf-set-selections - apt-get install -y iptables-persistent - ;; Raspbian) echo 1 > "/proc/sys/net/ipv4/ip_forward" ;; From 4b5f133e9d3e2ad8d41ac19c629fdb531b3c6ea8 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Thu, 14 Oct 2021 16:57:06 -0700 Subject: [PATCH 172/255] Update install.sh --- install.sh | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/install.sh b/install.sh index 12d267b..427764b 100755 --- a/install.sh +++ b/install.sh @@ -1,10 +1,16 @@ #!/bin/bash +# On-Screen Colors +NC='\033[0m' # No Color +Red='\033[1;31m' # Light Red +Yellow='\033[0;33m' # Yellow +Green='\033[0;32m' # Green + ### Variables OS=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f1 -d " ") # Don't change this unless you know what you're doing if [ $OS -ne "Ubuntu" ] || [ $OS -ne "Raspbian"]; then -echo -e "${Red}Oops! Only Ubuntu and Raspbian OS are supported.${NC}" -exit + echo -e "${Red}Oops! Only Ubuntu and Raspbian OS are supported.${NC}" + exit fi timezone="America/Los_Angeles" # this is PHP timezone @@ -38,12 +44,6 @@ cert_ou="IT" cert_email="example@test.net" key_cn=$public_ip # will be changed when asking for public IP/Hostname user input -# On-Screen Colors -NC='\033[0m' # No Color -Red='\033[1;31m' # Light Red -Yellow='\033[0;33m' # Yellow -Green='\033[0;32m' # Green - # show on-screen help print_help () { echo -e "sudo ./install.sh www_basedir user group" From 4660d633f7a2fe79ac04bde8581e22c7e29b16fc Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Thu, 14 Oct 2021 16:58:31 -0700 Subject: [PATCH 173/255] Update install.sh --- install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.sh b/install.sh index 427764b..63d3d72 100755 --- a/install.sh +++ b/install.sh @@ -8,7 +8,7 @@ Green='\033[0;32m' # Green ### Variables OS=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f1 -d " ") # Don't change this unless you know what you're doing -if [ $OS -ne "Ubuntu" ] || [ $OS -ne "Raspbian"]; then +if [ $OS = "Ubuntu" ] || [ $OS = "Raspbian"]; then echo -e "${Red}Oops! Only Ubuntu and Raspbian OS are supported.${NC}" exit fi From fdbe29fb4b7674a3a3094c4e71ce871dba51e55b Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Thu, 14 Oct 2021 17:01:50 -0700 Subject: [PATCH 174/255] Update install.sh --- install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.sh b/install.sh index 63d3d72..31f5219 100755 --- a/install.sh +++ b/install.sh @@ -8,7 +8,7 @@ Green='\033[0;32m' # Green ### Variables OS=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f1 -d " ") # Don't change this unless you know what you're doing -if [ $OS = "Ubuntu" ] || [ $OS = "Raspbian"]; then +if [[ "$OS" == "Ubuntu" || "$OS" == "Raspbian" ]]; then echo -e "${Red}Oops! Only Ubuntu and Raspbian OS are supported.${NC}" exit fi From 869c109cb849fbcf3945d9f44fd956aab86e07a2 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Thu, 14 Oct 2021 17:04:26 -0700 Subject: [PATCH 175/255] Update install.sh --- install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.sh b/install.sh index 31f5219..33b0172 100755 --- a/install.sh +++ b/install.sh @@ -8,7 +8,7 @@ Green='\033[0;32m' # Green ### Variables OS=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f1 -d " ") # Don't change this unless you know what you're doing -if [[ "$OS" == "Ubuntu" || "$OS" == "Raspbian" ]]; then +if [[ "$OS" != "Ubuntu" || "$OS" != "Raspbian" ]]; then echo -e "${Red}Oops! Only Ubuntu and Raspbian OS are supported.${NC}" exit fi From 9aab409e44cd7b3820c6cd9d3d699d24fc62a3af Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Fri, 15 Oct 2021 09:13:44 -0700 Subject: [PATCH 176/255] Update online-install.sh --- online-install.sh | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/online-install.sh b/online-install.sh index 034af65..51ca26c 100644 --- a/online-install.sh +++ b/online-install.sh @@ -4,6 +4,14 @@ Red='\033[1;31m' # Light Red Yellow='\033[0;33m' # Yellow Green='\033[0;32m' # Green clear +OS=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f1 -d " ") # Don't change this unless you know what you're doing +if [[ "$OS" != "Ubuntu" ]]; then + echo -e "${Red}Oops! Only Ubuntu and Raspbian OS are supported.${NC}" + exit +elif [[ "$OS" != "Raspbian" ]]; then + echo -e "${Red}Oops! Only Ubuntu and Raspbian OS are supported.${NC}" + exit +fi echo -e "${Green}Updating and Getting Ready${Yellow}" sudo apt update && sudo apt upgrade -y sudo apt install -y git From 42e3162de7c623831f5d8b731b8ef88c6fcf8659 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Fri, 15 Oct 2021 09:13:49 -0700 Subject: [PATCH 177/255] Update install.sh --- install.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/install.sh b/install.sh index 33b0172..71473ca 100755 --- a/install.sh +++ b/install.sh @@ -8,7 +8,10 @@ Green='\033[0;32m' # Green ### Variables OS=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f1 -d " ") # Don't change this unless you know what you're doing -if [[ "$OS" != "Ubuntu" || "$OS" != "Raspbian" ]]; then +if [[ "$OS" != "Ubuntu" ]]; then + echo -e "${Red}Oops! Only Ubuntu and Raspbian OS are supported.${NC}" + exit +elif [[ "$OS" != "Raspbian" ]]; then echo -e "${Red}Oops! Only Ubuntu and Raspbian OS are supported.${NC}" exit fi From 45aee9a7e35a6b88b2d744258b8f5f99125f7def Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Fri, 15 Oct 2021 09:28:19 -0700 Subject: [PATCH 178/255] Update install.sh --- install.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/install.sh b/install.sh index 71473ca..1046ccd 100755 --- a/install.sh +++ b/install.sh @@ -8,10 +8,10 @@ Green='\033[0;32m' # Green ### Variables OS=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f1 -d " ") # Don't change this unless you know what you're doing -if [[ "$OS" != "Ubuntu" ]]; then - echo -e "${Red}Oops! Only Ubuntu and Raspbian OS are supported.${NC}" - exit -elif [[ "$OS" != "Raspbian" ]]; then +if [ "$OS" == "Ubuntu" ] || [ "$OS" == "Raspbian" ]; +then + : +else echo -e "${Red}Oops! Only Ubuntu and Raspbian OS are supported.${NC}" exit fi From 1c716ef84a9edf33d2f8507249462e0f217ba5b5 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Fri, 15 Oct 2021 09:28:22 -0700 Subject: [PATCH 179/255] Update online-install.sh --- online-install.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/online-install.sh b/online-install.sh index 51ca26c..66c6d44 100644 --- a/online-install.sh +++ b/online-install.sh @@ -5,10 +5,10 @@ Yellow='\033[0;33m' # Yellow Green='\033[0;32m' # Green clear OS=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f1 -d " ") # Don't change this unless you know what you're doing -if [[ "$OS" != "Ubuntu" ]]; then - echo -e "${Red}Oops! Only Ubuntu and Raspbian OS are supported.${NC}" - exit -elif [[ "$OS" != "Raspbian" ]]; then +if [ "$OS" == "Ubuntu" ] || [ "$OS" == "Raspbian" ]; +then + : +else echo -e "${Red}Oops! Only Ubuntu and Raspbian OS are supported.${NC}" exit fi From b19d788194f49a8d1792fdd90b9422ba4b2ae6c0 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Fri, 15 Oct 2021 09:35:02 -0700 Subject: [PATCH 180/255] Update install.sh --- install.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/install.sh b/install.sh index 1046ccd..5fad27c 100755 --- a/install.sh +++ b/install.sh @@ -73,9 +73,9 @@ sleep 2 # hostname / IP settings echo -e "${Red}$public_ip ${NC}detected as your Public IP and will be used automatically if you don't choose anything else." -echo -e "Timeout: 60 Seconds" +echo -e "Timeout: 2 Minutes" echo -e "Need to use another public IP or Hostname?" -read -t 60 -p "Type it here or hit enter to continue with detected IP: " public_hostname Date: Fri, 15 Oct 2021 10:09:51 -0700 Subject: [PATCH 181/255] Update install.sh --- install.sh | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/install.sh b/install.sh index 5fad27c..22771a3 100755 --- a/install.sh +++ b/install.sh @@ -365,9 +365,9 @@ fi truncate -s -1 /var/www/openvpn-admin/client-conf/windows/filename systemctl start openvpn@server -echo "Auto Generated MySQL Root Password: ${Red}$mysql_root_pass" > ~/OpenVPN_Creds -echo "Auto Generated OpenVPN-Admin MySQL Username: ${Red}$mysql_user" > ~/OpenVPN_Creds -echo "Auto Generated OpenVPN-Admin MySQL Password: ${Red}$mysql_pass" > ~/OpenVPN_Creds +echo "Auto Generated MySQL Root Password: $mysql_root_pass" >> ~/OpenVPN_Creds +echo "Auto Generated OpenVPN-Admin MySQL Username: $mysql_user" >> ~/OpenVPN_Creds +echo "Auto Generated OpenVPN-Admin MySQL Password: $mysql_pass" >> ~/OpenVPN_Creds echo -e "\n\n\n${Yellow}" echo -e "################################################################################" echo -e "################################### Finished ###################################" @@ -387,7 +387,10 @@ echo -e " Publishing TCP port 80 over the web is a high risk and NOT recommended echo echo -e " Auto Generated MySQL Root Password: ${Red}$mysql_root_pass ${NC}" echo -e " Auto Generated OpenVPN-Admin MySQL Username: ${Red}$mysql_user ${NC}" -echo -e " Auto Generated OpenVPN-Admin MySQL Password: ${Red}$mysql_pass ${NC}" +echo -e " Auto Generated OpenVPN-Admin MySQL Password: ${Red}$mysql_pass ${Yellow}" +echo +echo -e " Credentials are saved in /root/OpenVPN_Creds file for future refrence." +echo echo -e " Selected download file name: ${Red}$company_name.ovpn ${NC}" echo echo -e " Please, report any issues here https://github.com/arvage/OpenVPN-Admin (Armin Gorji)" From d6606ab6837cbc6bb5ca7d188981fb077b4073c4 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Wed, 24 Nov 2021 15:19:05 -0800 Subject: [PATCH 182/255] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4adeade..d921289 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,8 @@ Administer OpenVPN Server with a web interface (Users Management, Logs, Visualiz ## Prerequisite - * Raspbian or Ubuntu with Bash access or remote SSH + * Raspbian or Ubuntu 20 with Bash access or remote SSH + * Ubuntu 21.x.x is not supprted yet ## Installation From c0a221204ec57b1d90e6e5e793e569eb432f6b1b Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Wed, 24 Nov 2021 15:19:45 -0800 Subject: [PATCH 183/255] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d921289..7fbd107 100644 --- a/README.md +++ b/README.md @@ -11,11 +11,11 @@ Administer OpenVPN Server with a web interface (Users Management, Logs, Visualiz ## Installation - * Method 1: + * Method 1 (Automatic): wget -O - https://raw.githubusercontent.com/arvage/OpenVPN-Admin/master/online-install.sh | bash - * Method 2: + * Method 2 (Manual): sudo apt update sudo apt install -y git From 7a130e1db8922c8595730bca5231bb4e66a691e7 Mon Sep 17 00:00:00 2001 From: arvage Date: Wed, 24 Aug 2022 11:27:47 -0700 Subject: [PATCH 184/255] getting ready for ubuntu 22 --- .vs/ProjectSettings.json | 3 +++ .vs/slnx.sqlite | Bin 0 -> 90112 bytes install.sh | 14 +++++++++++--- 3 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 .vs/ProjectSettings.json create mode 100644 .vs/slnx.sqlite diff --git a/.vs/ProjectSettings.json b/.vs/ProjectSettings.json new file mode 100644 index 0000000..f8b4888 --- /dev/null +++ b/.vs/ProjectSettings.json @@ -0,0 +1,3 @@ +{ + "CurrentProjectSetting": null +} \ No newline at end of file diff --git a/.vs/slnx.sqlite b/.vs/slnx.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..d482d038de74fe7728c675acbed664c91141e938 GIT binary patch literal 90112 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 M2mk>faNi01FG&L(GXMYp literal 0 HcmV?d00001 diff --git a/install.sh b/install.sh index 22771a3..75d3177 100755 --- a/install.sh +++ b/install.sh @@ -8,6 +8,8 @@ Green='\033[0;32m' # Green ### Variables OS=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f1 -d " ") # Don't change this unless you know what you're doing +OS_Version_Major=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f2 -d " " | cut -f1 -d ".") +OS_Version_Minor=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f2 -d " " | cut -f2 -d ".") if [ "$OS" == "Ubuntu" ] || [ "$OS" == "Raspbian" ]; then : @@ -111,8 +113,14 @@ echo -e "${Green}Installing Prerequisites ${Red}(This could take long time)${NC} case $OS in Ubuntu) - apt update && sudo apt upgrade -y - apt install -y openvpn apache2 mysql-server php php-mysql php-zip unzip git wget sed curl nodejs npm mc net-tools + if [$OS_OS_Version_Major -gt 19] + then + export DEBIAN_FRONTEND=noninteractive + apt-get update && sudo apt-get upgrade -y + apt-get install -y openvpn apache2 mysql-server php php-mysql php-zip unzip git wget sed curl nodejs npm mc net-tools + else + apt update && sudo apt upgrade -y + apt install -y openvpn apache2 mysql-server php php-mysql php-zip unzip git wget sed curl nodejs npm mc net-tools ;; Raspbian) apt install -y openvpn apache2 mariadb-server php php-mysql php-zip unzip git wget sed curl nodejs npm mc @@ -229,7 +237,7 @@ export EASYRSA_BATCH=1 ./easyrsa build-server-full server nopass # Generate shared-secret for TLS Authentication -openvpn --genkey --secret pki/ta.key +openvpn --genkey secret pki/ta.key echo -e "${Green}Setup OpenVPN${NC}" From 2dfacd06af2732492cf529a44a468d34fa9f232c Mon Sep 17 00:00:00 2001 From: arvage Date: Wed, 24 Aug 2022 11:32:53 -0700 Subject: [PATCH 185/255] getting ready for ubuntu 22 --- install.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/install.sh b/install.sh index 75d3177..96c5a48 100755 --- a/install.sh +++ b/install.sh @@ -121,6 +121,7 @@ case $OS in else apt update && sudo apt upgrade -y apt install -y openvpn apache2 mysql-server php php-mysql php-zip unzip git wget sed curl nodejs npm mc net-tools + fi ;; Raspbian) apt install -y openvpn apache2 mariadb-server php php-mysql php-zip unzip git wget sed curl nodejs npm mc From 78cfed6e0df3cf8f2777a4aebc5a0c1d9a44547b Mon Sep 17 00:00:00 2001 From: arvage Date: Wed, 24 Aug 2022 12:08:15 -0700 Subject: [PATCH 186/255] adding php7.4 to ubuntu 22 --- install.sh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/install.sh b/install.sh index 96c5a48..93b81da 100755 --- a/install.sh +++ b/install.sh @@ -116,8 +116,14 @@ case $OS in if [$OS_OS_Version_Major -gt 19] then export DEBIAN_FRONTEND=noninteractive + LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php + + apt install software-properties-common ca-certificates lsb-release apt-transport-https apt-get update && sudo apt-get upgrade -y - apt-get install -y openvpn apache2 mysql-server php php-mysql php-zip unzip git wget sed curl nodejs npm mc net-tools + apt-get install -y openvpn apache2 mysql-server php7.4 php7.4-mysql php7.4-zip unzip git wget sed curl nodejs npm mc net-tools + a2dismod php8.1 + a2enmod php7.4 + systemctl restart apache2 else apt update && sudo apt upgrade -y apt install -y openvpn apache2 mysql-server php php-mysql php-zip unzip git wget sed curl nodejs npm mc net-tools From dcb03277b5d1b8e4c5bfd52ec95dba6180d62f64 Mon Sep 17 00:00:00 2001 From: arvage Date: Wed, 24 Aug 2022 12:11:03 -0700 Subject: [PATCH 187/255] SSL CERT expiration is 100 years now --- install.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/install.sh b/install.sh index 93b81da..99f4845 100755 --- a/install.sh +++ b/install.sh @@ -39,12 +39,12 @@ mysql_pass=$(openssl rand -base64 12 | sed 's/[^a-zA-Z0-9]//g') # Random ceated # Certificates Variables key_size="2048" # anything less than 2048 may get rejected by some OSes. bigger sizes will take forever to generate! -ca_expire="3650" # 10 Years -cert_expire="3650" +ca_expire="36500" # 100 Years +cert_expire="36500" cert_country="US" cert_province="California" cert_city="Mission Viejo" -cert_org="Arvage" +cert_org="PACMIT" cert_ou="IT" cert_email="example@test.net" key_cn=$public_ip # will be changed when asking for public IP/Hostname user input From c1a4ecaf5a2022bda0a95ab16a48f34860da68e7 Mon Sep 17 00:00:00 2001 From: arvage Date: Wed, 24 Aug 2022 12:25:33 -0700 Subject: [PATCH 188/255] fixed a tiny error --- install.sh | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/install.sh b/install.sh index 99f4845..a51dff4 100755 --- a/install.sh +++ b/install.sh @@ -105,7 +105,7 @@ echo -e "${Yellow}\nNow sit back and wait for the script to finish the install\n sleep 2 # Detecting OS Distribution -echo -e "${NC}Detected OS: ${Red}$OS\n" +echo -e "${NC}Detected OS: ${Red}$OS $OS_OS_Version_Major.$OS_OS_Version_Minor\n" sleep 2 # Installing prerequisites @@ -113,12 +113,11 @@ echo -e "${Green}Installing Prerequisites ${Red}(This could take long time)${NC} case $OS in Ubuntu) - if [$OS_OS_Version_Major -gt 19] + if [$OS_OS_Version_Major > 20] then export DEBIAN_FRONTEND=noninteractive + apt install -y software-properties-common ca-certificates lsb-release apt-transport-https LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php - - apt install software-properties-common ca-certificates lsb-release apt-transport-https apt-get update && sudo apt-get upgrade -y apt-get install -y openvpn apache2 mysql-server php7.4 php7.4-mysql php7.4-zip unzip git wget sed curl nodejs npm mc net-tools a2dismod php8.1 From db686a07dab7e4707e4fb6808e6dc11da1e141dd Mon Sep 17 00:00:00 2001 From: arvage Date: Wed, 24 Aug 2022 12:27:44 -0700 Subject: [PATCH 189/255] fixed an error --- install.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install.sh b/install.sh index a51dff4..aa6824a 100755 --- a/install.sh +++ b/install.sh @@ -105,7 +105,7 @@ echo -e "${Yellow}\nNow sit back and wait for the script to finish the install\n sleep 2 # Detecting OS Distribution -echo -e "${NC}Detected OS: ${Red}$OS $OS_OS_Version_Major.$OS_OS_Version_Minor\n" +echo -e "${NC}Detected OS: ${Red}$OS $OS_Version_Major.$OS_Version_Minor\n" sleep 2 # Installing prerequisites @@ -113,7 +113,7 @@ echo -e "${Green}Installing Prerequisites ${Red}(This could take long time)${NC} case $OS in Ubuntu) - if [$OS_OS_Version_Major > 20] + if [$OS_Version_Major > 20] then export DEBIAN_FRONTEND=noninteractive apt install -y software-properties-common ca-certificates lsb-release apt-transport-https From 6b034d1ffba44e5a7af1b9625275b30d4973cc6c Mon Sep 17 00:00:00 2001 From: arvage Date: Wed, 24 Aug 2022 12:29:18 -0700 Subject: [PATCH 190/255] tiny fix --- install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.sh b/install.sh index aa6824a..5329751 100755 --- a/install.sh +++ b/install.sh @@ -113,7 +113,7 @@ echo -e "${Green}Installing Prerequisites ${Red}(This could take long time)${NC} case $OS in Ubuntu) - if [$OS_Version_Major > 20] + if [[$OS_Version_Major > 20]] then export DEBIAN_FRONTEND=noninteractive apt install -y software-properties-common ca-certificates lsb-release apt-transport-https From 5d9fad78819381b298f340a3a25f7ef9f896989a Mon Sep 17 00:00:00 2001 From: arvage Date: Wed, 24 Aug 2022 12:31:22 -0700 Subject: [PATCH 191/255] debugging --- install.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/install.sh b/install.sh index 5329751..e206223 100755 --- a/install.sh +++ b/install.sh @@ -113,11 +113,16 @@ echo -e "${Green}Installing Prerequisites ${Red}(This could take long time)${NC} case $OS in Ubuntu) - if [[$OS_Version_Major > 20]] + if [[$OS_Version_Major > 20]] then + echo "here" export DEBIAN_FRONTEND=noninteractive + echo "export" + apt install -y software-properties-common ca-certificates lsb-release apt-transport-https + echo "apt Install" LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php + echo "repository add" apt-get update && sudo apt-get upgrade -y apt-get install -y openvpn apache2 mysql-server php7.4 php7.4-mysql php7.4-zip unzip git wget sed curl nodejs npm mc net-tools a2dismod php8.1 From c31d5a48a6d2ad9e7358d703a854604bd3121bbe Mon Sep 17 00:00:00 2001 From: arvage Date: Wed, 24 Aug 2022 12:32:44 -0700 Subject: [PATCH 192/255] tiny fix --- install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.sh b/install.sh index e206223..a168ad5 100755 --- a/install.sh +++ b/install.sh @@ -113,7 +113,7 @@ echo -e "${Green}Installing Prerequisites ${Red}(This could take long time)${NC} case $OS in Ubuntu) - if [[$OS_Version_Major > 20]] + if [["$OS_Version_Major" > "20"]] then echo "here" export DEBIAN_FRONTEND=noninteractive From 76dbee3c713f9ded6da5655b757e798d11a6393b Mon Sep 17 00:00:00 2001 From: arvage Date: Wed, 24 Aug 2022 12:36:22 -0700 Subject: [PATCH 193/255] tiny fix again! --- install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.sh b/install.sh index a168ad5..b864b96 100755 --- a/install.sh +++ b/install.sh @@ -113,7 +113,7 @@ echo -e "${Green}Installing Prerequisites ${Red}(This could take long time)${NC} case $OS in Ubuntu) - if [["$OS_Version_Major" > "20"]] + if [["$OS_Version_Major" -gt "20"]] then echo "here" export DEBIAN_FRONTEND=noninteractive From 614c996912b54d74fab8c5f14a0da39e1ba5b15b Mon Sep 17 00:00:00 2001 From: arvage Date: Wed, 24 Aug 2022 12:37:18 -0700 Subject: [PATCH 194/255] fix! --- install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.sh b/install.sh index b864b96..e6d4124 100755 --- a/install.sh +++ b/install.sh @@ -113,7 +113,7 @@ echo -e "${Green}Installing Prerequisites ${Red}(This could take long time)${NC} case $OS in Ubuntu) - if [["$OS_Version_Major" -gt "20"]] + if [["$OS_Version_Major" -gt "20"]]; then echo "here" export DEBIAN_FRONTEND=noninteractive From 2c827c2148526ddeb36ed5b834d5d3879e7dfa6e Mon Sep 17 00:00:00 2001 From: arvage Date: Wed, 24 Aug 2022 12:38:53 -0700 Subject: [PATCH 195/255] fix2.0 --- install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.sh b/install.sh index e6d4124..e9db6e0 100755 --- a/install.sh +++ b/install.sh @@ -113,7 +113,7 @@ echo -e "${Green}Installing Prerequisites ${Red}(This could take long time)${NC} case $OS in Ubuntu) - if [["$OS_Version_Major" -gt "20"]]; + if [ "$OS_Version_Major" -gt "20" ]; then echo "here" export DEBIAN_FRONTEND=noninteractive From 57d7d492dd1297a098f2f0e19f676e29d4204f69 Mon Sep 17 00:00:00 2001 From: arvage Date: Wed, 24 Aug 2022 12:45:45 -0700 Subject: [PATCH 196/255] unattended install --- install.sh | 14 +++++--------- online-install.sh | 2 +- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/install.sh b/install.sh index e9db6e0..5101bed 100755 --- a/install.sh +++ b/install.sh @@ -101,7 +101,7 @@ else echo -e "\nSelected file name: ${Red}$company_name.ovpn${NC}" fi -echo -e "${Yellow}\nNow sit back and wait for the script to finish the install\n${NC}" +echo -e "${Yellow}\nThis part will take a while to finish.\n${NC}" sleep 2 # Detecting OS Distribution @@ -115,16 +115,12 @@ case $OS in Ubuntu) if [ "$OS_Version_Major" -gt "20" ]; then - echo "here" export DEBIAN_FRONTEND=noninteractive - echo "export" - - apt install -y software-properties-common ca-certificates lsb-release apt-transport-https - echo "apt Install" - LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php + DEBIAN_FRONTEND=noninteractive apt install -y -q software-properties-common ca-certificates lsb-release apt-transport-https + LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php echo "repository add" - apt-get update && sudo apt-get upgrade -y - apt-get install -y openvpn apache2 mysql-server php7.4 php7.4-mysql php7.4-zip unzip git wget sed curl nodejs npm mc net-tools + DEBIAN_FRONTEND=noninteractive apt-get update && sudo apt-get upgrade -y -q + DEBIAN_FRONTEND=noninteractive apt-get install -y -q openvpn apache2 mysql-server php7.4 php7.4-mysql php7.4-zip unzip git wget sed curl nodejs npm mc net-tools a2dismod php8.1 a2enmod php7.4 systemctl restart apache2 diff --git a/online-install.sh b/online-install.sh index 66c6d44..ab56a12 100644 --- a/online-install.sh +++ b/online-install.sh @@ -13,7 +13,7 @@ else exit fi echo -e "${Green}Updating and Getting Ready${Yellow}" -sudo apt update && sudo apt upgrade -y +DEBIAN_FRONTEND=noninteractive sudo apt update && sudo apt upgrade -y -q sudo apt install -y git cd ~ echo -e "${Red}" From f3be3acd0232b6a03682f417e2922792ab555b7e Mon Sep 17 00:00:00 2001 From: arvage Date: Wed, 24 Aug 2022 13:03:54 -0700 Subject: [PATCH 197/255] unattended install fix --- install.sh | 2 +- online-install.sh | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/install.sh b/install.sh index 5101bed..812dfc5 100755 --- a/install.sh +++ b/install.sh @@ -116,7 +116,7 @@ case $OS in if [ "$OS_Version_Major" -gt "20" ]; then export DEBIAN_FRONTEND=noninteractive - DEBIAN_FRONTEND=noninteractive apt install -y -q software-properties-common ca-certificates lsb-release apt-transport-https + DEBIAN_FRONTEND=noninteractive apt-Get install -y -q software-properties-common ca-certificates lsb-release apt-transport-https LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php echo "repository add" DEBIAN_FRONTEND=noninteractive apt-get update && sudo apt-get upgrade -y -q diff --git a/online-install.sh b/online-install.sh index ab56a12..df51e5c 100644 --- a/online-install.sh +++ b/online-install.sh @@ -13,8 +13,9 @@ else exit fi echo -e "${Green}Updating and Getting Ready${Yellow}" -DEBIAN_FRONTEND=noninteractive sudo apt update && sudo apt upgrade -y -q -sudo apt install -y git +echo "$nrconf{restart} = 'a';" >> /etc/needrestart/needrestart.conf +DEBIAN_FRONTEND=noninteractive sudo apt-get update && sudo apt-get upgrade -y -q +DEBIAN_FRONTEND=noninteractive sudo apt-get install -y git cd ~ echo -e "${Red}" git clone https://github.com/arvage/OpenVPN-Admin openvpn-admin From 796e03be7d5899416e094140333d96d6292e5fb3 Mon Sep 17 00:00:00 2001 From: arvage Date: Wed, 24 Aug 2022 13:06:08 -0700 Subject: [PATCH 198/255] last fix! --- online-install.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/online-install.sh b/online-install.sh index df51e5c..52d60ad 100644 --- a/online-install.sh +++ b/online-install.sh @@ -12,8 +12,9 @@ else echo -e "${Red}Oops! Only Ubuntu and Raspbian OS are supported.${NC}" exit fi +sudo echo "$nrconf{restart} = 'a';" >> /etc/needrestart/needrestart.conf + echo -e "${Green}Updating and Getting Ready${Yellow}" -echo "$nrconf{restart} = 'a';" >> /etc/needrestart/needrestart.conf DEBIAN_FRONTEND=noninteractive sudo apt-get update && sudo apt-get upgrade -y -q DEBIAN_FRONTEND=noninteractive sudo apt-get install -y git cd ~ From 470ce78989940e01bb98af054433e5d7961ab158 Mon Sep 17 00:00:00 2001 From: arvage Date: Wed, 24 Aug 2022 13:10:02 -0700 Subject: [PATCH 199/255] last fix? --- online-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/online-install.sh b/online-install.sh index 52d60ad..00860b7 100644 --- a/online-install.sh +++ b/online-install.sh @@ -12,7 +12,7 @@ else echo -e "${Red}Oops! Only Ubuntu and Raspbian OS are supported.${NC}" exit fi -sudo echo "$nrconf{restart} = 'a';" >> /etc/needrestart/needrestart.conf +sudo sed -i 's/#$nrconf{restart} = '"'"'i'"'"';/$nrconf{restart} = '"'"'a'"'"';/g' /etc/needrestart/needrestart.conf echo -e "${Green}Updating and Getting Ready${Yellow}" DEBIAN_FRONTEND=noninteractive sudo apt-get update && sudo apt-get upgrade -y -q From 10e25a744acb1fecb94bfd68054233181edb3e43 Mon Sep 17 00:00:00 2001 From: arvage Date: Wed, 24 Aug 2022 13:14:02 -0700 Subject: [PATCH 200/255] corrected typo --- install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.sh b/install.sh index 812dfc5..a932105 100755 --- a/install.sh +++ b/install.sh @@ -116,7 +116,7 @@ case $OS in if [ "$OS_Version_Major" -gt "20" ]; then export DEBIAN_FRONTEND=noninteractive - DEBIAN_FRONTEND=noninteractive apt-Get install -y -q software-properties-common ca-certificates lsb-release apt-transport-https + DEBIAN_FRONTEND=noninteractive apt-get install -y -q software-properties-common ca-certificates lsb-release apt-transport-https LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php echo "repository add" DEBIAN_FRONTEND=noninteractive apt-get update && sudo apt-get upgrade -y -q From 794db2ba9db9c5a9b95449b528211b3884225764 Mon Sep 17 00:00:00 2001 From: arvage Date: Wed, 24 Aug 2022 13:15:14 -0700 Subject: [PATCH 201/255] corrected typo --- online-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/online-install.sh b/online-install.sh index 00860b7..f749ea5 100644 --- a/online-install.sh +++ b/online-install.sh @@ -16,7 +16,7 @@ sudo sed -i 's/#$nrconf{restart} = '"'"'i'"'"';/$nrconf{restart} = '"'"'a'"'"';/ echo -e "${Green}Updating and Getting Ready${Yellow}" DEBIAN_FRONTEND=noninteractive sudo apt-get update && sudo apt-get upgrade -y -q -DEBIAN_FRONTEND=noninteractive sudo apt-get install -y git +DEBIAN_FRONTEND=noninteractive sudo apt-get install -y git mc cd ~ echo -e "${Red}" git clone https://github.com/arvage/OpenVPN-Admin openvpn-admin From 4c474f7444679d4c7ffac69c602dd1a805309ea4 Mon Sep 17 00:00:00 2001 From: arvage Date: Wed, 24 Aug 2022 15:25:27 -0700 Subject: [PATCH 202/255] fixed SQL query --- sql/schema-5.sql | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sql/schema-5.sql b/sql/schema-5.sql index a37b112..59450b8 100644 --- a/sql/schema-5.sql +++ b/sql/schema-5.sql @@ -4,6 +4,6 @@ ALTER TABLE `user` CHANGE `user_start_date` `user_start_date` DATE NULL DEFAULT ALTER TABLE `user` CHANGE `user_end_date` `user_end_date` DATE NULL DEFAULT NULL; ALTER TABLE `log` CHANGE `log_end_time` `log_end_time` TIMESTAMP NULL DEFAULT NULL; -UPDATE `user` SET `user_start_date` = NULL WHERE `user_start_date` = '0000-00-00'; -UPDATE `user` SET `user_end_date` = NULL WHERE `user_end_date` = '0000-00-00'; -UPDATE `log` SET `log_end_time` = NULL WHERE `log_end_time` = '0000-00-00'; \ No newline at end of file +UPDATE `user` SET `user_start_date` = NULL WHERE `user_start_date` = '2020-01-01'; +UPDATE `user` SET `user_end_date` = NULL WHERE `user_end_date` = '2222-01-01'; +UPDATE `log` SET `log_end_time` = NULL WHERE `log_end_time` = '2222-12-12'; \ No newline at end of file From 4cbe55f5a39bd71aeeab429ecb7fc78f86e5acc5 Mon Sep 17 00:00:00 2001 From: arvage Date: Wed, 24 Aug 2022 15:44:05 -0700 Subject: [PATCH 203/255] added some art :) --- online-install.sh | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/online-install.sh b/online-install.sh index f749ea5..71b5c56 100644 --- a/online-install.sh +++ b/online-install.sh @@ -4,6 +4,23 @@ Red='\033[1;31m' # Light Red Yellow='\033[0;33m' # Yellow Green='\033[0;32m' # Green clear +echo '.-----------------------------------------------------------------------------.' +echo '||Es| |F1 |F2 |F3 |F4 |F5 | |F6 |F7 |F8 |F9 |F10| C= AMIGA |' +echo '||__| |___|___|___|___|___| |___|___|___|___|___| |' +echo '| _____________________________________________ ________ ___________ |' +echo '||~ |! |" | |$ |% |& |/ |( |) |= |? |` || |<-| |Del|Help| |{ |} |/ |* | |' +echo '||`__|1_|2_|3_|4_|5_|6_|7_|8_|9_|0_|_|_|\_|__| |___|____| |[ |]_|__|__| |' +echo '||<- |Q |W |E |R |T |Z |U |I |O |P | |* | || |7 |8 |9 |- | |' +echo '||->__|__|__|__|__|__|__|__|__|__|__|__|+_|_ || |__|__|__|__| |' +echo "||Ctr|oC|A |S |D |F |G |H |J |K |L | | |^ |<'| |4 |5 |6 |+ | |" +echo '||___|_L|__|__|__|__|__|__|__|__|__|__|__|#_|__| __ |__|__|__|__| |' +echo '||^ |> |Y |X |C |V |B |N |M |; |: |_ |^ | |A | |1 |2 |3 |E | |' +echo '||_____|<_|__|__|__|__|__|__|__|,_|._|-_|______| __||_|__ |__|__|__|n | |' +echo '| |Alt|A | |A |Alt| |<-|| |->| |0 |. |t | |' +echo '| |___|___|_______________________|___|___| |__|V_|__| |_____|__|e_| |' +echo '| |' +echo '`-----------------------------------------------------------------------------.' + OS=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f1 -d " ") # Don't change this unless you know what you're doing if [ "$OS" == "Ubuntu" ] || [ "$OS" == "Raspbian" ]; then From 06347bed639f2ba55b3e65a522f9b2c3510d9e96 Mon Sep 17 00:00:00 2001 From: arvage Date: Wed, 24 Aug 2022 15:58:40 -0700 Subject: [PATCH 204/255] Amiga!? --- include/html/grids.php | 5 +---- online-install.sh | 5 ++++- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/include/html/grids.php b/include/html/grids.php index 89f00bb..d6e72d5 100644 --- a/include/html/grids.php +++ b/include/html/grids.php @@ -120,10 +120,7 @@ function getHistory($cfg_file, $accordion_id, $open_first_history_tab = false) {
    diff --git a/online-install.sh b/online-install.sh index 71b5c56..093d64d 100644 --- a/online-install.sh +++ b/online-install.sh @@ -20,6 +20,9 @@ echo '| |Alt|A | |A |Alt| |<-|| |->| |0 |. |t echo '| |___|___|_______________________|___|___| |__|V_|__| |_____|__|e_| |' echo '| |' echo '`-----------------------------------------------------------------------------.' +echo +echo + OS=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f1 -d " ") # Don't change this unless you know what you're doing if [ "$OS" == "Ubuntu" ] || [ "$OS" == "Raspbian" ]; @@ -30,7 +33,7 @@ else exit fi sudo sed -i 's/#$nrconf{restart} = '"'"'i'"'"';/$nrconf{restart} = '"'"'a'"'"';/g' /etc/needrestart/needrestart.conf - +echo echo -e "${Green}Updating and Getting Ready${Yellow}" DEBIAN_FRONTEND=noninteractive sudo apt-get update && sudo apt-get upgrade -y -q DEBIAN_FRONTEND=noninteractive sudo apt-get install -y git mc From 0036a4996d780ef40b22935b8da4ad3c8659d0a5 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Tue, 15 Nov 2022 14:18:26 -0800 Subject: [PATCH 205/255] new OpenSSL compatibility --- install.sh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/install.sh b/install.sh index a932105..0045192 100755 --- a/install.sh +++ b/install.sh @@ -229,9 +229,10 @@ fi if [[ ! -z $cert_email ]]; then export EASYRSA_REQ_EMAIL=$cert_email fi -if [[ ! -z $key_cn ]]; then - export EASYRSA_REQ_CN=$key_cn -fi + +#if [[ ! -z $key_cn ]]; then +# export EASYRSA_REQ_CN=$key_cn +#fi export EASYRSA_BATCH=1 From 8b582f6460d3242e784e72c60a75cb04ec4b6692 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Thu, 17 Nov 2022 16:50:19 -0800 Subject: [PATCH 206/255] Update install.sh --- install.sh | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/install.sh b/install.sh index 0045192..bfec3b9 100755 --- a/install.sh +++ b/install.sh @@ -390,14 +390,15 @@ echo -e "################################### Finished ########################## echo echo -e "${Green}Congratulations, you have successfully setup OpenVPN-Admin!${NC}" echo -echo -e "Finish the install by going to: ${Red}" -echo -e " http://$ip_server/index.php?installation${NC}" -echo -e "After install, Access GUI at: ${Red}" -echo -e " http://$ip_server/${NC}" +echo -e "Finish the install by going to:" +echo -e " Local URL: ${Red}http://$ip_server/index.php?installation${NC}" +echo -e " Public URL: ${Red}http://$public_ip/index.php?installation${NC}" echo -echo -e "Here are more details:" -echo -e " Your Public URL: ${Red}http://$public_ip" +echo -e "After install, Access GUI at: ${NC}" +echo -e " Local URL: ${Red}http://$ip_server/${NC}" +echo -e " Public URL: ${Red}http://$public_ip${NC}" echo +echo -e "Here are more details:${Red}" echo -e " We recommend only forward UDP port 1194 if you are behind a firewall" echo -e " Publishing TCP port 80 over the web is a high risk and NOT recommended${NC}" echo @@ -405,7 +406,7 @@ echo -e " Auto Generated MySQL Root Password: ${Red}$mysql_root_pass echo -e " Auto Generated OpenVPN-Admin MySQL Username: ${Red}$mysql_user ${NC}" echo -e " Auto Generated OpenVPN-Admin MySQL Password: ${Red}$mysql_pass ${Yellow}" echo -echo -e " Credentials are saved in /root/OpenVPN_Creds file for future refrence." +echo -e " Credentials are saved in /root/OpenVPN_Creds file for future reference." echo echo -e " Selected download file name: ${Red}$company_name.ovpn ${NC}" echo From 8d7f356f05f47f474287e4794a9e8edfa6868a34 Mon Sep 17 00:00:00 2001 From: Armin Gorji Date: Wed, 22 Mar 2023 15:07:29 -0700 Subject: [PATCH 207/255] updated version --- ...load and install the OpenVPN GUI (MAC).pdf | Bin 445739 -> 141263 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/installation/client-conf/osx-viscosity/Download and install the OpenVPN GUI (MAC).pdf b/installation/client-conf/osx-viscosity/Download and install the OpenVPN GUI (MAC).pdf index 3354c58ec1453d54cbd1b33ca32be63a1d97e213..d166093b8a70b92dbf771e52b4c32d99ee3fddc3 100644 GIT binary patch literal 141263 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%0A$PsO>80AnD) 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 z%0D+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
    + + + + + + + @@ -179,18 +226,22 @@ function getHistory($cfg_file, $accordion_id, $open_first_history_tab = false) { diff --git a/index.php b/index.php index 5c9d9ba..8b65628 100644 --- a/index.php +++ b/index.php @@ -201,22 +201,37 @@ // --------------- GRIDS --------------- else{ ?> - - +
    + +
    diff --git a/js/grids.js b/js/grids.js index e3b961d..cda1768 100644 --- a/js/grids.js +++ b/js/grids.js @@ -2,56 +2,77 @@ $(function () { "use strict"; // ------------------------- GENERIC STUFF ------------------------------ - window.printStatus = function(msg, alert_type='warning', bootstrap_icon='') { - $('#message-stage').empty() - .append( - $(document.createElement('div')) - .addClass('alert alert-'+alert_type) - .html(bootstrap_icon?'':'') - .append(msg) - .hide().fadeIn().delay(2000).fadeOut() - ); - } + window.printStatus = function(msg, alert_type, bootstrap_icon) { + alert_type = alert_type || 'warning'; + bootstrap_icon = bootstrap_icon || ''; + $('#message-stage').empty() + .append( + $(document.createElement('div')) + .addClass('alert alert-'+alert_type) + .html(bootstrap_icon?'':'') + .append(msg) + .hide().fadeIn().delay(2000).fadeOut() + ); + }; // ------------------------- GLOBAL definitions ------------------------- var gridsUrl = 'include/grids.php'; function deleteFormatter() { - return ""; } function refreshTable($table) { $table.bootstrapTable('refresh'); } - function onAjaxError (xhr, textStatus, error) { + function onAjaxError(xhr, textStatus, error) { console.error(error); - alert('Error: ' + textStatus); + printStatus('Error: ' + textStatus, 'danger', 'warning-sign'); } - function checkFormatter(value, row, index) { - return ''; - } + // Option E: toggle switch instead of raw checkbox + function toggleFormatter(value, row, index) { + return ''; + } - function LEDIndicatorFormatter(value, row, index) { - return '
    '; - } + // Option E: masked password + Reset button + function passFormatter(value, row) { + return '\u2022\u2022\u2022\u2022\u2022\u2022' + + ''; + } + + function LEDIndicatorFormatter(value, row, index) { + return '
    '; + } - function bytesStyle(value, row, index, field) { - if (value.includes("KB")===true){ + function bytesStyle(value, row, index, field) { + if (value.includes("KB") === true) { return { - classes: 'text-nowrap another-class', - css: {"background-color": "rgba(0, 100, 0, 0.3);"} + classes: 'text-nowrap another-class', + css: {"background-color": "rgba(0, 100, 0, 0.3);"} }; - } - else { + } else { return { classes: 'text-nowrap another-class', css: {"background-color": "rgba(100, 0, 0, 0.3);"} }; } - } + } + // Option E: highlight rows where end_date is in the past + function userRowStyle(row) { + if (row.user_end_date) { + var today = new Date().toISOString().split('T')[0]; + if (row.user_end_date < today) { + return { classes: 'user-expired' }; + } + } + return {}; + } // ------------------------- USERS definitions ------------------------- var $userTable = $('#table-users'); @@ -69,6 +90,7 @@ $(function () { }, success: function() { refreshTable($userTable); + loadStats(); }, error: onAjaxError }); @@ -84,6 +106,7 @@ $(function () { method: 'POST', success: function() { refreshTable($userTable); + loadStats(); }, error: onAjaxError }); @@ -96,11 +119,12 @@ $(function () { set_user: true, name: field, value: new_value, - pk : pk + pk: pk }, method: 'POST', success: function() { refreshTable($userTable); + loadStats(); }, error: onAjaxError }); @@ -110,30 +134,29 @@ $(function () { url: gridsUrl, params: function (params) { params.set_user = true; - return params; }, success: function () { refreshTable($userTable); } - } + }; function updateConfig(config_file, config_content) { $.ajax({ url: gridsUrl, data: { - update_config : true, + update_config: true, config_file: config_file, config_content: config_content }, - success : function(res){ - printStatus( - res.config_success?'Config Successfully updated!':'An error occured while trying to save the updated config.', - res.config_success?'success':'danger', - res.config_success?'ok':'warning-sign' - ); + success: function(res) { + printStatus( + res.config_success ? 'Config Successfully updated!' : 'An error occured while trying to save the updated config.', + res.config_success ? 'success' : 'danger', + res.config_success ? 'ok' : 'warning-sign' + ); }, - dataType : 'json', + dataType: 'json', method: 'POST', error: onAjaxError }); @@ -146,7 +169,6 @@ $(function () { console.warn('Your browser does not support Object.assign. You will not be able to modify the date inputs.'); } - // ------------------------- ADMIN definitions ------------------------- var $adminTable = $('#table-admins'); var $modalAdminAdd = $('#modal-admin-add'); @@ -187,50 +209,100 @@ $(function () { url: gridsUrl, params: function (params) { params.set_admin = true; - return params; }, success: function () { refreshTable($adminTable); } - } + }; - // ------------------------- ADMIN definitions ------------------------- + // ------------------------- LOGS definitions ------------------------- var $logTable = $('#table-logs'); + // ------------------------- DELETE CONFIRM MODAL (Option E) ------------------------- + var $confirmModal = $('#modal-confirm-delete'); + var pendingDeleteType = null; + var pendingDeleteId = null; + + function confirmDelete(type, id) { + pendingDeleteType = type; + pendingDeleteId = id; + $('#modal-confirm-delete-name').text(id); + $confirmModal.modal('show'); + } + + $('#modal-confirm-delete-ok').on('click', function() { + if (pendingDeleteType === 'user') { + deleteUser(pendingDeleteId); + } else if (pendingDeleteType === 'admin') { + deleteAdmin(pendingDeleteId); + } + $confirmModal.modal('hide'); + pendingDeleteType = null; + pendingDeleteId = null; + }); + + // ------------------------- RESET PASSWORD MODAL (Option E) ------------------------- + var $resetPassModal = $('#modal-reset-pass'); + + $(document).on('click', '.reset-pass-btn', function() { + var userId = $(this).data('user-id'); + $resetPassModal.data('user-id', userId).modal('show'); + $('#modal-reset-pass-input').val(''); + }); + + $('#modal-reset-pass-save').on('click', function() { + var userId = $resetPassModal.data('user-id'); + var newPass = $('#modal-reset-pass-input').val(); + if (newPass) { + genericSetField('user_pass', newPass, userId); + } + $resetPassModal.modal('hide'); + }); + + // ------------------------- STATS (Option B) ------------------------- + function loadStats() { + $.getJSON(gridsUrl, { select: 'stats' }, function(data) { + $('#stat-total-users').text(data.total_users); + $('#stat-online-now').text(data.online_now); + $('#stat-disabled').text(data.disabled); + $('#stat-log-entries').text(data.log_entries); + }); + } + + loadStats(); // -------------------- USERS -------------------- - // Bootstrap table definition $userTable.bootstrapTable({ url: gridsUrl, sortable: false, checkboxHeader: false, + rowStyle: userRowStyle, queryParams: function (params) { params.select = 'user'; return params; }, - // Primary key idField: 'user_id', columns: [ { title: "ID", field: "user_id", editable: userEditable }, - { title: "Pass", field: "user_pass", editable: userEditable }, + { title: "Pass", field: "user_pass", formatter: passFormatter }, { title: "Mail", field: "user_mail", editable: userEditable }, { title: "Phone", field: "user_phone", editable: userEditable }, { - title: "Online", - field: "user_online", - formatter : LEDIndicatorFormatter + title: "Online", + field: "user_online", + formatter: LEDIndicatorFormatter }, { - title: "Enabled", - field: "user_enable", - formatter : checkFormatter, - events: { - 'click input': function (e, value, row) { - genericSetField('user_enable', value === '1' ? '0': '1', row.user_id); - } - } + title: "Enabled", + field: "user_enable", + formatter: toggleFormatter, + events: { + 'change input': function (e, value, row) { + genericSetField('user_enable', e.target.checked ? '1' : '0', row.user_id); + } + } }, { title: "Start Date", field: "user_start_date", editable: userDateEditable }, { title: "End Date", field: "user_end_date", editable: userDateEditable }, @@ -240,16 +312,13 @@ $(function () { formatter: deleteFormatter, events: { 'click .glyphicon': function (e, value, row) { - if (confirm('Are you sure you want to delete this user?')) { - deleteUser(row.user_id); - } + confirmDelete('user', row.user_id); } } } ] }); - // When we want to add a user $userAddSave.on('click', function () { var $usernameInput = $modalUserAdd.find('input[name=username]'); var $passwordInput = $modalUserAdd.find('input[name=password]'); @@ -260,7 +329,6 @@ $(function () { // -------------------- ADMINS -------------------- - // Bootstrap table definition $adminTable.bootstrapTable({ url: gridsUrl, sortable: false, @@ -268,7 +336,6 @@ $(function () { params.select = 'admin'; return params; }, - // Primary key idField: 'admin_id', columns: [ { title: "ID", field: "admin_id", editable: adminEditable }, @@ -279,16 +346,13 @@ $(function () { formatter: deleteFormatter, events: { 'click .glyphicon': function (e, value, row) { - if (confirm('Are you sure you want to delete this admin?')) { - deleteAdmin(row.admin_id); - } + confirmDelete('admin', row.admin_id); } } } ] }); - // When we want to add a user $adminAddSave.on('click', function () { var $usernameInput = $modalAdminAdd.find('input[name=username]'); var $passwordInput = $modalAdminAdd.find('input[name=password]'); @@ -298,7 +362,6 @@ $(function () { // -------------------- LOGS -------------------- - // Bootstrap table definition $logTable.bootstrapTable({ url: gridsUrl, sortable: false, @@ -310,11 +373,9 @@ $(function () { }, columns: [ { title: "Log ID", field: "log_id", align: "center" }, - { title: "User ID", field: "user_id", filterControl : 'select', align: "center" }, - { title: "Client IP", field: "log_trusted_ip", filterControl : 'select', align: "center" }, - //{ title: "Trusted Port", field: "log_trusted_port", filterControl : 'select' }, - { title: "Local IP", field: "log_remote_ip", filterControl : 'select', align: "center" }, - //{ title: "Remote Port", field: "log_remote_port", filterControl : 'select' }, + { title: "User ID", field: "user_id", filterControl: 'select', align: "center" }, + { title: "Client IP", field: "log_trusted_ip", filterControl: 'select', align: "center" }, + { title: "Local IP", field: "log_remote_ip", filterControl: 'select', align: "center" }, { title: "Start Time", field: "log_start_time", align: "center" }, { title: "End Time", field: "log_end_time", align: "center" }, { title: "Received", field: "log_received", align: "center", cellStyle: bytesStyle }, @@ -322,12 +383,12 @@ $(function () { ] }); - // watch the config textareas for changes an persist them if a change was made - $('textarea').keyup(function(){ - $('#save-config-btn').removeClass('saved-success hidden').addClass('get-attention'); - }).change(function(){ - updateConfig($(this).data('config-file'), $(this).val()); - $('#save-config-btn').removeClass('get-attention').addClass('saved-success'); + // watch the config textareas for changes and persist them if a change was made + $('textarea').keyup(function() { + $('#save-config-btn').removeClass('saved-success hidden').addClass('get-attention'); + }).change(function() { + updateConfig($(this).data('config-file'), $(this).val()); + $('#save-config-btn').removeClass('get-attention').addClass('saved-success'); }); }); // doc ready end @@ -335,8 +396,6 @@ $(function () { // -------------------- HACKS -------------------- // Autofocus for bootstrap modals -// Thx http://stackoverflow.com/questions/14940423/autofocus-input-in-twitter-bootstrap-modal/33323836#33323836 - $(document).on('shown.bs.modal', '.modal', function() { $(this).find('[autofocus]').focus(); }); From d84c08daa43f33908f0f6b7bfd1d2c86f20e1c47 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 20 Feb 2026 22:28:47 +0000 Subject: [PATCH 212/255] feat: add Debian 11/12 support to install, uninstall, and online-install scripts - install.sh: add Debian to the OS guard, add a Debian package installation block (mariadb-server, php, php-mysql, php-zip, apache2, openvpn, net-tools), and extend the firewall-persistence case to Ubuntu|Debian so iptables rules are saved persistently on both distros - online-install.sh: add Debian to the OS guard - uninstall.sh: replace the hard-coded /etc/php/7.3 path with a dynamic php_version variable so the php.ini cleanup works on any PHP version (fixes breakage on Debian and Ubuntu 21+) - README.md: update prerequisites to list Debian 11/12 and add it to the Tests section https://claude.ai/code/session_01WZEZB3qbYnaXPXj3eB9P1j --- README.md | 6 +++--- install.sh | 11 ++++++++--- online-install.sh | 12 ++++++------ uninstall.sh | 3 ++- 4 files changed, 19 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 7fbd107..96d792e 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,7 @@ Administer OpenVPN Server with a web interface (Users Management, Logs, Visualiz ## Prerequisite - * Raspbian or Ubuntu 20 with Bash access or remote SSH - * Ubuntu 21.x.x is not supprted yet + * Raspbian, Ubuntu 20+, or Debian 11/12 with Bash access or remote SSH ## Installation @@ -28,8 +27,9 @@ Administer OpenVPN Server with a web interface (Users Management, Logs, Visualiz ## Tests -* Rasbian: Only tested on Raspberry Pi 3 with Raspbian Buster (No GUI). +* Raspbian: Only tested on Raspberry Pi 3 with Raspbian Buster (No GUI). * Ubuntu 20.04 LTS: Tested successfully +* Debian 11 (Bullseye) / 12 (Bookworm): Supported ## Usage diff --git a/install.sh b/install.sh index 1a1d153..4f0eb38 100755 --- a/install.sh +++ b/install.sh @@ -10,11 +10,11 @@ Green='\033[0;32m' # Green OS=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f1 -d " ") # Don't change this unless you know what you're doing OS_Version_Major=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f2 -d " " | cut -f1 -d ".") OS_Version_Minor=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f2 -d " " | cut -f2 -d ".") -if [ "$OS" == "Ubuntu" ] || [ "$OS" == "Raspbian" ]; +if [ "$OS" == "Ubuntu" ] || [ "$OS" == "Raspbian" ] || [ "$OS" == "Debian" ]; then : else - echo -e "${Red}Oops! Only Ubuntu and Raspbian OS are supported.${NC}" + echo -e "${Red}Oops! Only Ubuntu, Raspbian and Debian OS are supported.${NC}" exit fi @@ -136,6 +136,11 @@ case $OS in Raspbian) apt install -y openvpn apache2 mariadb-server php php-mysql php-zip unzip git wget sed curl nodejs npm mc ;; + Debian) + export DEBIAN_FRONTEND=noninteractive + apt-get update -q + apt-get install -y -q openvpn apache2 mariadb-server php php-mysql php-zip unzip git wget sed curl nodejs npm mc net-tools + ;; *) echo -e "${Red}Can't detect OS distribution! you need to install prerequisites manully${NC}" exit @@ -282,7 +287,7 @@ iptables -t nat -A POSTROUTING -s 10.8.0.2/24 -o $primary_nic -j MASQUERADE # Make ip forwading and make it persistent case $OS in - Ubuntu) + Ubuntu|Debian) sysctl -w net.ipv4.ip_forward=1 sed -i "s/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/" "/etc/sysctl.conf" iptables-save -f ./rules.v4 diff --git a/online-install.sh b/online-install.sh index 093d64d..4ac877d 100644 --- a/online-install.sh +++ b/online-install.sh @@ -8,11 +8,11 @@ echo '.------------------------------------------------------------------------- echo '||Es| |F1 |F2 |F3 |F4 |F5 | |F6 |F7 |F8 |F9 |F10| C= AMIGA |' echo '||__| |___|___|___|___|___| |___|___|___|___|___| |' echo '| _____________________________________________ ________ ___________ |' -echo '||~ |! |" | |$ |% |& |/ |( |) |= |? |` || |<-| |Del|Help| |{ |} |/ |* | |' -echo '||`__|1_|2_|3_|4_|5_|6_|7_|8_|9_|0_|_|_|\_|__| |___|____| |[ |]_|__|__| |' -echo '||<- |Q |W |E |R |T |Z |U |I |O |P | |* | || |7 |8 |9 |- | |' +echo '||~ |! |" |� |$ |% |& |/ |( |) |= |? |` || |<-| |Del|Help| |{ |} |/ |* | |' +echo '||`__|1_|2_|3_|4_|5_|6_|7_|8_|9_|0_|�_|�_|\_|__| |___|____| |[ |]_|__|__| |' +echo '||<- |Q |W |E |R |T |Z |U |I |O |P |� |* | || |7 |8 |9 |- | |' echo '||->__|__|__|__|__|__|__|__|__|__|__|__|+_|_ || |__|__|__|__| |' -echo "||Ctr|oC|A |S |D |F |G |H |J |K |L | | |^ |<'| |4 |5 |6 |+ | |" +echo "||Ctr|oC|A |S |D |F |G |H |J |K |L |� |� |^ |<'| |4 |5 |6 |+ | |" echo '||___|_L|__|__|__|__|__|__|__|__|__|__|__|#_|__| __ |__|__|__|__| |' echo '||^ |> |Y |X |C |V |B |N |M |; |: |_ |^ | |A | |1 |2 |3 |E | |' echo '||_____|<_|__|__|__|__|__|__|__|,_|._|-_|______| __||_|__ |__|__|__|n | |' @@ -25,11 +25,11 @@ echo OS=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f1 -d " ") # Don't change this unless you know what you're doing -if [ "$OS" == "Ubuntu" ] || [ "$OS" == "Raspbian" ]; +if [ "$OS" == "Ubuntu" ] || [ "$OS" == "Raspbian" ] || [ "$OS" == "Debian" ]; then : else - echo -e "${Red}Oops! Only Ubuntu and Raspbian OS are supported.${NC}" + echo -e "${Red}Oops! Only Ubuntu, Raspbian and Debian OS are supported.${NC}" exit fi sudo sed -i 's/#$nrconf{restart} = '"'"'i'"'"';/$nrconf{restart} = '"'"'a'"'"';/g' /etc/needrestart/needrestart.conf diff --git a/uninstall.sh b/uninstall.sh index 71a7cee..faf8795 100755 --- a/uninstall.sh +++ b/uninstall.sh @@ -74,5 +74,6 @@ a2dissite openvpn a2ensite 000-default systemctl restart apache2 -sed -i "/added by openvpn-admin/d" /etc/php/7.3/apache2/php.ini +php_version=$(php -v | head -n1 | cut -f2 -d\ | cut -f1,2 -d.) +sed -i "/added by openvpn-admin/d" /etc/php/$php_version/apache2/php.ini echo "The application has been completely removed!" From 189412f6c4af7a4f8c7e88b067367d6a52b243ab Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 20 Feb 2026 22:51:04 +0000 Subject: [PATCH 213/255] fix: use ID field from /etc/os-release for reliable OS detection Parsing PRETTY_NAME with cut/sed is fragile and can silently produce the wrong value depending on locale, distro variant, or whitespace differences (e.g. Debian's PRETTY_NAME is "Debian GNU/Linux 12 (bookworm)" which requires a different word position than Ubuntu's). Switch both install.sh and online-install.sh to source /etc/os-release directly and read the standardised ID field (guaranteed lowercase, no spaces), then title-case it with awk to preserve the existing case statements (Ubuntu, Raspbian, Debian). Also switch OS_Version_Major/Minor to use VERSION_ID instead of carving up PRETTY_NAME. https://claude.ai/code/session_01WZEZB3qbYnaXPXj3eB9P1j --- install.sh | 8 +++++--- online-install.sh | 3 ++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/install.sh b/install.sh index 4f0eb38..ecf98a9 100755 --- a/install.sh +++ b/install.sh @@ -7,9 +7,11 @@ Yellow='\033[0;33m' # Yellow Green='\033[0;32m' # Green ### Variables -OS=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f1 -d " ") # Don't change this unless you know what you're doing -OS_Version_Major=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f2 -d " " | cut -f1 -d ".") -OS_Version_Minor=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f2 -d " " | cut -f2 -d ".") +# Source /etc/os-release to use the standardized ID field (more reliable than parsing PRETTY_NAME) +. /etc/os-release +OS=$(echo "$ID" | awk '{print toupper(substr($0,1,1)) substr($0,2)}') # e.g. debian -> Debian +OS_Version_Major=$(echo "${VERSION_ID:-0}" | cut -d. -f1) +OS_Version_Minor=$(echo "${VERSION_ID:-0}" | cut -d. -f2) if [ "$OS" == "Ubuntu" ] || [ "$OS" == "Raspbian" ] || [ "$OS" == "Debian" ]; then : diff --git a/online-install.sh b/online-install.sh index 4ac877d..f6c766c 100644 --- a/online-install.sh +++ b/online-install.sh @@ -24,7 +24,8 @@ echo echo -OS=$(cat /etc/os-release | grep PRETTY_NAME | sed 's/"//g' | cut -f2 -d= | cut -f1 -d " ") # Don't change this unless you know what you're doing +. /etc/os-release +OS=$(echo "$ID" | awk '{print toupper(substr($0,1,1)) substr($0,2)}') # e.g. debian -> Debian if [ "$OS" == "Ubuntu" ] || [ "$OS" == "Raspbian" ] || [ "$OS" == "Debian" ]; then : From 1b193b7a37bd207aee3247f56e6684b73a8a05f2 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 21 Feb 2026 00:15:09 +0000 Subject: [PATCH 214/255] fix: point clone URLs to fork (ringmor) instead of upstream (arvage) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit online-install.sh was cloning https://github.com/arvage/OpenVPN-Admin, causing all changes in this fork to be silently discarded — users ended up with the old unpatched code every time. Update the clone URL to ringmor/OpenVPN-Admin so the Debian-compatible install.sh is actually used. Update README.md Method 1 (wget) and Method 2 (git clone) URLs to match. https://claude.ai/code/session_01WZEZB3qbYnaXPXj3eB9P1j --- README.md | 8 ++++---- online-install.sh | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 96d792e..62362ef 100644 --- a/README.md +++ b/README.md @@ -11,15 +11,15 @@ Administer OpenVPN Server with a web interface (Users Management, Logs, Visualiz ## Installation * Method 1 (Automatic): - - wget -O - https://raw.githubusercontent.com/arvage/OpenVPN-Admin/master/online-install.sh | bash - + + wget -O - https://raw.githubusercontent.com/ringmor/OpenVPN-Admin/master/online-install.sh | bash + * Method 2 (Manual): sudo apt update sudo apt install -y git cd ~ - git clone https://github.com/arvage/OpenVPN-Admin openvpn-admin + git clone https://github.com/ringmor/OpenVPN-Admin openvpn-admin cd openvpn-admin sudo ./install.sh /var/www www-data www-data diff --git a/online-install.sh b/online-install.sh index f6c766c..8f0a505 100644 --- a/online-install.sh +++ b/online-install.sh @@ -40,7 +40,7 @@ DEBIAN_FRONTEND=noninteractive sudo apt-get update && sudo apt-get upgrade -y -q DEBIAN_FRONTEND=noninteractive sudo apt-get install -y git mc cd ~ echo -e "${Red}" -git clone https://github.com/arvage/OpenVPN-Admin openvpn-admin +git clone https://github.com/ringmor/OpenVPN-Admin openvpn-admin echo -e "${NC}" cd openvpn-admin chmod +x ./install.sh From dea45fb07b2e5a7eb666e84afffdc16f4e8bbbc6 Mon Sep 17 00:00:00 2001 From: ringmor Date: Sun, 22 Feb 2026 22:22:54 +0000 Subject: [PATCH 215/255] feat: URL-based admin pages, unified login, and admin user management - Replace JS tab navigation with server-side ?page= routing so pages survive browser refresh - Unify login and config download into a single page - Add mail, phone, and enable fields to admin table (matching user UX) - Mask admin passwords with reset button instead of raw hash display - Aggregate logs per user with session count and totals - Auto-refresh stats and user table every 5 seconds - Update installation configs with server IP and keepalive settings Co-Authored-By: Claude Opus 4.6 --- include/grids.php | 115 +++++++++--------- include/html/grids.php | 31 +---- index.php | 42 +++---- .../client-conf/gnu-linux/client.ovpn | 2 +- .../client-conf/osx-viscosity/client.ovpn | 2 +- installation/client-conf/windows/client.ovpn | 2 +- installation/server.conf | 4 +- js/grids.js | 72 +++++++++-- 8 files changed, 150 insertions(+), 120 deletions(-) diff --git a/include/grids.php b/include/grids.php index 9ab559b..54d6159 100644 --- a/include/grids.php +++ b/include/grids.php @@ -37,71 +37,58 @@ } } - // Select the logs + // Select the logs (aggregated per user) else if($_GET['select'] == "log" && isset($_GET['offset'], $_GET['limit'])){ $offset = intval($_GET['offset']); $limit = intval($_GET['limit']); - // Creation of the LIMIT for build different pages $page = "LIMIT $offset, $limit"; - // ... filtering by the bootstrap table plugin - $filter = isset($_GET['filter']) ? json_decode($_GET['filter'],true) : []; // this is passed by the bootstrap table filter plugin (if a filter was chosen by the user): these are the concrete set filters with their value - $where = !empty($filter)?'WHERE TRUE':''; - $allowed_query_filters = ['user_id', 'log_trusted_ip','log_trusted_port','log_remote_ip','log_remote_port']; // these are valid filters that could be used (defined here for sql security reason) - $query_filters_existing = []; - foreach($filter as $unsanitized_filter_key => $unsanitized_filter_val) { - if(in_array($unsanitized_filter_key, $allowed_query_filters)) { // if this condition does not match: ignore it, because this parameter should not be passed - // if $unsanitized_filter_key is in array $allowed_query_filters its a valid key and can not be harmful, so it can be considered sanitized - $where .= " AND $unsanitized_filter_key = ?"; - $query_filters_existing[] = $unsanitized_filter_key; - } - } - - // Select the logs - $req_string = "SELECT *, (SELECT COUNT(*) FROM log $where) AS nb FROM log $where ORDER BY log_id DESC $page"; + // Count total users with logs + $count_req = $bdd->query("SELECT COUNT(DISTINCT user_id) FROM log"); + $nb = $count_req->fetchColumn(); + + // Aggregate logs per user: total received, total sent, session count, last connection + $req_string = "SELECT user_id, + COUNT(*) AS sessions, + SUM(log_received) AS total_received, + SUM(log_send) AS total_sent, + MAX(log_start_time) AS last_connected + FROM log GROUP BY user_id ORDER BY last_connected DESC $page"; $req = $bdd->prepare($req_string); - - // dynamically bind the params - foreach(array_merge($query_filters_existing,$query_filters_existing) as $i => $query_filter) // array_merge -> duplicated the array contents; this is needed because our where clause is bound two times (in subquery + the outer query) - $req->bindValue($i+1, $filter[$query_filter]); - $req->execute(); $list = array(); - $data = $req->fetch(); - - if($data) { - $nb = $data['nb']; - - do { - // Better in Kb or Mb - $received = ($data['log_received'] > 1000000) ? floor($data['log_received']/1000000) . " MB" : floor($data['log_received']/1000) . " KB"; - $sent = ($data['log_send'] > 1000000) ? floor($data['log_send']/1000000) . " MB" : floor($data['log_send']/1000) . " KB"; - - // We add to the array the new line of logs - array_push($list, array( - "log_id" => $data['log_id'], - "user_id" => $data['user_id'], - "log_trusted_ip" => $data['log_trusted_ip'], - "log_trusted_port" => $data['log_trusted_port'], - "log_remote_ip" => $data['log_remote_ip'], - "log_remote_port" => $data['log_remote_port'], - "log_start_time" => $data['log_start_time'], - "log_end_time" => $data['log_end_time'], - "log_received" => $received, - "log_send" => $sent)); - - } while ($data = $req->fetch()); - } - else { - $nb = 0; + while($data = $req->fetch()) { + $received = $data['total_received']; + $sent = $data['total_sent']; + + if ($received > 1000000000) { + $received = round($received/1000000000, 1) . " GB"; + } else if ($received > 1000000) { + $received = floor($received/1000000) . " MB"; + } else { + $received = floor($received/1000) . " KB"; + } + + if ($sent > 1000000000) { + $sent = round($sent/1000000000, 1) . " GB"; + } else if ($sent > 1000000) { + $sent = floor($sent/1000000) . " MB"; + } else { + $sent = floor($sent/1000) . " KB"; + } + + array_push($list, array( + "user_id" => $data['user_id'], + "sessions" => $data['sessions'], + "total_received" => $received, + "total_sent" => $sent, + "last_connected" => $data['last_connected'])); } - // We finally print the result $result = array('total' => intval($nb), 'rows' => $list); - echo json_encode($result); } @@ -114,7 +101,10 @@ do{ $list[] = array( "admin_id" => $data['admin_id'], - "admin_pass" => $data['admin_pass'] + "admin_pass" => $data['admin_pass'], + "admin_mail" => $data['admin_mail'], + "admin_phone" => $data['admin_phone'], + "admin_enable" => $data['admin_enable'] ); } while($data = $req->fetch()); @@ -203,13 +193,28 @@ // ---------------- ADD ADMIN ---------------- else if(isset($_POST['add_admin'], $_POST['admin_id'], $_POST['admin_pass'])){ - $req = $bdd->prepare('INSERT INTO admin(admin_id, admin_pass) VALUES (?, ?)'); - $req->execute(array($_POST['admin_id'], hashPass($_POST['admin_pass']))); + $id = $_POST['admin_id']; + $pass = hashPass($_POST['admin_pass']); + $mail = ""; + $phone = ""; + $enable = 1; + + $req = $bdd->prepare('INSERT INTO admin (admin_id, admin_pass, admin_mail, admin_phone, admin_enable) VALUES (?, ?, ?, ?, ?)'); + $req->execute(array($id, $pass, $mail, $phone, $enable)); + + $res = array("admin_id" => $id, + "admin_pass" => $pass, + "admin_mail" => $mail, + "admin_phone" => $phone, + "admin_enable" => $enable + ); + + echo json_encode($res); } // ---------------- UPDATE ADMIN ---------------- else if(isset($_POST['set_admin'])){ - $valid = array("admin_id", "admin_pass"); + $valid = array("admin_id", "admin_pass", "admin_mail", "admin_phone", "admin_enable"); $field = $_POST['name']; $value = $_POST['value']; diff --git a/include/html/grids.php b/include/html/grids.php index 9def483..67ab8a0 100644 --- a/include/html/grids.php +++ b/include/html/grids.php @@ -50,7 +50,7 @@ function getHistory($cfg_file, $accordion_id, $open_first_history_tab = false) {
    -
  • OpenVPN logs