authorizer-wip
This commit is contained in:
parent
50414a3ebd
commit
0c484f71dc
6
CHANGELOG.txt
Normal file
6
CHANGELOG.txt
Normal file
|
@ -0,0 +1,6 @@
|
|||
[1.0.2]
|
||||
- moved to typescript
|
||||
- authorizer adapter added
|
||||
|
||||
[1.0.0]
|
||||
- basic CRDT server
|
3
README.md
Normal file
3
README.md
Normal file
|
@ -0,0 +1,3 @@
|
|||
## Editing Server
|
||||
|
||||
It uses [ueberdosis/hocuspocus](https://github.com/ueberdosis/hocuspocus) under the hood, enjoy it's simplicity :)
|
7
index.js
7
index.js
|
@ -1,7 +0,0 @@
|
|||
import { Server } from "@hocuspocus/server";
|
||||
|
||||
const server = Server.configure({
|
||||
port: 4242,
|
||||
});
|
||||
|
||||
server.listen();
|
39
index.ts
Normal file
39
index.ts
Normal file
|
@ -0,0 +1,39 @@
|
|||
import { Server, onAuthenticatePayload } from "@hocuspocus/server";
|
||||
import { ApiResponse, Authorizer, ConfigType, ValidateJWTTokenInput, ValidateJWTTokenResponse } from '@authorizerdev/authorizer-js';
|
||||
|
||||
const authorizer = new Authorizer({
|
||||
clientID: process.env.AUTHORIZER_CLIENT_ID,
|
||||
authorizerURL: 'https://auth.discours.io',
|
||||
redirectURL: 'https://testing.discours.io'
|
||||
} as ConfigType);
|
||||
|
||||
|
||||
const server = await Server.configure({
|
||||
port: 4242,
|
||||
async onConnect({ connection }) {
|
||||
connection.requiresAuthentication = false; // FIXME
|
||||
},
|
||||
async onAuthenticate(data: onAuthenticatePayload) {
|
||||
// Danger! This won’t be called for that connection attempt.
|
||||
|
||||
if (data.requestHeaders) {
|
||||
const params: ValidateJWTTokenInput = {
|
||||
token_type: 'access_token',
|
||||
token: data.requestHeaders['authorization'] || '',
|
||||
}
|
||||
if (params.token) {
|
||||
// NOTE: ожидаем, что клиент отправит токен
|
||||
const response: ApiResponse<ValidateJWTTokenResponse> = await authorizer.validateJWTToken(params)
|
||||
if(response?.data?.is_valid) {
|
||||
const { sub: user, allowed_roles: roles } = response.data.claims
|
||||
console.debug(`user_id: ${user} roles: ${roles}`)
|
||||
} else {
|
||||
console.debug('no valid auth token presented')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
}).listen();
|
||||
|
||||
server.listen();
|
107
package-lock.json
generated
107
package-lock.json
generated
|
@ -9,10 +9,22 @@
|
|||
"version": "1.0.0",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@hocuspocus/server": "^2.0.1"
|
||||
"@authorizerdev/authorizer-js": "2.0.0",
|
||||
"@hocuspocus/server": "2.0.1"
|
||||
}
|
||||
},
|
||||
"devDependencies": {
|
||||
"@hocuspocus/provider": "^2.0.1"
|
||||
"node_modules/@authorizerdev/authorizer-js": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@authorizerdev/authorizer-js/-/authorizer-js-2.0.0.tgz",
|
||||
"integrity": "sha512-PTVuCrCkZkVPoo+l0+9PVFyP9frLp/L3FUtQDtAaN+ERuqx97DNF20tIH8khSvnXrkKv3lTJ/5iFWddy+dTAwg==",
|
||||
"dependencies": {
|
||||
"cross-fetch": "^3.1.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/authorizerdev"
|
||||
}
|
||||
},
|
||||
"node_modules/@hocuspocus/common": {
|
||||
|
@ -23,43 +35,6 @@
|
|||
"lib0": "^0.2.47"
|
||||
}
|
||||
},
|
||||
"node_modules/@hocuspocus/provider": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@hocuspocus/provider/-/provider-2.0.1.tgz",
|
||||
"integrity": "sha512-3IFn8oFlGEPQhzswiCrMjuBa1+qKPphr2In8iSgkjZFfMiSDobAfYvQj281dZf7vuKZZ1rFn/s55TAWhDCAy0w==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@hocuspocus/common": "^2.0.1",
|
||||
"@lifeomic/attempt": "^3.0.2",
|
||||
"lib0": "^0.2.47",
|
||||
"ws": "^7.5.9"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"y-protocols": "^1.0.5",
|
||||
"yjs": "^13.5.29"
|
||||
}
|
||||
},
|
||||
"node_modules/@hocuspocus/provider/node_modules/ws": {
|
||||
"version": "7.5.9",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz",
|
||||
"integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=8.3.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"bufferutil": "^4.0.1",
|
||||
"utf-8-validate": "^5.0.2"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"bufferutil": {
|
||||
"optional": true
|
||||
},
|
||||
"utf-8-validate": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@hocuspocus/server": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@hocuspocus/server/-/server-2.0.1.tgz",
|
||||
|
@ -80,12 +55,6 @@
|
|||
"yjs": "^13.5.29"
|
||||
}
|
||||
},
|
||||
"node_modules/@lifeomic/attempt": {
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@lifeomic/attempt/-/attempt-3.0.3.tgz",
|
||||
"integrity": "sha512-GlM2AbzrErd/TmLL3E8hAHmb5Q7VhDJp35vIbyPVA5Rz55LZuRr8pwL3qrwwkVNo05gMX1J44gURKb4MHQZo7w==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/async-lock": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/async-lock/-/async-lock-1.4.0.tgz",
|
||||
|
@ -114,6 +83,14 @@
|
|||
"resolved": "https://registry.npmjs.org/async-lock/-/async-lock-1.4.0.tgz",
|
||||
"integrity": "sha512-coglx5yIWuetakm3/1dsX9hxCNox22h7+V80RQOu2XUUMidtArxKoZoOtHUPuR84SycKTXzgGzAUR5hJxujyJQ=="
|
||||
},
|
||||
"node_modules/cross-fetch": {
|
||||
"version": "3.1.8",
|
||||
"resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz",
|
||||
"integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==",
|
||||
"dependencies": {
|
||||
"node-fetch": "^2.6.12"
|
||||
}
|
||||
},
|
||||
"node_modules/isomorphic.js": {
|
||||
"version": "0.2.5",
|
||||
"resolved": "https://registry.npmjs.org/isomorphic.js/-/isomorphic.js-0.2.5.tgz",
|
||||
|
@ -150,6 +127,30 @@
|
|||
"url": "https://github.com/sponsors/dmonad"
|
||||
}
|
||||
},
|
||||
"node_modules/node-fetch": {
|
||||
"version": "2.7.0",
|
||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
|
||||
"integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
|
||||
"dependencies": {
|
||||
"whatwg-url": "^5.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "4.x || >=6.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"encoding": "^0.1.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"encoding": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/tr46": {
|
||||
"version": "0.0.3",
|
||||
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
|
||||
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
|
||||
},
|
||||
"node_modules/uuid": {
|
||||
"version": "9.0.0",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz",
|
||||
|
@ -158,6 +159,20 @@
|
|||
"uuid": "dist/bin/uuid"
|
||||
}
|
||||
},
|
||||
"node_modules/webidl-conversions": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
|
||||
"integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
|
||||
},
|
||||
"node_modules/whatwg-url": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
|
||||
"integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
|
||||
"dependencies": {
|
||||
"tr46": "~0.0.3",
|
||||
"webidl-conversions": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/ws": {
|
||||
"version": "8.13.0",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz",
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
{
|
||||
"name": "discours-hocuspocus",
|
||||
"version": "1.0.0",
|
||||
"version": "1.0.2",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"main": "index.ts",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"start": "node index.js"
|
||||
"start": "node index.ts"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://gitlab.com/discoursio/hocuspocus.git"
|
||||
"url": "git+https://dev.discours.io/discours.io/editing-server.git"
|
||||
},
|
||||
"author": "Discours Dev Team",
|
||||
"license": "MIT",
|
||||
|
@ -18,6 +18,7 @@
|
|||
},
|
||||
"homepage": "https://gitlab.com/discoursio/hocuspocus#readme",
|
||||
"dependencies": {
|
||||
"@authorizerdev/authorizer-js": "2.0.0",
|
||||
"@hocuspocus/server": "2.0.1"
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user