diff --git a/.gitignore b/.gitignore index 4efc661..f542ee2 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,5 @@ node_modules/ dist/ .cache/ package-lock.json -severless/ cloudbase* -conf* \ No newline at end of file +/conf.toml \ No newline at end of file diff --git a/README.md b/README.md index 8e632c8..0ed077b 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,52 @@ ## Features - 新增一键部署签到程序:依赖自动安装、触发器自动配置,可能是全网最快、选择最多的部署 👇 (我们支持三种配置方式,请任选其一,点击左边小三角展开部署教程) + + <details><summary>腾讯云开发一键部署</summary> + + > 本说明帮助你**一键部署**自动签到程序到腾讯云开发 + > + > **未开通云开发&新注册用户**需要先开通云开发,具体过程为:在 [此地址](https://console.cloud.tencent.com/tcb?from=12335) 注册登录,完成后再进入 [开通地址](https://console.cloud.tencent.com/tcb?from=12335) 开通 ⇢ <span><input type="checkbox" disabled>不创建环境(请勾选)</span>,其它默认 ⇢ 跳转到授权界面并授权,开通成功 + + <a href="https://console.cloud.tencent.com/tcb/env/index?action=CreateAndDeployCloudBaseProject&appUrl=https%3A%2F%2Fgithub.com%2Fbeetcb%2Fcea&branch=tcb" target="_blank"><img height="25px" src="https://main.qcloudimg.com/raw/67f5a389f1ac6f3b4d04c7256438e44f.svg"/></a> + + 1. 点击 ☝ 部署按钮 ⇢ 登录腾讯云 ⇢ <span><input type="checkbox" disabled>使用免费资源(记得勾选)</span> + ⇢ `环境名称` 填入 cea ⇢ 下一步 ⇢ 完成 + + 2. 等待几秒(部署完成后) ⇢ 左栏 `云函数` ⇢ 点击 `cea` 进入此函数配置界面 ⇢ `函数代码` 拦下在线编辑器里修改 `conf.toml` 文件 ⇢ 相应注释都已写好,请自行填入 ⇢ 先**保存**后测试,无报错则成功部署 + + ![示例](https://i.imgur.com/ZhTS6Ol.png) + + 3. 教程结束 ⚡ (如有问题,请附带日志提交 issue),此函数会自动在每天 5:00 11:00 16:00 触发,具体的配置文件示例如下: + + ```toml + # 学校英文简称,一个云函数只能配置一个学校 + school = "whpu" + + # 使用学校地址签到,第一个用户 + [[users]] + username = "11" + password = "11" + alias = "one" + addr = "" + + # 使用随机地址在家签到,第二个用户 + [[users]] + username = "22" + password = "22" + alias = "two" + addr = "home" + + # 使用自定义地址在家签到,第三个用户 + # 推荐使用 https://api.map.baidu.com/lbsapi/getpoint/index.html 查询地址 + [[users]] + username = "33" + password = "33" + alias = "three" + addr = ["116.622631", "40.204822", "北京市顺义区X012"] + ``` + + </details> <details><summary>码云持续集成</summary> 通过码云的持续集成来部署签到程序,教程如下: @@ -59,59 +105,6 @@ 3. 配置成功后,此操作会自动在每天 5:00 11:00 16:00 触发,尝试签到(你也可以手动触发一次来测试配置的正确性) </details> - <details><summary>腾讯云开发一键部署</summary> - - > 本说明帮助你**一键部署**自动签到程序到腾讯云开发 - > - > **未开通云开发&新注册用户**需要先开通云开发,具体过程为:在 [此地址](https://console.cloud.tencent.com/tcb?from=12335) 注册登录,完成后再进入 [开通地址](https://console.cloud.tencent.com/tcb?from=12335) 开通 ⇢ <span><input type="checkbox" disabled>不创建环境(请勾选)</span>,其它默认 ⇢ 跳转到授权界面并授权,开通成功 - - <a href="https://console.cloud.tencent.com/tcb/env/index?action=CreateAndDeployCloudBaseProject&appUrl=https%3A%2F%2Fgithub.com%2Fbeetcb%2Fcea&branch=tcb" target="_blank"><img height="25px" src="https://main.qcloudimg.com/raw/67f5a389f1ac6f3b4d04c7256438e44f.svg"/></a> - - 1. 点击 ☝ 部署按钮 ⇢ 登录腾讯云 ⇢ <span><input type="checkbox" disabled>使用免费资源(记得勾选)</span> - ⇢ `环境名称` 填入 cea ⇢ 下一步 ⇢ 完成 - - 2. 等待几秒(部署完成后) ⇢ 左栏 `云函数` ⇢ 点击 `cea` 进入此函数配置界面 ⇢ `函数代码` 拦下在线编辑器里修改 `conf.yml` 文件 ⇢ 相应注释都已写好,请自行填入 ⇢ 先**保存**后测试,无报错则成功部署 - - ![示例](https://i.imgur.com/ZhTS6Ol.png) - - 3. 教程结束 ⚡ (如有问题,请附带日志提交 issue),此函数会自动在每天 5:00 11:00 16:00 触发,需要自定义签到时间请参考 [cron](https://docs.cloudbase.net/cloud-function/timer-trigger.html#pei-zhi-xiang-jie),需要自定义在家签到地址请查看: - <details><summary>如果懒得改就忽略吧!(它的权重远不及<a href="https://www.zhihu.com/question/375968416">健康码</a>,甚至可以说**校园签到根本没有任何意义),小场面👏,不值得改</summary><br> - 请修改 `conf.yml` 文件(用户数组里添加 addr 属性),比如: - - ```yaml - # 学校英文简称,一个云函数只能配置一个学校 - school: whpu - - # 是否在家签到,可选值为 - # - true 在家签到,使用随机地址(会绕开学校),可以被用户自定义地址重写 - # - false 学校签到,使用学校地址 - home: true - - # 用户信息配置,支持多用户 - users: - # 第一个用户信息从这里开始 - # 学工账号用户名 - - username: 11111111 - # 学工账号密码 - password: 1 - # 用户简称,主要方便日志查询 - alias: beetcb - # 自定义在家签到地址,请提供 经度、纬度、详细地址 - # 推荐使用 https://api.map.baidu.com/lbsapi/getpoint/index.html 查询地址 - addr: [116.622631, 40.204822, 北京市顺义区X012] - - # 第二个用户信息从这里开始,依此类推(不需要请手动删除此区域往下全部内容) - - username: 22222222 - password: 2 - alias: Who - addr: [103.836093, 36.068012, 甘肃省兰州市城关区南滨河东路709] - # 编辑完请检查一下YAML代码格式是否正确,可以复制粘贴到使在线小工具检查: - # https://www.bejson.com/validators/yaml_editor/ - ``` - - </details> - <br></details> - <details><summary>Github Action 部署支持</summary> **部分学校域名禁止海外 IP 访问,会签到失败(比如 WHPU)**,部署教程如下: @@ -161,7 +154,7 @@ </details> -- 交互式配置: `campusphere-elegant-auth` 提供交互式的命令行完成 用户 及 学校 的配置,同时也支持使用 `yml` 文件来配置 +- 交互式配置: `campusphere-elegant-auth` 提供交互式的命令行完成 用户 及 学校 的配置,同时也支持使用 `toml` 文件来配置 - 验证持久化: 缓存验证信息于内存, 只在失效时更新 @@ -200,35 +193,34 @@ npm i -g @beetcb/cea cea -u ``` -- (可选)使用文件配置用户: 根目录下创建 `userConf.yml`, 参考以下示例: +- (可选)使用文件配置用户: 根目录下创建 `conf.toml`, 参考以下示例: - ```yml - # 支持多用户配置,用 yaml 语法数组实现 + ```toml # 文件修改完后仍需执行 `cea -u` 加载这些用户,根据提示确保用户已成功加载 + + # 学校英文简称 + school = "whpu" + # 使用学校地址签到 - - username: 11111111 - password: 1 - alias: beetcb + [[users]] + username = "用户名" + password = "密码" + alias = "简称" + addr = "" # 使用随机地址在家签到 - - username: 22222222 - password: 2 - alias: beet - addr: home + [[users]] + username = "用户名" + password = "密码" + alias = "简称" + addr = "home" # 使用自定义地址在家签到 - - username: 22222222 - password: 2 - alias: beet - addr: ['116.622631', '40.204822', '北京市顺义区X012'] - ``` - -- 用户配置项说明: - ```yml - - username: 账户用户名 - password: 密码 - alias: 用户别名,方便查询 - cookie: 为抓包用户提供便利, 省去登录过程,只需提供 `MOD_AUTH_CAS` 键值, 比如:MOD_AUTH_CAS=aVh237y-K3RPsaST3seDwez1287964, 时效不长,请自行判断 + [[users]] + username = "用户名" + password = "密码" + alias = "简称" + addr = ["经度", "纬度", "实际地址"] ``` 2. 工具使用: diff --git a/severless/conf.toml b/severless/conf.toml new file mode 100644 index 0000000..46cb9ca --- /dev/null +++ b/severless/conf.toml @@ -0,0 +1,23 @@ +# 学校英文简称 +school = "whpu" + +# 使用学校地址签到 +[[users]] +username = "用户名" +password = "密码" +alias = "简称" +addr = "" + +# 使用随机地址在家签到 +[[users]] +username = "用户名" +password = "密码" +alias = "简称" +addr = "home" + +# 使用自定义地址在家签到 +[[users]] +username = "用户名" +password = "密码" +alias = "简称" +addr = ["经度", "纬度", "实际地址"] diff --git a/severless/index.js b/severless/index.js new file mode 100644 index 0000000..a759ead --- /dev/null +++ b/severless/index.js @@ -0,0 +1,45 @@ +// Reset $XDG_CONFIG_HOME +process.env.XDG_CONFIG_HOME = '/tmp' +const { handleCookie, signApp, conf } = require('@beetcb/cea') + +// Grab users array +const users = conf.get('users') +// Grab school info +const school = conf.get('school') + +function loadConf() { + const path = './conf.toml' + if (fs.existsSync(path)) { + const doc = tomlParse(fs.readFileSync(path, 'utf8')) + if (!conf.get('school')) + return doc.users + } +} + +async function signIn() { + const logs = {} + // sign in asynchronizedly with promise all and diff instance of signApp class + await Promise.all( + users.map(async i => { + const cookie = i.cookie + ? { campusphere: i.cookie } + : conf.get(`cookie.${i.alias || i.username}`) + const sign = new signApp(school, i) + await sign.signInfo(cookie) + await sign.signWithForm() + logs[i.alias || i.id] = sign.result + }) + ) + return logs +} + +async function handler() { + // Log in and save cookie to conf, using conf.get('cookie') to get them + await handleCookie() + // Sign in + const logs = await signIn() + // Log out config path + console.table(logs) +} + +exports.main = handler diff --git a/severless/package.json b/severless/package.json new file mode 100644 index 0000000..0317697 --- /dev/null +++ b/severless/package.json @@ -0,0 +1,15 @@ +{ + "name": "severless", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "@beetcb/cea": "^1.1.5" + } +}