# qiandao
**Repository Path**: yeyhouse/qiandao
## Basic Information
- **Project Name**: qiandao
- **Description**: 基于 binux/qiandao 进行修改,添加完善功能
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 15
- **Created**: 2021-09-04
- **Last Updated**: 2021-09-04
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# qiandao for Python3
## 以下为原镜像说明 :
签到 —— 一个**自动签到框架** base on an HAR editor
[HAR editor 使用指南](docs/har-howto.md)
**操作前请一定要记得备份数据库**
**不要同时开启新旧版签到框架,或将不同运行中容器的数据库映射为同一文件**
使用Docker部署站点
==========
1. docker地址 : [https://hub.docker.com/r/a76yyyy/qiandao](https://hub.docker.com/r/a76yyyy/qiandao)
2. docker部署命令
``` docker run -d --name qiandao -p 8923:80 -v $(pwd)/qiandao/config:/usr/src/app/config a76yyyy/qiandao ```
- 默认Redis已随容器启动: (该命令与上一条命令等效)
``` docker run -d --name qiandao -p 8923:80 -v $(pwd)/qiandao/config:/usr/src/app/config a76yyyy/qiandao sh -c "redis-server --daemonize yes && python /usr/src/app/run.py" ```
3. 数据库备份指令 : ```docker cp 容器名:/usr/src/app/config/database.db . ```
- 数据库恢复指令 : ```docker cp database.db 容器名:/usr/src/app/config/ ```
4. docker配置邮箱(强制使用SSL)
```docker run -d --name qiandao -p 8923:80 -v $(pwd)/qiandao/config:/usr/src/app/config --env MAIL_SMTP=STMP服务器 --env MAIL_PORT=邮箱服务器端口 --env MAIL_USER=用户名 --env MAIL_PASSWORD=密码 --env DOMAIN=域名 a76yyyy/qiandao ```
5. docker 使用MySQL
```docker run -d --name qiandao -p 8923:80 -v $(pwd)/qiandao/config:/usr/src/app/config --ENV DB_TYPE=mysql --ENV JAWSDB_MARIA_URL=mysql://用户名:密码@链接/数据库名 a76yyyy/qiandao ```
6. 其余可参考 Wiki : [Docker部署签到站教程](docs/Docker-howto.md)
7. DockerHub : [介绍](http://mirrors.ustc.edu.cn/help/dockerhub.html)
Web部署
=========
## 1. Version: python3.8
```
pip3 install -r requirements.txt
```
## 2. 可选 redis, Mysql
```
mysql < qiandao.sql
```
## 3. 启动
```
python ./run.py
```
数据不随项目分发,去 [https://qiandao.today/tpls/public](https://qiandao.today/tpls/public) 查看你需要的模板,点击下载。
在你自己的主页中 「我的模板+」 点击 + 上传。模板需要发布才会在「公开模板」中展示,你需要管理员权限在「我的发布请求」中审批通过。
## 4. 设置管理员
```
python ./chrole.py your@email.address admin
```
## 5. qiandao.py-CMD操作
```
python ./qiandao.py tpl.har [--key=value]* [env.json]
```
config.py-配置变量
=========
变量名|是否必须|默认值|说明
:-: | :-: | :-: | :-:
BIND|否|0.0.0.0|监听地址
PORT|否|8923|监听端口
ENABLE_HTTPS|否|False|发送的邮件链接启用HTTPS,非程序使用HTTPS,需要HTTPS需要使用反向代理
DB_TYPE|否|sqlite3|需要使用MySQL时设置为'mysql'
JAWSDB_MARIA_URL|否|''|需要使用MySQL时设置为 mysql://用户名:密码@链接/数据库名
REDISCLOUD_URL|否|''|不懂
REDIS_DB_INDEX|否|1|不懂
DOMAIN|否|qiandao.today|指定域名,建议修改,不然邮件重置密码之类的功能无效
MAIL_SMTP|否|""|邮箱SMTP服务器
MAIL_PORT|否|""|邮箱SMTP服务器端口
MAIL_USER|否|""|邮箱用户名
MAIL_PASSWORD|否|""|邮箱密码
MAIL_DOMAIN|否|mail.qiandao.today|邮箱域名,没啥用,使用的DOMAIN
AES_KEY|否|binux|AES加密密钥,强烈建议修改
COOKIE_SECRET|否|binux|cookie加密密钥,强烈建议修改
优先用`mailgun`方式发送邮件,如果要用smtp方式发送邮件,请填写mail_smtp, mail_user, mail_password
```python
mail_smtp = "" # 邮件smtp 地址
mail_user = "" # 邮件账户
mail_passowrd = "" # 邮件密码
mail_domain = "mail.qiandao.today"
mailgun_key = ""
```
## 旧版local_config.py迁移
| Line | Delete | Modify |
| ---- | ---- | ---- |
|10|~~```import urlparse```~~|```from urllib.parse import urlparse```|
|18|~~```mysql_url = urlparse.urlparse(os.getenv('JAWSDB_MARIA_URL', ''))```~~|```mysql_url = urlparse(os.getenv('JAWSDB_MARIA_URL', ''))```|
|19|~~```redis_url = urlparse.urlparse(os.getenv('REDISCLOUD_URL', ''))```~~|```redis_url = urlparse(os.getenv('REDISCLOUD_URL', ''))```|
|43|~~```aes_key = hashlib.sha256(os.getenv('AES_KEY', 'binux').encode('utf-8')).digest()```~~|```aes_key = hashlib.sha256(os.getenv('AES_KEY', 'binux')).digest()```|
|44|~~```cookie_secret = hashlib.sha256(os.getenv('COOKIE_SECRET', 'binux').encode('utf-8')).digest()```~~|```cookie_secret = hashlib.sha256(os.getenv('COOKIE_SECRET', 'binux')).digest()```|
更新日志
=========
## 2021.09.03 更新
1. 修复更新新版框架后因旧版框架cookie缓存导致的500错误
2. 修复util编解码问题
3. 添加368和armv6架构容器构建
4. 优化插入请求功能
5. 修复pycurl导致若干500和599错误
6. 更新需求模块
**Docker已预装Curl环境,默认不安装pycurl模组**
```
# 如需使用Proxy功能请安装PyCurl
# Windows源码运行, 请执行 pip install pycurl==7.43.0.5
pip install pycurl # pip3 install pycurl
```
## 2021.09.02 更新
1. 修复Image解码失败的bug
2. 添加请求时限设置
3. 修复延时API超过请求时限导致的bug
4. 查看任务的模板数据时自动导入任务变量(by [billypon](https://github.com/billypon/qiandao))
5. 默认去除pycurl模组,解决部分500和599错误
## 2021.08.07 更新
1. 更新Wiki
2. 修复网页编码导致的Body解析bug
## 2021.07.31 更新
1. 修复旧版数据库导致的编码bug
2. 添加部分说明
3. 优化docker配置
4. 允许headers中文编码
5. 修复不间断空格导致的编解码bug
6. 修复delay延时功能
7. 增加log的详细错误显示
## 2021.07.29 更新
1. 修复异常抛出时泄露源码路径的bug
2. 修复原sql的groups字段bug
3. 优化DockerFile及配置文件
## 2021.07.28 更新
1. 适配python版本至python3.8
## 2021.06.28 更新
1. 修改Dockfile,采用密钥更新
## 2021.06.26 更新
1. 公共仓库添加评论功能,跳转到github,国内打不开的问题自行解决
2. 公共仓库添加强制更新按钮
3. 修复mysql创建数据库错误
4. 修复about页面打开500错误
## 2021.06.21 更新
1. 重写公共模板仓库的订阅方法,允许添加第三方库(具体规范参考)
2. 模板使用缓存的方式,默认是每隔一天重新读取,可以手动刷新缓存
3. 新增多任务禁用/启用/删除/定时/分组
4. 任务和模板分组栏修改颜色
5. 修复注册用户时没有创建md5密码的bug
## 2021.04.13 更新
1. 添加proxy功能,目前暂时不可用(By billypon)
## 2021.02.20 更新
1. 完善MD5
2. 修复部分站点500的问题
3. 公共模板添加清缓存功能
## 2021.02.20 更新
1. 修复容忍错误推送的失效的BUG
2. 主循环修改为0.5s,使定时运行更准确
3. 修复/register没有注册按钮的BUG
4. 密码验证修改为md5
5. 更换默认微信推送图片
## 2021.01.22 更新
1. 整合推送模块
2. 添加定时cron支持
3. ENABLE_HTTPS 使能时邮件链接为https
## 2021.01.17 更新
1. 添加企业微信支持
2. 支持在用户管理里修改密码
## 2021.01.16 更新
1. 修复点击登陆失败后注册按钮消失的问题
## 2021.01.13 更新
1. 开启邮箱验证前必须验证管理员邮箱
## 2021.01.08 更新
1. 修复20210122注册按钮丢失的BUG
2. 添加记事本访问接口
3. 添加自定义推送示例
4. sqlite3_db_task_converter放在web启动之前
## 2021.01.07 更新
1. 底部添加本项目链接
2. 禁止注册时隐藏注册按钮
3. 显示注册推送的前值
4. 添加记事本功能,用户可以将数据保存在本地
5. 推送注册和推送设置按钮移动到工具箱
6. 定时时间以任务起始时间为依据
7. 新增自定义推送功能
8. bark推送改为POST,可以推送日志
## 2020.12.24 更新
1. 修复模板编辑中'{{变量}}'自动urlencode的问题
## 2020.12.23 更新
1. 添加EMAIL发送开关
## 2020.12.22 更新
1. 修复任务运行结束后'logDay'报错
2. 邮箱变量设置为环境变量获取
## 2020.12.04 更新
1. 修复任务运行结束后'logDay'报错
## 2020.11.20 更新
1. 修复模板订阅时url太长报错的问题,模板按照修改时间来排序
2. 支持网站设置仅保留一定天数的日志,日志清理时间在任务成功完成之后,默认365天
3. 手动清除一定天数的日志
4. 分组折叠/展开 支持记忆
5. 修复模板编辑页面反选错误的bug
## 2020.11.05 更新
1. 用户管理,备份,网站管理,密码不显示明文,不输入账号密码返回页面显示中文
## 2020.10.31 更新
1. 允许普通用户备份/恢复
2. 模板编辑页显示请求排序
3. 模板编辑页可以同时删除多个请求
4. 主页允许多项操作删除/分组,取消分组的勾选框,改为点击即可显示隐藏
5. 公共仓库打开失败时使用本地仓库
## 2020.09.18 更新
1. 允许备份/恢复 用户的所有任务和模板
2. 修复模板编辑时,变量作为url会自动url转码的bug
3. 模板编辑时允许拖拽请求
4. 模板订阅添加错误显示,避免500
## 2020.09.14 更新(By liubei121212)
1. 添加 unicode 函数
2. 优化 api 页样式
3. 在模板编辑页中测试时也可以复制错误信息了
4. 优化日志页复制错误信息的实现方式
5. 添加常用 api/过滤器
6. 修复主页和推送设置中长用户名的显示
7. 前值、edit 页面的错误信息增加复制按钮
## 2020.09.10 更新
1. 鉴于github 污染严重,使用gitee代替作为订阅源,地址 : [https://gitee.com/qiandao-today/templates](https://gitee.com/qiandao-today/templates)
2. 首页的检查模板更新取消,打开公共模板仓库会自动检查更新
3. 修复邮箱验证,注册后未验证可以再次点击注册验证
4. 修改任务时显示前值
本次更新有js脚本更新,请开启chrome 的 “disable cache”功能更新js脚本
## 2020.09.07 更新
1. 在数据库管理中增加一键备份/恢复所有模板的功能
## 2020.09.01 更新
1. 正则提取支持post方式
2. 取消getcookie插件提示(By powersee)
3. 管理员可以查看用户是否验证邮箱,可以设置不验证邮箱无法登陆
4. 支持任务分组
5. 推送带上任务备注
## 2020.07.19更新
1. 修改按钮“推送通知开关”为“推送设置”
2. 添加错误提醒容忍。在自动签到到一定次数错误后,才推送提醒。
## 2020.07.17更新
1. 使报错显示中文,添加点击复制错误日志按钮(by [liubei121212](https://github.com/liubei121212/qiandao))
2. 主页版本从alpha修改为20200717
## 2020.07.09更新
1. 添加 管理员 备份数据库功能
2. 添加任务日志清空功能
3. 修复定时的随机延时取消失败的BUG
4. 添加任务禁用功能
5. 为了提高兼容性,请求不验证SSL
## 2020.6.22 更新
1. 修复检查公共模板更新功能;
2. 美化左侧三按钮(By 十六君)
3. 修复插入RSA加密实际是字符串替换的BUG
4. 修改请求为不验证SSL,提升兼容性
## 2020.6.14 更新
1. 添加RSA加密/解密
2. 用户管理页面添加用户最后登陆时间
3. 字符串替换功能可以返回纯文本,避免有转义'\\'的出现,需要替换参数r=text
## 2020.6.12 更新
1. 定时日志BUG太多,修不过来,取消此功能
2. 修复用户不存在时登录500错误
## 2020.6.11 更新
1. 修复MySQL的支持,不需要手动更新Mysql数据库
## 2020.6.10 更新
1. 添加管理员管理用户功能,可以将用户禁用/开启/删除
2. 添加关闭/开启注册功能
3. 修改主页的'检查更新'为'检查模板更新'
使用前需要进入容器,将对应已注册邮箱设置为管理员 :
```
docker exec -it 容器名 /bin/bash
python ./chrole.py 邮箱 admin
```
被禁用的账户将不能登录网站,所有任务将被禁用。
被删除的账户,会删除该用户的所有任务,模板和日志
如果使用mysql 在 20200604 请使用以下命令 :
```
ALTER TABLE `user` ADD `status` VARBINARY(1024) NOT NULL DEFAULT 'Enable';
CREATE TABLE IF NOT EXISTS `site` (
`id` INTEGER NOT NULL PRIMARY KEY,
`regEn` INT UNSIGNED NOT NULL DEFAULT 1
);
INSERT INTO `site` VALUES(1,1);
```
## 2020.6.6 更新
1. 修复用户不存在依然能登陆的BUG(具体表现为 : 新用户新建模板保存时500错误,注册推送时提示NoneType)
2. 完善注册推送的注册消息
3. 修复自动完成不推送的bug
4. 添加定时 “今日已签过” 选项,可以直接定时第二天
5. 修复公共模板的HAR订阅功能
## 2020.6.5 更新
1. 修复 sqlite3 数据库初始值错误的问题,仅影响新建数据库的用户
## 2020.6.4 更新
1. 根据反馈,HAR编辑里插入链接修改默认地址为localhost
2. 修复2020601版,插入请求后修改为localhost地址, 点击测试的500错误的问题
3. 支持定时后 随机延时
__本次更新会把之前的定时设置全部取消,介意请勿更新__
如果使用mysql 在 20200601 请使用以下命令 :
```
ALTER TABLE `task` ADD `newontime` VARBINARY(256) NOT NULL DEFAULT '{\"sw\":false,\"time\":\"00:10:10\",\"randsw\":false,\"tz1\":0,\"tz2\":0 }'
```
延时的另一种用法,间隔定时运行 : 如果要实现每1周定时运行一次,设置最大最小值都是604800,即可
## 2020.6.1 更新
1. 时间显示修改为具体时间,取消之前的 "1小时后"等模糊显示(By 戏如人生)
2. 新建任务时可以选择分组
3. Bark推送支持保存历史信息,需要升级APP。
4. HAR编辑里添加添加插入unicode解码,url解码,正则表达式,字符串替换的功能
## 2020.5.31 更新
1. 修复定时 ‘day out of month’ 的BUG
2. 取消定时界面的今日运行选项,自动判断当前时间是今天还是第二天
3. 集成了时间戳获取、unicode转换、url转换功能(By [gxitm](https://github.com/gxitm))
4. 集成了正则表达式、字符串替换功能。
## 2020.5.30 更新
1. 修改 任务失败时 推送的消息内容为 任务日志;
2. 因浏览器支持不好,取消 2020.5.18更新的 ‘模板上传指定格式为.har’;
3. 新增模板编辑 追加HAR 的功能;
4. 新增模板请求删除功能。
## 2020.5.26 更新
1. 修复定时日志发送的最后一条日志的bug
2. 修复定时日志出错影响程序运行的bug
## 2020.5.25 更新
1. Bark, S酱, WXPusher 注册合并为一个按钮
2. 任务推送支持注册后也能关闭
3. 支持分任务开/关推送
4. 新增每日日志功能,可以将每日定时前的最后一个日志推送到S酱和WXPusher
5. 修复“↓”按钮定位不准的bug
如果使用mysql 在 5.22 请使用以下命令 :
```
ALTER TABLE `task` ADD `pushsw` VARBINARY(128) NOT NULL DEFAULT '{\"logen\":false,\"pushen\":true}';
ALTER TABLE `user` ADD `logtime` VARBINARY(128) NOT NULL DEFAULT '{\"en\":false,\"time\":\"20:00:00\",\"ts\":0,\"schanEn\":false,\"WXPEn\":false}';
```
## 2020.5.22 更新
1. 分组增加折叠/展开功能
2. 左侧增加新建模板按钮,“↑”回到顶部, “↓”表示跳转到模板页面
3. 修复删除任务时日志不删除bug
## 2020.5.19 更新
1. 添加手动检查模板更新的按钮。
如果使用mysql 在 5.18 请使用以下命令 :
```
ALTER TABLE `tpl` ADD `tplurl` VARCHAR(1024) NULL DEFAULT '' ;
ALTER TABLE `tpl` ADD `updateable` INT UNSIGNED NOT NULL DEFAULT 0;
```
## 2020.5.18 更新
1. 定时的 "今日是否运行" 修改 为 "今日运行"
2. 添加模板订阅功能,仓库地址在[https://github.com/qiandao-today/templates](https://github.com/qiandao-today/templates)
主页打开公共模板按钮,点击订阅后自动导入模板,需要自己确认保存
3. 模板上传指定格式为.har
## 2020.5.16 更新
1. 添加任务分类功能
如果使用mysql 请使用以下命令 :
```
ALTER TABLE `task` ADD `_groups` VARBINARY(128) NOT NULL DEFAULT 'None' ;
```
2. 定时功能显示之前的定时值
## 初始版本
基于quchaonet的蓝调主题签到增加了:
1. 设置任务最低间隔时间及任务request最高100限制 (by 戏如人生)
http://cordimax.f3322.net:5558/381.html
2. 增加了server酱、bark推送,WXPusher推送,并可以设置推送开关(by AragonSnow)
需要推送的 : 登录账号以后点击注册bark/s酱/WXPusher,测试推送没有问题以后,再点击提交
3. 增加定时功能,在新建任务以后会出现定时按钮,设置每天的定时时间。
**不兼容旧版的数据库, 旧版数据库导入会自动转换,旧版将无法使用**
**使用SQLite3的,默认路径改为config文件夹里面,方便挂载后备份**
**使用Mysq的,请使用一下命令更新数据库:**
```
ALTER TABLE `task` ADD `ontimeflg` INT UNSIGNED NOT NULL DEFAULT 0;
ALTER TABLE `task` ADD `ontime` VARCHAR(256) NOT NULL DEFAULT '00:10:00';
ALTER TABLE `user` ADD `skey` VARBINARY(128) NOT NULL DEFAULT '' ;
ALTER TABLE `user` ADD `barkurl` VARBINARY(128) NOT NULL DEFAULT '' ;
ALTER TABLE `user` ADD `wxpusher` VARBINARY(128) NOT NULL DEFAULT '' ;
ALTER TABLE `user` ADD `noticeflg` INT UNSIGNED NOT NULL DEFAULT 1;
```
鸣谢
=========
[Mark https://www.quchao.net/](https://www.quchao.net/)
[戏如人生 https://49594425.xyz/](https://49594425.xyz/)
[AragonSnow https://hexo.aragon.wang/](https://hexo.aragon.wang/)
[buzhibujuelb](https://github.com/buzhibujuelb)
[billypon](https://github.com/billypon)
[powersee](https://github.com/powersee)
[AragonSnow/qiandao](https://github.com/aragonsnow/qiandao)
[a76yyyy/qiandao](https://github.com/a76yyyy/qiandao)
个人项目精力有限,仅保证对Chrome浏览器的支持。如果测试了其他浏览器可以pull request。
许可
=========
MIT