提交 fcb19620ed5958db739617d79874c196dea29b94

作者 fanwh
0 个父辈

init

  1 +'use strict';
  2 +
  3 +module.exports = {
  4 + write: true,
  5 + prefix: '^',
  6 + plugin: 'autod-egg',
  7 + test: [
  8 + 'test',
  9 + 'benchmark',
  10 + ],
  11 + devdep: [
  12 + 'egg',
  13 + 'egg-ci',
  14 + 'egg-bin',
  15 + 'autod',
  16 + 'autod-egg',
  17 + 'eslint',
  18 + 'eslint-config-egg',
  19 + ],
  20 + exclude: [
  21 + './test/fixtures',
  22 + './docs',
  23 + './coverage',
  24 + ],
  25 +};
... ...
  1 +coverage
... ...
  1 +{
  2 + "extends": "eslint-config-egg"
  3 +}
... ...
  1 +<!--
  2 +Thank you for your pull request. Please review below requirements.
  3 +Bug fixes and new features should include tests and possibly benchmarks.
  4 +Contributors guide: https://github.com/eggjs/egg/blob/master/CONTRIBUTING.md
  5 +
  6 +感谢您贡献代码。请确认下列 checklist 的完成情况。
  7 +Bug 修复和新功能必须包含测试,必要时请附上性能测试。
  8 +Contributors guide: https://github.com/eggjs/egg/blob/master/CONTRIBUTING.md
  9 +-->
  10 +
  11 +##### Checklist
  12 +<!-- Remove items that do not apply. For completed items, change [ ] to [x]. -->
  13 +
  14 +- [ ] `npm test` passes
  15 +- [ ] tests and/or benchmarks are included
  16 +- [ ] documentation is changed or added
  17 +- [ ] commit message follows commit guidelines
  18 +
  19 +##### Affected core subsystem(s)
  20 +<!-- Provide affected core subsystem(s). -->
  21 +
  22 +
  23 +##### Description of change
  24 +<!-- Provide a description of the change below this comment. -->
... ...
  1 +# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node
  2 +# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
  3 +
  4 +name: Node.js CI
  5 +
  6 +on:
  7 + push:
  8 + branches:
  9 + - main
  10 + - master
  11 + pull_request:
  12 + branches:
  13 + - main
  14 + - master
  15 + schedule:
  16 + - cron: '0 2 * * *'
  17 +
  18 +jobs:
  19 + build:
  20 + runs-on: ${{ matrix.os }}
  21 +
  22 + strategy:
  23 + fail-fast: false
  24 + matrix:
  25 + node-version: [8, 10]
  26 + os: [ubuntu-latest, windows-latest, macos-latest]
  27 +
  28 + steps:
  29 + - name: Checkout Git Source
  30 + uses: actions/checkout@v2
  31 +
  32 + - name: Use Node.js ${{ matrix.node-version }}
  33 + uses: actions/setup-node@v1
  34 + with:
  35 + node-version: ${{ matrix.node-version }}
  36 +
  37 + - name: Install Dependencies
  38 + run: npm i -g npminstall && npminstall
  39 +
  40 + - name: Continuous Integration
  41 + run: npm run ci
  42 +
  43 + - name: Code Coverage
  44 + uses: codecov/codecov-action@v1
  45 + with:
  46 + token: ${{ secrets.CODECOV_TOKEN }}
... ...
  1 +logs/
  2 +npm-debug.log
  3 +node_modules/
  4 +coverage/
  5 +.idea/
  6 +run/
  7 +.DS_Store
  8 +*.swp
  9 +
... ...
  1 +
  2 +language: node_js
  3 +node_js:
  4 + - '8'
  5 + - '10'
  6 +before_install:
  7 + - npm i npminstall -g
  8 +install:
  9 + - npminstall
  10 +script:
  11 + - npm run ci
  12 +after_script:
  13 + - npminstall codecov && codecov
... ...
  1 +The MIT License (MIT)
  2 +
  3 +Copyright (c) 2019-present Alibaba Group Holding Limited and other contributors.
  4 +
  5 +Permission is hereby granted, free of charge, to any person obtaining a copy
  6 +of this software and associated documentation files (the "Software"), to deal
  7 +in the Software without restriction, including without limitation the rights
  8 +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  9 +copies of the Software, and to permit persons to whom the Software is
  10 +furnished to do so, subject to the following conditions:
  11 +
  12 +The above copyright notice and this permission notice shall be included in all
  13 +copies or substantial portions of the Software.
  14 +
  15 +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  16 +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  17 +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  18 +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  19 +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  20 +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  21 +SOFTWARE.
... ...
  1 +# egg-passport-dingtalk
  2 +
  3 +[![NPM version][npm-image]][npm-url]
  4 +[![build status][travis-image]][travis-url]
  5 +[![Test coverage][codecov-image]][codecov-url]
  6 +[![David deps][david-image]][david-url]
  7 +[![Known Vulnerabilities][snyk-image]][snyk-url]
  8 +[![npm download][download-image]][download-url]
  9 +
  10 +[npm-image]: https://img.shields.io/npm/v/egg-passport-dingtalk.svg?style=flat-square
  11 +[npm-url]: https://npmjs.org/package/egg-passport-dingtalk
  12 +[travis-image]: https://img.shields.io/travis/eggjs/egg-passport-dingtalk.svg?style=flat-square
  13 +[travis-url]: https://travis-ci.org/eggjs/egg-passport-dingtalk
  14 +[codecov-image]: https://img.shields.io/codecov/c/github/eggjs/egg-passport-dingtalk.svg?style=flat-square
  15 +[codecov-url]: https://codecov.io/github/eggjs/egg-passport-dingtalk?branch=master
  16 +[david-image]: https://img.shields.io/david/eggjs/egg-passport-dingtalk.svg?style=flat-square
  17 +[david-url]: https://david-dm.org/eggjs/egg-passport-dingtalk
  18 +[snyk-image]: https://snyk.io/test/npm/egg-passport-dingtalk/badge.svg?style=flat-square
  19 +[snyk-url]: https://snyk.io/test/npm/egg-passport-dingtalk
  20 +[download-image]: https://img.shields.io/npm/dm/egg-passport-dingtalk.svg?style=flat-square
  21 +[download-url]: https://npmjs.org/package/egg-passport-dingtalk
  22 +
  23 +<!--
  24 +Description here.
  25 +-->
  26 +
  27 +## Install
  28 +
  29 +```bash
  30 +$ npm i egg-passport-dingtalk --save
  31 +```
  32 +
  33 +## Usage
  34 +
  35 +```js
  36 +// {app_root}/config/plugin.js
  37 +exports.passportDingtalk = {
  38 + enable: true,
  39 + package: 'egg-passport-dingtalk',
  40 +};
  41 +```
  42 +
  43 +## Configuration
  44 +
  45 +```js
  46 +// {app_root}/config/config.default.js
  47 +exports.passportDingtalk = {
  48 +};
  49 +```
  50 +
  51 +see [config/config.default.js](config/config.default.js) for more detail.
  52 +
  53 +## Example
  54 +
  55 +<!-- example here -->
  56 +
  57 +## Questions & Suggestions
  58 +
  59 +Please open an issue [here](https://github.com/eggjs/egg/issues).
  60 +
  61 +## License
  62 +
  63 +[MIT](LICENSE)
... ...
  1 +# egg-passport-dingtalk
  2 +
  3 +[![NPM version][npm-image]][npm-url]
  4 +[![build status][travis-image]][travis-url]
  5 +[![Test coverage][codecov-image]][codecov-url]
  6 +[![David deps][david-image]][david-url]
  7 +[![Known Vulnerabilities][snyk-image]][snyk-url]
  8 +[![npm download][download-image]][download-url]
  9 +
  10 +[npm-image]: https://img.shields.io/npm/v/egg-passport-dingtalk.svg?style=flat-square
  11 +[npm-url]: https://npmjs.org/package/egg-passport-dingtalk
  12 +[travis-image]: https://img.shields.io/travis/eggjs/egg-passport-dingtalk.svg?style=flat-square
  13 +[travis-url]: https://travis-ci.org/eggjs/egg-passport-dingtalk
  14 +[codecov-image]: https://img.shields.io/codecov/c/github/eggjs/egg-passport-dingtalk.svg?style=flat-square
  15 +[codecov-url]: https://codecov.io/github/eggjs/egg-passport-dingtalk?branch=master
  16 +[david-image]: https://img.shields.io/david/eggjs/egg-passport-dingtalk.svg?style=flat-square
  17 +[david-url]: https://david-dm.org/eggjs/egg-passport-dingtalk
  18 +[snyk-image]: https://snyk.io/test/npm/egg-passport-dingtalk/badge.svg?style=flat-square
  19 +[snyk-url]: https://snyk.io/test/npm/egg-passport-dingtalk
  20 +[download-image]: https://img.shields.io/npm/dm/egg-passport-dingtalk.svg?style=flat-square
  21 +[download-url]: https://npmjs.org/package/egg-passport-dingtalk
  22 +
  23 +<!--
  24 +Description here.
  25 +-->
  26 +
  27 +## 依赖说明
  28 +
  29 +### 依赖的 egg 版本
  30 +
  31 +egg-passport-dingtalk 版本 | egg 1.x
  32 +--- | ---
  33 +1.x | 😁
  34 +0.x | ❌
  35 +
  36 +### 依赖的插件
  37 +<!--
  38 +
  39 +如果有依赖其它插件,请在这里特别说明。如
  40 +
  41 +- security
  42 +- multipart
  43 +
  44 +-->
  45 +
  46 +## 开启插件
  47 +
  48 +```js
  49 +// config/plugin.js
  50 +exports.passportDingtalk = {
  51 + enable: true,
  52 + package: 'egg-passport-dingtalk',
  53 +};
  54 +```
  55 +
  56 +## 使用场景
  57 +
  58 +- Why and What: 描述为什么会有这个插件,它主要在完成一件什么事情。
  59 +尽可能描述详细。
  60 +- How: 描述这个插件是怎样使用的,具体的示例代码,甚至提供一个完整的示例,并给出链接。
  61 +
  62 +## 详细配置
  63 +
  64 +请到 [config/config.default.js](config/config.default.js) 查看详细配置项说明。
  65 +
  66 +## 单元测试
  67 +
  68 +<!-- 描述如何在单元测试中使用此插件,例如 schedule 如何触发。无则省略。-->
  69 +
  70 +## 提问交流
  71 +
  72 +请到 [egg issues](https://github.com/eggjs/egg/issues) 异步交流。
  73 +
  74 +## License
  75 +
  76 +[MIT](LICENSE)
... ...
  1 +'use strict';
  2 +
  3 +const debug = require('debug')('egg-passport-dingtalk');
  4 +const assert = require('assert');
  5 +const Strategy = require('node-passport-dingtalk').Strategy;
  6 +
  7 +module.exports = app => {
  8 + const config = app.config.passportDingtalk;
  9 + config.passReqToCallback = true;
  10 + assert(config.key, '[egg-passport-twitter] config.passportDingtalk.key required');
  11 + assert(config.secret, '[egg-passport-twitter] config.passportDingtalk.secret required');
  12 + config.clientID = config.key;
  13 + config.clientSecret = config.secret;
  14 +
  15 + // must require `req` params
  16 + app.passport.use('dingtalk', new Strategy(config, (req, token, tokenSecret, params, profile, done) => {
  17 + // format user
  18 + const user = {
  19 + provider: 'dingtalk',
  20 + id: profile.id,
  21 + name: profile.username,
  22 + displayName: profile.displayName,
  23 + photo: profile.photos && profile.photos[0] && profile.photos[0].value,
  24 + token,
  25 + tokenSecret,
  26 + params,
  27 + profile,
  28 + };
  29 + debug('%s %s get user: %j', req.method, req.url, user);
  30 +
  31 + // let passport do verify and call verify hook
  32 + app.passport.doVerify(req, user, done);
  33 + }));
  34 +};
... ...
  1 +environment:
  2 + matrix:
  3 + - nodejs_version: '8'
  4 + - nodejs_version: '10'
  5 +
  6 +install:
  7 + - ps: Install-Product node $env:nodejs_version
  8 + - npm i npminstall && node_modules\.bin\npminstall
  9 +
  10 +test_script:
  11 + - node --version
  12 + - npm --version
  13 + - npm run test
  14 +
  15 +build: off
... ...
  1 +'use strict';
  2 +
  3 +/**
  4 + * egg-passport-dingtalk default config
  5 + * @member Config#passportDingtalk
  6 + * @property {String} SOME_KEY - some description
  7 + */
  8 +exports.passportDingtalk = {
  9 + key: 'dingkuvhxslusd5hkjem',
  10 + secret: 'Eyv_4w3DtafgN0b-EuHDWC0aty1RfOq55pJlBMiKkL64iNSF67AtU3aBcJNM-0ds',
  11 + callbackURL: '/callback/dingtalk',
  12 +};
... ...
此 diff 太大无法显示。
  1 +{
  2 + "name": "egg-passport-dingtalk",
  3 + "version": "1.0.0",
  4 + "description": "dingtalk passport plugin for egg",
  5 + "eggPlugin": {
  6 + "name": "passportDingtalk",
  7 + "dependencies": [
  8 + "passport"
  9 + ]
  10 + },
  11 + "keywords": [
  12 + "egg",
  13 + "eggPlugin",
  14 + "egg-plugin",
  15 + "egg-passport",
  16 + "passport-dingtalk"
  17 + ],
  18 + "dependencies": {
  19 + "debug": "^2.6.1",
  20 + "node-passport-dingtalk": "^2.0.7"
  21 + },
  22 + "devDependencies": {
  23 + "autod": "^3.0.1",
  24 + "autod-egg": "^1.1.0",
  25 + "egg": "^2.16.0",
  26 + "egg-bin": "^4.11.0",
  27 + "egg-ci": "^1.11.0",
  28 + "egg-mock": "^3.21.0",
  29 + "egg-passport": "^2.1.1",
  30 + "eslint": "^5.13.0",
  31 + "eslint-config-egg": "^7.1.0",
  32 + "supertest": "^3.0.0"
  33 + },
  34 + "engines": {
  35 + "node": ">=8.0.0"
  36 + },
  37 + "scripts": {
  38 + "test": "npm run lint -- --fix && egg-bin pkgfiles && npm run test-local",
  39 + "test-local": "egg-bin test",
  40 + "cov": "egg-bin cov",
  41 + "lint": "eslint .",
  42 + "ci": "egg-bin pkgfiles --check && npm run lint && npm run cov",
  43 + "pkgfiles": "egg-bin pkgfiles",
  44 + "autod": "autod"
  45 + },
  46 + "files": [
  47 + "config",
  48 + "app.js"
  49 + ],
  50 + "ci": {
  51 + "version": "8, 10"
  52 + },
  53 + "repository": {
  54 + "type": "git",
  55 + "url": "git+https://github.com/eggjs/egg-passport-dingtalk.git"
  56 + },
  57 + "bugs": {
  58 + "url": "https://github.com/eggjs/egg/issues"
  59 + },
  60 + "homepage": "https://github.com/eggjs/egg-passport-dingtalk#readme",
  61 + "author": "",
  62 + "license": "MIT"
  63 +}
... ...
  1 +'use strict';
  2 +
  3 +module.exports = app => {
  4 + app.get('/', function* () {
  5 + this.body = 'hi, ' + app.plugins.passportDingtalk.name;
  6 + });
  7 +
  8 + app.passport.mount('dingtalk');
  9 +};
... ...
  1 +'use strict';
  2 +
  3 +exports.keys = 'dingtalk foo';
  4 +
  5 +exports.passportDingtalk = {
  6 + key: process.env.EGG_PASSPORT_DINGTALK_CONSUMER_KEY,
  7 + secret: process.env.EGG_PASSPORT_DINGTALK_CONSUMER_SECRET,
  8 +};
... ...
  1 +'use strict';
  2 +
  3 +exports.passport = {
  4 + enable: true,
  5 + package: 'egg-passport',
  6 +};
... ...
  1 +{
  2 + "name": "passport-dingtalk-test",
  3 + "version": "0.0.1"
  4 +}
\ No newline at end of file
... ...
  1 +'use strict';
  2 +const request = require('supertest');
  3 +const mock = require('egg-mock');
  4 +
  5 +describe('test/passport-dingtalk.test.js', () => {
  6 + let app;
  7 + before(() => {
  8 + app = mock.app({
  9 + baseDir: 'apps/passport-dingtalk-test',
  10 + });
  11 + return app.ready();
  12 + });
  13 +
  14 + after(() => app.close());
  15 + afterEach(mock.restore);
  16 +
  17 + it('should GET /', () => {
  18 + return request(app.callback())
  19 + .get('/')
  20 + .expect('hi, passportDingtalk')
  21 + .expect(200);
  22 + });
  23 +});
... ...
注册登录 后发表评论