Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New Script: 2FAuth #943

Merged
merged 28 commits into from
Dec 26, 2024
Merged
Show file tree
Hide file tree
Changes from 19 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
4840a44
feat(2fauth): :sparkles: Added 2FAuth
jkrgr0 Dec 20, 2024
3092ea3
refactor: :truck: Changed path to user repo
jkrgr0 Dec 20, 2024
70e65f2
refactor: :truck: Changed path to user repo
jkrgr0 Dec 20, 2024
38aa6ad
refactor: :truck: Changed path to user repo
jkrgr0 Dec 20, 2024
d3888b9
refactor: :truck: Changed path to user repo
jkrgr0 Dec 20, 2024
dee09ff
refactor: :truck: Changed path to user repo
jkrgr0 Dec 20, 2024
c3315cb
fix(2fauth): :bug: Fixed path to build functions file
jkrgr0 Dec 20, 2024
b373486
fix(2fauth): :bug: Fixed unbound variable
jkrgr0 Dec 20, 2024
80258a7
fix(2fauth): :bug: Use instead of for the directory name
jkrgr0 Dec 20, 2024
32ab5a7
chore(2fauth): :sparkles: Added dependency package for improved comp…
jkrgr0 Dec 20, 2024
dede65d
chore(2fauth): :sparkles: Added dependency package as it's required
jkrgr0 Dec 20, 2024
b80e1ca
chore(2fauth): :sparkles: Added dependency package `php8.2-fpm` as it…
jkrgr0 Dec 20, 2024
a280194
fix(2fauth): :bug: Fixed unbound variable
jkrgr0 Dec 20, 2024
166a4e3
fix(2fauth): :bug: Fixed installation
jkrgr0 Dec 20, 2024
dd84fa3
fix(install): :bug: Fixed unassigned variable
jkrgr0 Dec 20, 2024
600c731
fix(install): :bug: Fixed installation
jkrgr0 Dec 20, 2024
fa13b07
fix(install): :bug: explicitly set ownership as last step
jkrgr0 Dec 20, 2024
fa5433f
revert: :rewind: Revert path rewrite to user repo
jkrgr0 Dec 20, 2024
76f7efa
revert: :rewind: Revert path rewrite to user repo
jkrgr0 Dec 20, 2024
9da7dd4
refactor(2fauth): :coffin: Removed commented-out code
jkrgr0 Dec 23, 2024
9a7c596
fix(2fauth): :truck: Fixed path to remove correctly
jkrgr0 Dec 23, 2024
291fe8f
refactor(2fauth): :art: Changed from variables to static as requested
jkrgr0 Dec 23, 2024
5b95ff8
docs(2fauth): :memo: Added notes for db credentials and the first acc…
jkrgr0 Dec 23, 2024
16a7377
fix(2fauth): :loud_sound: Updated progress logging
jkrgr0 Dec 23, 2024
cb92223
test(2fauth): :truck: Changed pathes temporarily to user repo to test…
jkrgr0 Dec 23, 2024
e77cc6a
fix(2fauth): :ambulance: Fixed wrong version file in update_script
jkrgr0 Dec 23, 2024
1270071
fix(2fauth): :lipstick: Removed duplicated version prefix v in messages
jkrgr0 Dec 23, 2024
efa9f17
Revert 'test(2fauth): 🚚 Changed pathes temporarily to user repo to te…
jkrgr0 Dec 23, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
93 changes: 93 additions & 0 deletions ct/2fauth.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 community-scripts ORG
# Author: jkrgr0
# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://docs.2fauth.app/

# App Default Values
APP="2FAuth"
TAGS="2fa;authenticator"
var_cpu="1"
var_ram="512"
var_disk="2"
var_os="debian"
var_version="12"
var_unprivileged="1"

# App Output & Base Settings
header_info "$APP"
base_settings

# Core
variables
color
catch_errors

function update_script() {
header_info
check_container_storage
check_container_resources

# Check if installation is present | -f for file, -d for folder
if [[ ! -d "/opt/2fauth" ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi

# Crawling the new version and checking whether an update is required
RELEASE=$(curl -s https://api.github.com/repos/Bubka/2FAuth/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
jkrgr0 marked this conversation as resolved.
Show resolved Hide resolved
msg_info "Updating $APP"
jkrgr0 marked this conversation as resolved.
Show resolved Hide resolved

apt-get update &>/dev/null
apt-get -y upgrade &>/dev/null

# Creating Backup
msg_info "Creating Backup"
mv "/opt/2fauth" "/opt/2fauth-backup"
# tar -czf "/opt/2fauth_backup_$(date +%F).tar.gz" "/opt/2fauth"
jkrgr0 marked this conversation as resolved.
Show resolved Hide resolved
msg_ok "Backup Created"

# Execute Update
msg_info "Updating $APP to v${RELEASE}"
wget -q "https://github.com/Bubka/2FAuth/archive/refs/tags/${RELEASE}.zip"
unzip -q "${RELEASE}.zip"
mv "${APPLICATION}-${RELEASE//v}/" "/opt/${APPLICATION}"
mv "/opt/2fauth-backup/.env" "/opt/2fauth/.env"
mv "/opt/2fauth-backup/storage" "/opt/2fauth/storage"
cd "/opt/2fauth" || return

chown -R www-data: "/opt/2fauth"
chmod -R 755 "/opt/2fauth"

export COMPOSER_ALLOW_SUPERUSER=1
composer install --no-dev --prefer-source &>/dev/null

php artisan 2fauth:install
msg_ok "Updated $APP to v${RELEASE}"

# Cleaning up
msg_info "Cleaning Up"
rm -rf "/opt/v${RELEASE}.zip"
jkrgr0 marked this conversation as resolved.
Show resolved Hide resolved
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleanup Completed"

# Last Action
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Update Successful"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}"
fi
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:80${CL}"
123 changes: 123 additions & 0 deletions install/2fauth-install.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
#!/usr/bin/env bash

# Copyright (c) 2021-2024 community-scripts ORG
# Author: jkrgr0
# License: MIT
# Source: https://docs.2fauth.app/

# Import Functions und Setup
source /dev/stdin <<< "$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os

# Installing Dependencies with the 3 core dependencies (curl;sudo;mc)
msg_info "Installing Dependencies"
$STD apt-get install -y \
curl \
sudo \
mc \
nginx \
composer \
php8.2-{bcmath,common,ctype,curl,fileinfo,fpm,gd,mbstring,mysql,xml,cli} \
mariadb-server
msg_ok "Installed Dependencies"

# Template: MySQL Database
msg_info "Setting up Database"
DB_NAME=2fauth_db
DB_USER=2fauth
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
$STD mysql -u root -e "CREATE DATABASE $DB_NAME;"
$STD mysql -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED WITH mysql_native_password AS PASSWORD('$DB_PASS');"
$STD mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
{
echo "${APPLICATION} Credentials"
jkrgr0 marked this conversation as resolved.
Show resolved Hide resolved
echo "Database User: $DB_USER"
echo "Database Password: $DB_PASS"
echo "Database Name: $DB_NAME"
} >> ~/${APPLICATION}.creds
jkrgr0 marked this conversation as resolved.
Show resolved Hide resolved
msg_ok "Set up Database"

# Setup App
msg_info "Setup ${APPLICATION}"
jkrgr0 marked this conversation as resolved.
Show resolved Hide resolved
RELEASE=$(curl -s https://api.github.com/repos/Bubka/2FAuth/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
wget -q "https://github.com/Bubka/2FAuth/archive/refs/tags/${RELEASE}.zip"
unzip -q "${RELEASE}.zip"
mv "${APPLICATION}-${RELEASE//v}/" /opt/2fauth

cd "/opt/2fauth" || return
cp .env.example .env
IPADDRESS=$(hostname -I | awk '{print $1}')

sed -i -e "s|^APP_URL=.*|APP_URL=http://$IPADDRESS|" \
-e "s|^DB_CONNECTION=$|DB_CONNECTION=mysql|" \
-e "s|^DB_DATABASE=$|DB_DATABASE=$DB_NAME|" \
-e "s|^DB_HOST=$|DB_HOST=127.0.0.1|" \
-e "s|^DB_PORT=$|DB_PORT=3306|" \
-e "s|^DB_USERNAME=$|DB_USERNAME=$DB_USER|" \
-e "s|^DB_PASSWORD=$|DB_PASSWORD=$DB_PASS|" .env

export COMPOSER_ALLOW_SUPERUSER=1
$STD composer update --no-plugins --no-scripts
$STD composer install --no-dev --prefer-source --no-plugins --no-scripts

$STD php artisan key:generate --force

$STD php artisan migrate:refresh
$STD php artisan passport:install -q -n
$STD php artisan storage:link
$STD php artisan config:cache

chown -R www-data: /opt/2fauth
chmod -R 755 /opt/2fauth

echo "${RELEASE}" >"/opt/${app}_version.txt"
msg_ok "Setup ${app}"
jkrgr0 marked this conversation as resolved.
Show resolved Hide resolved

# Configure Service (NGINX)
msg_info "Configure Service"
cat <<EOF >/etc/nginx/conf.d/2fauth.conf
server {
listen 80;
root /opt/2fauth/public;
server_name $IPADDRESS;
index index.php;
charset utf-8;

location / {
try_files \$uri \$uri/ /index.php?\$query_string;
}

location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }

error_page 404 /index.php;

location ~ \.php\$ {
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME \$realpath_root\$fastcgi_script_name;
include fastcgi_params;
}

location ~ /\.(?!well-known).* {
deny all;
}
}
EOF

systemctl reload nginx
msg_ok "Configured Service"

motd_ssh
customize

# Cleanup
msg_info "Cleaning up"
rm -f "/opt/v${RELEASE}.zip"
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"
34 changes: 34 additions & 0 deletions json/2fauth.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
{
"name": "2FAuth",
"slug": "2fauth",
"categories": [
0
],
"date_created": "2024-12-20",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 80,
"documentation": null,
"website": "https://docs.2fauth.app/",
"logo": "https://raw.githubusercontent.com/Bubka/2FAuth/refs/heads/master/public/logo.svg",
"description": "2FAuth is a web based self-hosted alternative to One Time Passcode (OTP) generators like Google Authenticator, designed for both mobile and desktop. It aims to ease you perform your 2FA authentication steps whatever the device you handle, with a clean and suitable interface.",
"install_methods": [
{
"type": "default",
"script": "ct/2fauth.sh",
"resources": {
"cpu": 1,
"ram": 512,
"hdd": 2,
"os": "Debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}
Loading