Skip to content

Feature/add code coverage #2

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 109 commits into from
Sep 27, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
109 commits
Select commit Hold shift + click to select a range
e66277e
Update README.md
dhritzkiv Aug 14, 2017
d3660f4
Added package-lock.json
Pritilender Sep 6, 2017
92f0a0b
Changed 'hasOwnProperty' call in Request
Pritilender Sep 6, 2017
68ef835
Changed 'hasOwnProperty' call in Response
Pritilender Sep 6, 2017
74a4b14
set numArgs for promisify of generateAuthorizationCode
nkzawa Sep 8, 2017
c680cfc
readme: Update Slack badge and link
maxtruxa Sep 8, 2017
eddcce9
fix: issue correct expiry dates for tokens (#2)
razvanz Sep 25, 2017
ad26a26
Merge pull request #432 from maxtruxa/slackin-readme
maxtruxa Oct 23, 2017
8b5a945
Merge pull request #425 from dhritzkiv/patch-3
maxtruxa Oct 24, 2017
a29ec14
Merge pull request #431 from nkzawa/fix/promisify-num-args
maxtruxa Oct 24, 2017
234847a
Merge pull request #444 from razvanz/master
maxtruxa Oct 24, 2017
ad7c3f2
Revert "Added package-lock.json"
Pritilender Nov 6, 2017
8dd3d39
Added package-lock.json
Pritilender Nov 6, 2017
b9cd14d
Extend model object with request context
Dec 29, 2017
f5fee67
Rectified the link to RFC 6750 paper
nandubatchu Jan 3, 2018
9998bf6
docs: Correct tokens time scale for 2.x to 3.x migration guide
iczechowski Jan 23, 2018
af4a581
Merge pull request #430 from Pritilender/master
mjsalinger Jan 24, 2018
70159bd
Merge pull request #454 from Pritilender/package-lock
mjsalinger Jan 24, 2018
cb7a559
Add unit and integration tests
Jan 28, 2018
23214dc
fix: validate requested scope on authorize request (#3)
razvanz Sep 28, 2017
641599f
code review
razvanz Jan 29, 2018
9d721a3
Merge pull request #451 from razvanz/fix/validate-scope-on-authorize
mjsalinger Feb 13, 2018
3d4fa77
Merge pull request #462 from basimhennawi/feature/extend-model-request
mjsalinger Feb 13, 2018
bc7211b
Merge pull request #465 from nandubatchu/master
mjsalinger Feb 13, 2018
c33a2cd
resolve merge conflict
adieuadieu Feb 14, 2018
cbd461b
Minor updates
Mar 10, 2016
4491056
refactor: _.contains --> _.includes
adieuadieu Jan 1, 2018
5c8e37d
refactor: small tweaks to fix tests related to catching response_type…
adieuadieu Jan 1, 2018
43f8eb6
Correct generateAccessToken invocation
fabiancook Jan 14, 2018
63dbb3b
Merge pull request #1 from fabiancook/patch-1
adieuadieu Jan 14, 2018
cb6245d
style: responseType/ResponseType variable naming improvement
adieuadieu Feb 14, 2018
f60b519
test: add unit test for implicit grant type
adieuadieu Feb 14, 2018
a8375bc
fix: callback support on implicit grant type's saveToken model function
adieuadieu Feb 14, 2018
6e006bf
test: add integration test for implicit grant type
adieuadieu Feb 14, 2018
fe9359a
test: add integration test for implicit grant's token response type
adieuadieu Feb 14, 2018
96fcd01
resolve merge conflict
adieuadieu Feb 14, 2018
8a92da7
fix: correct issues from rebase
adieuadieu Feb 14, 2018
5fbb487
docs: add text about implicit grant
adieuadieu Feb 14, 2018
408a0bc
Number of arguments MUST be passed
wspringer Apr 3, 2018
51c8ac2
docs: Ensure accessTokenExpiresAt is required
May 14, 2018
89173de
Merge pull request #491 from mattgrande/master
maxtruxa May 14, 2018
47ddec6
Specify arg count when promisifying generateAuthorizationCode
sgronblo May 15, 2018
6b36f4f
Fix RFC 6750 link
ginev Jun 14, 2018
a372388
.npmignore tests
markstos Jun 22, 2018
51a02c6
docs: Add breaking change to 3.0 migration guide.
markstos Jun 22, 2018
c7add04
Merge pull request #503 from markstos/npmignore-tests
thomseddon Aug 3, 2018
37d8959
Merge pull request #500 from ginev/master
thomseddon Aug 3, 2018
4090055
Merge pull request #504 from markstos/document-breaking-change-for-ex…
thomseddon Aug 3, 2018
0d3d781
Change the server_error code to 500
MartinLoeper Feb 13, 2018
b8ff853
Merge branch 'master' into dev
thomseddon Aug 3, 2018
c39fa21
Merge pull request #472 from MartinLoeper/master
thomseddon Aug 3, 2018
22886f5
Merge pull request #493 from sgronblo/fix-generate-authorization-code…
mjsalinger Aug 7, 2018
2e200d8
Merge pull request #483 from wspringer/master
mjsalinger Aug 7, 2018
d97a674
Merge pull request #464 from adieuadieu/implicit-grant-support
mjsalinger Aug 7, 2018
6d4c1ce
Merge pull request #471 from smartrecruiters/fix-migration-documentaiton
mjsalinger Aug 7, 2018
3fc1f3e
revoke-handler: implementation
visvk Mar 30, 2016
592c809
revoke-handler: revoke accessToken
visvk Aug 18, 2016
2677693
Rebase revoke-handler to oauthjs:dev
visvk Aug 7, 2018
6a61aa5
revoke-handler: throw InvalidClientError if client_id does not match …
visvk Aug 22, 2016
b4d17f6
fix: correct client ID check in refresh_token grant type
Namburgesas Jun 14, 2018
ba13288
Merge pull request #289 from visvk/revoke-handler
mjsalinger Aug 8, 2018
c1c1405
Backported 3.x changelog
mjsalinger Aug 27, 2018
2808bad
Merge pull request #519 from mjsalinger/fix-dependencies
mjsalinger Aug 17, 2018
558e8cf
Switch to eslint
compwright Jul 27, 2018
ff09b2b
Merge pull request #508 from compwright/upgrade-deps
mjsalinger Aug 27, 2018
af6741e
Merge pull request #501 from Namburgesas/dev
mjsalinger Aug 27, 2018
be9a568
Updated changelog
mjsalinger Aug 27, 2018
c6a3137
Bumped to 4.0.0-dev.1
mjsalinger Aug 27, 2018
a950bc9
fix: authorization_code grant should not be required in implicit flow
adieuadieu Aug 28, 2018
653a92b
Revert "fix; correct client ID check in refresh_token grant type"
mjsalinger Aug 29, 2018
c516c16
Merge pull request #524 from oauthjs/revert-501-dev
mjsalinger Sep 5, 2018
4a77277
Merge pull request #522 from adieuadieu/fix/unauthorized_client_when_…
mjsalinger Sep 5, 2018
04eaf5a
Updated changelog
mjsalinger Sep 5, 2018
0154165
Bumped to 4.0.0-dev.2
mjsalinger Sep 5, 2018
45b508a
Updated changelog
mjsalinger Sep 5, 2018
f3ce1bb
Seeking maintainers
thomseddon Apr 18, 2019
0bff971
rewrite-in-typescript
nkitku Apr 21, 2019
bd988da
added-proposal-for-v5
nkitku Apr 21, 2019
b027643
added-.vscode
nkitku Apr 21, 2019
2cd5e08
teslint-fixes
nkitku Apr 22, 2019
a4f99a1
fixed-gitignore
nkitku Apr 22, 2019
cac41dd
added-docs
nkitku Apr 23, 2019
8b31697
expose-interfaces
nkitku Apr 24, 2019
8b7d9da
rewriting-test-files
nkitku Apr 27, 2019
de35cc1
fixed-tests
nkitku Apr 30, 2019
28bdd3c
updated-todos-and-file-folder-permissions
nkitku May 10, 2019
c13e9ea
fix-imports
nkitku May 10, 2019
58b08b5
fixing-conflicts
nkitku May 10, 2019
6146cc7
remove-node-6-support
nkitku May 10, 2019
038c90a
updated-codes-and-changelogs
nkitku May 18, 2019
1aa302e
dependencies-updated
nkitku Jun 6, 2019
4600122
updated-dependencies
nkitku Jul 11, 2019
be5d69d
fixed-linting
nkitku Jul 18, 2019
098ed84
added-vsode-settings-file-gitignore
nkitku Jul 23, 2019
737682a
extend-model-object-with-request-in-revoke-handler
nkitku Jul 23, 2019
e4ebd21
fixed-invalid_token-code
nkitku Sep 10, 2019
3a6abf6
fixed-magic-time-constants
nkitku Sep 10, 2019
c2e6a22
request-method-to-upper-case-and-updated-test
nkitku Sep 11, 2019
a29eb1a
updated-ts-version
nkitku Sep 11, 2019
fffd5f9
tsconfig-&-npm-scripts-updated
nkitku Sep 12, 2019
3ebcf71
ignored-message-attr-in-auth-error
nkitku Sep 12, 2019
412a3a6
updated-packages
nkitku Nov 12, 2019
e446c30
updated-packages
nkitku Nov 12, 2019
3366396
listed NodeJS 12 in travis
nkitku Nov 29, 2019
98d1dcb
fixing-for-strict-null-checks
nkitku Nov 30, 2019
b1bab59
moved-required-@types
nkitku Nov 30, 2019
52120fd
enabled-sourcemap
nkitku Dec 5, 2019
ad8b498
Merge pull request #564 from nkitku/v5.0-dev
thomseddon Jan 28, 2020
36275b5
add codecoverage and upgrade packages
Uzlopak Apr 25, 2020
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Editor configuration, see http://editorconfig.org
root = true

[*]
charset = utf-8
end_of_line = lf
indent_style = space
indent_size = 2
insert_final_newline = true
trim_trailing_whitespace = true

[*.md]
max_line_length = off
trim_trailing_whitespace = false
21 changes: 20 additions & 1 deletion .gitignore
100644 → 100755
Original file line number Diff line number Diff line change
@@ -1,5 +1,24 @@
node_modules/

# IDE
/.idea
/.awcache
/.vscode/*.code-workspace
/.vscode/settings.json

# misc
npm-debug.log

# folders
/dist
/node_modules
docs/_build/
__pycache__/

# files
.DS_Store
*.pyc
/aio

# codecoverage
/.nyc_output
/coverage
1 change: 0 additions & 1 deletion .jshintignore

This file was deleted.

26 changes: 0 additions & 26 deletions .jshintrc

This file was deleted.

10 changes: 10 additions & 0 deletions .nycrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"extends": "@istanbuljs/nyc-config-typescript",
"all": true,
"reporter": [
"lcovonly",
"html",
"text",
"text-summary"
]
}
5 changes: 5 additions & 0 deletions .prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"singleQuote": true,
"trailingComma": "all",
"endOfLine": "lf"
}
9 changes: 2 additions & 7 deletions .travis.yml
100644 → 100755
Original file line number Diff line number Diff line change
@@ -1,13 +1,8 @@
language: node_js

node_js:
- 4
- 4.0
- 6
- 6.0
- 7
- 7.0
- 8
- 8.0
- 10
- 12

sudo: false
22 changes: 22 additions & 0 deletions .vscode/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# VSCode Configuration

This folder contains opt-in [Workspace Settings](https://code.visualstudio.com/docs/getstarted/settings) and [Extension Recommendations](https://code.visualstudio.com/docs/editor/extension-gallery#_workspace-recommended-extensions) that our team recommends using when working on this repository.

## Usage

To use the recommended settings follow the steps below:

- copy `.vscode/recommended-settings.json` to `.vscode/settings.json`
- restart the editor

If you already have your custom workspace settings you should instead manually merge the file content.

This isn't an automatic process so you will need to repeat it when settings are updated.

To see the recommended extensions select "Extensions: Show Recommended Extensions" in the [Command Palette](https://code.visualstudio.com/docs/getstarted/userinterface#_command-palette).

## Editing `.vscode/recommended-settings.json`

If you wish to add extra configuration items please keep in mind any settings you add here will be used by many users.

Try to keep these settings to things that help facilitate the development process and avoid altering the user workflow whenever possible.
11 changes: 11 additions & 0 deletions .vscode/extensions.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
// See http://go.microsoft.com/fwlink/?LinkId=827846 to learn about workspace recommendations.
// Extension identifier format: ${publisher}.${name}. Example: vscode.csharp

// List of extensions which should be recommended for users of this workspace.
"recommendations": [
"editorconfig.editorconfig",
"esbenp.prettier-vscode",
"ms-vscode.vscode-typescript-tslint-plugin"
]
}
23 changes: 23 additions & 0 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Mocha Tests",
"program": "${workspaceFolder}/node_modules/mocha/bin/_mocha",
"args": [
"--require",
"ts-node/register",
"-u",
"tdd",
"--timeout",
"999999",
"--colors",
"--recursive",
"${workspaceFolder}/test/**/*.spec.ts"
],
"internalConsoleOptions": "openOnSessionStart"
}
]
}
39 changes: 39 additions & 0 deletions .vscode/recommended-settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
{
"files.exclude": {
"**/.git": true,
"**/.DS_Store": true,
"**/node_modules": true,
"dist": true
},
"files.watcherExclude": {
"**/.git/**": true,
"**/node_modules/**": true,
"**/dist/**": true
},
"search.exclude": {
"**/node_modules": true,
"**/dist": true
},
"editor.formatOnSave": false,
"typescript.format.enable": false,
"editor.formatOnPaste": false,
"[typescript]": {
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": true,
"source.fixAll.tslint": true
}
},
"[json]": {
"editor.formatOnSave": true
},
"[jsonc]": {
"editor.formatOnSave": true
},
"[javascript]": {
"editor.formatOnSave": true
},
"prettier.singleQuote": true,
"prettier.trailingComma": "all",
"prettier.printWidth": 80
}
33 changes: 33 additions & 0 deletions CHANGELOG.md
100644 → 100755
Original file line number Diff line number Diff line change
@@ -1,5 +1,38 @@
## Changelog

### 5.0.0
* BREAKING: Remove support for node v6
* BREAKING: Remove support for callbacks only support native Promises
* new: Rewrote in TypeScript
* new: Switch from Eslint to Tslint
* new: added .vscode folder for recommend extensions and recommend setting required for development
* new: added suitable TypeScript Interfaces for various Objects

### 4.0.0
* BREAKING: Set server_error Code to 500
* BREAKING: Remove support for node v4
* new: Added revoke-handler to revoke access token
* new: Added implicit grant flow
* new: Switch from jshint to eslin
* fix: authorization_code grant should not be required in implicit flowt

### 3.1.0
* new: Added package-lock.json
* new: Extend model object with request context
* new: .npmignore tests
* fix: validate requested scope on authorize request
* fix: issue correct expiry dates for tokens
* fix: set numArgs for promisify of generateAuthorizationCode
* fix: Changed 'hasOwnProperty' call in Response
* docs: Ensure accessTokenExpiresAt is required
* docs: Add missing notice of breaking change for accessExpireLifetime to migration guide
* docs: Correct tokens time scale for 2.x to 3.x migration guide
* readme: Update Slack badge and link
* readme: Fix link to RFC6750 standard

### 3.0.1
* Updated dependencies

### 3.0.0
* Complete re-write, with Promises and callback support
* Dropped support for node v0.8, v0.10, v0.12
Expand Down
Empty file modified LICENSE
100644 → 100755
Empty file.
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@ The *oauth2-server* module is framework-agnostic but there are several officiall

## Features

- Supports `authorization_code`, `client_credentials`, `refresh_token` and `password` grant, as well as *extension grants*, with scopes.
- Supports `authorization_code`, `client_credentials`, `refresh_token`, `implicit` and `password` grant, as well as *extension grants*, with scopes.
- Can be used with *promises*, *Node-style callbacks*, *ES6 generators* and *async*/*await* (using [Babel](https://babeljs.io)).
- Fully [RFC 6749](https://tools.ietf.org/html/rfc6749.html) and [RFC 6750](https://tools.ietf.org/html/rfc6749.html) compliant.
- Fully [RFC 6749](https://tools.ietf.org/html/rfc6749.html) and [RFC 6750](https://tools.ietf.org/html/rfc6750.html) compliant.
- Implicitly supports any form of storage, e.g. *PostgreSQL*, *MySQL*, *MongoDB*, *Redis*, etc.
- Complete [test suite](https://github.com/oauthjs/node-oauth2-server/tree/master/test).

Expand Down Expand Up @@ -63,6 +63,6 @@ npm test
[travis-url]: https://travis-ci.org/oauthjs/node-oauth2-server
[license-image]: https://img.shields.io/badge/license-MIT-blue.svg
[license-url]: https://raw.githubusercontent.com/oauthjs/node-oauth2-server/master/LICENSE
[slack-image]: https://img.shields.io/badge/slack-join-E01563.svg
[slack-url]: https://oauthjs.slack.com
[slack-image]: https://slack.oauthjs.org/badge.svg
[slack-url]: https://slack.oauthjs.org

8 changes: 8 additions & 0 deletions TODO
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@

Todo:
✔ Add a todo
✔ A Basic Rewrite of library in TypeScript
✔ A Basic Rewrite of tests in TypeScript
☐ Add examples for nestjs, expressjs, koa and others
☐ Add Migration guide
☐ Review all Docs
40 changes: 21 additions & 19 deletions docs/api/oauth2-server.rst
Original file line number Diff line number Diff line change
Expand Up @@ -128,25 +128,27 @@ Authorizes a token request.

**Arguments:**

+-----------------------------------------+-----------------+-----------------------------------------------------------------------------+
| Name | Type | Description |
+=========================================+=================+=============================================================================+
| request | :doc:`request` | Request object. |
+-----------------------------------------+-----------------+-----------------------------------------------------------------------------+
| [request.query.allowed=undefined] | String | ``'false'`` to deny the authorization request (see remarks section). |
+-----------------------------------------+-----------------+-----------------------------------------------------------------------------+
| response | :doc:`response` | Response object. |
+-----------------------------------------+-----------------+-----------------------------------------------------------------------------+
| [options={}] | Object | Handler options. |
+-----------------------------------------+-----------------+-----------------------------------------------------------------------------+
| [options.authenticateHandler=undefined] | Object | The authenticate handler (see remarks section). |
+-----------------------------------------+-----------------+-----------------------------------------------------------------------------+
| [options.allowEmptyState=false] | Boolean | Allow clients to specify an empty ``state``. |
+-----------------------------------------+-----------------+-----------------------------------------------------------------------------+
| [options.authorizationCodeLifetime=300] | Number | Lifetime of generated authorization codes in seconds (default = 5 minutes). |
+-----------------------------------------+-----------------+-----------------------------------------------------------------------------+
| [callback=undefined] | Function | Node-style callback to be used instead of the returned ``Promise``. |
+-----------------------------------------+-----------------+-----------------------------------------------------------------------------+
+-----------------------------------------+-----------------+--------------------------------------------------------------------------------+
| Name | Type | Description |
+=========================================+=================+================================================================================+
| request | :doc:`request` | Request object. |
+-----------------------------------------+-----------------+--------------------------------------------------------------------------------+
| [request.query.allowed=undefined] | String | ``'false'`` to deny the authorization request (see remarks section). |
+-----------------------------------------+-----------------+--------------------------------------------------------------------------------+
| response | :doc:`response` | Response object. |
+-----------------------------------------+-----------------+--------------------------------------------------------------------------------+
| [options={}] | Object | Handler options. |
+-----------------------------------------+-----------------+--------------------------------------------------------------------------------+
| [options.authenticateHandler=undefined] | Object | The authenticate handler (see remarks section). |
+-----------------------------------------+-----------------+--------------------------------------------------------------------------------+
| [options.allowEmptyState=false] | Boolean | Allow clients to specify an empty ``state``. |
+-----------------------------------------+-----------------+--------------------------------------------------------------------------------+
| [options.authorizationCodeLifetime=300] | Number | Lifetime of generated authorization codes in seconds (default = 5 minutes). |
+-----------------------------------------+-----------------+--------------------------------------------------------------------------------+
| [options.accessTokenLifetime=3600] | Number | Lifetime of generated implicit grant access token in seconds (default = 1 hr). |
+-----------------------------------------+-----------------+--------------------------------------------------------------------------------+
| [callback=undefined] | Function | Node-style callback to be used instead of the returned ``Promise``. |
+-----------------------------------------+-----------------+--------------------------------------------------------------------------------+

**Return value:**

Expand Down
24 changes: 14 additions & 10 deletions docs/misc/migrating-v2-to-v3.rst
Original file line number Diff line number Diff line change
Expand Up @@ -28,19 +28,23 @@ The naming of the exposed middlewares has changed to match the OAuth2 _RFC_ more
Server options
--------------

The following server options can be set when instantiating the OAuth service:
The following server options can be set when instantiating the OAuth service:

* `addAcceptedScopesHeader`: **default true** Add the `X-Accepted-OAuth-Scopes` header with a list of scopes that will be accepted
* `addAuthorizedScopesHeader`: **default true** Add the `X-OAuth-Scopes` header with a list of scopes that the user is authorized for
* `allowBearerTokensInQueryString`: **default false** Determine if the bearer token can be included in the query string (i.e. `?access_token=`) for validation calls
* `allowEmptyState`: **default false** If true, `state` can be empty or not passed. If false, `state` is required.
* `authorizationCodeLifetime`: **default 300** Default number of milliseconds that the authorization code is active for
* `accessTokenLifetime`: **default 3600** Default number of milliseconds that an access token is valid for
* `refreshTokenLifetime`: **default 1209600** Default number of milliseconds that a refresh token is valid for
* `authorizationCodeLifetime`: **default 300** Default number of seconds that the authorization code is active for
* `accessTokenLifetime`: **default 3600** Default number of seconds that an access token is valid for
* `refreshTokenLifetime`: **default 1209600** Default number of seconds that a refresh token is valid for
* `allowExtendedTokenAttributes`: **default false** Allows additional attributes (such as `id_token`) to be included in token responses.
* `requireClientAuthentication`: **default true for all grant types** Allow ability to set client/secret authentication to `false` for a specific grant type.
* `requireClientAuthentication`: **default true for all grant types** Allow ability to set client/secret authentication to `false` for a specific grant type.

The following server options have been removed in v3.0.0
The following server options have changed behavior in v3.0.0:

* `accessTokenLifetime` can no longer be set to `null` to indicate a non-expiring token. The recommend alternative is to set accessTokenLifetime to a high value.

The following server options have been removed in v3.0.0:

* `grants`: **removed** (now returned by the `getClient` method).
* `debug`: **removed** (not the responsibility of this module).
Expand All @@ -56,7 +60,7 @@ Model specification
* `generateAuthorizationCode()` is **optional** and should return a `String`.
* `generateRefreshToken(client, user, scope)` is **optional** and should return a `String`.
* `getAccessToken(token)` should return an object with:

* `accessToken` (`String`)
* `accessTokenExpiresAt` (`Date`)
* `client` (`Object`), containing at least an `id` property that matches the supplied client
Expand All @@ -71,7 +75,7 @@ Model specification
* `user` (`Object`)

* `getClient(clientId, clientSecret)` should return an object with, at minimum:

* `redirectUris` (`Array`)
* `grants` (`Array`)

Expand All @@ -84,11 +88,11 @@ Model specification
* `user` (`Object`)

* `getUser(username, password)` should return an object:

* No longer requires that `id` be returned.

* `getUserFromClient(client)` should return an object:

* No longer requires that `id` be returned.

* `grantTypeAllowed()` was **removed**. You can instead:
Expand Down
Loading