同步操作将从 httpsok/httpsok 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#!/usr/bin/env bash# WIKI: https://httpsok.com/doc/# This script only supports bash, do not support posix sh.# If you have the problem like Syntax error: "(" unexpected (expecting "fi"),# Try to run "bash -version" to check the version.# Try to visit WIKI to find a solution.################################################NGINX_BIN=nginx# NGINX_CONFIG=/etc/nginx/nginx.conf# NGINX_CONFIG_HOME=/etc/nginx##################################################VER=1.18.2PROJECT_NAME="httpsok"PROJECT_ENTRY="httpsok.sh"PROJECT_HOME="$HOME/.httpsok"PROJECT_BACKUPS="$HOME/.httpsok/backups"PROJECT_ENTRY_BIN="$PROJECT_HOME/$PROJECT_ENTRY"PROJECT_TOKEN_FILE="$PROJECT_HOME/token"HTTPSOK_UUID_FILE="$PROJECT_HOME/uuid"PROJECT_LOG_FILE="$PROJECT_HOME/$PROJECT_NAME.log"HTTPSOK_TOKEN=""HTTPSOK_UUID=""HTTPSOK_HOME_URL="https://httpsok.com/"BASE_API_URL="https://api.httpsok.com/v1/nginx"SCRIPT_URL="https://get.httpsok.com/"latest_code=""preparse=""OS=""NGINX_VERSION=""MODE="normal"_upper_case() {tr '[a-z]' '[A-Z]'}_lower_case() {tr '[A-Z]' '[a-z]'}_startswith() {_str="1ドル"_sub="2ドル"echo "$_str" | grep -- "^$_sub" >/dev/null 2>&1}_endswith() {_str="1ドル"_sub="2ドル"echo "$_str" | grep -- "$_sub\$" >/dev/null 2>&1}_contains() {_str="1ドル"_sub="2ドル"echo "$_str" | grep -- "$_sub" >/dev/null 2>&1}_time() {date -u "+%s"}_math() {_m_opts="$@"printf "%s" "$(($_m_opts))"}_err() {echo -e "0円33[31m$(date +"%F %T")$@0円33[0m" 1>&2}_info() {echo -e "$(date +"%F %T")$@" 1>&2}_suc() {echo -e "0円33[32m$(date +"%F %T")$@0円33[0m" 1>&2}_random_md5() {head -c 32 /dev/urandom | md5sum | awk '{print 1ドル}'}TRACE_ID=$(_random_md5)_exists() {cmd="1ドル"if [ -z "$cmd" ]; then_usage "Usage: _exists cmd"return 1fiif eval type type >/dev/null 2>&1; theneval type "$cmd" >/dev/null 2>&1elif command >/dev/null 2>&1; thencommand -v "$cmd" >/dev/null 2>&1elsewhich "$cmd" >/dev/null 2>&1firet="$?"return $ret}showWelcome() {echoecho -e "0円33[1;36mHttpsok make SSL easy. $HTTPSOK_HOME_URL0円33[0m"echo -e "0円33[1;36mversion: $VER0円33[0m"echo -e "0円33[1;36mTraceID: $TRACE_ID0円33[0m"echo}_mkdirs() {_dir="1ドル"if [ ! "$_dir" = "" ]; thenif [ ! -d "$_dir" ]; thenmkdir -p "$_dir" && _suc "Create directory $_dir success."fifi}_initpath() {_mkdirs "$PROJECT_HOME"_mkdirs "$PROJECT_BACKUPS"}_no_nginx_here(){echo_err "Can’t detected nginx\n"_err "Please confirm that nginx has been successfully installed on your system"_detected_is_root_runechoechoexit}_detected_is_root_run(){YELLOW='033円[1;33m'NC='033円[0m' # No Colorif [ "$(id -u)" -ne 0 ]; thenecho -e "${YELLOW}Detected non-root user running, it's recommended to run as root user.${NC}\n"fi}_init_params() {if [ "$OS" != "" ]; thenreturn 0fiif [ -f /etc/os-release ]; thenOS=$(grep 'PRETTY_NAME' /etc/os-release | awk -F '=' '{print 2ドル}' | tr -d '"' | head -n 1)elif [ -f /etc/redhat-release ]; thenOS=$(cat /etc/redhat-release)elif [ -f /etc/alpine-release ]; thenOS="alpine"else_err "Unsupported operating system"exit 1fi# NGINX_BIN=nginx$NGINX_BIN -V > /dev/null 2>&1if [ $? -ne 0 ]; thenecho "no nginx in PATH, find the nginx"pid=$(ps -e | grep nginx | grep -v 'grep' | head -n 1 | awk '{print 1ドル}')if [ -n "$pid" ]; thenNGINX_BIN=$(readlink -f /proc/"$pid"/exe)# echo "NGINX_BIN=$NGINX_BIN"# again to verify$NGINX_BIN -V > /dev/null 2>&1if [ $? -ne 0 ]; then_no_nginx_hereelseecho "Nginx executable path: $NGINX_BIN"fielse_no_nginx_herefifiNGINX_VERSION=$($NGINX_BIN -v 2>&1 | awk -F ': ' '{print 2ドル}' | head -n 1 | head -c 20)# user can settingif [ -z "$NGINX_CONFIG" ]; then# Use a running nginx firstNGINX_CONFIG=$(ps -eo pid,cmd | grep nginx | grep master | grep '\-c' | awk -F '-c' '{print 2ドル}' | sed 's/ //g')fi# fix the NGINX_CONFIG equals nginx.conf bugif [ -z "$NGINX_CONFIG" ] || [ "$NGINX_CONFIG" = "nginx.conf" ]; thenNGINX_CONFIG=$($NGINX_BIN -t 2>&1 | grep 'configuration' | head -n 1 | awk -F 'file' '{print 2ドル}' | awk '{print 1ドル}' )fiif [ -z "$NGINX_CONFIG_HOME" ]; thenNGINX_CONFIG_HOME=$(dirname "$NGINX_CONFIG")fi_init_httpsok_params_info "os-name: $OS"_info "version: $NGINX_VERSION"_info "nginx-config: $NGINX_CONFIG"_info "nginx-config-home: $NGINX_CONFIG_HOME"_info "nginx-bin: $NGINX_BIN"_info "httpsok-uuid: $HTTPSOK_UUID"if [ "$NGINX_CONFIG_HOME" = "." ]; thenecho ""echo ""echo -e "0円33[31m获取nginx配置文件失败, 请您根据实际情况,手动设置0円33[0m"echo ""echo -e "0円33[1;36m修改文件 $PROJECT_ENTRY_BIN0円33[0m"echo ""echo "################################################"echo "# 配置示例 "echo "NGINX_CONFIG=/etc/nginx/nginx.conf"echo "NGINX_CONFIG_HOME=/etc/nginx"echo "##################################################"echo ""exit 0fishowWelcome}_init_httpsok_params() {if [ "$HTTPSOK_UUID" != "" ]; thenreturn 0fiif [ -f "$HTTPSOK_UUID_FILE" ]; thenHTTPSOK_UUID=$(cat "$HTTPSOK_UUID_FILE")fiif [ "$HTTPSOK_UUID" != "" ]; then# _info "load HTTPSOK_UUID from $HTTPSOK_UUID_FILE: $HTTPSOK_UUID"return 0fi_initpathif [ -f "/sys/class/dmi/id/product_uuid" ]; thenHTTPSOK_UUID=$(cat /sys/class/dmi/id/product_uuid)if [ "$HTTPSOK_UUID" != "" ]; thenecho "$HTTPSOK_UUID" > "$HTTPSOK_UUID_FILE"# _info "save HTTPSOK_UUID from product_uuid to $HTTPSOK_UUID_FILE: $HTTPSOK_UUID"return 0fifiHTTPSOK_UUID=$(_random_md5)echo "$HTTPSOK_UUID" > "$HTTPSOK_UUID_FILE"# _info "save HTTPSOK_UUID to $HTTPSOK_UUID_FILE: $HTTPSOK_UUID"}_inithttp() {_init_httpsok_params_H0="Content-Type: text/plain"_H1="httpsok-token: $HTTPSOK_TOKEN"_H2="httpsok-version: $VER"_H3="os-name: $OS"_H4="nginx-version: $NGINX_VERSION"_H5="nginx-config-home: $NGINX_CONFIG_HOME"_H6="nginx-config: $NGINX_CONFIG"_H7="trace-id: $TRACE_ID"_H8="mode: $MODE"_H9="httpsok-uuid: $HTTPSOK_UUID"}_post() {_inithttpurl="${BASE_API_URL}1ドル"body="2ドル"curl -s -X POST -H "$_H0" -H "$_H1" -H "$_H2" -H "$_H3" -H "$_H4" -H "$_H5" -H "$_H6" -H "$_H7" -H "$_H8" -H "$_H9" --data-binary "$body" "$url"}_post2() {_inithttpurl="${BASE_API_URL}1ドル"fiename="2ドル"curl -s -X POST -H "$_H0" -H "$_H1" -H "$_H2" -H "$_H3" -H "$_H4" -H "$_H5" -H "$_H6" -H "$_H7" -H "$_H8" -H "$_H9" --data-binary "@$fiename" "$url"}_get() {_inithttpurl="${BASE_API_URL}1ドル"curl -s -H "$_H0" -H "$_H1" -H "$_H2" -H "$_H3" -H "$_H4" -H "$_H5" -H "$_H6" -H "$_H7" -H "$_H8" -H "$_H9" "$url"}_upload() {_inithttpurl="${BASE_API_URL}/upload?code=1ドル"_F1="cert=@\"2ドル\""_F2="certKey=@\"3ドル\""curl -s -X POST -H "Content-Type: multipart/form-data" -H "$_H1" -H "$_H2" -H "$_H3" -H "$_H4" -H "$_H5" -H "$_H6" -H "$_H7" -H "$_H8" -H "$_H9" -F $_F1 -F $_F2 "$url" 2>&1}_put() {_inithttpurl="${BASE_API_URL}1ドル"body="2ドル"curl -s -X PUT -H "$_H0" -H "$_H1" -H "$_H2" -H "$_H3" -H "$_H4" -H "$_H5" -H "$_H6" -H "$_H7" -H "$_H8" -H "$_H9" --data-binary "$body" "$url"}_remote_log() {type="1ドル"code="2ドル"msg="3ドル"_put "/log/$type?code=$code" "$msg"}_done() {_t=$(_time)_get "/done?t=$_t"}_remote_uninstall(){_load_token_t=$(_time)_get "/uninstall?t=$_t"}_create_file() {local _code="1ドル"local file_path="2ドル"if [ ! -e "$file_path" ]; thendir_path=$(dirname "$file_path")mkdir -p "$dir_path"touch "$file_path"_suc "$_code" "File created: $file_path"else# backup the filesif [ -f "$file_path" ]; then_filename=${file_path##*/}_date=$(date +"%Y%m%d%H%M%S")backup_file_path="$PROJECT_BACKUPS/$_filename.$_date"if [ -f "$backup_file_path" ]; then_err "$_code" "Backup file already exists: $backup_file_path"elsemv "$file_path" "$backup_file_path"_suc "$_code" "Backup the file $file_path to $backup_file_path"fififi}_check() {depth=1ドルcode=2ドルcert_file=3ドルcert_key_file=4ドルurl="/check?code=$code"if [ $depth -le 0 ]; then_err "The maximum number of attempts exceeded"elseresp=$(_get "$url")status=$(echo "$resp" | head -n 1)case $status in"1")# _info "$code $cert_file The new certificate has been updated"md5_line=$(echo "$resp" | awk 'NR==2')cert_file_md5=$(echo $md5_line | awk -F ',' '{print 1ドル}')cert_key_file_md5=$(echo $md5_line | awk -F ',' '{print 2ドル}')tmp_cert_file="/tmp/$code.cer"tmp_cert_key_file="/tmp/$code.key"_get "/cert/$code.cer" > "$tmp_cert_file" && _get "/cert/$code.key" > "$tmp_cert_key_file"# md5 checktmp_cert_md5=$(md5sum "$tmp_cert_file" | awk '{print 1ドル}')tmp_cert_key_md5=$(md5sum "$tmp_cert_key_file" | awk '{print 1ドル}')if [ "$cert_file_md5" = "$tmp_cert_md5" ] && [ "$cert_key_file_md5" = "$tmp_cert_key_md5" ]; then# if local_cert_file not here. need to create the file_create_file "$code" "$cert_file" && _create_file "$code" "$cert_key_file"mv "$tmp_cert_file" "$cert_file" && mv "$tmp_cert_key_file" "$cert_key_file"_suc "$code$cert_file New cert updated(证书更新成功)"_remote_log "cert-updated-success" "$code" "New cert updated(证书更新成功)"echo "latest_code $code"else_err "$code$cert_file New cert update failed (md5 not match)"_remote_log "cert-updated-failed" "$code" "New cert update failed (md5 not match): cert_file_md5=$cert_file_md5,tmp_cert_md5=$tmp_cert_md5,cert_key_file_md5=$cert_key_file_md5,tmp_cert_key_md5=$tmp_cert_key_md5"fi;;"2")_info "$code$cert_file Processing, please just wait(正在处理中,请稍等)..."sleep 10_check $((depth - 1)) "$code" "$cert_file" "$cert_key_file";;"3")_info "$code$cert_file Cert valid(证书有效)";;"12")_err "$code$cert_file DNS CNAME invalid(DNS检测不通过)";;"13")_err "$code$cert_file code invalid(非法请求)";;*)_err "$code$cert_file$resp";;esacfi}_save_token() {_token="1ドル"_check_token "$_token"_initpathif [ ! "$_token" = "" ]; thenecho "$_token" > "$PROJECT_TOKEN_FILE"_suc "save token $_token to $PROJECT_TOKEN_FILE"fi}_load_token() {if [ "$HTTPSOK_TOKEN" = "" ]; thenHTTPSOK_TOKEN=$(cat "$PROJECT_TOKEN_FILE")fi}_show_token() {_load_tokenecho -e "Your token is: 0円33[1;36m$HTTPSOK_TOKEN0円33[0m"}_check_token() {_token="1ドル"if [ ! "$_token" = "" ]; thenHTTPSOK_TOKEN="$_token"fiif [ "$HTTPSOK_TOKEN" = "" ]; then_err "httpsok's token can not empty"exit 4fi_init_paramsstatus=$(_get "/status")# _info "status >> $status"if [ "$status" != "ok" ]; then# echo -e "033円[1;36mTraceID: $TRACE_ID033円[0m"_err "Invalid token: 0円33[1;36m$HTTPSOK_TOKEN0円33[0m"_info "Please copy your token from '$HTTPSOK_HOME_URL'"echo_err "$status"exit 4fireturn 0}# Limit the maximum nesting level_include_max_calls=20_include_global_count=0__process_include() {# echo "-_include_global_count: $_include_global_count --------------------------------------------------"# echo Recursive call, degree incremented by one((_include_global_count++))if [ $_include_global_count -gt $_include_max_calls ]; thenecho "#######################################################"echo "##### warning: Maximum recursion limit reached."echo "#######################################################"cat /dev/stdinreturn 0fitmp=$(cat /dev/stdin | awk -v NGINX_CONFIG=">$NGINX_CONFIG:" -v NGINX_CONFIG_HOME="$NGINX_CONFIG_HOME" '{original = 0ドル# Remove leading and trailing whitespace characters from each linegsub(/^[[:space:]]+|[[:space:]]+$/, "")sub(/^[\t ]*|[\t ]*$/,"")# Ignore the lines at the beginning of the fileif (0ドル ~ /^>/) {print originalnext}# Determines if it starts with #, and if it does, ignores itif (0ドル ~ /^#/) {# Replace the include in the comment# gsub("include", "import")print originalnext}# Determine whether include is includedif (0ドル ~ /^include /) {# Ignore mime.typesif(0ドル ~ /mime\.types;/){print "#import " originalnext}# print "#import " 2ドルprint "#import " original# system("cat " 2ドル)# print ">> "# ls /etc/nginx/conf.d/*.conf | xargs -I {} sed "s|^|{}:|" {}# system("ls " 2ドル " | xargs -I {} sed \"s|^|{}:|\" {}")# /etc/nginx/conf.d/*.conf;# Replace ;gsub(/;/, "")# /etc/nginx/conf.d/*.conf# Resolved to an include file# print 2ドル# Deal with relative path issuesif (substr(2,ドル 1, 1) != "/") {2ドル = NGINX_CONFIG_HOME "/" 2ドル}# print "# " original# The second way# find . -maxdepth 1 -print0 | xargs -0 command# system("find " 2ドル " -maxdepth 1 -print0 | xargs -0 -I {} sed \"s|^|>{}:|\" {}")# just backup# system("ls -1 " 2ドル " | xargs -I {} sed \"s|^|>{}:|\" {}")# If the last line of the file is not newline, the file will not be parsed correctly# system("ls -1 " 2ドル " 2>/dev/null | xargs -I {} cat {} ")# Using sh has security implications deprecated# system("ls -1 " 2ドル " 2>/dev/null | xargs -I {} sh -c \"cat {} && echo\" ")## system("ls -1 " 2ドル " 2>/dev/null | xargs -I {} sed -n \"$p\" {} ")# xargs -I {} awk -v FP="{}" "BEGIN{ print \"# include \" FP } {print} END{print ""} " {}#system("ls -1 " 2ドル " 2>/dev/null | xargs -I {} awk \" {print} END {print \"\" } \" {} ")## cmd = "ls -1 " 2ドル " 2>/dev/null | xargs -I {} awk \" {print} END {print \"\\\"\"\n\"\\\"\" } \" {} "# cmd = "ls -1 " 2ドル " 2>/dev/null | xargs -I {} awk \"BEGIN {print \"\"{}\"\" } {print} END {print \n } \" {} "# OK Add a newline character to the end of the file# cmd = "ls -1 " 2ドル " 2>/dev/null | xargs -I {} awk \" {print} END {print \"\\n\" } \" {} "# OK Add a newline character to the end of the file# cmd = "ls -1 " 2ドル " 2>/dev/null | xargs -I {} awk '\'' {print} '\'' {} "# OK add config file path#cmd = "ls -1 " 2ドル " 2>/dev/null | xargs -I GG awk '\'' BEGIN {print \"#included GG;\" } {print} '\'' GG "#cmd = "ls -1 " 2ドル " 2>/dev/null | xargs -I {} awk '\'' BEGIN {print \"#included {};\" } {print} '\'' {} "cmd = "ls -1 " 2ドル " 2>/dev/null | xargs -I {} awk '\'' BEGIN {print \"#included-begin {};\" } {print} END{ print \"#included-end {};\" } '\'' {} "# print cmdsystem(cmd)print ""next}print original}')if echo "$tmp" | grep -v '#' | grep -q "include"; then# Perform a recursive callecho "$tmp" | __process_includeelse# End the recursive callecho "$tmp"fi}_preparse() {_init_paramsconfig_text=$($NGINX_BIN -T)if [ "$?" != "0" ]; thenconfig_text=$(cat $NGINX_CONFIG | __process_include )fitmp_name="/tmp/2nLN3ZspTMGifYtO.tmp"echo "$config_text" > $tmp_namepreparse=$(_post2 "/preparse" "$tmp_name")rm -rf "$tmp_name" > /dev/null 2>&1if [ "$preparse" = "" ]; thenreturn 4fireturn 0}_upload_certs() {while read rowdoif [ "$row" = "" ]; thencontinueficode=$(echo $row | awk -F ',' '{print 1ドル}')cert_file=$(echo $row | awk -F ',' '{print 2ドル}')cert_key_file=$(echo $row | awk -F ',' '{print 3ドル}')up_status=$(_upload "$code" "$cert_file" "$cert_key_file")if [ "$up_status" != "ok" ]; thencontinuefidone <<EOF$preparseEOF}_check_certs() {while read rowdoif [ "$row" = "" ]; thencontinueficode=$(echo $row | awk -F ',' '{print 1ドル}')cert_file=$(echo $row | awk -F ',' '{print 2ドル}')cert_key_file=$(echo $row | awk -F ',' '{print 3ドル}')check_reposne=$(_check 60 "$code" "$cert_file" "$cert_key_file")_code=$(echo "$check_reposne" | grep 'latest_code' | awk '{print 2ドル}')if [ -n "$_code" ]; thenlatest_code="$_code"fidone <<EOF$preparseEOF}_check_dns() {codes=$(echo "$preparse" | awk -F ',' '{print 1ドル}' | tr '\n' ',' )url="/checkDns"resp=$(_get "$url")status=$(echo "$resp" | head -n 1)case $status in"3")_suc "DNS check pass(DNS检查通过)";;"13")_err "code invalid";;*)_err "$resp";;esac}_reload_nginx() {if [ "$latest_code" = "" ]; thenecho_info "Nginx reload needless(无需重载)."return 0fi(# fixbug: signal process startedcd $NGINX_CONFIG_HOMEmsg=$($NGINX_BIN -t 2>&1)if [ $? != 0 ]; then_remote_log "nginx-test-failed" "$latest_code" "$msg"echo_err "Nginx test failed(测试失败). \n\n$msg"elsemsg=$($NGINX_BIN -s reload 2>&1)if [ $? -eq 0 ]; then_remote_log "nginx-reload-success" "$latest_code" "Nginx reload success(重载成功)."echo_suc "Nginx reload success(重载成功)."else# Check if nginx is runningshow_msg=$msgpid=$(ps -e | grep nginx | grep -v 'grep' | head -n 1 | awk '{print 1ドル}')if [ -z "$pid" ]; thenmsg="Nginx is not started(服务未启动). \n\n$msg"show_msg="0円33[33mNginx is not started. You can run \"service nginx start\" to start the Nginx(请重启服务). 0円33[31m\n\n$show_msg"fi_remote_log "nginx-reload-failed" "$latest_code" "$msg"echo_err "Nginx reload failed(重载失败). \n\n$show_msg"fifi)}version() {echo "$PROJECT_ENTRY v$VER"}# Detect profile file if not specified as environment variable_detect_profile() {if [ -n "$PROFILE" -a -f "$PROFILE" ]; thenecho "$PROFILE"returnfiDETECTED_PROFILE=''SHELLTYPE="$(basename "/$SHELL")"if [ "$SHELLTYPE" = "bash" ]; thenif [ -f "$HOME/.bashrc" ]; thenDETECTED_PROFILE="$HOME/.bashrc"elif [ -f "$HOME/.bash_profile" ]; thenDETECTED_PROFILE="$HOME/.bash_profile"fielif [ "$SHELLTYPE" = "zsh" ]; thenDETECTED_PROFILE="$HOME/.zshrc"fiif [ -z "$DETECTED_PROFILE" ]; thenif [ -f "$HOME/.profile" ]; thenDETECTED_PROFILE="$HOME/.profile"elif [ -f "$HOME/.bashrc" ]; thenDETECTED_PROFILE="$HOME/.bashrc"elif [ -f "$HOME/.bash_profile" ]; thenDETECTED_PROFILE="$HOME/.bash_profile"elif [ -f "$HOME/.zshrc" ]; thenDETECTED_PROFILE="$HOME/.zshrc"fifiif [ -z "$DETECTED_PROFILE" ]; thenif [ -f "/etc/profile" ]; thenDETECTED_PROFILE="/etc/profile"fifiecho "$DETECTED_PROFILE"}_tail_c() {tail -c "1ドル" 2>/dev/null || tail -"1ドル"c}_setopt() {__conf="1ドル"__opt="2ドル"__sep="3ドル"__val="4ドル"__end="5ドル"if [ -z "$__opt" ]; then_usage usage: _setopt '"file" "opt" "=" "value" [";"]'returnfiif [ ! -f "$__conf" ]; thentouch "$__conf"fiif [ -n "$(_tail_c 1 <"$__conf")" ]; thenecho >>"$__conf"fiif grep -n "^$__opt$__sep" "$__conf" >/dev/null; thenif _contains "$__val" "&"; then__val="$(echo "$__val" | sed 's/&/\\&/g')"fiif _contains "$__val" "|"; then__val="$(echo "$__val" | sed 's/|/\\|/g')"fitext="$(cat "$__conf")"printf -- "%s\n" "$text" | sed "s|^$__opt$__sep.*$|$__opt$__sep$__val$__end|" >"$__conf"elif grep -n "^#$__opt$__sep" "$__conf" >/dev/null; thenif _contains "$__val" "&"; then__val="$(echo "$__val" | sed 's/&/\\&/g')"fiif _contains "$__val" "|"; then__val="$(echo "$__val" | sed 's/|/\\|/g')"fitext="$(cat "$__conf")"printf -- "%s\n" "$text" | sed "s|^#$__opt$__sep.*$|$__opt$__sep$__val$__end|" >"$__conf"elseecho "$__opt$__sep$__val$__end" >>"$__conf"fi}_install() {_info "Installing $PROJECT_NAME."_initpathcurl -s "$SCRIPT_URL" > "$PROJECT_ENTRY_BIN" && chmod +x "$PROJECT_ENTRY_BIN"if [ -x "$PROJECT_ENTRY_BIN" ] ; then_suc "Install $PROJECT_NAME complete."else_err "Install $PROJECT_NAME failed."exit 4fiinstallcronjobinstallAlais}installcronjob() {_CRONTAB="crontab"_t=$(_time)random_minute=$(_math $_t % 60)random_hour=$(_math $_t % 9 + 9 ) # 9 ~ 17if ! _exists "$_CRONTAB" ; then_err "$_CRONTAB not exits\ncrontab定时任务不存在,请安装。参考文档:https://httpsok.com/doc/faq/crontab.html \n"return 4fiif ! $_CRONTAB -l | grep "$PROJECT_ENTRY" > /dev/null; then_info "Installing cron job."if _exists uname && uname -a | grep SunOS >/dev/null; then_CRONTAB_STDIN="$_CRONTAB --"else_CRONTAB_STDIN="$_CRONTAB -"fi$_CRONTAB -l | {catecho "$random_minute$random_hour * * * '$PROJECT_ENTRY_BIN' -m -r >> '$PROJECT_LOG_FILE' 2>&1"} | $_CRONTAB_STDIN_suc "Install cron job complete."fiif [ "$?" != "0" ]; then_err "Install cron job failed. You can add cronjob by yourself."_err "Or you can add cronjob by yourself:"_err "$random_minute$random_hour * * * '$PROJECT_ENTRY_BIN' -m -r >> '$PROJECT_LOG_FILE' 2>&1"return 1fi}installAlais() {_envfile="$PROJECT_ENTRY_BIN.env"echo "alias $PROJECT_ENTRY=\"$PROJECT_ENTRY_BIN\"" > "$_envfile"_info "Installing alias"_profile="$(_detect_profile)"if [ "$_profile" ]; then_info "Found profile: $_profile"_info "Installing alias to '$_profile'"_setopt "$_profile" ". \"$_envfile\""_suc "OK, Close and reopen your terminal to start using $PROJECT_NAME"else_err "No profile is found, you will need to go into $PROJECT_HOME to use $PROJECT_NAME"fi}_uninstall() {_info "Uninstalling httpsok."_remote_uninstalluninstallcronjob_uninstallaliasif [ -d "$PROJECT_HOME" ]; then_info "Removing directory $PROJECT_HOME"rm -rf "$PROJECT_HOME"fi_suc "Uninstall httpsok complete."showWelcomeecho "If your need install httpsok agian. Please see $HTTPSOK_HOME_URL .curl -s $SCRIPT_URL | bash -s 'your token'"}_uninstallalias() {_envfile="$PROJECT_ENTRY_BIN.env"_profile="$(_detect_profile)"if [ "$_profile" ]; then_info "Uninstalling alias from: '$_profile'"text="$(cat "$_profile")"echo "$text" | sed "s|^.*\"$_envfile\"$||" >"$_profile"fi}uninstallcronjob() {_CRONTAB="crontab"if ! _exists "$_CRONTAB" ; then_err "$_CRONTAB not exits"return 4ficr="$($_CRONTAB -l | grep "$PROJECT_ENTRY")"if [ "$cr" ]; then_info "Removing cron job"if _exists uname && uname -a | grep SunOS >/dev/null; then$_CRONTAB -l | sed "/$PROJECT_ENTRY/d" | $_CRONTAB --else$_CRONTAB -l | sed "/$PROJECT_ENTRY/d" | $_CRONTAB -fi_suc "Remove cron job complete."fi}_run() {_load_token_check_tokenif ! _preparse ; then_err "No SSL certificate was detected(未检测到SSL证书).\n "_info "Please refer to resolve the issue(查看文档,解决此问题). https://httpsok.com/doc/faq/nossl.html "echo ""return 4fi_info "Checking SSL certificate, please wait a moment(证书检测中请稍等...)."echo_upload_certs_check_dns_check_certs_reload_nginx_doneecho ""}_process() {while [ ${#} -gt 0 ]; docase "${1}" in--help | -h)show_helpreturn;;--version | -v)versionreturn;;--run | -r)_run;;--setup | -s)_save_token "2ドル"_install_runreturn;;--token | -t)if [ "2ドル" ]; then_save_token "2ドル"else_show_tokenfireturn;;--mode | -m)MODE="crontab";;--install | -i)_installreturn;;--uninstall | -u)_uninstallreturn;;*)echo "Unknown parameter : 1ドル2ドル"return 1;;esacshift 1done}show_help() {echo "Usage: $PROJECT_ENTRY <command> ... [parameters ...]Commands:-h, --help Show this help message.-v, --version Show version info.-r, --run Run the $PROJECT_NAME-s, --setup Install and run (Recommend first time use it).-t, --token Set or show the token.-m, --mode Mode of normal or crontab.-i, --install Install $PROJECT_NAME to your system.-u, --uninstall Uninstall $PROJECT_NAME in your system."showWelcome}main() {[ -z "1ドル" ] && show_help && returnif _startswith "1ドル" '-'; then _process "$@"; else _process --setup "$@"; fi}main "$@"
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。