GithubHelp home page GithubHelp logo

beetcb / cea Goto Github PK

View Code? Open in Web Editor NEW
21.0 2.0 10.0 1.5 MB

高校高校统一身份认证 Node.js 优雅可扩展示例,已集成今日校园签到(支持多平台一键部署)

License: MIT License

JavaScript 100.00%
nodejs campusphere login dailycampus cloudbase beetcb crawler

cea's People

Contributors

beetcb avatar renovate-bot avatar renovate[bot] avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

cea's Issues

签到更新的应对方案

说明

本项目中的 签到插件 属于一个逆向抓包工程,在上游发生更新后,下游必然处于被动状态,需要修改代码以应对这些不可控更新

我作为一个开发者能做的只是及时发现问题,尽量在下次签到之前修复问题

此 Issue 相当于一个公告栏,我写好应对更新的补丁(也就是 @beetcb/cea 模块也会更新)后会以评论的方式上报至此,请关注此 Issue

部署更新的方法

  • GitHub:无需重新部署,自动向前兼容

  • 腾讯云:云函数 -> 函数代码 -> 保存并安装依赖 即可

    image

    注:很少会需要重新部署,如有,我会加以说明,届时只需按照部署指南文档重新部署一遍即可

  • Coding 持续集成:无需重新部署,自动向前兼容

作者大大,似乎HENU不支持登陆,您有兴趣研究一下吗

START RequestId: 646f306d-af4a-455e-8620-fe95d5b23c84

Event RequestId: 646f306d-af4a-455e-8620-fe95d5b23c84

2021-05-21T23:32:38.066Z 646f306d-af4a-455e-8620-fe95d5b23c84 尝试从配置文件加载配置

2021-05-21T23:32:38.067Z 646f306d-af4a-455e-8620-fe95d5b23c84 用户 one 已加载

2021-05-21T23:32:38.436Z 646f306d-af4a-455e-8620-fe95d5b23c84 你的学校 河南大学 已完成设定

2021-05-21T23:32:39.119Z 646f306d-af4a-455e-8620-fe95d5b23c84 用户one:登录失败,Unauthorized

2021-05-21T23:32:39.119Z 646f306d-af4a-455e-8620-fe95d5b23c84 用户one:无效的 Cookie,尝试重新登录

2021-05-21T23:32:39.751Z 646f306d-af4a-455e-8620-fe95d5b23c84 用户one:登录失败,Unauthorized

2021-05-21T23:32:39.754Z 646f306d-af4a-455e-8620-fe95d5b23c84 ┌─────────┬──────────────────┐

│ (index) │ 签到结果 │

├─────────┼──────────────────┤

│ one │ '今日签到任务已完成,取消签到' │

└─────────┴──────────────────┘

END RequestId: 646f306d-af4a-455e-8620-fe95d5b23c84

Report RequestId: 646f306d-af4a-455e-8620-fe95d5b23c84 Duration:1694ms Memory:256MB MemUsage:47.5859MB

GitHub Actions 机器无法访问学工登录地址,如何设置代理

部分学校的学工系统无法使用国外服务器访问,这种情况下需要自行部署代理服务

代理服务器只需覆盖登录页面的请求,并处理好 Cookie 和 反爬虫相关 HTTP Headers,可以参考 proxy-of-whpu 项目

然后 Fork 本项目,类似于下面这样修改相关代码:

cea/src/api.js

Lines 263 to 266 in 6dcacec

if (process.env.GITHUB_ACTION && name === 'whpu') {
casOrigin = 'http://whpu.beetcb.com/authserver'
console.warn('尝试使用代理访问学校登录页面')
}

注:国内服务器(如腾讯云不会存在这种问题)

Handle leave sign tasks

遗漏请假签到任务:

this.curTask = signQ.datas.unSignedTasks[0]

{
    "code": "0",
    "message": "SUCCESS",
    "datas": {
        "dayInMonth": "2021-05-01",
        "codeRcvdTasks": [],
        "signedTasks": [],
        "unSignedTasks": [],
        "leaveTasks": [
            {
                "stuSignWid": "9444387",
                "signInstanceWid": "30727",
                "signWid": "822443",
                "signRate": "1",
                "taskType": "0",
                "taskName": "本科生每日健康管理及健康打卡",
                "senderUserName": "",
                "signStatus": "5",
                "isMalposition": "0",
                "isLeave": "1",
                "leavePcUrl": null,
                "leaveMobileUrl": null,
                "currentTime": "2021-05-01 10:25",
                "singleTaskBeginTime": null,
                "singleTaskEndTime": null,
                "rateSignDate": "2021-05-01 (周六)",
                "rateTaskBeginTime": "06:00",
                "rateTaskEndTime": "22:30"
            }
        ]
    }
}

[命令行工具] 除用户添加外所有功能均无法使用

删除用户:
(node:17564) UnhandledPromiseRejectionWarning: ReferenceError: get is not defined at i.deleteUser (C:\Users\cyl\AppData\Roaming\npm\node_modules\@beetcb\cea\dist\cli.js:14:1985) at C:\Users\cyl\AppData\Roaming\npm\node_modules\@beetcb\cea\dist\cli.js:21:234 at processTicksAndRejections (internal/process/task_queues.js:97:5) (node:17564) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag --unhandled-rejections=strict (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 2) (node:17564) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

配置学校:
(node:16216) UnhandledPromiseRejectionWarning: TypeError: Cannot read property '0' of null at c.schoolApi (C:\Users\cyl\AppData\Roaming\npm\node_modules\@beetcb\cea\dist\cli.js:14:3281) at processTicksAndRejections (internal/process/task_queues.js:97:5) at async c.init (C:\Users\cyl\AppData\Roaming\npm\node_modules\@beetcb\cea\dist\cli.js:14:2330) at async C:\Users\cyl\AppData\Roaming\npm\node_modules\@beetcb\cea\dist\cli.js:21:277 (node:16216) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag --unhandled-rejections=strict (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1) (node:16216) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

签到:
(node:10616) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'login' of undefined at module.exports (C:\Users\cyl\AppData\Roaming\npm\node_modules\@beetcb\cea\dist\cli.js:8:456) at t (C:\Users\cyl\AppData\Roaming\npm\node_modules\@beetcb\cea\dist\cli.js:12:210) at C:\Users\cyl\AppData\Roaming\npm\node_modules\@beetcb\cea\dist\cli.js:12:616 at Array.map (<anonymous>) at r.e.handleCookie (C:\Users\cyl\AppData\Roaming\npm\node_modules\@beetcb\cea\dist\cli.js:12:561) at C:\Users\cyl\AppData\Roaming\npm\node_modules\@beetcb\cea\dist\cli.js:18:220 at Object.parcelRequire.PTk1.../src/index (C:\Users\cyl\AppData\Roaming\npm\node_modules\@beetcb\cea\dist\cli.js:18:266) at f (C:\Users\cyl\AppData\Roaming\npm\node_modules\@beetcb\cea\dist\cli.js:3:468) at p (C:\Users\cyl\AppData\Roaming\npm\node_modules\@beetcb\cea\dist\cli.js:3:544) at C:\Users\cyl\AppData\Roaming\npm\node_modules\@beetcb\cea\dist\cli.js:21:376 (node:10616) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag --unhandled-rejections=strict (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 2) (node:10616) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

我是小白,在腾讯云中测试失败,希望作者大大能指点一下

返回结果:{"errorCode":-1,"errorMessage":"user code exception caught","requestId":"49ef2437-b85a-4bc0-ad82-a7ceb8afcbeb","stackTrace":"TypeError: a.text is not a function\n at c.schoolApi (/var/user/node_modules/@beetcb/cea/dist/index.js:18:3487)\n at process._tickCallback (internal/process/next_tick.js:68:7)","statusCode":430}
日志:START RequestId: 49ef2437-b85a-4bc0-ad82-a7ceb8afcbeb

Event RequestId: 49ef2437-b85a-4bc0-ad82-a7ceb8afcbeb

2021-05-25T16:04:08.360Z 49ef2437-b85a-4bc0-ad82-a7ceb8afcbeb ⚠ 警示 尝试从配置文件加载配置

2021-05-25T16:04:08.361Z 49ef2437-b85a-4bc0-ad82-a7ceb8afcbeb ✔ 成功 用户 one 已加载

END RequestId: 49ef2437-b85a-4bc0-ad82-a7ceb8afcbeb

Report RequestId: 49ef2437-b85a-4bc0-ad82-a7ceb8afcbeb Duration:1081ms Memory:256MB MemUsage:51.6562MB

关于HENU登录问题

// if we got here, this site definitely uses AJAX to get those props (`iap`)
// we need to request those properties manually
headers.Referer = res.headers.get('location')
const ltWrapper = new URL(headers.Referer).search
if (Object.keys(hiddenInputNameValueMap).length === 0) {
  res = await fetch(`${school.casOrigin}${schoolEdgeCases.lt}${ltWrapper}`)
  const { result } = await res.json()
  Object.defineProperties(hiddenInputNameValueMap, {
    lt: { value: result._lt, enumerable: true },
    needCaptcha: { value: result.needCapt, enumerable: true },
    dllt: { value: '', enumerable: true },
    iap: { value: true, enumerable: true },
  })
  // seems dcampus forgot to impl _encryptSalt, comment it out temporarily
  // pwdSalt = result._encryptSalt
}

此处想知道具体执行逻辑,我以前做过HENU的模拟登录,更新后debug发现在获取MOD_AUTH_CAS这个cookie无返回,获取HWWAFSESID会返回一个errorMessage:程序出现错误,非ajax方式直接跳转到错误处理页面

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.