diff --git a/Dockerfile.alpine b/Dockerfile.alpine index d43c800..c99107a 100644 --- a/Dockerfile.alpine +++ b/Dockerfile.alpine @@ -1,5 +1,5 @@ # pull official base image -FROM a76yyyy/ddddocr:latest +FROM python:3.9-alpine # set environment variables ENV PYTHONDONTWRITEBYTECODE 1 @@ -10,13 +10,20 @@ ENV APP_HOME=/home/data/www RUN mkdir -p $APP_HOME WORKDIR $APP_HOME -RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime +RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories && apk update +RUN apk add --update-cache nginx tzdata && \ + cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && apk del tzdata && \ + rm -rf /var/cache/apk/* -COPY requirements_alpine.txt requirements.txt +COPY requirements.txt . #将需要的包体全部打包成直接安装的包whl RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.mirrors.ustc.edu.cn/simple/ +COPY conf/nginx.conf /etc/nginx/nginx.conf +COPY conf/vhost.conf /etc/nginx/conf.d/vhost.conf +COPY conf/supervisord.conf /etc/supervisord.conf + COPY start.sh /usr/local/bin/start.sh RUN chmod +x /usr/local/bin/start.sh diff --git a/Dockerfile.alpine.old b/Dockerfile.alpine.old new file mode 100644 index 0000000..d43c800 --- /dev/null +++ b/Dockerfile.alpine.old @@ -0,0 +1,43 @@ +# pull official base image +FROM a76yyyy/ddddocr:latest + +# set environment variables +ENV PYTHONDONTWRITEBYTECODE 1 +ENV PYTHONUNBUFFERED 1 + +# create the appropriate directories +ENV APP_HOME=/home/data/www +RUN mkdir -p $APP_HOME +WORKDIR $APP_HOME + +RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime + +COPY requirements_alpine.txt requirements.txt + +#将需要的包体全部打包成直接安装的包whl +RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.mirrors.ustc.edu.cn/simple/ + +COPY start.sh /usr/local/bin/start.sh +RUN chmod +x /usr/local/bin/start.sh + +# copy project +COPY . $APP_HOME + +RUN ln -s /home/data/www/db /db && \ + ln -s /home/data/www/logs /logs && \ + ln -s /home/data/www/backups /backups && \ + rm -rf conf && \ + rm -rf docker-compose.yml && \ + rm -rf Dockerfile && \ + rm -rf README.md && \ + rm -rf requirements.txt && \ + rm -rf db/* logs/* backups/* \ + rm -rf .git* + +EXPOSE 80 +#apt-get安装路径 +#CMD ["/usr/bin/supervisord", "-c", "/etc/supervisord.conf"] +#pip安装路径 +#CMD ["/usr/local/bin/supervisord", "-c", "/etc/supervisord.conf"] + +CMD ["/usr/local/bin/start.sh"] \ No newline at end of file diff --git a/apps/common/sites_sign.py b/apps/common/sites_sign.py index af38a84..d976c55 100644 --- a/apps/common/sites_sign.py +++ b/apps/common/sites_sign.py @@ -50,7 +50,10 @@ def signIngress(site_name, site_name_cn, site_url, site_cookie): elif site_name == 'open': flag, data = opencd(site_name, site_name_cn, site_url, site_cookie) elif site_name == 'hdsky': - flag, data = hdsky(site_name, site_name_cn, site_url, site_cookie) + try: + flag, data = hdsky(site_name, site_name_cn, site_url, site_cookie) + except: + return False,'数据异常' elif site_name == 'haidan': flag, data = haidan(site_name, site_name_cn, site_url, site_cookie) elif site_name == 'ptsbao': @@ -963,14 +966,13 @@ def opencd(site_name, site_name_cn, site_url, site_cookie): logger.info('--------------%s开始签到----------------' % site_name) - status = False ocr = ddddocr.DdddOcr(show_ad=False,old=True) try: #验证码签到执行3次验证 for i in range(3): #验证成功退出 - if status or i > 2: - break + if i > 2: + return False, "%s(%s) 错误:连续3次验证码失败" % (site_name,site_name_cn) response = requests.get("https://open.cd/plugin_sign-in.php", headers=headers, timeout=10) if response.status_code == 200: @@ -1009,11 +1011,10 @@ def opencd(site_name, site_name_cn, site_url, site_cookie): signindays = result['signindays'] integral = result['integral'] msg = "%s(%s) 连续签到%s,本次获得%s" % (site_name,site_name_cn, signindays,integral) - status = True return True, msg else: msg = "%s(%s) 签到失败:%s" % (site_name,site_name_cn, result['msg']) - if status or i > 2: + if i > 2: return False, msg else: @@ -1054,16 +1055,18 @@ def hdsky(site_name, site_name_cn, site_url, site_cookie): image_code_name = os.path.join(settings.TMP_LOG_DIR,'hdsky_code.png') logger.info('--------------%s开始签到----------------' % site_name) - status = False + ocr = ddddocr.DdddOcr(show_ad=False,old=True) try: #验证码签到执行3次验证 for i in range(3): #验证成功退出 - if status or i > 2: - break + if i > 2: + print('i--------->',i) + return False, "%s(%s) 错误:连续3次验证码失败" % (site_name,site_name_cn) response = requests.post(sign_url, headers=headers, data=data, timeout=10) + logger.info(response.text) if response.status_code == 200: result = json.loads(response.text) if result['success']: @@ -1085,22 +1088,31 @@ def hdsky(site_name, site_name_cn, site_url, site_cookie): 'imagestring': data_ocr } response = requests.post("https://hdsky.me/showup.php", headers=headers, data=data, timeout=10) + logger.info(response.text) try: result = json.loads(response.text) + if result['success']: msg = "%s(%s) 连续签到%s" % (site_name,site_name_cn, result['message']) - status = True return True, msg else: - if 'date_unmatch' == result['message']: - msg = "%s(%s) 您今天已经签到过了,请勿重复签到" % (site_name,site_name_cn) - status = True - return True, msg + #false的情况存在无message + if 'message' in result: + if 'date_unmatch' == result['message']: + msg = "%s(%s) 您今天已经签到过了,请勿重复签到" % (site_name,site_name_cn) + return True, msg + else: + #invalid_imagehash说明数据验证码错误 + msg = "%s(%s) 错误:%s" % (site_name,site_name_cn, result['message']) + + #超过2次退出 + if i > 2: + return False,msg else: - #invalid_imagehash说明数据验证码错误 - msg = "%s(%s) 错误:%s" % (site_name,site_name_cn, result['message']) - if status or i > 2: - return False,msg + #无消息目前确认为已经签到,其它后续在确认 + msg = "%s(%s) 您今天已经签到过了,请勿重复签到" % (site_name,site_name_cn) + return True, msg + except: msg = "%s(%s) 登录网站失败,cookie已经失效" % (site_name,site_name_cn) return False, msg diff --git a/apps/common/urls/views_urls.py b/apps/common/urls/views_urls.py index d746771..38ed8a6 100644 --- a/apps/common/urls/views_urls.py +++ b/apps/common/urls/views_urls.py @@ -14,6 +14,7 @@ urlpatterns = [ path('backup', views_request.backup), #补签 path('signagain', views_request.signAgain), + path('signcheck', views_request.signCheck), ] diff --git a/apps/common/views_request.py b/apps/common/views_request.py index 779d63c..6348f95 100644 --- a/apps/common/views_request.py +++ b/apps/common/views_request.py @@ -110,3 +110,39 @@ def signAgain(request): response_data={"code":0,"msg":data } return JsonResponse(response_data) + +#================== +@login_required +def signCheck(request): + """ + 校验 + """ + if request.method == "POST": + action = request.POST.get('action') + _id = request.POST.get('id','') + + if action != 'check' or _id == "": + response_data={"code":0,"msg":"未知操作" } + + return JsonResponse(response_data) + + #获取配置的站点信息 + site_info = SiteInfo.objects.get(id=_id) + + site_name = site_info.siteconfig_name + site_cookie = site_info.cookie + #获取站点配置信息 + site_config = SiteConfig.objects.get(name=site_name) + site_url = site_config.index_url + site_name_cn = site_config.name_cn + + #统一签到入口 + flag, data = signIngress(site_name, site_name_cn, site_url, site_cookie) + + #print(site_name,data) + if flag: + response_data={"code":1,"msg":data } + else: + response_data={"code":0,"msg":data } + + return JsonResponse(response_data) \ No newline at end of file diff --git a/apps/cron/crontabs.py b/apps/cron/crontabs.py index f0c460d..3254cf3 100644 --- a/apps/cron/crontabs.py +++ b/apps/cron/crontabs.py @@ -46,13 +46,14 @@ def sign(crontab_id): #'cookie': site_cookie #} #统一签到入口 - flag, data = signIngress(site_name, site_name_cn, site_url, site_cookie) + flag, data = signIngress(site_name, site_name_cn, site_url, site_cookie) - #print(site_name,data) try: Log.objects.create(name = '签到',type_id = 1000, crontab_id = crontab_id, site_name=site_name, message = data, status = flag) except: logger.error("%s(%s)数据返回出错" % (site_name, site_name_cn)) + #防止返回数据错误导致异常退出 + continue send_data.append(data) diff --git a/apps/sites/templates/sites/siteinfo.html b/apps/sites/templates/sites/siteinfo.html index df8163d..196341e 100644 --- a/apps/sites/templates/sites/siteinfo.html +++ b/apps/sites/templates/sites/siteinfo.html @@ -36,6 +36,7 @@ @@ -112,7 +113,35 @@ } }); }); - } + }else if(layEvent === 'checkSign'){ + + //var csrftoken = getCookie('csrftoken'); + layer.confirm('确定校验此配置 ' + data.siteconfig_name + '?',{icon: 0, title: '提示', shadeClose: true}, + function (i) { + layer.close(i); + layer.load(2); + $.ajax({ + url : "common/signcheck", + type: 'POST', + dataType : "json", + data: {'id':data.id, 'action':'check',csrfmiddlewaretoken: '{{ csrf_token }}' }, + // beforeSend: function(request) { + // //django需要csrf验证,Forbidden (CSRF cookie not set.): + // request.setRequestHeader("X-CSRFToken", csrftoken); + // }, + success : function(d) { + layer.closeAll('loading'); + if (d.code == 1) { + table.reload('siteinfoTable', {}); + layer.msg(d.msg, {icon: 1}); + } else { + layer.msg(d.msg, {icon: 2}); + } + } + }); + }); + } + }); //显示表单弹窗 diff --git a/build.sh b/build.sh index d1bb882..dcc4030 100644 --- a/build.sh +++ b/build.sh @@ -1,3 +1,3 @@ #!/bin/bash -docker build -t pthelper:v1.0 . \ No newline at end of file +docker build -f Dockerfile.alpine -t pthelper:v1.0.3 . \ No newline at end of file