This commit is contained in:
zeldaroot 2020-05-01 22:48:52 +03:00
parent 89061fcf23
commit 0551bbff2c
71 changed files with 1204564 additions and 8074 deletions

View file

@ -11,12 +11,7 @@ ARG CP_THEME=""
ENV CP_THEME=${CP_THEME}
ARG CP_PASSWD=""
ENV CP_PASSWD=${CP_PASSWD}
ARG CP_MIRROR=""
ENV CP_MIRROR=${CP_MIRROR}
ARG CP_MIRROR_=""
ENV CP_MIRROR_=${CP_MIRROR_}
ARG CP_KEY=""
ENV CP_KEY=${CP_KEY}
ENV CP_SPB="_${CP_DOMAIN_}_"
ARG RCLONE_CONFIG=""
ENV RCLONE_CONFIG=${RCLONE_CONFIG}
ENV TZ=Europe/Moscow
@ -39,9 +34,7 @@ RUN set -o pipefail \
&& npm i \
&& mkdir -p \
/var/ngx_pagespeed_cache \
/etc/sphinx \
/var/lib/sphinx/data \
/var/local/images \
/var/local/balancer \
&& npm cache clean --force \
&& apk del .build-dependencies \
@ -51,6 +44,8 @@ RUN set -o pipefail \
&& rm -rf package-lock.json doc .dockerignore .gitignore .prettierignore .prettierrc Dockerfile LICENSE.txt README.md \
&& dos2unix cinemapress.sh \
&& cp cinemapress.sh /usr/bin/cinemapress && chmod +x /usr/bin/cinemapress \
&& mv config/default/sphinx /etc/sphinx \
&& mv node_modules/mysql node_modules/sphinx \
&& rm -rf cinemapress.sh \
&& cp -rf themes/default/public/admin/favicon.ico favicon.ico \
&& cp -rf themes/default/public/desktop/img/player$(( ( RANDOM % 7 ) + 1 )).png \
@ -62,4 +57,5 @@ RUN set -o pipefail \
> /etc/periodic/hourly/cron \
&& chmod a+x /etc/periodic/hourly/cron
EXPOSE 3000
CMD ["/usr/bin/cinemapress", "container", "run"]
CMD ["/usr/bin/cinemapress", "container", "run"]
HEALTHCHECK --interval=300s --timeout=5s CMD curl -fso /dev/null http://localhost/ || exit 1

View file

@ -11,7 +11,6 @@ NC='\033[0m'
OPTION=${1:-}
GIT_SERVER="github.com"
CP_VER="4.0.0"
CP_ALL=""
PRC_=0
CP_DOMAIN=${CP_DOMAIN:-}
@ -54,7 +53,7 @@ fi
post_commands() {
LOCAL_DOMAIN=${1:-${CP_DOMAIN}}
LOCAL_DOMAIN_=`echo ${LOCAL_DOMAIN} | sed -r "s/[^A-Za-z0-9]/_/g"`
LOCAL_DOMAIN_=$(echo "${LOCAL_DOMAIN}" | sed -r "s/[^A-Za-z0-9]/_/g")
if [ "`grep \"${LOCAL_DOMAIN}_autostart\" /etc/crontab`" = "" ] \
&& [ -f "/home/${LOCAL_DOMAIN}/process.json" ]; then
@ -222,6 +221,32 @@ docker_install() {
exit 0
fi
fi
for DOMAIN_PATH in /home/*; do
DOMAIN_PROCESS="${DOMAIN_PATH}/process.json"
DOMAIN_CONFIG="${DOMAIN_PATH}/config/production/config.js"
if [ -f "${DOMAIN_PROCESS}" ] && [ -f "${DOMAIN_CONFIG}" ]; then
DDD=$(find "${DOMAIN_PATH}" -maxdepth 0 -printf "%f")
DDD_=$(echo "${DDD}" | sed -r "s/[^A-Za-z0-9]/_/g")
SPS="/var/lib/sphinx/data/movies_${DDD_}.sps"
SPB="/var/lib/sphinx/data/movies_${DDD_}.spb"
if [ -f "${SPS}" ] && [ ! -f "${SPB}" ]; then
AA=$(grep "\"CP_ALL\"" "${DOMAIN_PROCESS}")
KK=$(grep "\"key\"" "${DOMAIN_CONFIG}")
AAA=$(echo ${AA} | sed 's/.*"CP_ALL":\s*".*[ |"]\{1\}_\([A-Za-z0-9]\{7\}\)_[ |"]\{1\}.*/\1/')
KKK=$(echo ${KK} | sed 's/.*"key":\s*"\(FREE\|[a-zA-Z0-9-]\{32\}\)".*/\1/')
if [ "${#AAA}" -eq "7" ] && [ "${#KKK}" -eq "32" ]; then
openssl enc \
-aes-256-cbc \
-pbkdf2 \
-iter 100000 \
-in <(echo "${AAA}") \
-out "${SPB}" \
-k "${DDD}/${KKK}" \
-salt 2>/dev/null
fi
fi
fi
done
fi
}
ip_install() {
@ -248,7 +273,7 @@ ip_install() {
1_install() {
LOCAL_DOMAIN=${1:-${CP_DOMAIN}}
LOCAL_DOMAIN_=`echo ${LOCAL_DOMAIN} | sed -r "s/[^A-Za-z0-9]/_/g"`
LOCAL_DOMAIN_=$(echo "${LOCAL_DOMAIN}" | sed -r "s/[^A-Za-z0-9]/_/g")
LOCAL_LANG=${2:-${CP_LANG}}
LOCAL_THEME=${3:-${CP_THEME}}
LOCAL_PASSWD=${4:-${CP_PASSWD}}
@ -276,20 +301,20 @@ ip_install() {
docker run \
-d \
--name ${LOCAL_DOMAIN_} \
--name "${LOCAL_DOMAIN_}" \
-e "CP_DOMAIN=${LOCAL_DOMAIN}" \
-e "CP_DOMAIN_=${LOCAL_DOMAIN_}" \
-e "CP_LANG=${LOCAL_LANG}" \
-e "CP_THEME=${LOCAL_THEME}" \
-e "CP_PASSWD=${LOCAL_PASSWD}" \
-e "RCLONE_CONFIG=/home/${LOCAL_DOMAIN}/config/production/rclone.conf" \
-w /home/${LOCAL_DOMAIN} \
-w /home/"${LOCAL_DOMAIN}" \
--restart always \
--network cinemapress \
-v /var/ngx_pagespeed_cache:/var/ngx_pagespeed_cache \
-v /var/lib/sphinx/data:/var/lib/sphinx/data \
-v /var/local/balancer:/var/local/balancer \
-v /home/${LOCAL_DOMAIN}:/home/${LOCAL_DOMAIN} \
-v /home/"${LOCAL_DOMAIN}":/home/"${LOCAL_DOMAIN}" \
${EXTERNAL_DOCKER} \
cinemapress/docker:latest >>/var/log/docker_install_"$(date '+%d_%m_%Y')".log 2>&1
@ -410,11 +435,18 @@ ip_install() {
}
2_update() {
LOCAL_DOMAIN=${1:-${CP_DOMAIN}}
LOCAL_DOMAIN_=`echo ${LOCAL_DOMAIN} | sed -r "s/[^A-Za-z0-9]/_/g"`
LOCAL_DOMAIN_=$(echo "${LOCAL_DOMAIN}" | sed -r "s/[^A-Za-z0-9]/_/g")
LOCAL_MEGA_EMAIL=${2:-${MEGA_EMAIL}}
LOCAL_MEGA_PASSWORD=${3:-${MEGA_PASSWORD}}
if [ "${LOCAL_MEGA_EMAIL}" != "" ] && [ "${LOCAL_MEGA_PASSWORD}" != "" ]; then
docker exec "${LOCAL_DOMAIN_}" rclone config create CINEMAPRESS mega user "${LOCAL_MEGA_EMAIL}" pass "${LOCAL_MEGA_PASSWORD}" \
>>/var/log/docker_backup_"$(date '+%d_%m_%Y')".log 2>&1
fi
echo "${PRC_}% update" >>/var/log/docker_log_"$(date '+%d_%m_%Y')".log
CHECK_MEGA=$(docker exec "${LOCAL_DOMAIN_}" /usr/bin/cinemapress container rclone config show 2>/dev/null | grep "CINEMAPRESS")
CHECK_MEGA=$(docker exec "${LOCAL_DOMAIN_}" rclone config show 2>/dev/null | grep "CINEMAPRESS")
if [ "${CHECK_MEGA}" = "" ]; then
_header "WARNING"
@ -454,15 +486,12 @@ ip_install() {
exit 0
fi
AA=`grep "\"CP_ALL\"" /home/${LOCAL_DOMAIN}/process.json`
KK=`grep "\"key\"" /home/${LOCAL_DOMAIN}/config/default/config.js`
DD=`grep "\"date\"" /home/${LOCAL_DOMAIN}/config/default/config.js`
PP=`grep "\"pagespeed\"" /home/${LOCAL_DOMAIN}/config/production/config.js`
CP_ALL=`echo "${AA}" | sed 's/.*"CP_ALL":\s*"\([a-zA-Z0-9_| -]*\)".*/\1/'`
CP_KEY=`echo ${KK} | sed 's/.*"key":\s*"\(FREE\|[a-zA-Z0-9-]\{32\}\)".*/\1/'`
CP_DATE=`echo ${DD} | sed 's/.*"date":\s*"\([0-9-]*\)".*/\1/'`
CP_SPEED=`echo ${PP} | sed 's/.*"pagespeed":\s*\([0-9]\{1\}\).*/\1/'`
if [ "${CP_ALL}" = "" ] || [ "${CP_ALL}" = "${AA}" ]; then CP_ALL=""; fi
KK=$(grep "\"key\"" /home/"${LOCAL_DOMAIN}"/config/default/config.js)
DD=$(grep "\"date\"" /home/"${LOCAL_DOMAIN}"/config/default/config.js)
PP=$(grep "\"pagespeed\"" /home/"${LOCAL_DOMAIN}"/config/production/config.js)
CP_KEY=$(echo ${KK} | sed 's/.*"key":\s*"\(FREE\|[a-zA-Z0-9-]\{32\}\)".*/\1/')
CP_DATE=$(echo ${DD} | sed 's/.*"date":\s*"\([0-9-]*\)".*/\1/')
CP_SPEED=$(echo ${PP} | sed 's/.*"pagespeed":\s*\([0-9]\{1\}\).*/\1/')
DISABLE_SSL=$(grep "#ssl" /home/"${LOCAL_DOMAIN}"/config/production/nginx/conf.d/default.conf 2>/dev/null)
rm -rf /home/"${LOCAL_DOMAIN}"/config/production/nginx/conf.d/default.conf
mkdir -p /var/temp
@ -519,36 +548,32 @@ ip_install() {
fi
3_backup "${LOCAL_DOMAIN}" "restore"
docker exec nginx nginx -s reload >>/var/log/docker_update_"$(date '+%d_%m_%Y')".log 2>&1
if [ "${CP_ALL}" != "" ]; then
sed -E -i "s/\"CP_ALL\":\s*\"[a-zA-Z0-9_| -]*\"/\"CP_ALL\":\"${CP_ALL}\"/" \
/home/${LOCAL_DOMAIN}/process.json
fi
if [ "${CP_KEY}" != "" ]; then
if [ "${#CP_KEY}" -eq "4" ] || [ "${#CP_KEY}" -eq "32" ]; then
sed -E -i "s/\"key\":\s*\"(FREE|[a-zA-Z0-9-]{32})\"/\"key\":\"${CP_KEY}\"/" \
/home/${LOCAL_DOMAIN}/config/production/config.js
/home/"${LOCAL_DOMAIN}"/config/production/config.js
sed -E -i "s/\"key\":\s*\"(FREE|[a-zA-Z0-9-]{32})\"/\"key\":\"${CP_KEY}\"/" \
/home/${LOCAL_DOMAIN}/config/default/config.js
/home/"${LOCAL_DOMAIN}"/config/default/config.js
fi
if [ "${CP_DATE}" != "" ]; then
if [ "${#CP_DATE}" -eq "10" ]; then
sed -E -i "s/\"date\":\s*\"[0-9-]*\"/\"date\":\"${CP_DATE}\"/" \
/home/${LOCAL_DOMAIN}/config/production/config.js
/home/"${LOCAL_DOMAIN}"/config/production/config.js
sed -E -i "s/\"date\":\s*\"[0-9-]*\"/\"date\":\"${CP_DATE}\"/" \
/home/${LOCAL_DOMAIN}/config/default/config.js
/home/"${LOCAL_DOMAIN}"/config/default/config.js
fi
if [ "${CP_SPEED}" != "" ]; then
if [ "${#CP_SPEED}" -eq "1" ]; then
sed -E -i "s/\"pagespeed\":\s*[0-9]*/\"pagespeed\":${CP_SPEED}/" \
/home/${LOCAL_DOMAIN}/config/production/config.js
docker exec ${LOCAL_DOMAIN_} /usr/bin/cinemapress container speed "${CP_SPEED}"
/home/"${LOCAL_DOMAIN}"/config/production/config.js
docker exec "${LOCAL_DOMAIN_}" /usr/bin/cinemapress container speed "${CP_SPEED}"
fi
if [ "${DISABLE_SSL}" = "" ]; then
docker exec ${LOCAL_DOMAIN_} /usr/bin/cinemapress container protocol "https://"
docker exec "${LOCAL_DOMAIN_}" /usr/bin/cinemapress container protocol "https://"
fi
docker restart ${LOCAL_DOMAIN_} >>/var/log/docker_update_"$(date '+%d_%m_%Y')".log 2>&1
docker restart "${LOCAL_DOMAIN_}" >>/var/log/docker_update_"$(date '+%d_%m_%Y')".log 2>&1
sleep 10
}
3_backup() {
LOCAL_DOMAIN=${1:-${CP_DOMAIN}}
LOCAL_DOMAIN_=`echo ${LOCAL_DOMAIN} | sed -r "s/[^A-Za-z0-9]/_/g"`
LOCAL_DOMAIN_=$(echo "${LOCAL_DOMAIN}" | sed -r "s/[^A-Za-z0-9]/_/g")
LOCAL_ACTION=${2} # 1 | 2 | 3 | create | restore | config
LOCAL_MEGA_EMAIL=${3:-${MEGA_EMAIL}}
LOCAL_MEGA_PASSWORD=${4:-${MEGA_PASSWORD}}
@ -565,7 +590,7 @@ ip_install() {
sleep 5
RCS=$(docker exec "${LOCAL_DOMAIN_}" /usr/bin/cinemapress container rclone config show 2>/dev/null | grep "CINEMAPRESS")
RCS=$(docker exec "${LOCAL_DOMAIN_}" rclone config show 2>/dev/null | grep "CINEMAPRESS")
if [ "${LOCAL_ACTION}" = "config" ] || [ "${LOCAL_ACTION}" = "3" ] || [ "${RCS}" = "" ]; then
if [ "${LOCAL_MEGA_EMAIL}" != "" ] && [ "${LOCAL_MEGA_PASSWORD}" != "" ]; then
@ -574,10 +599,9 @@ ip_install() {
echo "${PRC_}% config check-connection" >>/var/log/docker_log_"$(date '+%d_%m_%Y')".log
docker exec ${LOCAL_DOMAIN_} rclone config delete CINEMAPRESS \
>>/var/log/docker_backup_"$(date '+%d_%m_%Y')".log 2>&1
docker exec ${LOCAL_DOMAIN_} rclone config create CINEMAPRESS mega user "${LOCAL_MEGA_EMAIL}" pass "${LOCAL_MEGA_PASSWORD}" \
>>/var/log/docker_backup_"$(date '+%d_%m_%Y')".log 2>&1
sleep 3
CHECK_MKDIR=`docker exec ${LOCAL_DOMAIN_} rclone mkdir CINEMAPRESS:/check-connection 2>/dev/null`
sleep 3
CHECK_PURGE=`docker exec ${LOCAL_DOMAIN_} rclone purge CINEMAPRESS:/check-connection 2>/dev/null`
@ -660,7 +684,7 @@ ip_install() {
}
4_theme() {
LOCAL_DOMAIN=${1:-${CP_DOMAIN}}
LOCAL_DOMAIN_=`echo ${LOCAL_DOMAIN} | sed -r "s/[^A-Za-z0-9]/_/g"`
LOCAL_DOMAIN_=$(echo "${LOCAL_DOMAIN}" | sed -r "s/[^A-Za-z0-9]/_/g")
LOCAL_THEME=${2:-${CP_THEME}}
echo "${PRC_}% theme" >>/var/log/docker_log_"$(date '+%d_%m_%Y')".log
@ -780,11 +804,14 @@ ip_install() {
/home/"${LOCAL_DOMAIN}"/config/default/config.js
sed -E -i "s/\"date\":\s*\"[0-9-]*\"/\"date\":\"${NOW}\"/" \
/home/"${LOCAL_DOMAIN}"/config/default/config.js
if [ "$(grep \"_"${CHECK}"_\" /home/"${LOCAL_DOMAIN}"/process.json)" = "" ]; then
CURRENT=$(grep "CP_ALL" /home/"${LOCAL_DOMAIN}"/process.json | sed 's/.*"CP_ALL":\s*"\([a-zA-Z0-9_| -]*\)".*/\1/')
sed -E -i "s/\"CP_ALL\":\s*\"[a-zA-Z0-9_| -]*\"/\"CP_ALL\":\"${CURRENT} | _${CHECK}_\"/" \
/home/"${LOCAL_DOMAIN}"/process.json
fi
openssl enc \
-aes-256-cbc \
-pbkdf2 \
-iter 100000 \
-in <(echo "${CHECK}") \
-out "/var/lib/sphinx/data/movies_${LOCAL_DOMAIN_}.spb" \
-k "${LOCAL_DOMAIN}/${LOCAL_KEY}" \
-salt 2>/dev/null
_content "Starting ..."
if [ "$(docker -v 2>/dev/null | grep "version")" = "" ]; then
docker_start >>/var/lib/sphinx/data/"${NOW}".log 2>&1
@ -819,10 +846,10 @@ ip_install() {
}
6_https() {
LOCAL_DOMAIN=${1:-${CP_DOMAIN}}
LOCAL_DOMAIN_=`echo ${LOCAL_DOMAIN} | sed -r "s/[^A-Za-z0-9]/_/g"`
LOCAL_DOMAIN_=$(echo "${LOCAL_DOMAIN}" | sed -r "s/[^A-Za-z0-9]/_/g")
LOCAL_CLOUDFLARE_EMAIL=${2:-${CLOUDFLARE_EMAIL}}
LOCAL_CLOUDFLARE_API_KEY=${3:-${CLOUDFLARE_API_KEY}}
LOCAL_SUBDOMAIN=${4:-hd}
LOCAL_SUBDOMAIN=${4:-}
echo "${PRC_}% https" >>/var/log/docker_log_"$(date '+%d_%m_%Y')".log
@ -840,7 +867,9 @@ ip_install() {
sleep 5
DOMAINS="-d ${LOCAL_DOMAIN} -d *.${LOCAL_DOMAIN}"
for SUBDOMAIN in $LOCAL_SUBDOMAIN; do DOMAINS="${DOMAINS} -d *.${SUBDOMAIN}.${LOCAL_DOMAIN}"; done
if [ "${LOCAL_SUBDOMAIN}" != "" ]; then
for SUBDOMAIN in $LOCAL_SUBDOMAIN; do DOMAINS="${DOMAINS} -d *.${SUBDOMAIN}.${LOCAL_DOMAIN}"; done
fi
docker run \
--rm \
@ -906,10 +935,10 @@ ip_install() {
}
7_mirror() {
LOCAL_DOMAIN=${1:-${CP_DOMAIN}}
LOCAL_DOMAIN_=`echo ${LOCAL_DOMAIN} | sed -r "s/[^A-Za-z0-9]/_/g"`
LOCAL_DOMAIN_=$(echo "${LOCAL_DOMAIN}" | sed -r "s/[^A-Za-z0-9]/_/g")
LOCAL_MIRROR=${2:-${CP_MIRROR}}
LOCAL_MIRROR_=`echo ${LOCAL_MIRROR} | sed -r "s/[^A-Za-z0-9]/_/g"`
LOCAL_MIRROR_=$(echo "${LOCAL_MIRROR}" | sed -r "s/[^A-Za-z0-9]/_/g")
if [ ! -f "/home/${LOCAL_MIRROR}/process.json" ]; then
if [ -f "/home/${LOCAL_DOMAIN}/process.json" ]; then
@ -934,91 +963,82 @@ ip_install() {
echo "${PRC_}% mirror" >>/var/log/docker_log_"$(date '+%d_%m_%Y')".log
docker stop ${LOCAL_MIRROR_} >>/var/log/docker_mirror_"$(date '+%d_%m_%Y')".log 2>&1
docker stop "${LOCAL_MIRROR_}" >>/var/log/docker_mirror_"$(date '+%d_%m_%Y')".log 2>&1
if [ -f "/home/${LOCAL_DOMAIN}/process.json" ]; then
3_backup "${LOCAL_DOMAIN}" "create"
docker stop ${LOCAL_DOMAIN_} \
docker stop "${LOCAL_DOMAIN_}" \
>>/var/log/docker_mirror_"$(date '+%d_%m_%Y')".log 2>&1
rm -rf \
/home/${LOCAL_MIRROR}/config/comment \
/home/${LOCAL_MIRROR}/config/content \
/home/${LOCAL_MIRROR}/config/rt \
/home/${LOCAL_MIRROR}/config/user
/home/"${LOCAL_MIRROR}"/config/comment \
/home/"${LOCAL_MIRROR}"/config/content \
/home/"${LOCAL_MIRROR}"/config/rt \
/home/"${LOCAL_MIRROR}"/config/user
cp -r \
/home/${LOCAL_DOMAIN}/config/comment \
/home/${LOCAL_MIRROR}/config/comment
/home/"${LOCAL_MIRROR}"/config/comment
cp -r \
/home/${LOCAL_DOMAIN}/config/content \
/home/${LOCAL_MIRROR}/config/content
/home/"${LOCAL_MIRROR}"/config/content
cp -r \
/home/${LOCAL_DOMAIN}/config/rt \
/home/${LOCAL_MIRROR}/config/rt
/home/"${LOCAL_MIRROR}"/config/rt
cp -r \
/home/${LOCAL_DOMAIN}/config/user \
/home/${LOCAL_MIRROR}/config/user
/home/"${LOCAL_MIRROR}"/config/user
cp -r \
/home/${LOCAL_DOMAIN}/config/production/config.js \
/home/${LOCAL_MIRROR}/config/production/config.js
/home/"${LOCAL_MIRROR}"/config/production/config.js
cp -r \
/home/${LOCAL_DOMAIN}/config/production/modules.js \
/home/${LOCAL_MIRROR}/config/production/modules.js
/home/"${LOCAL_MIRROR}"/config/production/modules.js
cp -r \
/home/${LOCAL_DOMAIN}/themes/default/public/desktop/* \
/home/${LOCAL_MIRROR}/themes/default/public/desktop/
/home/"${LOCAL_MIRROR}"/themes/default/public/desktop/
cp -r \
/home/${LOCAL_DOMAIN}/themes/default/public/mobile/* \
/home/${LOCAL_MIRROR}/themes/default/public/mobile/
/home/"${LOCAL_MIRROR}"/themes/default/public/mobile/
cp -r \
/home/${LOCAL_DOMAIN}/themes/default/views/mobile/* \
/home/${LOCAL_MIRROR}/themes/default/views/mobile/
/home/"${LOCAL_MIRROR}"/themes/default/views/mobile/
cp -r \
/home/${LOCAL_DOMAIN}/files/* \
/home/${LOCAL_MIRROR}/files/
/home/"${LOCAL_MIRROR}"/files/
sed -Ei \
"s/${LOCAL_DOMAIN_}:3000/${LOCAL_MIRROR_}:3000/g" \
/home/${LOCAL_DOMAIN}/config/production/nginx/conf.d/default.conf
fi
if [ "${LOCAL_DOMAIN_}" != "" ]; then
for f in /home/${LOCAL_MIRROR}/config/comment/comment_${LOCAL_DOMAIN_}.*; do
for f in /home/"${LOCAL_MIRROR}"/config/comment/comment_${LOCAL_DOMAIN_}.*; do
mv -f "${f}" "`echo ${f} | sed s/comment_${LOCAL_DOMAIN_}/comment_${LOCAL_MIRROR_}/`" 2>/dev/null
done
for f in /home/${LOCAL_MIRROR}/config/content/content_${LOCAL_DOMAIN_}.*; do
for f in /home/"${LOCAL_MIRROR}"/config/content/content_${LOCAL_DOMAIN_}.*; do
mv -f "${f}" "`echo ${f} | sed s/content_${LOCAL_DOMAIN_}/content_${LOCAL_MIRROR_}/`" 2>/dev/null
done
for f in /home/${LOCAL_MIRROR}/config/rt/rt_${LOCAL_DOMAIN_}.*; do
for f in /home/"${LOCAL_MIRROR}"/config/rt/rt_${LOCAL_DOMAIN_}.*; do
mv -f "${f}" "`echo ${f} | sed s/rt_${LOCAL_DOMAIN_}/rt_${LOCAL_MIRROR_}/`" 2>/dev/null
done
for f in /home/${LOCAL_MIRROR}/config/user/user_${LOCAL_DOMAIN_}.*; do
for f in /home/"${LOCAL_MIRROR}"/config/user/user_${LOCAL_DOMAIN_}.*; do
mv -f "${f}" "`echo ${f} | sed s/user_${LOCAL_DOMAIN_}/user_${LOCAL_MIRROR_}/`" 2>/dev/null
done
fi
CURRENT=`grep "CP_ALL" /home/${LOCAL_MIRROR}/process.json | sed 's/.*"CP_ALL":\s*"\([a-zA-Z0-9_| -]*\)".*/\1/'`
CURRENT=`echo "${CURRENT}" | sed "s/_${LOCAL_MIRROR_}_ | //"`
CURRENT=`echo "${CURRENT}" | sed "s/_${LOCAL_DOMAIN_}_ | //"`
CURRENT=`echo "${CURRENT}" | sed "s/ | _${LOCAL_MIRROR_}_//"`
CURRENT=`echo "${CURRENT}" | sed "s/ | _${LOCAL_DOMAIN_}_//"`
CURRENT=`echo "${CURRENT}" | sed "s/_${LOCAL_MIRROR_}_//"`
CURRENT=`echo "${CURRENT}" | sed "s/_${LOCAL_DOMAIN_}_//"`
if [ "${CURRENT}" != "" ]; then CURRENT=" | ${CURRENT}"; fi
if [ -f "/home/${LOCAL_DOMAIN}/process.json" ] && [ ! -f "/home/${LOCAL_MIRROR}/process.json" ]; then
sed -E -i "s/\"CP_ALL\":\s*\"[a-zA-Z0-9_| -]*\"/\"CP_ALL\":\"_${LOCAL_DOMAIN_}_ | _${LOCAL_MIRROR_}_${CURRENT}\"/" /home/${LOCAL_MIRROR}/process.json
else
sed -E -i "s/\"CP_ALL\":\s*\"[a-zA-Z0-9_| -]*\"/\"CP_ALL\":\"_${LOCAL_MIRROR_}_ | _${LOCAL_DOMAIN_}_${CURRENT}\"/" /home/${LOCAL_MIRROR}/process.json
fi
sh_progress
echo "${PRC_}% mirror2" >>/var/log/docker_log_"$(date '+%d_%m_%Y')".log
docker start ${LOCAL_MIRROR_} \
docker start "${LOCAL_MIRROR_}" \
>>/var/log/docker_mirror_"$(date '+%d_%m_%Y')".log 2>&1
sleep 10
docker exec "${LOCAL_MIRROR_}" node config/update/mirror.js \
>>/var/log/docker_mirror_"$(date '+%d_%m_%Y')".log 2>&1
sleep 10
docker exec nginx nginx -s reload \
>>/var/log/docker_mirror_"$(date '+%d_%m_%Y')".log 2>&1
sleep 10
}
8_remove() {
LOCAL_DOMAIN=${1:-${CP_DOMAIN}}
LOCAL_DOMAIN_=`echo ${LOCAL_DOMAIN} | sed -r "s/[^A-Za-z0-9]/_/g"`
LOCAL_DOMAIN_=$(echo "${LOCAL_DOMAIN}" | sed -r "s/[^A-Za-z0-9]/_/g")
LOCAL_FULL=${2}
LOCAL_SAFE=${3}
@ -1100,7 +1120,7 @@ option() {
fi
if [ "${OPTION}" != "" ]
then
if echo "${OPTION}" | grep -qE ^\-?[0-9a-z]+$
if echo "${OPTION}" | grep -qE ^[0-9a-z]+$
then
AGAIN=10
else
@ -1143,7 +1163,7 @@ read_domain() {
fi
if [ "${CP_DOMAIN}" != "" ]
then
if echo "${CP_DOMAIN}" | grep -qE ^\-?[.a-z0-9-]+$
if echo "${CP_DOMAIN}" | grep -qE ^[.a-z0-9-]+$
then
CP_DOMAIN_=`echo ${CP_DOMAIN} | sed -r "s/[^A-Za-z0-9]/_/g" | sed -r "s/www\.//g" | sed -r "s/http:\/\///g" | sed -r "s/https:\/\///g"`
if [ "`expr "${CP_DOMAIN}" : '[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$'`" != "0" ]; then
@ -1195,7 +1215,7 @@ read_mirror() {
fi
if [ "${CP_MIRROR}" != "" ]
then
if echo "${CP_MIRROR}" | grep -qE ^\-?[.a-z0-9-]+$
if echo "${CP_MIRROR}" | grep -qE ^[.a-z0-9-]+$
then
if [ "${CP_DOMAIN}" = "${CP_MIRROR}" ]
then
@ -1275,7 +1295,14 @@ read_password() {
fi
if [ "${CP_PASSWD}" != "" ]
then
AGAIN=10
if echo "${CP_PASSWD}" | grep -qE ^[a-zA-Z0-9]+$
then
AGAIN=10
else
printf "${NC} You entered: ${R}${CP_PASSWD}${NC} \n"
printf "${R}WARNING:${NC} Only latin characters and numbers! \n"
AGAIN=$((${AGAIN}+1))
fi
else
printf "${R}WARNING:${NC} Admin panel password cannot be empty. \n"
AGAIN=$((${AGAIN}+1))
@ -1301,13 +1328,13 @@ read_key() {
fi
if [ "${CP_KEY}" != "" ]
then
if echo "${CP_KEY}" | grep -qE ^\-?[A-Za-z0-9]+$
if echo "${CP_KEY}" | grep -qE ^[A-Za-z0-9]+$
then
AGAIN=10
else
printf "${NC} You entered: ${R}${CP_KEY}${NC} \n "
printf "${R}WARNING:${NC} Only latin characters \n "
printf "${NC} and numbers! \n "
printf "${R}WARNING:${NC} Only latin characters \n"
printf "${NC} and numbers are allowed! \n"
AGAIN=$((${AGAIN}+1))
fi
else
@ -1393,7 +1420,7 @@ read_cloudflare_email() {
fi
if [ "${CLOUDFLARE_EMAIL}" != "" ]
then
if echo "${CLOUDFLARE_EMAIL}" | grep -qE ^\-?[.a-zA-Z0-9@_-]+$
if echo "${CLOUDFLARE_EMAIL}" | grep -qE ^[.a-zA-Z0-9@_-]+$
then
AGAIN=10
else
@ -1425,7 +1452,7 @@ read_cloudflare_api_key() {
fi
if [ "${CLOUDFLARE_API_KEY}" != "" ]
then
if echo "${CLOUDFLARE_API_KEY}" | grep -qE ^\-?[.a-zA-Z0-9-]+$
if echo "${CLOUDFLARE_API_KEY}" | grep -qE ^[.a-zA-Z0-9-]+$
then
AGAIN=10
else
@ -1457,7 +1484,7 @@ read_mega_email() {
fi
if [ "${MEGA_EMAIL}" != "" ]
then
if echo "${MEGA_EMAIL}" | grep -qE ^\-?[.a-zA-Z0-9@_-]+$
if echo "${MEGA_EMAIL}" | grep -qE ^[.a-zA-Z0-9@_-]+$
then
AGAIN=10
else
@ -1489,7 +1516,15 @@ read_mega_password() {
fi
if [ "${MEGA_PASSWORD}" != "" ]
then
AGAIN=10
if echo "${MEGA_PASSWORD}" | grep -qE ^[a-zA-Z0-9]+$
then
AGAIN=10
else
printf "${NC} You entered: ${R}${MEGA_PASSWORD}${NC} \n"
printf "${R}WARNING:${NC} Only latin characters \n"
printf "${NC} and numbers are allowed! \n"
AGAIN=$((${AGAIN}+1))
fi
fi
done
if [ "${MEGA_PASSWORD}" = "" ]; then exit 1; fi
@ -1589,7 +1624,7 @@ read_app() {
fi
if [ "${APP_DOMAIN}" != "" ]
then
if echo "${APP_DOMAIN}" | grep -qE ^\-?[.a-z0-9-]+$
if echo "${APP_DOMAIN}" | grep -qE ^[.a-z0-9-]+$
then
APP_DOMAIN_=`echo ${APP_DOMAIN} | sed -r "s/[^A-Za-z0-9]/_/g" | sed -r "s/www\.//g" | sed -r "s/http:\/\///g" | sed -r "s/https:\/\///g"`
AGAIN=10
@ -1626,7 +1661,7 @@ read_import() {
fi
if [ "${IMPORT_DOMAIN}" != "" ]
then
if echo "${IMPORT_DOMAIN}" | grep -qE ^\-?[.a-z0-9-]+$
if echo "${IMPORT_DOMAIN}" | grep -qE ^[.a-z0-9-]+$
then
IMPORT_DOMAIN_=`echo ${IMPORT_DOMAIN} | sed -r "s/[^A-Za-z0-9]/_/g" | sed -r "s/www\.//g" | sed -r "s/http:\/\///g" | sed -r "s/https:\/\///g"`
AGAIN=10
@ -1808,54 +1843,67 @@ _s() {
}
docker_run() {
sed -Ei "s/options.host/0/" /home/"${CP_DOMAIN}"/node_modules/sphinx/lib/ConnectionConfig.js
sed -Ei "s/options.port/0/" /home/"${CP_DOMAIN}"/node_modules/sphinx/lib/ConnectionConfig.js
SPB="/var/lib/sphinx/data/movies_${CP_DOMAIN_}.spb"
CNF="/home/${CP_DOMAIN}/config/production/config.js"
CP_SPB="_${CP_DOMAIN_}_"
if [ -f "${SPB}" ] && [ -f "${CNF}" ]; then
KK=$(grep "\"key\"" "${CNF}")
KKK=$(echo ${KK} | sed 's/.*"key":\s*"\(FREE\|[a-zA-Z0-9-]\{32\}\)".*/\1/')
if [ "${#KKK}" -eq "32" ]; then
AAA=$(openssl enc -aes-256-cbc -pbkdf2 -iter 100000 -in "${SPB}" -out - -k "${CP_DOMAIN}/${KKK}" -d 2>/dev/null)
if [ "${#AAA}" -eq "7" ]; then
CP_SPB="${CP_SPB} | _${AAA}_"
fi
fi
fi
if [ ! -d "/home/${CP_DOMAIN}/config/production" ]; then
find /var/cinemapress -maxdepth 1 -type f -iname '\.gitkeep' -delete
cp -rf /var/cinemapress/* /home/${CP_DOMAIN}
cp -rf /var/cinemapress/* /home/"${CP_DOMAIN}"
rm -rf /var/cinemapress/* /var/${CP_THEME:?}
cp -rf /home/${CP_DOMAIN}/config/locales/${CP_LANG}/* /home/${CP_DOMAIN}/config/
cp -rf /home/${CP_DOMAIN}/config/default/* /home/${CP_DOMAIN}/config/production/
cp -rf /home/${CP_DOMAIN}/files/bbb.mp4 /var/local/balancer/bbb.mp4
sed -Ei "s/127.0.0.1:3000/${CP_DOMAIN_}:3000/g" /home/${CP_DOMAIN}/config/production/nginx/conf.d/default.conf
sed -Ei "s/example_com/${CP_DOMAIN_}/g" /home/${CP_DOMAIN}/config/production/nginx/pagespeed.d/default.conf
sed -Ei "s/example_com/${CP_DOMAIN_}/g" /home/${CP_DOMAIN}/config/production/nginx/conf.d/default.conf
sed -Ei "s/example_com/${CP_DOMAIN_}/g" /home/${CP_DOMAIN}/config/production/nginx/error.d/default.conf
sed -Ei "s/example_com/${CP_DOMAIN_}/g" /home/${CP_DOMAIN}/config/production/nginx/ssl.d/default.conf
sed -Ei "s/example_com/${CP_DOMAIN_}/g" /home/${CP_DOMAIN}/config/production/sphinx/sphinx.conf
sed -Ei "s/example_com/${CP_DOMAIN_}/g" /home/${CP_DOMAIN}/config/production/sphinx/source.xml
sed -Ei "s/example_com/${CP_DOMAIN_}/g" /home/${CP_DOMAIN}/config/production/config.js
sed -Ei "s/example_com/${CP_DOMAIN_}/g" /home/${CP_DOMAIN}/config/default/config.js
sed -Ei "s/example_com/${CP_DOMAIN_}/g" /home/${CP_DOMAIN}/process.json
sed -Ei "s/example\.com/${CP_DOMAIN}/g" /home/${CP_DOMAIN}/config/production/nginx/pagespeed.d/default.conf
sed -Ei "s/example\.com/${CP_DOMAIN}/g" /home/${CP_DOMAIN}/config/production/nginx/conf.d/default.conf
sed -Ei "s/example\.com/${CP_DOMAIN}/g" /home/${CP_DOMAIN}/config/production/nginx/error.d/default.conf
sed -Ei "s/example\.com/${CP_DOMAIN}/g" /home/${CP_DOMAIN}/config/production/nginx/ssl.d/default.conf
sed -Ei "s/example\.com/${CP_DOMAIN}/g" /home/${CP_DOMAIN}/config/production/sphinx/sphinx.conf
sed -Ei "s/example\.com/${CP_DOMAIN}/g" /home/${CP_DOMAIN}/config/production/sphinx/source.xml
sed -Ei "s/example\.com/${CP_DOMAIN}/g" /home/${CP_DOMAIN}/config/production/config.js
sed -Ei "s/example\.com/${CP_DOMAIN}/g" /home/${CP_DOMAIN}/config/default/config.js
sed -Ei "s/example\.com/${CP_DOMAIN}/g" /home/${CP_DOMAIN}/process.json
sed -Ei "s/\"theme\":\s*\"[a-zA-Z0-9-]*\"/\"theme\":\"${CP_THEME}\"/" /home/${CP_DOMAIN}/config/production/config.js
cp -rf /home/"${CP_DOMAIN}"/config/locales/${CP_LANG}/* /home/"${CP_DOMAIN}"/config/
cp -rf /home/"${CP_DOMAIN}"/config/default/* /home/"${CP_DOMAIN}"/config/production/
cp -rf /home/"${CP_DOMAIN}"/files/bbb.mp4 /var/local/balancer/bbb.mp4
sed -Ei "s/127.0.0.1:3000/${CP_DOMAIN_}:3000/g" /home/"${CP_DOMAIN}"/config/production/nginx/conf.d/default.conf
sed -Ei "s/example_com/${CP_DOMAIN_}/g" /home/"${CP_DOMAIN}"/config/production/nginx/pagespeed.d/default.conf
sed -Ei "s/example_com/${CP_DOMAIN_}/g" /home/"${CP_DOMAIN}"/config/production/nginx/conf.d/default.conf
sed -Ei "s/example_com/${CP_DOMAIN_}/g" /home/"${CP_DOMAIN}"/config/production/nginx/error.d/default.conf
sed -Ei "s/example_com/${CP_DOMAIN_}/g" /home/"${CP_DOMAIN}"/config/production/nginx/ssl.d/default.conf
sed -Ei "s/example_com/${CP_DOMAIN_}/g" /home/"${CP_DOMAIN}"/config/production/config.js
sed -Ei "s/example_com/${CP_DOMAIN_}/g" /home/"${CP_DOMAIN}"/config/default/config.js
sed -Ei "s/example_com/${CP_DOMAIN_}/g" /home/"${CP_DOMAIN}"/process.json
sed -Ei "s/example_com/${CP_DOMAIN_}/g" /etc/sphinx/sphinx.conf
sed -Ei "s/example_com/${CP_DOMAIN_}/g" /etc/sphinx/source.xml
sed -Ei "s/example\.com/${CP_DOMAIN}/g" /home/"${CP_DOMAIN}"/config/production/nginx/pagespeed.d/default.conf
sed -Ei "s/example\.com/${CP_DOMAIN}/g" /home/"${CP_DOMAIN}"/config/production/nginx/conf.d/default.conf
sed -Ei "s/example\.com/${CP_DOMAIN}/g" /home/"${CP_DOMAIN}"/config/production/nginx/error.d/default.conf
sed -Ei "s/example\.com/${CP_DOMAIN}/g" /home/"${CP_DOMAIN}"/config/production/nginx/ssl.d/default.conf
sed -Ei "s/example\.com/${CP_DOMAIN}/g" /home/"${CP_DOMAIN}"/config/production/config.js
sed -Ei "s/example\.com/${CP_DOMAIN}/g" /home/"${CP_DOMAIN}"/config/default/config.js
sed -Ei "s/example\.com/${CP_DOMAIN}/g" /home/"${CP_DOMAIN}"/process.json
sed -Ei "s/example\.com/${CP_DOMAIN}/g" /etc/sphinx/sphinx.conf
sed -Ei "s/example\.com/${CP_DOMAIN}/g" /etc/sphinx/source.xml
sed -Ei "s/\"theme\":\s*\"[a-zA-Z0-9-]*\"/\"theme\":\"${CP_THEME}\"/" /home/"${CP_DOMAIN}"/config/production/config.js
git clone https://${GIT_SERVER}/CinemaPress/Theme-${CP_THEME}.git /var/${CP_THEME}
mkdir -p /home/${CP_DOMAIN}/themes/${CP_THEME}/
cp -rf /var/${CP_THEME}/* /home/${CP_DOMAIN}/themes/${CP_THEME}/
node /home/${CP_DOMAIN}/optimal.js
OPENSSL=`echo "${CP_PASSWD}" | openssl passwd -1 -stdin -salt CP`
echo "admin:${OPENSSL}" > /home/${CP_DOMAIN}/config/production/nginx/pass.d/${CP_DOMAIN}.pass
echo "${CP_DOMAIN}:${OPENSSL}" >> /home/${CP_DOMAIN}/config/production/nginx/pass.d/${CP_DOMAIN}.pass
if [ "${CP_IP}" = "ip" ]; then rm -rf /home/${CP_DOMAIN}/config/production/nginx/conf.d/default.conf; fi
ln -s /home/${CP_DOMAIN}/config/production/sphinx/sphinx.conf /etc/sphinx/sphinx.conf
ln -s /home/${CP_DOMAIN}/config/production/sphinx/source.xml /etc/sphinx/source.xml
mkdir -p /home/"${CP_DOMAIN}"/themes/${CP_THEME}/
cp -rf /var/${CP_THEME}/* /home/"${CP_DOMAIN}"/themes/${CP_THEME}/
node /home/"${CP_DOMAIN}"/optimal.js
OPENSSL=$(echo "${CP_PASSWD}" | openssl passwd -1 -stdin -salt CP)
echo "admin:${OPENSSL}" > /home/"${CP_DOMAIN}"/config/production/nginx/pass.d/"${CP_DOMAIN}".pass
echo "${CP_DOMAIN}:${OPENSSL}" >> /home/"${CP_DOMAIN}"/config/production/nginx/pass.d/"${CP_DOMAIN}".pass
if [ "${CP_IP}" = "ip" ]; then rm -rf /home/"${CP_DOMAIN}"/config/production/nginx/conf.d/default.conf; fi
if [ ! -f "/var/lib/sphinx/data/movies_${CP_DOMAIN_}.sps" ]; then indexer --all; fi
searchd
memcached -u root -d
node /home/${CP_DOMAIN}/config/update/default.js
node /home/"${CP_DOMAIN}"/config/update/default.js
else
searchd
memcached -u root -d
node /home/${CP_DOMAIN}/config/update/config.js
node /home/"${CP_DOMAIN}"/config/update/config.js
fi
crond -L /var/log/cron.log
cd /home/${CP_DOMAIN} && pm2-runtime start process.json
cd /home/"${CP_DOMAIN}" && pm2-runtime start process.json
}
docker_stop() {
sed -Ei "s/\/\/app\.use\(rebooting\(\)\);/app\.use\(rebooting\(\)\);/" "/home/${CP_DOMAIN}/app.js"
@ -1866,19 +1914,32 @@ docker_stop() {
sleep 5
}
docker_start() {
SPB="/var/lib/sphinx/data/movies_${CP_DOMAIN_}.spb"
CNF="/home/${CP_DOMAIN}/config/production/config.js"
CP_SPB="_${CP_DOMAIN_}_"
if [ -f "${SPB}" ] && [ -f "${CNF}" ]; then
KK=$(grep "\"key\"" "${CNF}")
KKK=$(echo ${KK} | sed 's/.*"key":\s*"\(FREE\|[a-zA-Z0-9-]\{32\}\)".*/\1/')
if [ "${#KKK}" -eq "32" ]; then
AAA=$(openssl enc -aes-256-cbc -pbkdf2 -iter 100000 -in "${SPB}" -out - -k "${CP_DOMAIN}/${KKK}" -d 2>/dev/null)
if [ "${#AAA}" -eq "7" ]; then
CP_SPB="${CP_SPB} | _${AAA}_"
fi
fi
fi
sed -Ei "s/app\.use\(rebooting\(\)\);/\/\/app\.use\(rebooting\(\)\);/" "/home/${CP_DOMAIN}/app.js"
searchd
memcached -u root -d
crond -L /var/log/cron.log
node /home/${CP_DOMAIN}/config/update/config.js
cd /home/${CP_DOMAIN} && pm2 restart process.json --update-env
node /home/"${CP_DOMAIN}"/config/update/config.js
cd /home/"${CP_DOMAIN}" && pm2 restart process.json --update-env
}
docker_restart() {
docker_stop
docker_start
}
docker_reload() {
cd /home/${CP_DOMAIN} && pm2 reload process.json
cd /home/"${CP_DOMAIN}" && pm2 reload process.json
}
docker_logs() {
SHOW_ERR_LOGS=$(pm2 logs --err --lines 50 --nostream | curl -s -F 'clbin=<-' https://clbin.com)
@ -1894,8 +1955,8 @@ docker_logs() {
_s
}
docker_zero() {
sed -i "s/xmlpipe_command =.*/xmlpipe_command =/" "/home/${CP_DOMAIN}/config/production/sphinx/sphinx.conf"
indexer xmlpipe2_${CP_DOMAIN_} --rotate
sed -i "s/xmlpipe_command =.*/xmlpipe_command =/" "/etc/sphinx/sphinx.conf"
indexer "xmlpipe2_${CP_DOMAIN_}" --rotate
(sleep 2; echo flush_all; sleep 2; echo quit;) | telnet 127.0.0.1 11211
}
docker_cron() {
@ -1958,7 +2019,7 @@ docker_backup() {
T=$(grep "\"theme\"" /home/"${CP_DOMAIN}"/config/production/config.js)
THEME_NAME=$(echo "${T}" | sed 's/.*"theme":\s*"\([a-zA-Z0-9-]*\)".*/\1/')
if [ "${THEME_NAME}" = "" ] || [ "${THEME_NAME}" = "${T}" ]; then exit 0; fi
PORT_DOMAIN=$(grep "mysql41" /home/"${CP_DOMAIN}"/config/production/sphinx/sphinx.conf | sed 's/.*:\([0-9]*\):mysql41.*/\1/')
PORT_DOMAIN=$(grep "mysql41" /etc/sphinx/sphinx.conf | sed 's/.*:\([0-9]*\):mysql41.*/\1/')
echo "FLUSH RTINDEX rt_${CP_DOMAIN_};" | mysql -h0 -P"${PORT_DOMAIN}"
echo "FLUSH RTINDEX content_${CP_DOMAIN_};" | mysql -h0 -P"${PORT_DOMAIN}"
echo "FLUSH RTINDEX comment_${CP_DOMAIN_};" | mysql -h0 -P"${PORT_DOMAIN}"
@ -2110,54 +2171,54 @@ while [ "${WHILE}" -lt "2" ]; do
WHILE=$((${WHILE}+1))
case ${OPTION} in
"i"|"install"|1 )
read_domain ${2}
read_domain "${2}"
sh_yes "reboot"
read_lang ${3}
read_theme ${4}
read_password ${5}
_s ${5}
read_lang "${3}"
read_theme "${4}"
read_password "${5}"
_s "${5}"
sh_progress
1_install ${2} ${3} ${4} ${5}
1_install "${2}" "${3}" "${4}" "${5}"
sh_progress 100
success_install
post_commands
exit 0
;;
"u"|"update"|2 )
read_domain ${2}
read_domain "${2}"
sh_not
_s ${2}
_s "${2}"
sh_progress
2_update ${2}
2_update "${2}" "${3}" "${4}"
sh_progress 100
post_commands
exit 0
;;
"b"|"backup"|3 )
read_domain ${2}
read_domain "${2}"
sh_not
_s ${2}
_s "${2}"
sh_progress
3_backup ${2} ${3} ${4} ${5} ${6} ${7}
3_backup "${2}" "${3}" "${4}" "${5}" "${6}" "${7}"
sh_progress 100
exit 0
;;
"t"|"theme"|4 )
read_domain ${2}
read_domain "${2}"
sh_not
read_theme ${3}
_s ${3}
read_theme "${3}"
_s "${3}"
sh_progress
4_theme ${2} ${3} ${4}
4_theme "${2}" "${3}" "${4}"
sh_progress 100
exit 0
;;
"d"|"database"|5 )
read_domain ${2}
read_domain "${2}"
sh_not
read_key ${3}
_s ${3}
5_database ${2} ${3}
read_key "${3}"
_s "${3}"
5_database "${2}" "${3}"
exit 0
;;
"h"|"https"|6 )
@ -2171,35 +2232,35 @@ while [ "${WHILE}" -lt "2" ]; do
exit 0
;;
"m"|"mirror"|7 )
read_domain ${2}
read_mirror ${3}
_s ${3}
read_domain "${2}"
read_mirror "${3}"
_s "${3}"
sh_progress
7_mirror ${2} ${3}
7_mirror "${2}" "${3}"
sh_progress 100
exit 0
;;
"r"|"rm"|"remove"|8 )
read_domain ${2}
read_domain "${2}"
sh_not
_s ${2}
_s "${2}"
sh_progress
8_remove ${2} ${3} ${4}
8_remove "${2}" "${3}" "${4}"
sh_progress 100
exit 0
;;
"en"|"ru" )
ip_install ${1}
ip_install "${1}"
exit 0
;;
"passwd" )
_br
read_domain ${2}
read_domain "${2}"
sh_not
read_password ${3}
_s ${3}
read_password "${3}"
_s "${3}"
sh_progress
docker exec ${CP_DOMAIN_} /usr/bin/cinemapress container "${1}" "${CP_PASSWD}" \
docker exec "${CP_DOMAIN_}" /usr/bin/cinemapress container "${1}" "${CP_PASSWD}" \
>>/var/log/docker_passwd_"$(date '+%d_%m_%Y')".log 2>&1
sh_progress
docker exec nginx nginx -s reload \
@ -2209,10 +2270,10 @@ while [ "${WHILE}" -lt "2" ]; do
;;
"images" )
_br
read_domain ${2}
read_domain "${2}"
sh_not
read_key ${3}
_s ${3}
read_key "${3}"
_s "${3}"
if [ -f "/home/${CP_DOMAIN}/files/poster/.latest" ]; then
wget --progress=bar:force -O /var/images.tar \
"http://d.cinemapress.io/${CP_KEY}/${CP_DOMAIN}?lang=${CP_LANG}&status=LATEST" 2>&1 | sh_wget
@ -2966,7 +3027,7 @@ while [ "${WHILE}" -lt "2" ]; do
"static" )
read_domain "${2}"
sh_not
RCS=$(docker exec "${CP_DOMAIN_}" /usr/bin/cinemapress container rclone config show 2>/dev/null | grep "CINEMASTATIC")
RCS=$(docker exec "${CP_DOMAIN_}" rclone config show 2>/dev/null | grep "CINEMASTATIC")
if [ "${RCS}" = "" ]; then
if [ "${4}" != "" ]; then
docker exec "${CP_DOMAIN_}" rclone config delete CINEMASTATIC \

View file

@ -423,7 +423,7 @@ searchd
{
listen = 127.0.0.1:9312
listen = 127.0.0.1:9306:mysql41
listen = 127.0.0.1:3306:mysql41
log = /home/example.com/log/searchd.log
pid_file = /home/example.com/log/searchd.pid
read_timeout = 5

View file

@ -30,9 +30,9 @@ module.exports = {
},
"pagespeed": 0,
"loadavg": {
"one": 720,
"five": 600,
"fifteen": 480,
"one": 1200,
"five": 960,
"fifteen": 720,
"message": "The server is overloaded by [percent] please come back later."
},
"publish": {
@ -98,7 +98,7 @@ module.exports = {
"codes": {
"head": "",
"footer": "",
"robots": "User-agent: *\nDisallow: /\nDisallow: /type/*/*\nDisallow: /type-*/*\nDisallow: /movie/*/*\nDisallow: /movie-*/*\nDisallow: /year/*/*\nDisallow: /year-*/*\nDisallow: /genre/*/*\nDisallow: /genre-*/*\nDisallow: /country/*/*\nDisallow: /country-*/*\nDisallow: /director/*/*\nDisallow: /director-*/*\nDisallow: /actor/*/*\nDisallow: /actor-*/*\nDisallow: /search\nDisallow: /*?sorting*\nDisallow: /*?tag*\nDisallow: /*?q*\nDisallow: /*?random*\nDisallow: /*?PageSpeed*\nDisallow: /*?desktop*\nDisallow: /*?year*\nDisallow: /*?genre*\nDisallow: /*?country*\nDisallow: /iframe\nDisallow: /noindex\nDisallow: /admin*"
"robots": "User-agent: *\nDisallow: /\nDisallow: /type/*/*\nDisallow: /type-*/*\nDisallow: /movie/*/*\nDisallow: /movie-*/*\nDisallow: /year/*/*\nDisallow: /year-*/*\nDisallow: /genre/*/*\nDisallow: /genre-*/*\nDisallow: /country/*/*\nDisallow: /country-*/*\nDisallow: /director/*/*\nDisallow: /director-*/*\nDisallow: /actor/*/*\nDisallow: /actor-*/*\nDisallow: /search\nDisallow: /*?sorting*\nDisallow: /*?tag*\nDisallow: /*?q*\nDisallow: /*?random*\nDisallow: /*?PageSpeed*\nDisallow: /*?desktop*\nDisallow: /*?year*\nDisallow: /*?genre*\nDisallow: /*?country*\nDisallow: /iframe\nDisallow: /noindex\nDisallow: /mobile-version/noindex\nDisallow: /tv-version\nDisallow: /admin*"
},
"index": {
"type": {

View file

@ -30,9 +30,9 @@ module.exports = {
},
"pagespeed": 0,
"loadavg": {
"one": 720,
"five": 600,
"fifteen": 480,
"one": 1200,
"five": 960,
"fifteen": 720,
"message": "Сервер перегружен на [percent] пожалуйста зайдите позже."
},
"publish": {
@ -99,7 +99,7 @@ module.exports = {
"codes": {
"head": "",
"footer": "",
"robots": "User-agent: *\nDisallow: /\nDisallow: /type/*/*\nDisallow: /type-*/*\nDisallow: /movie/*/*\nDisallow: /movie-*/*\nDisallow: /year/*/*\nDisallow: /year-*/*\nDisallow: /genre/*/*\nDisallow: /genre-*/*\nDisallow: /country/*/*\nDisallow: /country-*/*\nDisallow: /director/*/*\nDisallow: /director-*/*\nDisallow: /actor/*/*\nDisallow: /actor-*/*\nDisallow: /search\nDisallow: /*?sorting*\nDisallow: /*?tag*\nDisallow: /*?q*\nDisallow: /*?random*\nDisallow: /*?PageSpeed*\nDisallow: /*?desktop*\nDisallow: /*?year*\nDisallow: /*?genre*\nDisallow: /*?country*\nDisallow: /iframe\nDisallow: /noindex\nDisallow: /admin*"
"robots": "User-agent: *\nDisallow: /\nDisallow: /type/*/*\nDisallow: /type-*/*\nDisallow: /movie/*/*\nDisallow: /movie-*/*\nDisallow: /year/*/*\nDisallow: /year-*/*\nDisallow: /genre/*/*\nDisallow: /genre-*/*\nDisallow: /country/*/*\nDisallow: /country-*/*\nDisallow: /director/*/*\nDisallow: /director-*/*\nDisallow: /actor/*/*\nDisallow: /actor-*/*\nDisallow: /search\nDisallow: /*?sorting*\nDisallow: /*?tag*\nDisallow: /*?q*\nDisallow: /*?random*\nDisallow: /*?PageSpeed*\nDisallow: /*?desktop*\nDisallow: /*?year*\nDisallow: /*?genre*\nDisallow: /*?country*\nDisallow: /iframe\nDisallow: /noindex\nDisallow: /mobile-version/noindex\nDisallow: /tv-version\nDisallow: /admin*"
},
"index": {
"type": {

File diff suppressed because it is too large Load diff

View file

@ -252,7 +252,7 @@
"content_description": "Последние обновления фильмов",
"content_tags": "Коллекции,Обновления",
"content_image": "/files/content/collection4.png",
"content_movies": "1129900,1111004,926540,839650,843649,961715,835086,924311,489414,935940,994864,768561,916498,840829,462193"
"content_movies": "1190387,1101569,977990,1055528,894972,512673,1060511,1330091,1016160,1111004,1179073,472386,1042726,1128272,1143242"
},
{
"content_url": "poslednie-obnovleniya-serialov",
@ -260,7 +260,7 @@
"content_description": "Последние обновления сериалов",
"content_tags": "Коллекции,Обновления",
"content_image": "/files/content/collection5.png",
"content_movies": "1118138,1227803,1044004,1228254,1147693,460586,1111018,585727,1178445,464963,1197956,1167154,502838,1048143,1112514"
"content_movies": "1188292,1263496,1188597,1162527,1048602,1263845,1044004,1181436,1118138,1048143,929473,1132285,891433,1197956,1197711"
}
]
}

View file

@ -43,14 +43,14 @@ var CP_save = require(path.join(
'..',
'..',
'lib',
'CP_save.min.js'
'CP_save.js'
));
var CP_get = require(path.join(
path.dirname(__filename),
'..',
'..',
'lib',
'CP_get.min.js'
'CP_get.js'
));
/**

View file

@ -11,7 +11,8 @@ var fs = require('fs');
* Global env.
*/
var save = process.argv && typeof process.argv[2] !== 'undefined' && process.argv[2];
var save =
process.argv && typeof process.argv[2] !== 'undefined' && process.argv[2];
var domain = '';
try {
@ -44,14 +45,14 @@ var CP_save = require(path.join(
'..',
'..',
'lib',
'CP_save.min.js'
'CP_save.js'
));
var CP_get = require(path.join(
path.dirname(__filename),
'..',
'..',
'lib',
'CP_get.min.js'
'CP_get.js'
));
/**

View file

@ -51,7 +51,7 @@ function tryParseJSON(jsonString) {
* Module dependencies.
*/
var CP_save = require(path.join(path.dirname(__filename), '..', '..', 'lib', 'CP_save.min.js'));
var CP_save = require(path.join(path.dirname(__filename), '..', '..', 'lib', 'CP_save.js'));
/**
* Configuration dependencies.
@ -135,9 +135,11 @@ async.series(
var c = objAdd(objReplace(config_default, config), config);
c.theme = thm;
c.protocol = prt || prt2 ? 'https://' : config.protocol;
c.database = config_default.database
? config_default.database
: c.database;
c.database =
config_default.database &&
config_default.database.toLowerCase() !== 'FREE'.toLowerCase()
? config_default.database
: c.database;
c.domain = config_default.domain
? config_default.domain
: c.domain;

View file

@ -39,7 +39,7 @@ var CP_save = require(path.join(
'..',
'..',
'lib',
'CP_save.min.js'
'CP_save.js'
));
/**

241
config/update/mirror.js Normal file
View file

@ -0,0 +1,241 @@
'use strict';
/**
* Node dependencies.
*/
var path = require('path');
var fs = require('fs');
/**
* Global env.
*/
var domain = '';
try {
var p = tryParseJSON(
fs.readFileSync(
path.join(path.dirname(__filename), '..', '..', 'process.json'),
'utf8'
)
);
var e = p.apps[0].env;
if (e && e['CP_RT']) {
domain = '_' + e['CP_RT'].replace('rt_', '') + '_';
}
for (var prop in e) {
if (e.hasOwnProperty(prop)) {
process.env[prop] = e[prop];
}
}
} catch (err) {
console.log('NOT FILE PROCESS DATA');
process.exit();
}
/**
* Module dependencies.
*/
var CP_save = require(path.join(
path.dirname(__filename),
'..',
'..',
'lib',
'CP_save.js'
));
var CP_get = require(path.join(
path.dirname(__filename),
'..',
'..',
'lib',
'CP_get.js'
));
/**
* Node dependencies.
*/
var async = require('async');
/**
* Valid JSON.
*
* @param {String} jsonString
*/
function tryParseJSON(jsonString) {
try {
var o = JSON.parse(jsonString);
if (o && typeof o === 'object') {
return o;
}
} catch (e) {}
return {};
}
var indexed = 0;
async.series(
[
function(callback) {
var i = 1;
async.forever(
function(next) {
CP_get.movies(
{ from: process.env.CP_RT, certainly: true },
500,
'',
i,
false,
function(err, movies) {
i++;
if (err) {
console.error(err);
return next('STOP');
}
if (movies && movies.length) {
async.eachOfLimit(
movies,
1,
function(movie, key, callback) {
var old = movie.all_movies;
delete movie.all_movies;
if (old && old === domain) {
return callback();
}
CP_save.save(movie, 'rt', function(err, result) {
console.log(
result,
old.replace(/(^_|_$)/gi, '') +
' -> ' +
domain.replace(/(^_|_$)/gi, '')
);
return callback(err);
});
},
function(err) {
if (err) console.error(err);
return next();
}
);
} else {
return next('STOP');
}
}
);
},
function() {
console.log('INDEXED: ', indexed);
return callback();
}
);
},
function(callback) {
var i = 1;
async.forever(
function(next) {
CP_get.contents(
{ from: process.env.CP_RT, certainly: true },
500,
i,
false,
function(err, contents) {
i++;
if (err) {
console.error(err);
return next('STOP');
}
if (contents && contents.length) {
async.eachOfLimit(
contents,
1,
function(content, key, callback) {
var old = content.all_contents;
delete content.all_contents;
if (old && old === domain) {
return callback();
}
CP_save.save(content, 'content', function(err, result) {
console.log(
result,
old.replace(/(^_|_$)/gi, '') +
' -> ' +
domain.replace(/(^_|_$)/gi, '')
);
return callback(err);
});
},
function(err) {
if (err) console.error(err);
return next();
}
);
} else {
return next('STOP');
}
}
);
},
function() {
return callback();
}
);
},
function(callback) {
var i = 1;
async.forever(
function(next) {
CP_get.comments(
{ from: process.env.CP_RT, certainly: true },
500,
'',
i,
function(err, comments) {
i++;
if (err) {
console.error(err);
return next('STOP');
}
if (comments && comments.length) {
async.eachOfLimit(
comments,
1,
function(comment, key, callback) {
var old = comment.all_comments;
delete comment.all_comments;
if (old && old === domain) {
return callback();
}
CP_save.save(comment, 'comment', function(err, result) {
console.log(
result,
old.replace(/(^_|_$)/gi, '') +
' -> ' +
domain.replace(/(^_|_$)/gi, '')
);
return callback(err);
});
},
function(err) {
if (err) console.error(err);
return next();
}
);
} else {
return next('STOP');
}
}
);
},
function() {
return callback();
}
);
}
],
function() {
return process.exit();
}
);

View file

@ -10,7 +10,7 @@
// @supportURL https://enota.club/
// @icon https://avatars3.githubusercontent.com/u/16612433?s=200
// @license MIT
// @version 2020.1
// @version 2020.5
// @run-at document-end
// @include http://*/*/movies?id=*
// @include https://*/*/movies?id=*
@ -27,8 +27,6 @@
// @grant GM_xmlhttpRequest
// ==/UserScript==
autoComplete();
var omdb = getCookie('omdb');
var tmdb = getCookie('tmdb');
@ -37,6 +35,8 @@ if (!tmdb) inputTMDb();
var urls = [];
autoComplete();
function parseData() {
var movieData = {};
@ -93,26 +93,6 @@ function parseData() {
return;
}
if ((!tmdb && tmdb_id) || (!omdb && imdb_id)) {
icon.setAttribute('class', 'fa fa-bug');
text.innerHTML = '&nbsp;&nbsp;API keys not filled!';
return;
}
if (kp_id && (lang === 'ru' || (!imdb_id && !tmdb_id && !douban_id))) {
urls.push('https://rating.kinopoisk.ru/' + kp_id + '.xml');
urls.push(
'https://api1573848848.apicollaps.cc/franchise/details?' +
'token=6006bca37f7681fe1edf75fcf936aecc&' +
'kinopoisk_id=' +
'' +
kp_id
);
}
if (douban_id && (lang === 'zh' || (!imdb_id && !tmdb_id && !kp_id))) {
urls.push('https://api.douban.com/v2/movie/subject/' + '' + douban_id);
urls.push('https://movie.douban.com/subject/' + '' + douban_id);
}
if (tmdb && tmdb_id) {
urls.push(
'https://api.themoviedb.org/3/' +
@ -128,23 +108,25 @@ function parseData() {
tmdb
);
}
if (omdb && imdb_id) {
urls.push(
'https://www.omdbapi.com/?' + 'i=tt' + imdb_id + '&' + 'apikey=' + omdb
);
}
if (kp_id && lang !== 'ru') {
urls.push('https://rating.kinopoisk.ru/' + kp_id + '.xml');
if (
kp_id &&
(lang === 'ru' || lang === 'uk' || (!imdb_id && !tmdb_id && !douban_id))
) {
urls.push(
'https://api1573848848.apicollaps.cc/franchise/details?' +
'token=6006bca37f7681fe1edf75fcf936aecc&' +
'kinopoisk_id=' +
'' +
kp_id
);
urls.push('https://pleer.video/' + kp_id + '.json');
urls.push('https://rating.kinopoisk.ru/' + kp_id + '.xml');
}
if (douban_id && lang !== 'zh') {
urls.push('https://movie.douban.com/subject/' + '' + douban_id);
if (douban_id && (lang === 'zh' || (!imdb_id && !tmdb_id && !kp_id))) {
urls.push('https://api.douban.com/v2/movie/subject/' + douban_id);
urls.push('https://movie.douban.com/subject/' + douban_id);
}
if (omdb && imdb_id && lang === 'en') {
urls.push('https://www.omdbapi.com/?i=tt' + imdb_id + '&apikey=' + omdb);
}
function api() {
@ -156,7 +138,7 @@ function parseData() {
if (lang !== 'ru' && (r === 'translate' || r === 'quality')) {
continue;
}
movieData[r] = movieData[r] ? movieData[r] : res[r];
movieData[r] = res[r] ? res[r] : movieData[r];
if (
url.indexOf('omdbapi.com') + 1 &&
(r === 'imdb_rating' || r === 'imdb_vote')
@ -168,10 +150,11 @@ function parseData() {
api();
});
} else {
if (!movieData.title_ru && !movieData.title_en) {
if (!movieData.title_ru || !movieData.title_en) {
icon.setAttribute('class', 'fa fa-bug');
text.innerHTML = '&nbsp;&nbsp;No information!';
console.log(movieData);
autoComplete();
return;
}
@ -183,15 +166,25 @@ function parseData() {
: '';
if (movieData.title_ru) {
document.querySelector('[name="movie.title_ru"]').value =
movieData.title_ru;
document.querySelector(
'[name="movie.title_ru"]'
).value = document.querySelector('[name="movie.title_ru"]').value
? document.querySelector('[name="movie.title_ru"]').value
: movieData.title_ru;
}
if (movieData.title_en) {
document.querySelector('[name="movie.title_en"]').value =
movieData.title_en;
document.querySelector(
'[name="movie.title_en"]'
).value = document.querySelector('[name="movie.title_en"]').value
? document.querySelector('[name="movie.title_en"]').value
: movieData.title_en;
}
if (movieData.type) {
document.querySelector('[name="movie.type"]').value = movieData.type;
document.querySelector(
'[name="movie.type"]'
).value = document.querySelector('[name="movie.type"]').value
? document.querySelector('[name="movie.type"]').value
: movieData.type;
}
if (movieData.premiere) {
document.querySelector('[name="movie.premiere"]').value =
@ -227,18 +220,32 @@ function parseData() {
document.querySelector('[name="movie.year"]').value = movieData.year;
}
if (movieData.country) {
document.querySelector('[name="movie.country"]').value =
movieData.country;
document.querySelector(
'[name="movie.country"]'
).value = document.querySelector('[name="movie.country"]').value
? document.querySelector('[name="movie.country"]').value
: movieData.country;
}
if (movieData.genre) {
document.querySelector('[name="movie.genre"]').value = movieData.genre;
document.querySelector(
'[name="movie.genre"]'
).value = document.querySelector('[name="movie.genre"]').value
? document.querySelector('[name="movie.genre"]').value
: movieData.genre;
}
if (movieData.actor) {
document.querySelector('[name="movie.actor"]').value = movieData.actor;
document.querySelector(
'[name="movie.actor"]'
).value = document.querySelector('[name="movie.actor"]').value
? document.querySelector('[name="movie.actor"]').value
: movieData.actor;
}
if (movieData.director) {
document.querySelector('[name="movie.director"]').value =
movieData.director;
document.querySelector(
'[name="movie.director"]'
).value = document.querySelector('[name="movie.director"]').value
? document.querySelector('[name="movie.director"]').value
: movieData.director;
}
if (movieData.kp_rating) {
document.querySelector('[name="movie.kp_rating"]').value =
@ -260,6 +267,10 @@ function parseData() {
document.querySelector('[name="movie.imdb_id"]').value =
movieData.imdb_id;
}
if (movieData.tmdb_id) {
document.querySelector('[name="movie.tmdb_id"]').value =
movieData.tmdb_id;
}
if (
movieData.description &&
document.querySelector('[name="movie.description"]').value.length < 900
@ -394,7 +405,9 @@ function getAPI(url, callback) {
console.error(e);
}
var res = {};
if (url.indexOf('apicollaps.cc') + 1) {
if (url.indexOf('pleer.video') + 1) {
res = parsePleer(result);
} else if (url.indexOf('apicollaps.cc') + 1) {
res = parseKP(result);
} else if (url.indexOf('omdbapi.com') + 1) {
res = parseOMDb(result);
@ -546,6 +559,7 @@ function parseKP(r) {
if (!r.id) return {};
var res = r;
return {
imdb_id: res.imdb_id ? res.imdb_id.replace(/[^0-9]/g, '') : '',
title_ru: res.name
? res.name
.split('(')[0]
@ -578,7 +592,7 @@ function parseKP(r) {
).join(','),
actor: (res.actors
? res.actors.map(function(v, i) {
return i < 10 ? v : null;
return i < 5 ? v : null;
})
: []
)
@ -586,7 +600,7 @@ function parseKP(r) {
.join(','),
director: (res.director
? res.director.map(function(v, i) {
return i < 10 ? v : null;
return i < 3 ? v : null;
})
: []
)
@ -609,6 +623,46 @@ function parseKP(r) {
};
}
function parsePleer(r) {
if (!r.kp_id) return {};
var res = r;
return {
imdb_id: res.imdb_id ? res.imdb_id : '',
tmdb_id: res.tmdb_id ? res.tmdb_id : '',
title_ru: res.title_ru ? res.title_ru : '',
title_en: res.title_en ? res.title_en : '',
year: res.year ? res.year : '',
type: res.type ? '1' : '0',
genre: res.genre ? res.genre : '',
country: res.country ? res.country : '',
actor: res.actor
? res.actor
.split(',')
.map(function(v, i) {
return i <= 4 ? v : null;
})
.filter(Boolean)
.join(',')
: '',
director: res.director
? res.director
.split(',')
.map(function(v, i) {
return i <= 2 ? v : null;
})
.filter(Boolean)
.join(',')
: '',
description: res.description ? res.description : '',
poster: '1',
kp_rating: res.kp_rating,
kp_vote: res.kp_vote,
imdb_rating: res.imdb_rating,
imdb_vote: res.imdb_vote,
premiere: res.premiere ? res.premiere : ''
};
}
function parseDouban(res) {
return {
title_ru: res.title ? res.title : '',
@ -675,6 +729,20 @@ function autoComplete() {
right.parentNode.insertBefore(autoBtn, right);
}
autoBtn.addEventListener('click', parseData, false);
if (window.location.hash && window.location.hash.substring(1)) {
window.history.forward(1);
var ids = window.location.hash.substring(1).split(',');
document.querySelector('[name="movie.kp_id"]').value = ids.shift();
document.querySelector('[name="movie.id"]').value = '';
window.location.hash = ids.join(',');
if (autoBtn.fireEvent) {
autoBtn.fireEvent('onclick');
} else {
var evObj = document.createEvent('Events');
evObj.initEvent('click', true, false);
autoBtn.dispatchEvent(evObj);
}
}
}
function inputOMDb() {

View file

@ -5,7 +5,6 @@
*/
var adop = require('adop');
var exec = require('child_process').exec;
var request = require('request');
var sinoni = require('sinoni');
var async = require('async');
@ -45,8 +44,8 @@ try {
* Module dependencies.
*/
var CP_get = require('./CP_get.min');
var CP_save = require('./CP_save.min');
var CP_get = require('./CP_get');
var CP_save = require('./CP_save');
var CP_cache = require('./CP_cache');
var CP_translit = require('../lib/CP_translit');
var CP_structure = require('../lib/CP_structure');

1303
lib/CP_get.js Normal file

File diff suppressed because it is too large Load diff

1
lib/CP_get.min.js vendored

File diff suppressed because one or more lines are too long

371
lib/CP_save.js Normal file
View file

@ -0,0 +1,371 @@
'use strict';
/**
* Module dependencies.
*/
var CP_sphinx = require('../lib/CP_sphinx');
/**
* Configuration dependencies.
*/
var config = require('../config/production/config');
/**
* Node dependencies.
*/
var async = require('async');
var path = require('path');
var exec = require('child_process').exec;
var fs = require('fs');
/**
* Callback.
*
* @callback Callback
* @param {Object} err
* @param {String} [result]
*/
/**
* Save config.
*
* @param {Object} content
* @param {String} name
* @param {Callback} callback
*/
function saveContent(content, name, callback) {
if (name === 'config' || name === 'modules') {
if (
name === 'config' &&
typeof content === 'object' &&
config.domain !== content.domain
) {
config.domain = content.domain;
}
var data = JSON.stringify(content, null, '\t');
var dir = path.join(path.dirname(__filename), '..', 'config', 'production');
cp(
path.join(dir, name + '.js'),
path.join(dir, name + '.prev.js'),
function(err) {
if (err) return callback(err);
fs.writeFile(
path.join(dir, name + '.js'),
'module.exports = ' + data + ';',
function(err) {
if (err) {
cp(
path.join(dir, name + '.prev.js'),
path.join(dir, name + '.js'),
function(err) {
if (err) console.error(err);
}
);
return callback(err);
}
exec('pm2 id ' + config.domain, function(err, ids) {
ids = ids ? JSON.parse(ids) : [];
async.eachOfLimit(
ids,
1,
function(id, key, callback) {
if (
typeof process.env.pm_id === 'undefined' ||
parseInt(id) === parseInt(process.env.pm_id)
) {
callback(null);
} else {
exec('pm2 reload ' + id, function(err) {
return err ? callback(err) : callback(null);
});
}
},
function(err) {
return err
? callback(err)
: callback(null, [process.env.pm_id, ids]);
}
);
});
}
);
}
);
} else {
var db = name + '_' + config.domain.replace(/[^A-Za-z0-9]/g, '_');
if (content.delete) {
CP_sphinx.query(
'DELETE FROM ' + db + ' WHERE id IN (' + content.id + ')',
function(err) {
if (err) return callback(err);
callback(null, 'Delete ID ' + content.id);
}
);
} else if (content.id) {
if (
content.duplicate &&
(content.actor ||
content.genre ||
content.country ||
content.director ||
content.year)
) {
return callback(null, '');
}
CP_sphinx.query(
'SELECT * FROM ' +
process.env[
'CP' + '_' + (name === 'comment' ? 'COMMENT' : 'XML' + 'PIPE' + '2')
] +
(content.duplicate ? ', ' + process.env['CP' + '_' + 'RT'] : '') +
' WHERE id = ' +
content.id,
function(err, results) {
if (err) return callback(err);
var result = results && results.length ? results[0] : {};
delete content.duplicate;
try {
var cnt = content.custom ? JSON.parse(content.custom) : {};
var res = result.custom ? JSON.parse(result.custom) : {};
cnt = Object.assign({}, res, cnt);
content.custom = JSON.stringify(cnt);
} catch (e) {
console.error(e);
}
content = Object.assign({}, result, content);
if (
content.title_ru ||
content.title_en ||
content.user_login ||
content.content_title ||
content.comment_text
) {
var query = insertQuery(content, name);
CP_sphinx.query(query, function(err) {
if (err) return callback(err);
callback(
null,
'Insert ID ' +
(content.id ||
content.kp_id ||
content.content_url ||
content.comment_id)
);
});
} else {
callback(null, '');
}
}
);
} else {
var query = insertQuery(content, name);
CP_sphinx.query(query, function(err) {
if (err) return callback(err);
callback(null, 'Insert data.');
});
}
}
/**
* Copy config.
*
* @param {String} oldName
* @param {String} newName
* @param {Callback} callback
*/
function cp(oldName, newName, callback) {
exec('cp ' + oldName + ' ' + newName, function(error, stdout, stderr) {
if (error) return callback(error);
if (stdout) console.log(stdout);
if (stderr) console.log(stderr);
callback(null);
});
}
/**
* Create insert query.
*
* @param {Object} content
* @param {String} name
* @return {String}
*/
function insertQuery(content, name) {
var id = content.id ? content.id : 0;
delete content.id;
if (name === 'rt') {
if (!id) {
id = content.kp_id;
}
if (!content.query_id) {
content.query_id = content.kp_id;
}
if (content.custom) {
try {
var cst = JSON.parse(content.custom);
cst.unique = typeof cst.unique !== 'undefined' ? cst.unique : true;
cst.lastmod = new Date().toJSON();
content.custom = JSON.stringify(cst);
} catch (e) {
console.error(e);
content.custom = JSON.stringify({
unique: true,
lastmod: new Date().toJSON()
});
}
} else {
content.custom = JSON.stringify({
unique: true,
lastmod: new Date().toJSON()
});
}
if (!content.all_movies) {
content.all_movies =
'_' + config.domain.replace(/[^A-Za-z0-9]/g, '_') + '_';
}
} else if (name === 'content') {
if (!id) {
id = new Date().getTime();
}
if (!content.all_contents) {
content.all_contents =
'_' + config.domain.replace(/[^A-Za-z0-9]/g, '_') + '_';
}
content.content_publish =
new Date().getTime() + 719528 * 1000 * 60 * 60 * 24;
} else if (name === 'comment') {
if (!id) {
id = content.comment_id || new Date().getTime();
}
if (!content.all_comments) {
content.all_comments =
'_' + config.domain.replace(/[^A-Za-z0-9]/g, '_') + '_';
}
if (!content.comment_publish) {
content.comment_publish =
new Date().getTime() + 719528 * 1000 * 60 * 60 * 24;
}
content.comment_id = id;
}
var list = {
rt: [
'id',
'kp_id',
'rating',
'vote',
'kp_rating',
'kp_vote',
'imdb_rating',
'imdb_vote',
'premiere',
'type',
'poster',
'title_ru',
'title_en',
'title_page',
'description',
'description_short',
'pictures',
'custom',
'query_id',
'search',
'year',
'country',
'director',
'genre',
'actor',
'player',
'translate',
'quality',
'all_movies'
],
user: [
'user_id',
'user_custom',
'user_login',
'user_avatar',
'user_email',
'user_confirm',
'user_date',
'user_text',
'all_users'
],
content: [
'content_publish',
'content_url',
'content_title',
'content_description',
'content_image',
'content_tags',
'content_movies',
'all_contents'
],
comment: [
'comment_custom',
'comment_publish',
'comment_id',
'content_id',
'movie_id',
'season_id',
'episode_id',
'user_id',
'reply_id',
'comment_like',
'comment_dislike',
'comment_confirm',
'comment_star',
'comment_url',
'comment_text',
'comment_title',
'comment_anonymous',
'comment_avatar',
'comment_admin',
'comment_ip',
'comment_vote_ip',
'all_comments'
]
};
var keys = Object.keys(content).filter(function(k) {
return list[name].indexOf(k.toLowerCase()) !== -1;
});
var insert = [];
for (var i = 0, len = keys.length; i < len; i++) {
insert.push(sphinxEscape(content[keys[i]]));
}
keys.unshift('id');
insert.unshift(id);
var db = name + '_' + config.domain.replace(/[^A-Za-z0-9]/g, '_');
return (
'REPLACE INTO ' +
db +
' ( ' +
keys.join(', ') +
" ) VALUES ( '" +
insert.join("', '") +
"' )"
);
}
function sphinxEscape(stringToEscape) {
return ('' + stringToEscape)
.replace(/'/gi, "\\'")
.replace(/\n/gi, '\\n')
.replace(/\r/gi, '\\r');
}
}
module.exports = {
save: saveContent
};

1
lib/CP_save.min.js vendored

File diff suppressed because one or more lines are too long

111
lib/CP_sphinx.js Normal file
View file

@ -0,0 +1,111 @@
'use strict';
/**
* Module dependencies.
*/
var CP_cache = require('./CP_cache');
/**
* Configuration dependencies.
*/
var config = require('../config/production/config');
/**
* Node dependencies.
*/
var exec = require('child_process').exec;
var sphinx = require('sphinx');
var md5 = require('md5');
/**
* Callback.
*
* @callback Callback
* @param {Object} err
* @param {Object} [render]
*/
/**
* Query to sphinx.
*
* @param {String} query
* @param {Callback} callback
*/
function sphinxQuery(query, callback) {
var hash = md5(query);
return config.cache.time
? CP_cache.get(hash, function(err, render) {
return render
? callback(null, render)
: getSphinx(function(err, render) {
return err ? callback(err) : callback(null, render);
});
})
: getSphinx(function(err, render) {
return err ? callback(err) : callback(null, render);
});
/**
* Sphinx.
*
* @param {Callback} callback
*/
function getSphinx(callback) {
var connection = sphinx.createConnection({});
connection.connect(function(err) {
if (err) {
connection.end();
if (
err.code === 'PROTOCOL_CONNECTION_LOST' ||
err.code === 'ECONNREFUSED'
) {
restartSphinx(function(err, render) {
callback(err, render);
});
} else {
callback(err);
}
} else {
connection.query(query, function(err, results) {
connection.end();
if (err) return callback(err);
callback(null, results);
if (config.cache.time && results) {
CP_cache.set(hash, results, config.cache.time);
}
});
}
});
}
/**
* Restart sphinx.
*
* @param {Callback} callback
*/
function restartSphinx(callback) {
exec('searchd --stop');
setTimeout(function() {
exec('searchd');
setTimeout(function() {
getSphinx(function(err, render) {
return err ? callback(err) : callback(null, render);
});
}, 2500);
}, 2500);
}
}
module.exports = {
query: sphinxQuery
};

File diff suppressed because one or more lines are too long

View file

@ -4,7 +4,7 @@
* Module dependencies.
*/
var CP_get = require('../lib/CP_get.min');
var CP_get = require('../lib/CP_get');
var CP_structure = require('../lib/CP_structure');
/**

View file

@ -25,12 +25,6 @@ function mobileVersion(url) {
var data = '';
if (/:\/\/m\.|\/mobile-version/i.test(url)) {
data +=
'<link rel="canonical" href="' +
url
.replace('://m.', '://' + (config.botdomain || config.subdomain))
.replace('/mobile-version', '') +
'">';
var css = fs.readFileSync(
path.join(
path.dirname(__dirname),

View file

@ -16,45 +16,45 @@
},
"homepage": "https://CinemaPress.io/",
"dependencies": {
"pm2": "4.2.3",
"whois": "2.12.0",
"async": "3.1.0",
"pm2": "4.4.0",
"whois": "2.12.1",
"async": "3.2.0",
"base64-stream": "1.0.0",
"body-parser": "1.19.0",
"cheerio": "1.0.0-rc.3",
"cookie-parser": "1.4.4",
"ejs": "3.0.1",
"cookie-parser": "1.4.5",
"ejs": "3.1.2",
"eval": "0.1.4",
"express": "4.17.1",
"html-entities": "1.2.1",
"html-entities": "1.3.1",
"html-minifier": "4.0.0",
"i18n": "0.8.4",
"i18n": "0.9.0",
"imap": "0.8.19",
"ip-range-check": "0.2.0",
"isbot": "2.5.4",
"isbot": "2.5.7",
"limax": "2.0.0",
"mailparser-mit": "1.0.0",
"mimemessage": "1.0.5",
"maxmind": "4.1.0",
"maxmind": "4.1.1",
"md5": "2.2.1",
"memcached": "2.2.2",
"moment": "2.24.0",
"moment": "2.25.0",
"multer": "1.4.2",
"mysql": "2.17.1",
"mysql": "2.18.1",
"os-utils": "0.0.14",
"request": "2.88.0",
"sharp": "0.23.4",
"request": "2.88.2",
"sharp": "0.25.2",
"sinoni": "1.2.5",
"ua-parser-js": "0.7.21",
"nodemailer": "6.4.2",
"nodemailer": "6.4.6",
"lru-cache": "5.1.1",
"adop": "2.3.0",
"object-path": "0.11.4",
"react": "16.12.0",
"react-dom": "16.12.0",
"react": "16.13.1",
"react-dom": "16.13.1",
"avataaars": "1.2.1",
"@dicebear/avatars": "4.0.2",
"@dicebear/avatars-avataaars-sprites": "4.0.2"
"@dicebear/avatars": "4.0.8",
"@dicebear/avatars-avataaars-sprites": "4.0.8"
},
"devDependencies": {
"prettier": "1.19.1"

View file

@ -4,8 +4,8 @@
* Module dependencies.
*/
var CP_get = require('../lib/CP_get.min');
var CP_save = require('../lib/CP_save.min');
var CP_get = require('../lib/CP_get');
var CP_save = require('../lib/CP_save');
var CP_cache = require('../lib/CP_cache');
var CP_structure = require('../lib/CP_structure');

View file

@ -4,8 +4,8 @@
* Module dependencies.
*/
var CP_get = require('../lib/CP_get.min');
var CP_save = require('../lib/CP_save.min');
var CP_get = require('../lib/CP_get');
var CP_save = require('../lib/CP_save');
/**
* Configuration dependencies.

View file

@ -4,7 +4,7 @@
* Module dependencies.
*/
var CP_get = require('../lib/CP_get.min');
var CP_get = require('../lib/CP_get');
var CP_tv = require('../modules/CP_tv');
var CP_translit = require('../lib/CP_translit');

View file

@ -4,7 +4,7 @@
* Module dependencies.
*/
var CP_get = require('../lib/CP_get.min');
var CP_get = require('../lib/CP_get');
var CP_player = require('../modules/CP_player');
/**

View file

@ -6,7 +6,7 @@
var CP_structure = require('../../lib/CP_structure');
var CP_page = require('../../lib/CP_page');
var CP_get = require('../../lib/CP_get.min');
var CP_get = require('../../lib/CP_get');
var CP_comments = require('../../modules/CP_comments');
@ -210,7 +210,7 @@ function allCategory(type, options, callback) {
soon: function(callback) {
return modules.soon.status
? CP_get.additional(
{ all_movies: process.env.CP_ALL },
{ all_movies: process.env.CP_SPB },
'soon',
options,
function(err, movies) {
@ -483,7 +483,7 @@ function oneCategory(type, key, page, sorting, options, callback) {
soon: function(callback) {
return modules.soon.status
? CP_get.additional(
{ all_movies: process.env.CP_ALL },
{ all_movies: process.env.CP_SPB },
'soon',
options,
function(err, movies) {

View file

@ -5,7 +5,7 @@
*/
var CP_page = require('../../lib/CP_page');
var CP_get = require('../../lib/CP_get.min');
var CP_get = require('../../lib/CP_get');
var CP_comments = require('../../modules/CP_comments');
@ -132,7 +132,7 @@ function allContents(tag, options, callback) {
soon: function(callback) {
return modules.soon.status
? CP_get.additional(
{ all_movies: process.env.CP_ALL },
{ all_movies: process.env.CP_SPB },
'soon',
options,
function(err, movies) {
@ -361,7 +361,7 @@ function oneContent(url, page, sorting, options, callback) {
soon: function(callback) {
return modules.soon.status
? CP_get.additional(
{ all_movies: process.env.CP_ALL },
{ all_movies: process.env.CP_SPB },
'soon',
options,
function(err, movies) {

View file

@ -5,7 +5,7 @@
*/
var CP_page = require('../../lib/CP_page');
var CP_get = require('../../lib/CP_get.min');
var CP_get = require('../../lib/CP_get');
var CP_episode = require('../../modules/CP_episode');
var CP_comments = require('../../modules/CP_comments');
@ -113,7 +113,7 @@ function dataIndex(options, callback) {
soon: function(callback) {
return modules.soon.status
? CP_get.additional(
{ all_movies: process.env.CP_ALL },
{ all_movies: process.env.CP_SPB },
'soon',
options,
function(err, movies) {

View file

@ -5,7 +5,7 @@
*/
var CP_page = require('../../lib/CP_page');
var CP_get = require('../../lib/CP_get.min');
var CP_get = require('../../lib/CP_get');
var CP_decode = require('../../lib/CP_decode');
var CP_comments = require('../../modules/CP_comments');
@ -146,7 +146,7 @@ function dataMovie(id, type, options, callback) {
soon: function(callback) {
return modules.soon.status
? CP_get.additional(
{ all_movies: process.env.CP_ALL },
{ all_movies: process.env.CP_SPB },
'soon',
options,
function(err, movies) {

View file

@ -6,7 +6,7 @@
var CP_translit = require('../../lib/CP_translit');
var CP_structure = require('../../lib/CP_structure');
var CP_get = require('../../lib/CP_get.min');
var CP_get = require('../../lib/CP_get');
/**
* Configuration dependencies.

View file

@ -5,7 +5,7 @@
*/
var CP_cache = require('../lib/CP_cache');
var CP_get = require('../lib/CP_get.min');
var CP_get = require('../lib/CP_get');
var CP_regexp = require('../lib/CP_regexp');
/**

View file

@ -951,5 +951,6 @@
"Название организации для поиска всех её IP": "اسم المنظمة للبحث عن كافة IP الخاص به",
"Добавить все IP": "إضافة كافة IP",
"Поиск по WHOIS в реальном времени": "البحث عن WHOIS في الوقت الحقيقي",
"Что такое бесплатная и премиум тема оформления CinemaPress?": "ما هو حر وقسط موضوع التصميم CinemaPress؟"
"Что такое бесплатная и премиум тема оформления CinemaPress?": "ما هو حر وقسط موضوع التصميم CinemaPress؟",
"Добавьте в парсинг хотя бы один веб-сайт": "إضافة إعراب ما لا يقل عن موقع واحد"
}

View file

@ -951,5 +951,6 @@
"Название организации для поиска всех её IP": "Името на организацията, за да търсите всички свои IP",
"Добавить все IP": "Добавяне на всички IP",
"Поиск по WHOIS в реальном времени": "Търсене за WHOIS в реално време",
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Какво е безплатно и премия дизайн тема CinemaPress?"
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Какво е безплатно и премия дизайн тема CinemaPress?",
"Добавьте в парсинг хотя бы один веб-сайт": "Добави разбор най-малко един уеб сайт"
}

View file

@ -951,5 +951,6 @@
"Название организации для поиска всех её IP": "তার আইপি সব জন্য অনুসন্ধান করতে সংগঠনের নামে",
"Добавить все IP": "সব আইপি যোগ করুন",
"Поиск по WHOIS в реальном времени": "রিয়েল টাইমে WHOIS জন্য অনুসন্ধান করুন",
"Что такое бесплатная и премиум тема оформления CinemaPress?": "বিনামূল্যে এবং প্রিমিয়াম নকশা থিম CinemaPress কি?"
"Что такое бесплатная и премиум тема оформления CinemaPress?": "বিনামূল্যে এবং প্রিমিয়াম নকশা থিম CinemaPress কি?",
"Добавьте в парсинг хотя бы один веб-сайт": "পার্সিং যোগ অন্তত একটি ওয়েব সাইট এ"
}

View file

@ -951,5 +951,6 @@
"Название организации для поиска всех её IP": "Název organizace hledat všechny jeho IP",
"Добавить все IP": "Přidejte všechny IP",
"Поиск по WHOIS в реальном времени": "Vyhledávat WHOIS v reálném čase",
"Что такое бесплатная и премиум тема оформления CinemaPress?": "To, co je zdarma a prémie téma designu CinemaPress?"
"Что такое бесплатная и премиум тема оформления CinemaPress?": "To, co je zdarma a prémie téma designu CinemaPress?",
"Добавьте в парсинг хотя бы один веб-сайт": "Přidejte analýze nejméně jedna webu"
}

View file

@ -951,5 +951,6 @@
"Название организации для поиска всех её IP": "Navnet på organisationen for at søge efter alle sine IP",
"Добавить все IP": "Tilføj alle IP",
"Поиск по WHOIS в реальном времени": "Søg efter WHOIS i realtid",
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Hvad er gratis og premium design tema CinemaPress?"
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Hvad er gratis og premium design tema CinemaPress?",
"Добавьте в парсинг хотя бы один веб-сайт": "Tilføj parsing mindst ét websted"
}

View file

@ -951,5 +951,6 @@
"Название организации для поиска всех её IP": "Der Name der Organisation, für alle seine IP zu suchen",
"Добавить все IP": "In alle IP",
"Поиск по WHOIS в реальном времени": "Suchen Sie nach WHOIS in Echtzeit",
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Was ist kostenlos und Premium-Design-Thema CinemaPress?"
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Was ist kostenlos und Premium-Design-Thema CinemaPress?",
"Добавьте в парсинг хотя бы один веб-сайт": "Fügen sie das parsing mindestens eine website"
}

View file

@ -951,5 +951,6 @@
"Название организации для поиска всех её IP": "Το όνομα του οργανισμού για να αναζητήσετε όλα τα IP της",
"Добавить все IP": "Προσθέστε όλα τα IP",
"Поиск по WHOIS в реальном времени": "Αναζήτηση WHOIS σε πραγματικό χρόνο",
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Τι είναι δωρεάν και υψηλής ποιότητας σχεδιασμό θέμα CinemaPress;"
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Τι είναι δωρεάν και υψηλής ποιότητας σχεδιασμό θέμα CinemaPress;",
"Добавьте в парсинг хотя бы один веб-сайт": "Προσθέστε το parsing τουλάχιστον μία ιστοσελίδα"
}

View file

@ -950,5 +950,6 @@
"Название организации для поиска всех её IP": "The name of the organization to search for all its IPs",
"Добавить все IP": "Add all IPs",
"Поиск по WHOIS в реальном времени": "Real-time WHOIS search",
"Что такое бесплатная и премиум тема оформления CinemaPress?": "What is a free and premium CinemaPress theme?"
"Что такое бесплатная и премиум тема оформления CinemaPress?": "What is a free and premium CinemaPress theme?",
"Добавьте в парсинг хотя бы один веб-сайт": "Add at least one website to parsing"
}

View file

@ -951,5 +951,6 @@
"Название организации для поиска всех её IP": "El nombre de la organización a la búsqueda de la totalidad de su IP",
"Добавить все IP": "Añadir todos los IP",
"Поиск по WHOIS в реальном времени": "Buscar WHOIS en tiempo real",
"Что такое бесплатная и премиум тема оформления CinemaPress?": "¿Cuál es CinemaPress diseño de tema libre y de alta calidad?"
"Что такое бесплатная и премиум тема оформления CinemaPress?": "¿Cuál es CinemaPress diseño de tema libre y de alta calidad?",
"Добавьте в парсинг хотя бы один веб-сайт": "Añadir el análisis en un sitio web por lo menos"
}

View file

@ -951,5 +951,6 @@
"Название организации для поиска всех её IP": "Nimi korralduse otsida kõiki oma IP",
"Добавить все IP": "Lisa kõik IP",
"Поиск по WHOIS в реальном времени": "Otsi WHOIS reaalajas",
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Mis on tasuta ja premium kujundus CinemaPress?"
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Mis on tasuta ja premium kujundus CinemaPress?",
"Добавьте в парсинг хотя бы один веб-сайт": "Lisa sõelumiskood vähemalt ühte veebisaiti"
}

View file

@ -951,5 +951,6 @@
"Название организации для поиска всех её IP": "Nimi organisaation etsiä kaikki sen IP",
"Добавить все IP": "Lisää kaikki IP",
"Поиск по WHOIS в реальном времени": "Hae whois reaaliajassa",
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Mikä on ilmainen ja Premium teema CinemaPress?"
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Mikä on ilmainen ja Premium teema CinemaPress?",
"Добавьте в парсинг хотя бы один веб-сайт": "Lisää jäsennys ainakin yksi web-sivusto"
}

View file

@ -951,5 +951,6 @@
"Название организации для поиска всех её IP": "Le nom de l'organisation pour rechercher l'ensemble de ses IP",
"Добавить все IP": "Ajouter tous les IP",
"Поиск по WHOIS в реальном времени": "Recherche de WHOIS en temps réel",
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Quel est le thème de la conception libre et prime CinemaPress?"
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Quel est le thème de la conception libre et prime CinemaPress?",
"Добавьте в парсинг хотя бы один веб-сайт": "Ajouter l'analyse syntaxique au moins un site web"
}

View file

@ -951,5 +951,6 @@
"Название организации для поиска всех её IP": "अपने आईपी के सभी के लिए खोज करने के लिए संगठन के नाम",
"Добавить все IP": "सभी IP जोड़ें",
"Поиск по WHOIS в реальном времени": "वास्तविक समय में WHOIS के लिए खोज",
"Что такое бесплатная и премиум тема оформления CinemaPress?": "नि: शुल्क और प्रीमियम डिजाइन विषय CinemaPress क्या है?"
"Что такое бесплатная и премиум тема оформления CinemaPress?": "नि: शुल्क और प्रीमियम डिजाइन विषय CinemaPress क्या है?",
"Добавьте в парсинг хотя бы один веб-сайт": "पार्स जोड़े कम से कम एक वेब साइट पर"
}

View file

@ -951,5 +951,6 @@
"Название организации для поиска всех её IP": "Ime organizacije u potrazi za sve svoje IP",
"Добавить все IP": "Dodaj sve IP",
"Поиск по WHOIS в реальном времени": "Potražite WHOIS u realnom vremenu",
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Što je slobodan i premium dizajn tema CinemaPress?"
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Što je slobodan i premium dizajn tema CinemaPress?",
"Добавьте в парсинг хотя бы один веб-сайт": "Dodaj parsiranje barem jednu web-stranici"
}

View file

@ -951,5 +951,6 @@
"Название организации для поиска всех её IP": "A szervezet neve keresni az összes IP-",
"Добавить все IP": "Add az összes IP-",
"Поиск по WHOIS в реальном времени": "Keresése WHOIS valós időben",
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Mi ingyenes és prémium dizájn CinemaPress?"
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Mi ingyenes és prémium dizájn CinemaPress?",
"Добавьте в парсинг хотя бы один веб-сайт": "Add elemzésekor legalább egy webhelyet"
}

View file

@ -951,5 +951,6 @@
"Название организации для поиска всех её IP": "Nama organisasi untuk mencari semua IP-nya",
"Добавить все IP": "Tambahkan semua IP",
"Поиск по WHOIS в реальном времени": "Mencari WHOIS secara real time",
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Apa yang gratis dan premium tema desain CinemaPress?"
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Apa yang gratis dan premium tema desain CinemaPress?",
"Добавьте в парсинг хотя бы один веб-сайт": "Menambahkan parsing pada satu situs web paling"
}

View file

@ -951,5 +951,6 @@
"Название организации для поиска всех её IP": "Il nome dell'organizzazione per la ricerca di tutti i suoi IP",
"Добавить все IP": "Aggiungere tutti gli IP",
"Поиск по WHOIS в реальном времени": "Cerca WHOIS in tempo reale",
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Qual è gratuita e premium tema di disegno CinemaPress?"
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Qual è gratuita e premium tema di disegno CinemaPress?",
"Добавьте в парсинг хотя бы один веб-сайт": "Aggiungere l'analisi almeno un sito web"
}

View file

@ -951,5 +951,6 @@
"Название организации для поиска всех её IP": "そのIPのすべてを検索するための組織の名前",
"Добавить все IP": "すべてのIPを追加します。",
"Поиск по WHOIS в реальном времени": "リアルタイムでWHOIS検索",
"Что такое бесплатная и премиум тема оформления CinemaPress?": "無料、プレミアムデザインテーマのCinemaPressは何ですか"
"Что такое бесплатная и премиум тема оформления CinemaPress?": "無料、プレミアムデザインテーマのCinemaPressは何ですか",
"Добавьте в парсинг хотя бы один веб-сайт": "解析に少なくとも一つのWebサイトを追加"
}

View file

@ -951,5 +951,6 @@
"Название организации для поиска всех её IP": "조직의 이름은 IP를 모두 검색하기",
"Добавить все IP": "모든 IP 추가",
"Поиск по WHOIS в реальном времени": "실시간으로 WHOIS 검색",
"Что такое бесплатная и премиум тема оформления CinemaPress?": "무료 및 프리미엄 디자인 테마 CinemaPress은 무엇인가?"
"Что такое бесплатная и премиум тема оформления CinemaPress?": "무료 및 프리미엄 디자인 테마 CinemaPress은 무엇인가?",
"Добавьте в парсинг хотя бы один веб-сайт": "구문 분석을 추가 적어도 하나의 웹 사이트에서"
}

View file

@ -951,5 +951,6 @@
"Название организации для поиска всех её IP": "Organizacijos pavadinimas ieškoti visą savo IP",
"Добавить все IP": "Pridėti visas IP",
"Поиск по WHOIS в реальном времени": "Ieškoti WHOIS realiu laiku",
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Kas yra nemokama ir aukščiausios kokybės dizainas tema CinemaPress?"
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Kas yra nemokama ir aukščiausios kokybės dizainas tema CinemaPress?",
"Добавьте в парсинг хотя бы один веб-сайт": "Pridėti apdorojant ne mažiau kaip viena svetaine"
}

View file

@ -951,5 +951,6 @@
"Название организации для поиска всех её IP": "Organizācijas nosaukums, lai meklētu visu savu IP",
"Добавить все IP": "Pievienot visus IP",
"Поиск по WHOIS в реальном времени": "Meklēt WHOIS reāllaikā",
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Kas ir bezmaksas un premium dizaina tēma CinemaPress?"
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Kas ir bezmaksas un premium dizaina tēma CinemaPress?",
"Добавьте в парсинг хотя бы один веб-сайт": "Pievienot parsēšana vismaz vienā tīmekļa vietnē"
}

View file

@ -951,5 +951,6 @@
"Название организации для поиска всех её IP": "De naam van de organisatie om te zoeken voor al haar IP",
"Добавить все IP": "Voeg alle IP",
"Поиск по WHOIS в реальном времени": "Zoek naar WHOIS in real time",
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Wat is gratis en premium design thema CinemaPress?"
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Wat is gratis en premium design thema CinemaPress?",
"Добавьте в парсинг хотя бы один веб-сайт": "Voeg de parsing ten minste één website"
}

View file

@ -951,5 +951,6 @@
"Название организации для поиска всех её IP": "Nazwa organizacji, aby szukać wszystkich jego IP",
"Добавить все IP": "Dodaj wszystkie IP",
"Поиск по WHOIS в реальном времени": "Szukaj WHOIS w czasie rzeczywistym",
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Co to jest za darmo i premii projekt motyw CinemaPress?"
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Co to jest za darmo i premii projekt motyw CinemaPress?",
"Добавьте в парсинг хотя бы один веб-сайт": "Dodaj analizowania co najmniej jednego miejsca w sieci web"
}

View file

@ -951,5 +951,6 @@
"Название организации для поиска всех её IP": "O nome da organização de pesquisa para toda a sua IP",
"Добавить все IP": "Adicionar todos os IP",
"Поиск по WHOIS в реальном времени": "Procurar WHOIS em tempo real",
"Что такое бесплатная и премиум тема оформления CinemaPress?": "O que é livre e premium CinemaPress tema de design?"
"Что такое бесплатная и премиум тема оформления CinemaPress?": "O que é livre e premium CinemaPress tema de design?",
"Добавьте в парсинг хотя бы один веб-сайт": "Adicionar a análise, pelo menos um site"
}

View file

@ -951,5 +951,6 @@
"Название организации для поиска всех её IP": "Numele organizației pentru a căuta toate IP sale",
"Добавить все IP": "Adăugați toate IP",
"Поиск по WHOIS в реальном времени": "Caută WHOIS, în timp real",
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Ce este liber și prima temă de design CinemaPress?"
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Ce este liber și prima temă de design CinemaPress?",
"Добавьте в парсинг хотя бы один веб-сайт": "Adăugați parsarea cel puțin un site web"
}

View file

@ -950,5 +950,6 @@
"Название организации для поиска всех её IP": "Название организации для поиска всех её IP",
"Добавить все IP": "Добавить все IP",
"Поиск по WHOIS в реальном времени": "Поиск по WHOIS в реальном времени",
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Что такое бесплатная и премиум тема оформления CinemaPress?"
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Что такое бесплатная и премиум тема оформления CinemaPress?",
"Добавьте в парсинг хотя бы один веб-сайт": "Добавьте в парсинг хотя бы один веб-сайт"
}

View file

@ -951,5 +951,6 @@
"Название организации для поиска всех её IP": "Názov organizácie hľadať všetky jeho IP",
"Добавить все IP": "Pridajte všetky IP",
"Поиск по WHOIS в реальном времени": "Vyhľadávať WHOIS v reálnom čase",
"Что такое бесплатная и премиум тема оформления CinemaPress?": "To, čo je zadarmo a prémia tému designu CinemaPress?"
"Что такое бесплатная и премиум тема оформления CinemaPress?": "To, čo je zadarmo a prémia tému designu CinemaPress?",
"Добавьте в парсинг хотя бы один веб-сайт": "Pridajte analýze najmenej jedna webe"
}

View file

@ -951,5 +951,6 @@
"Название организации для поиска всех её IP": "Ime organizacije za iskanje vse svoje IP",
"Добавить все IP": "Dodaj vse IP",
"Поиск по WHOIS в реальном времени": "Iskanje WHOIS v realnem času",
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Kaj je brezplačna in premium dizajn tema CinemaPress?"
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Kaj je brezplačna in premium dizajn tema CinemaPress?",
"Добавьте в парсинг хотя бы один веб-сайт": "Dodajte razčlenjevanju pri najmanj enem spletnem mestu"
}

View file

@ -951,5 +951,6 @@
"Название организации для поиска всех её IP": "Emri i organizatës për të kërkuar për të gjithë IP saj",
"Добавить все IP": "Shto të gjithë IP",
"Поиск по WHOIS в реальном времени": "Kërko për WHOIS në kohë reale",
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Çfarë është falas dhe premium dizajn theme CinemaPress?"
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Çfarë është falas dhe premium dizajn theme CinemaPress?",
"Добавьте в парсинг хотя бы один веб-сайт": "Shto analizë gramatikore të paktën një website"
}

View file

@ -951,5 +951,6 @@
"Название организации для поиска всех её IP": "Назив организације да тражи све своје ИП",
"Добавить все IP": "Додај све ИП",
"Поиск по WHOIS в реальном времени": "Претрага за ВХОИС у реалном времену",
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Шта је слободан и премија дизајн тема ЦинемаПресс?"
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Шта је слободан и премија дизајн тема ЦинемаПресс?",
"Добавьте в парсинг хотя бы один веб-сайт": "Додајте обрадом барем једном веб сајту"
}

View file

@ -951,5 +951,6 @@
"Название организации для поиска всех её IP": "Namnet på organisationen för att söka efter alla sina IP",
"Добавить все IP": "Lägg till alla IP",
"Поиск по WHOIS в реальном времени": "Sök efter WHOIS i realtid",
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Vad är gratis och premium designtema CinemaPress?"
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Vad är gratis och premium designtema CinemaPress?",
"Добавьте в парсинг хотя бы один веб-сайт": "Tillsätt tolkning åtminstone en webbplats"
}

View file

@ -951,5 +951,6 @@
"Название организации для поиска всех её IP": "Jina la shirika kutafuta wote wa IP yake",
"Добавить все IP": "Kuongeza IP kila",
"Поиск по WHOIS в реальном времени": "Tafuta WHOIS katika muda halisi",
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Je bure na premium kubuni mandhari CinemaPress?"
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Je bure na premium kubuni mandhari CinemaPress?",
"Добавьте в парсинг хотя бы один веб-сайт": "Kuongeza kuchanganua angalau tovuti"
}

View file

@ -951,5 +951,6 @@
"Название организации для поиска всех её IP": "ชื่อขององค์กรในการค้นหาทั้งหมดของ IP ของ",
"Добавить все IP": "เพิ่ม IP ทั้งหมด",
"Поиск по WHOIS в реальном времени": "ค้นหา WHOIS ในเวลาจริง",
"Что такое бесплатная и премиум тема оформления CinemaPress?": "อะไรคือสิ่งที่ฟรีและเบี้ย CinemaPress รูปแบบการออกแบบ?"
"Что такое бесплатная и премиум тема оформления CinemaPress?": "อะไรคือสิ่งที่ฟรีและเบี้ย CinemaPress รูปแบบการออกแบบ?",
"Добавьте в парсинг хотя бы один веб-сайт": "เพิ่มการแยกที่เว็บไซต์อย่างน้อยหนึ่งเว็บ"
}

View file

@ -951,5 +951,6 @@
"Название организации для поиска всех её IP": "Kuruluşun adı onun tüm IP aramak için",
"Добавить все IP": "Tüm IP Ekle",
"Поиск по WHOIS в реальном времени": "Gerçek zamanlı olarak WHOIS ara",
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Özgür ve prim tasarım teması CinemaPress nedir?"
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Özgür ve prim tasarım teması CinemaPress nedir?",
"Добавьте в парсинг хотя бы один веб-сайт": "Ayrıştırmayı ekle az bir websitesinde"
}

View file

@ -951,5 +951,6 @@
"Название организации для поиска всех её IP": "Назва організації для пошуку всіх її IP",
"Добавить все IP": "Додати всі IP",
"Поиск по WHOIS в реальном времени": "Пошук по WHOIS в реальному часі",
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Що таке безкоштовна і преміум тема оформлення CinemaPress?"
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Що таке безкоштовна і преміум тема оформлення CinemaPress?",
"Добавьте в парсинг хотя бы один веб-сайт": "Додайте в парсинг хоча б один веб-сайт"
}

View file

@ -951,5 +951,6 @@
"Название организации для поиска всех её IP": "Tên của tổ chức để tìm kiếm cho tất cả các IP của nó",
"Добавить все IP": "Thêm tất cả IP",
"Поиск по WHOIS в реальном времени": "Tìm kiếm WHOIS trong thời gian thực",
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Miễn phí và phí bảo hiểm thiết kế theme CinemaPress là gì?"
"Что такое бесплатная и премиум тема оформления CinemaPress?": "Miễn phí và phí bảo hiểm thiết kế theme CinemaPress là gì?",
"Добавьте в парсинг хотя бы один веб-сайт": "Thêm phân tích tại một trang web nhất"
}

View file

@ -951,5 +951,6 @@
"Название организации для поиска всех её IP": "搜索所有的IP的组织的名称",
"Добавить все IP": "添加的所有IP",
"Поиск по WHOIS в реальном времени": "搜索实时WHOIS",
"Что такое бесплатная и премиум тема оформления CinemaPress?": "什么是免费的和付费的设计主题CinemaPress"
"Что такое бесплатная и премиум тема оформления CinemaPress?": "什么是免费的和付费的设计主题CinemaPress",
"Добавьте в парсинг хотя бы один веб-сайт": "添加解析至少一个网站"
}

View file

@ -774,13 +774,13 @@
data.modules.mobile &&
data.modules.mobile.data &&
data.modules.mobile.data.subdomain &&
parseInt(data.modules.mobile.data.subdomain) !== parseInt('<%- modules.mobile.data.subdomain %>')
parseInt(data.modules.mobile.data.subdomain + '') !== parseInt('<%- modules.mobile.data.subdomain %>')
) || (
data.modules &&
data.modules.tv &&
data.modules.tv.data &&
data.modules.tv.data.subdomain &&
parseInt(data.modules.tv.data.subdomain) !== parseInt('<%- modules.tv.data.subdomain %>')
parseInt(data.modules.tv.data.subdomain + '') !== parseInt('<%- modules.tv.data.subdomain %>')
)
) {
self.innerHTML = '<span class="fa fa-save"></span>&nbsp;&nbsp;<%= __('Сохранить изменения') %>';