mirror of
https://github.com/nsacyber/HIRS.git
synced 2024-12-18 20:47:58 +00:00
moved connector uri to application.properties
This commit is contained in:
parent
37cbb78e3e
commit
5c31e52828
@ -73,6 +73,15 @@ ospackage {
|
|||||||
addParentDirs = true
|
addParentDirs = true
|
||||||
createDirectoryEntry true
|
createDirectoryEntry true
|
||||||
|
|
||||||
|
// copy json tables
|
||||||
|
into ('/etc/hirs/aca/default-properties') {
|
||||||
|
from '../HIRS_AttestationCA/src/main/resources/component-class.json'
|
||||||
|
from '../HIRS_AttestationCA/src/main/resources/vendor-table.json'
|
||||||
|
}
|
||||||
|
// copy springboot property file
|
||||||
|
into ('/etc/hirs/aca/') {
|
||||||
|
from '../HIRS_AttestationCAPortal/src/main/resources/application.properties'
|
||||||
|
}
|
||||||
// copy setup scripts to /opt/hirs/aca
|
// copy setup scripts to /opt/hirs/aca
|
||||||
into ('/opt/hirs/aca/scripts/') {
|
into ('/opt/hirs/aca/scripts/') {
|
||||||
from '../package/scripts/'
|
from '../package/scripts/'
|
||||||
@ -89,11 +98,13 @@ ospackage {
|
|||||||
// add chrontab to run ACA at boot
|
// add chrontab to run ACA at boot
|
||||||
postInstall 'echo "@reboot root /opt/hirs/aca/scripts/aca/aca_bootRun.sh -w" >> /etc/crontab'
|
postInstall 'echo "@reboot root /opt/hirs/aca/scripts/aca/aca_bootRun.sh -w" >> /etc/crontab'
|
||||||
// run ACA after install
|
// run ACA after install
|
||||||
postInstall '/opt/hirs/aca/scripts/aca/aca_bootRun.sh -w'
|
postInstall '/opt/hirs/aca/scripts/aca/aca_bootRun.sh -w &'
|
||||||
postInstall 'chmod +x /opt/hirs/aca/scripts/aca/*'
|
postInstall 'chmod +x /opt/hirs/aca/scripts/aca/*'
|
||||||
|
postInstall 'sh /opt/hirs/aca/scripts/aca/check_for_aca.sh'
|
||||||
|
|
||||||
// Uninstall
|
// Uninstall
|
||||||
preUninstall 'sh /opt/hirs/aca/scripts/aca/aca_remove_setup.sh'
|
preUninstall 'sh /opt/hirs/aca/scripts/aca/aca_remove_setup.sh'
|
||||||
|
postUninstall 'rm -rf /etc/hirs'
|
||||||
|
|
||||||
buildRpm {
|
buildRpm {
|
||||||
arch = X86_64
|
arch = X86_64
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#hibernate.connection.url=jdbc:mariadb://localhost:3306/hirs_db?autoReconnect=true&useSSL=false
|
hibernate.connection.url=jdbc:mariadb://localhost:3306/hirs_db?autoReconnect=true&sslMode=DISABLED
|
||||||
#hibernate.connection.username=hirs_db
|
#hibernate.connection.username=hirs_db
|
||||||
#hibernate.connection.password=hirs_db
|
#hibernate.connection.password=hirs_db
|
||||||
hibernate.connection.driver_class=org.mariadb.jdbc.Driver
|
hibernate.connection.driver_class=org.mariadb.jdbc.Driver
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
#
|
#
|
||||||
#####################################################################################
|
#####################################################################################
|
||||||
|
|
||||||
CONFIG_FILE="/etc/hirs/aca/application.properties"
|
SPRING_PROP_FILE="/etc/hirs/aca/application.properties"
|
||||||
ALG=RSA
|
ALG=RSA
|
||||||
RSA_PATH=rsa_3k_sha384_certs
|
RSA_PATH=rsa_3k_sha384_certs
|
||||||
ECC_PATH=ecc_512_sha384_certs
|
ECC_PATH=ecc_512_sha384_certs
|
||||||
@ -108,7 +108,7 @@ source /etc/hirs/aca/aca.properties;
|
|||||||
|
|
||||||
# Run the embedded tomcat server with Web TLS enabled and database client TLS enabled by overrding critical parameters
|
# Run the embedded tomcat server with Web TLS enabled and database client TLS enabled by overrding critical parameters
|
||||||
# Note "&" is a sub parameter continuation, space represents a new parameter. Spaces and quotes matter.
|
# Note "&" is a sub parameter continuation, space represents a new parameter. Spaces and quotes matter.
|
||||||
# hibernate.connection.url is used for the DB connector which established DB TLS connectivity
|
# hibernate.connection.url is used fo r the DB connector which established DB TLS connectivity
|
||||||
# server.ssl arguments support the embeded tomcats use of TLS for the ACA Portal
|
# server.ssl arguments support the embeded tomcats use of TLS for the ACA Portal
|
||||||
CONNECTOR_PARAMS="--hibernate.connection.url=jdbc:mariadb://localhost:3306/hirs_db?autoReconnect=true&\
|
CONNECTOR_PARAMS="--hibernate.connection.url=jdbc:mariadb://localhost:3306/hirs_db?autoReconnect=true&\
|
||||||
user=$hirs_db_username&\
|
user=$hirs_db_username&\
|
||||||
@ -127,8 +127,10 @@ WEB_TLS_PARAMS="--server.ssl.key-store-password=$hirs_pki_password \
|
|||||||
|
|
||||||
if [ -z "$USE_WAR" ]; then
|
if [ -z "$USE_WAR" ]; then
|
||||||
echo "Booting the ACA from local build..."
|
echo "Booting the ACA from local build..."
|
||||||
./gradlew bootRun --args="$CONNECTOR_PARAMS$WEB_TLS_PARAMS"
|
# ./gradlew bootRun --args="$CONNECTOR_PARAMS$WEB_TLS_PARAMS"
|
||||||
|
./gradlew bootRun --args="--spring.config.location=$SPRING_PROP_FILE"
|
||||||
else
|
else
|
||||||
echo "Booting the ACA from a war file..."
|
echo "Booting the ACA from a war file..."
|
||||||
java -jar $WAR_PATH $CONNECTOR_PARAMS$WEB_TLS_PARAMS &
|
# java -jar $WAR_PATH $CONNECTOR_PARAMS$WEB_TLS_PARAMS &
|
||||||
|
java -jar $WAR_PATH --spring.config.location=$SPRING_PROP_FILE
|
||||||
fi
|
fi
|
||||||
|
@ -25,9 +25,11 @@ pushd $SCRIPT_DIR/../db/ &>/dev/null
|
|||||||
sh db_drop.sh $DB_ADMIN_PWD
|
sh db_drop.sh $DB_ADMIN_PWD
|
||||||
popd &>/dev/null
|
popd &>/dev/null
|
||||||
|
|
||||||
# remove pki files and config files
|
# remove pki files and config files if not installed by rpm
|
||||||
echo "Removing certificates and config files..."
|
echo "Removing certificates and config files..."
|
||||||
rm -rf /etc/hirs
|
if [ ! -d /opt/hirs/aca ]; then
|
||||||
|
rm -rf /etc/hirs
|
||||||
|
fi
|
||||||
|
|
||||||
# Remove crontab and current ACA process
|
# Remove crontab and current ACA process
|
||||||
echo "Removing the ACA crontab"
|
echo "Removing the ACA crontab"
|
||||||
|
@ -1,12 +1,20 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
#####################################################################################
|
||||||
|
#
|
||||||
|
# Script to create ACA setup files and configure the hirs_db database.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#####################################################################################
|
||||||
# Capture location of the script to allow from invocation from any location
|
# Capture location of the script to allow from invocation from any location
|
||||||
SCRIPT_DIR=$( dirname -- "$( readlink -f -- "$0"; )"; )
|
SCRIPT_DIR=$( dirname -- "$( readlink -f -- "$0"; )"; )
|
||||||
HIRS_CONF_DIR=/etc/hirs/aca
|
HIRS_CONF_DIR=/etc/hirs/aca
|
||||||
LOG_FILE_NAME="hirs_aca_install_"$(date +%Y-%m-%d).log
|
LOG_FILE_NAME="hirs_aca_install_"$(date +%Y-%m-%d).log
|
||||||
LOG_DIR="/var/log/hirs/"
|
LOG_DIR="/var/log/hirs/"
|
||||||
LOG_FILE="$LOG_DIR$LOG_FILE_NAME"
|
LOG_FILE="$LOG_DIR$LOG_FILE_NAME"
|
||||||
HIRS_PROP_DIR="/opt/hirs/default-properties"
|
|
||||||
HIRS_JSON_DIR="/etc/hirs/aca/default-properties"
|
HIRS_JSON_DIR="/etc/hirs/aca/default-properties"
|
||||||
|
ACA_PROP_FILE="/etc/hirs/aca/aca.properties"
|
||||||
|
SPRING_PROP_FILE="/etc/hirs/aca/application.properties"
|
||||||
|
PROP_FILE='../../../HIRS_AttestationCAPortal/src/main/resources/application.properties'
|
||||||
COMP_JSON='../../../HIRS_AttestationCA/src/main/resources/component-class.json'
|
COMP_JSON='../../../HIRS_AttestationCA/src/main/resources/component-class.json'
|
||||||
VENDOR_TABLE='../../../HIRS_AttestationCA/src/main/resources/vendor-table.json'
|
VENDOR_TABLE='../../../HIRS_AttestationCA/src/main/resources/vendor-table.json'
|
||||||
|
|
||||||
@ -58,10 +66,16 @@ done
|
|||||||
|
|
||||||
set -- "${POSITIONAL_ARGS[@]}" # restore positional parameters
|
set -- "${POSITIONAL_ARGS[@]}" # restore positional parameters
|
||||||
|
|
||||||
mkdir -p $HIRS_CONF_DIR $LOG_DIR $HIRS_PROP_DIR $HIRS_JSON_DIR
|
mkdir -p $HIRS_CONF_DIR $LOG_DIR $HIRS_JSON_DIR
|
||||||
|
touch "$LOG_FILE"
|
||||||
|
|
||||||
cp -n $COMP_JSON $HIRS_JSON_DIR/
|
pushd $SCRIPT_DIR &>/dev/null
|
||||||
cp -n $VENDOR_TABLE $HIRS_JSON_DIR/
|
# Check if build environment is being used and set up property files
|
||||||
|
if [ -f $PROP_FILE ]; then
|
||||||
|
cp -n $PROP_FILE $HIRS_CONF_DIR/
|
||||||
|
cp -n $COMP_JSON $HIRS_JSON_DIR/
|
||||||
|
cp -n $VENDOR_TABLE $HIRS_JSON_DIR/
|
||||||
|
fi
|
||||||
|
|
||||||
echo "ACA setup log file is $LOG_FILE"
|
echo "ACA setup log file is $LOG_FILE"
|
||||||
|
|
||||||
@ -70,11 +84,8 @@ if [ "$EUID" -ne 0 ]
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
touch "$LOG_FILE"
|
|
||||||
echo "HIRS ACA Setup initiated on $(date +%Y-%m-%d)" >> "$LOG_FILE"
|
echo "HIRS ACA Setup initiated on $(date +%Y-%m-%d)" >> "$LOG_FILE"
|
||||||
|
|
||||||
pushd $SCRIPT_DIR &>/dev/null
|
|
||||||
|
|
||||||
# Set HIRS PKI password
|
# Set HIRS PKI password
|
||||||
if [ -z $HIRS_PKI_PWD ]; then
|
if [ -z $HIRS_PKI_PWD ]; then
|
||||||
# Create a 32 character random password
|
# Create a 32 character random password
|
||||||
@ -98,7 +109,7 @@ if [ -z "${ARG_SKIP_PKI}" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -z "${ARG_SKIP_DB}" ]; then
|
if [ -z "${ARG_SKIP_DB}" ]; then
|
||||||
sh ../db/db_create.sh $LOG_FILE $ARG_UNATTEND
|
sh ../db/db_create.sh $LOG_FILE $PKI_PASS $ARG_UNATTEND
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
echo "ACA database setup complete" | tee -a "$LOG_FILE"
|
echo "ACA database setup complete" | tee -a "$LOG_FILE"
|
||||||
else
|
else
|
||||||
|
19
package/scripts/aca/check_for_aca.sh
Normal file
19
package/scripts/aca/check_for_aca.sh
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
########################################################################################
|
||||||
|
# Checks for ACA portal page on the local device
|
||||||
|
# Waits for tomcat (ACA) to respond or times out after 20 seconds
|
||||||
|
#
|
||||||
|
#########################################################################################
|
||||||
|
|
||||||
|
ACA_URL="https://localhost:8443/HIRS_AttestationCAPortal/portal/index"
|
||||||
|
echo "Waiting for tomcat..."
|
||||||
|
count=0
|
||||||
|
until [ "`curl --silent --connect-timeout 1 --insecure -I $ACA_URL | grep -c 'Date'`" == 1 ] || [[ $count -gt 20 ]]; do
|
||||||
|
((count++))
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
if [[ $count -gt 20 ]]; then
|
||||||
|
echo "Timed out waiting for tomcat to respond"
|
||||||
|
else
|
||||||
|
echo "Tomcat (ACA) started"
|
||||||
|
fi
|
@ -8,7 +8,10 @@
|
|||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
LOG_FILE=$1
|
LOG_FILE=$1
|
||||||
UNATTENDED=$2
|
PKI_PASS=$2
|
||||||
|
UNATTENDED=$3
|
||||||
|
RSA_PATH=rsa_3k_sha384_certs
|
||||||
|
ECC_PATH=ecc_512_sha384_certs
|
||||||
# Capture location of the script to allow from invocation from any location
|
# Capture location of the script to allow from invocation from any location
|
||||||
SCRIPT_DIR=$( dirname -- "$( readlink -f -- "$0"; )"; )
|
SCRIPT_DIR=$( dirname -- "$( readlink -f -- "$0"; )"; )
|
||||||
SPRING_PROP_FILE="/etc/hirs/aca/application.properties"
|
SPRING_PROP_FILE="/etc/hirs/aca/application.properties"
|
||||||
@ -128,6 +131,8 @@ set_hirs_db_pwd () {
|
|||||||
|
|
||||||
echo "hirs_db_username=hirs_db" >> $ACA_PROP_FILE
|
echo "hirs_db_username=hirs_db" >> $ACA_PROP_FILE
|
||||||
echo "hirs_db_password=$HIRS_DB_PWD" >> $ACA_PROP_FILE
|
echo "hirs_db_password=$HIRS_DB_PWD" >> $ACA_PROP_FILE
|
||||||
|
echo "hibernate.connection.username=hirs_db" >> $SPRING_PROP_FILE
|
||||||
|
echo "hibernate.connection.password=$HIRS_DB_PWD" >> $SPRING_PROP_FILE
|
||||||
fi
|
fi
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -145,6 +150,35 @@ create_hirs_db_with_tls () {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Create a JDBC connector used by hibernate and place in Springs application.properties
|
||||||
|
create_hibernate_url () {
|
||||||
|
ALG=$1
|
||||||
|
db_username=$2
|
||||||
|
|
||||||
|
if [ $ALG = "RSA" ]; then
|
||||||
|
CERT_PATH="/etc/hirs/certificates/HIRS/$RSA_PATH"
|
||||||
|
CERT_CHAIN="$CERT_PATH/HIRS_rsa_3k_sha384_Cert_Chain.pem"
|
||||||
|
CLIENT_DB_P12=$CERT_PATH/HIRS_db_client_rsa_3k_sha384.p12
|
||||||
|
ALIAS="hirs_aca_tls_rsa_3k_sha384"
|
||||||
|
else
|
||||||
|
CERT_PATH="/etc/hirs/certificates/HIRS/$ECC_PATH"
|
||||||
|
CERT_CHAIN="$CERT_PATH/HIRS_ecc_512_sha384_Cert_Chain.pem"
|
||||||
|
CLIENT_DB_P12=$CERT_PATH/HIRS_db_client_ecc_512_sha384.p12
|
||||||
|
ALIAS="hirs_aca_tls_ecc_512_sha384"
|
||||||
|
fi
|
||||||
|
|
||||||
|
CONNECTOR_URL="hibernate.connection.url=jdbc:mariadb://localhost:3306/hirs_db?autoReconnect=true&\
|
||||||
|
user=$db_username&\
|
||||||
|
password=$HIRS_DB_PWD&\
|
||||||
|
sslMode=VERIFY_CA&\
|
||||||
|
serverSslCert=$CERT_CHAIN&\
|
||||||
|
keyStoreType=PKCS12&\
|
||||||
|
keyStorePassword=$PKI_PASS&\
|
||||||
|
keyStore="$CLIENT_DB_P12" "
|
||||||
|
|
||||||
|
echo $CONNECTOR_URL >> $SPRING_PROP_FILE
|
||||||
|
|
||||||
|
}
|
||||||
# HIRS ACA Mysqld processing ...
|
# HIRS ACA Mysqld processing ...
|
||||||
check_mariadb_install
|
check_mariadb_install
|
||||||
check_for_container -p
|
check_for_container -p
|
||||||
@ -154,4 +188,5 @@ start_mysqlsd
|
|||||||
check_mysql_root_pwd
|
check_mysql_root_pwd
|
||||||
set_hirs_db_pwd
|
set_hirs_db_pwd
|
||||||
create_hirs_db_with_tls
|
create_hirs_db_with_tls
|
||||||
|
create_hibernate_url "RSA" "hirs_db"
|
||||||
mysqld_reboot
|
mysqld_reboot
|
||||||
|
@ -48,27 +48,28 @@ start_mysqlsd () {
|
|||||||
# Check if mariadb is setup
|
# Check if mariadb is setup
|
||||||
if [ ! -d "/var/lib/mysql/mysql/" ]; then
|
if [ ! -d "/var/lib/mysql/mysql/" ]; then
|
||||||
echo "Installing mariadb"
|
echo "Installing mariadb"
|
||||||
/usr/bin/mysql_install_db & >> "$LOG_FILE"
|
/usr/bin/mysql_install_db >> "$LOG_FILE"
|
||||||
chown -R mysql:mysql /var/lib/mysql/ & >> "$LOG_FILE"
|
chown -R mysql:mysql /var/lib/mysql/ >> "$LOG_FILE"
|
||||||
|
fi
|
||||||
|
if [[ $PRINT_STATUS == "-p" ]]; then echo "Starting mysql..."; fi
|
||||||
|
touch /var/log/mariadb/mariadb.log
|
||||||
|
chown mysql:mysql /var/log/mariadb/mariadb.log >> "$LOG_FILE";
|
||||||
|
/usr/bin/mysqld_safe & >> "$LOG_FILE";
|
||||||
|
echo "Attempting to start mariadb"
|
||||||
|
else #not a container
|
||||||
|
systemctl enable $SQL_SERVICE & >> "$LOG_FILE";
|
||||||
|
systemctl start $SQL_SERVICE & >> "$LOG_FILE";
|
||||||
fi
|
fi
|
||||||
if [[ $PRINT_STATUS == "-p" ]]; then echo "Starting mysql..."; fi
|
|
||||||
chown -R mysql:mysql /var/log/mariadb >> "$LOG_FILE";
|
|
||||||
/usr/bin/mysqld_safe & >> "$LOG_FILE";
|
|
||||||
else #not a container
|
|
||||||
systemctl enable $SQL_SERVICE & >> "$LOG_FILE";
|
|
||||||
systemctl start $SQL_SERVICE & >> "$LOG_FILE";
|
|
||||||
fi
|
|
||||||
else # mysql process is running
|
else # mysql process is running
|
||||||
# check if mysql service is running
|
# check if mysql service is running
|
||||||
if [ ! $DOCKER_CONTAINER = true ]; then
|
if [ ! $DOCKER_CONTAINER = true ]; then
|
||||||
DB_STATUS=$(systemctl status mysql |grep 'running' | wc -l )
|
DB_STATUS=$(systemctl status mysql |grep 'running' | wc -l )
|
||||||
if [ $DB_STATUS -eq 0 ]; then
|
if [ $DB_STATUS -eq 0 ]; then
|
||||||
echo "mariadb not running , attempting to restart"
|
echo "mariadb not running , attempting to restart"
|
||||||
systemctl start mariadb & >> "$LOG_FILE";
|
systemctl start mariadb >> "$LOG_FILE";
|
||||||
fi
|
fi
|
||||||
fi
|
fi # non contanier mysql start
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Wait for mysql to start before continuing.
|
# Wait for mysql to start before continuing.
|
||||||
if [[ $PRINT_STATUS == "-p" ]]; then echo "Checking mysqld status..."| tee -a "$LOG_FILE"; fi
|
if [[ $PRINT_STATUS == "-p" ]]; then echo "Checking mysqld status..."| tee -a "$LOG_FILE"; fi
|
||||||
while ! mysqladmin ping -h "$localhost" --silent; do
|
while ! mysqladmin ping -h "$localhost" --silent; do
|
||||||
@ -142,7 +143,7 @@ check_db_cleared () {
|
|||||||
echo " Mysql Root password is not empty"
|
echo " Mysql Root password is not empty"
|
||||||
fi
|
fi
|
||||||
HIRS_DB_USER_EXISTS="$(mysql -uroot -sse "SELECT EXISTS(SELECT 1 FROM mysql.user WHERE user = 'hirs_db')")"
|
HIRS_DB_USER_EXISTS="$(mysql -uroot -sse "SELECT EXISTS(SELECT 1 FROM mysql.user WHERE user = 'hirs_db')")"
|
||||||
if [ $HIRS_DB_USER_EXISTS = 1 ]; then
|
if [[ $HIRS_DB_USER_EXISTS == 1 ]]; then
|
||||||
echo " hirs_db user exists"
|
echo " hirs_db user exists"
|
||||||
else
|
else
|
||||||
echo " hirs_db user does not exist"
|
echo " hirs_db user does not exist"
|
||||||
@ -155,6 +156,7 @@ check_db_cleared () {
|
|||||||
echo " hirs_db database does not exists"
|
echo " hirs_db database does not exists"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# restart maraidb
|
# restart maraidb
|
||||||
mysqld_reboot () {
|
mysqld_reboot () {
|
||||||
# reboot mysql server
|
# reboot mysql server
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
#PROP_FILE=/etc/hirs/aca/application.properties
|
#PROP_FILE=/etc/hirs/aca/application.properties
|
||||||
ACA_PROP=/etc/hirs/aca/aca.properties
|
ACA_PROP=/etc/hirs/aca/aca.properties
|
||||||
|
SPRING_PROP_FILE="/etc/hirs/aca/application.properties"
|
||||||
LOG_FILE=$1
|
LOG_FILE=$1
|
||||||
PKI_PASS=$2
|
PKI_PASS=$2
|
||||||
UNATTENDED=$3
|
UNATTENDED=$3
|
||||||
@ -56,6 +57,8 @@ if [ ! -d "/etc/hirs/certificates" ]; then
|
|||||||
popd &> /dev/null
|
popd &> /dev/null
|
||||||
|
|
||||||
echo "hirs_pki_password="$PKI_PASS >> $ACA_PROP
|
echo "hirs_pki_password="$PKI_PASS >> $ACA_PROP
|
||||||
|
echo "server.ssl.key-store-password="$PKI_PASS >> $SPRING_PROP_FILE
|
||||||
|
echo "server.ssl.trust-store-password="$PKI_PASS >> $SPRING_PROP_FILE
|
||||||
else
|
else
|
||||||
echo "/etc/hirs/certificates exists, skipping" | tee -a "$LOG_FILE"
|
echo "/etc/hirs/certificates exists, skipping" | tee -a "$LOG_FILE"
|
||||||
fi
|
fi
|
||||||
|
Loading…
Reference in New Issue
Block a user