authorizer-wip

This commit is contained in:
Untone 2024-02-05 14:39:28 +03:00
parent 50414a3ebd
commit 0c484f71dc
7 changed files with 114 additions and 59 deletions

6
CHANGELOG.txt Normal file
View File

@ -0,0 +1,6 @@
[1.0.2]
- moved to typescript
- authorizer adapter added
[1.0.0]
- basic CRDT server

View File

@ -1,2 +0,0 @@
web: npm start

3
README.md Normal file
View File

@ -0,0 +1,3 @@
## Editing Server
It uses [ueberdosis/hocuspocus](https://github.com/ueberdosis/hocuspocus) under the hood, enjoy it's simplicity :)

View File

@ -1,7 +0,0 @@
import { Server } from "@hocuspocus/server";
const server = Server.configure({
port: 4242,
});
server.listen();

39
index.ts Normal file
View 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 wont 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
View File

@ -9,10 +9,22 @@
"version": "1.0.0", "version": "1.0.0",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@hocuspocus/server": "^2.0.1" "@authorizerdev/authorizer-js": "2.0.0",
"@hocuspocus/server": "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"
}, },
"devDependencies": { "engines": {
"@hocuspocus/provider": "^2.0.1" "node": ">=16"
},
"funding": {
"url": "https://github.com/sponsors/authorizerdev"
} }
}, },
"node_modules/@hocuspocus/common": { "node_modules/@hocuspocus/common": {
@ -23,43 +35,6 @@
"lib0": "^0.2.47" "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": { "node_modules/@hocuspocus/server": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/@hocuspocus/server/-/server-2.0.1.tgz", "resolved": "https://registry.npmjs.org/@hocuspocus/server/-/server-2.0.1.tgz",
@ -80,12 +55,6 @@
"yjs": "^13.5.29" "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": { "node_modules/@types/async-lock": {
"version": "1.4.0", "version": "1.4.0",
"resolved": "https://registry.npmjs.org/@types/async-lock/-/async-lock-1.4.0.tgz", "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", "resolved": "https://registry.npmjs.org/async-lock/-/async-lock-1.4.0.tgz",
"integrity": "sha512-coglx5yIWuetakm3/1dsX9hxCNox22h7+V80RQOu2XUUMidtArxKoZoOtHUPuR84SycKTXzgGzAUR5hJxujyJQ==" "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": { "node_modules/isomorphic.js": {
"version": "0.2.5", "version": "0.2.5",
"resolved": "https://registry.npmjs.org/isomorphic.js/-/isomorphic.js-0.2.5.tgz", "resolved": "https://registry.npmjs.org/isomorphic.js/-/isomorphic.js-0.2.5.tgz",
@ -150,6 +127,30 @@
"url": "https://github.com/sponsors/dmonad" "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": { "node_modules/uuid": {
"version": "9.0.0", "version": "9.0.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz",
@ -158,6 +159,20 @@
"uuid": "dist/bin/uuid" "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": { "node_modules/ws": {
"version": "8.13.0", "version": "8.13.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz",

View File

@ -1,15 +1,15 @@
{ {
"name": "discours-hocuspocus", "name": "discours-hocuspocus",
"version": "1.0.0", "version": "1.0.2",
"description": "", "description": "",
"main": "index.js", "main": "index.ts",
"type": "module", "type": "module",
"scripts": { "scripts": {
"start": "node index.js" "start": "node index.ts"
}, },
"repository": { "repository": {
"type": "git", "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", "author": "Discours Dev Team",
"license": "MIT", "license": "MIT",
@ -18,6 +18,7 @@
}, },
"homepage": "https://gitlab.com/discoursio/hocuspocus#readme", "homepage": "https://gitlab.com/discoursio/hocuspocus#readme",
"dependencies": { "dependencies": {
"@authorizerdev/authorizer-js": "2.0.0",
"@hocuspocus/server": "2.0.1" "@hocuspocus/server": "2.0.1"
} }
} }