Skip to content

Commit d11ecd3

Browse files
authored
fix: use @eggjs/security and @eggjs/session (#5384)
export Singleton <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **Dependencies** - Replaced `egg-security` with `@eggjs/security` package - Replaced `egg-session` with `@eggjs/session` package - Updated security and session plugin references across documentation - **Documentation** - Updated plugin, security, and core documentation to reflect new package naming - Corrected GitHub repository links for security and session plugins - **Configuration** - Modified plugin configuration to use new `@eggjs/security` and `@eggjs/session` packages - Removed legacy security configuration from type definitions - **Core Functionality** - Added singleton instance management method - Enhanced type definitions for core framework components <!-- end of auto-generated comment: release notes by coderabbit.ai -->
1 parent c9c1251 commit d11ecd3

28 files changed

+76
-71
lines changed

index-old.d.ts

-3
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,8 @@
3333
// } from 'egg-core';
3434
// import EggCookies = require('egg-cookies');
3535
// import 'egg-onerror';
36-
// import 'egg-session';
3736
// import 'egg-multipart';
38-
// import 'egg-security';
3937
// import 'egg-logrotator';
40-
// import '@eggjs/schedule';
4138
// import 'egg-view';
4239

4340
// declare module 'egg' {

package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
"@eggjs/i18n": "^3.0.1",
2727
"@eggjs/jsonp": "^3.0.0",
2828
"@eggjs/schedule": "^5.0.2",
29+
"@eggjs/security": "^4.0.0",
30+
"@eggjs/session": "^4.0.0",
2931
"@eggjs/static": "^3.0.0",
3032
"@eggjs/utils": "^4.2.4",
3133
"@eggjs/watcher": "^4.0.3",
@@ -36,8 +38,6 @@
3638
"egg-logrotator": "^3.1.0",
3739
"egg-multipart": "^3.1.0",
3840
"egg-onerror": "^2.1.1",
39-
"egg-security": "^3.0.0",
40-
"egg-session": "^3.3.0",
4141
"egg-view": "^2.1.3",
4242
"extend2": "^4.0.0",
4343
"graceful": "^2.0.0",

site/docs/advanced/view-plugin.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ module.exports = {
121121

122122
The framework provides `ctx.helper` for developer use, but in some cases we want to override the helper method and only take effect when the template is rendered.
123123

124-
In template rendering, we often need to output a user-supplied html fragment, in which case, we often use the `helper.shtml` provided by the `egg-security` plugin.
124+
In template rendering, we often need to output a user-supplied html fragment, in which case, we often use the `helper.shtml` provided by the `@eggjs/security` plugin.
125125

126126
```html
127127
<div>{{ helper.shtml(data.content) | safe }}</div>
@@ -163,9 +163,9 @@ You can [view](https://github.com/eggjs/egg-view-nunjucks/blob/2ee5ee992cfd95bc0
163163

164164
### Security Related
165165

166-
Templates and security are related and [egg-security] also provides some methods for the template. The template engine can be used according to requirements.
166+
Templates and security are related and [@eggjs/security] also provides some methods for the template. The template engine can be used according to requirements.
167167

168-
First declare a dependency on [egg-security]:
168+
First declare a dependency on [@eggjs/security]:
169169

170170
```json
171171
{
@@ -183,6 +183,6 @@ Besides, the framework provides [app.injectCsrf](../core/security.md#appinjectcs
183183

184184
As a high-quality plugin, perfect unit testing is indispensable, and we also provide lots of auxiliary tools to make it painless for plugin developers to write tests with, see [unit testing](../core/unittest.md) and [plugin](./plugin.md) docs.
185185

186-
[egg-security]: https://github.com/eggjs/egg-security
186+
[@eggjs/security]: https://github.com/eggjs/security
187187
[egg-view-nunjucks]: https://github.com/eggjs/egg-view-nunjucks
188188
[egg-view-ejs]: https://github.com/eggjs/egg-view-ejs

site/docs/advanced/view-plugin.zh-CN.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ module.exports = {
116116

117117
框架本身提供了 `ctx.helper` 供开发者使用。但在某些情况下,我们希望覆盖 helper 方法,使其仅在模板渲染时生效。
118118

119-
在模板渲染中,我们经常需要输出用户提供的 HTML 片段,这通常需要使用 `egg-security` 插件提供的 `helper.shtml` 方法进行清洗:
119+
在模板渲染中,我们经常需要输出用户提供的 HTML 片段,这通常需要使用 `@eggjs/security` 插件提供的 `helper.shtml` 方法进行清洗:
120120

121121
```html
122122
<div>{{ helper.shtml(data.content) | safe }}</div>
@@ -160,9 +160,9 @@ module.exports = class MyCustomView {
160160

161161
### 安全相关
162162

163-
模板与安全密不可分。[egg-security] 也为模板提供了一些方法。模板引擎可以根据需求使用这些方法。
163+
模板与安全密不可分。[@eggjs/security] 也为模板提供了一些方法。模板引擎可以根据需求使用这些方法。
164164

165-
首先声明对 [egg-security] 的依赖:
165+
首先声明对 [@eggjs/security] 的依赖:
166166

167167
```json
168168
{
@@ -180,6 +180,6 @@ module.exports = class MyCustomView {
180180

181181
为了确保插件的高质量,完善的单元测试是不可或缺的。我们也提供了很多辅助工具,以帮助插件开发者毫无障碍地编写测试。具体内容请参见[单元测试](../core/unittest.md)[插件](./plugin.md)相关章节。
182182

183-
[egg-security]: https://github.com/eggjs/egg-security
183+
[@eggjs/security]: https://github.com/eggjs/security
184184
[egg-view-nunjucks]: https://github.com/eggjs/egg-view-nunjucks
185185
[egg-view-ejs]: https://github.com/eggjs/egg-view-ejs

site/docs/basics/controller.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -684,7 +684,7 @@ module.exports = {
684684

685685
By using Cookie, we can create an individual Session specific to every user to store user identity information, which will be encrypted then stored in Cookie to perform session persistence across requests.
686686

687-
The framework builds in [Session](https://github.com/eggjs/egg-session) plugin, which provides `ctx.session` for us to get or set current user's Session.
687+
The framework builds in [Session](https://github.com/eggjs/session) plugin, which provides `ctx.session` for us to get or set current user's Session.
688688

689689
```js
690690
class PostController extends Controller {

site/docs/basics/controller.zh-CN.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -671,7 +671,7 @@ module.exports = {
671671

672672
Cookie 可以存储每个用户的 Session 来保持跨请求的用户身份。这些信息加密后存储在 Cookie 中。
673673

674-
框架内置了 [Session](https://github.com/eggjs/egg-session) 插件,通过 `ctx.session` 访问或修改用户 Session:
674+
框架内置了 [Session](https://github.com/eggjs/session) 插件,通过 `ctx.session` 访问或修改用户 Session:
675675

676676
```js
677677
class PostController extends Controller {
@@ -1077,4 +1077,4 @@ exports.security = {
10771077
};
10781078
```
10791079

1080-
如果没有配置 `domainWhiteList``domainWhiteList` 数组为空,则默认允许所有跳转请求,等同于使用 `ctx.unsafeRedirect(url)`
1080+
如果没有配置 `domainWhiteList``domainWhiteList` 数组为空,则默认允许所有跳转请求,等同于使用 `ctx.unsafeRedirect(url)`

site/docs/basics/plugin.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -161,11 +161,11 @@ Specific consolidation rules can be found in [Configuration](./config.md).
161161

162162
- Framework has default built-in plugins for enterprise applications [Common plugins](https://eggjs.org/zh-cn/plugins/):
163163
  - [onerror](https://github.com/eggjs/egg-onerror) Uniform Exception Handling
164-
  - [Session](https://github.com/eggjs/egg-session) Session implementation
164+
  - [session](https://github.com/eggjs/session) Session implementation
165165
  - [i18n](https://github.com/eggjs/i18n) Multilingual
166166
  - [watcher](https://github.com/eggjs/watcher) File and folder monitoring
167167
  - [multipart](https://github.com/eggjs/egg-multipart) File Streaming Upload
168-
  - [security](https://github.com/eggjs/egg-security) Security
168+
  - [security](https://github.com/eggjs/security) Security
169169
  - [development](https://github.com/eggjs/development) Development Environment Configuration
170170
  - [logrotator](https://github.com/eggjs/egg-logrotator) Log segmentation
171171
  - [schedule](https://github.com/eggjs/schedule) Timing tasks

site/docs/basics/plugin.zh-CN.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -161,11 +161,11 @@ exports.mysql = {
161161

162162
- 框架默认内置了企业级应用[常用的插件](https://eggjs.org/zh-cn/plugins/)
163163
- [onerror](https://github.com/eggjs/egg-onerror) 统一异常处理
164-
- [Session](https://github.com/eggjs/egg-session) Session 实现
164+
- [session](https://github.com/eggjs/session) Session 实现
165165
- [i18n](https://github.com/eggjs/i18n) 多语言
166166
- [watcher](https://github.com/eggjs/watcher) 文件和文件夹监控
167167
- [multipart](https://github.com/eggjs/egg-multipart) 文件流式上传
168-
- [security](https://github.com/eggjs/egg-security) 安全
168+
- [security](https://github.com/eggjs/security) 安全
169169
- [development](https://github.com/eggjs/development) 开发环境配置
170170
- [logrotator](https://github.com/eggjs/egg-logrotator) 日志切分
171171
- [schedule](https://github.com/eggjs/schedule) 定时任务

site/docs/basics/router.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ exports.post = async (ctx) => {
214214
215215
> **Reason**: the framework verifies the CSRF value specially for form POST requests, so please submit the CSRF key as well when you submit a form. Refer to [Keep Away from CSRF Threat](https://eggjs.org/zh-cn/core/security.html#安全威胁csrf的防范) for more detail.
216216
217-
> **Note**: the verification is performed because the framework builds in a security plugin [egg-security](https://github.com/eggjs/egg-security) that provides some default security practices and this plugin is enabled by default. In case you want to disable some security protections, just set the enable attribute to false.
217+
> **Note**: the verification is performed because the framework builds in a security plugin [@eggjs/security](https://github.com/eggjs/security) that provides some default security practices and this plugin is enabled by default. In case you want to disable some security protections, just set the enable attribute to false.
218218
219219
> "Unless you clearly confirm the consequence, it's not recommended to disable functions provided by the security plugin"
220220

site/docs/basics/router.zh-CN.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ exports.post = async (ctx) => {
211211
212212
> **原因**:框架内部针对表单 POST 请求均会验证 CSRF 的值,因此我们在表单提交时,需要带上 CSRF key 进行提交。具体可参考[安全威胁 CSRF 的防范](https://eggjs.org/zh-cn/core/security.html#安全威胁csrf的防范)
213213
214-
> **注意**:上述校验是因为框架中内置了安全插件 [egg-security](https://github.com/eggjs/egg-security),提供了一些默认的安全实践,并且框架的安全插件默认是开启的。如果需要关闭一些安全防范,直接设置相应选项的 `enable` 属性为 `false` 即可。
214+
> **注意**:上述校验是因为框架中内置了安全插件 [@eggjs/security](https://github.com/eggjs/security),提供了一些默认的安全实践,并且框架的安全插件默认是开启的。如果需要关闭一些安全防范,直接设置相应选项的 `enable` 属性为 `false` 即可。
215215
216216
> 虽然不推荐,但如果确实需要关闭某些安全功能,可以在 `config/config.default.js` 中设置以下代码:
217217

site/docs/community/faq.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ There are two kinds of common csrf errors:
7777
- `missing csrf token`
7878
- `invalid csrf token`
7979

80-
By default [egg-security](https://github.com/eggjs/egg-security/) plugin built in Egg requires CSRF validation against all 'unsafe' request such as `POST`, `PUT`, `DELETE` requests.
80+
By default [@eggjs/security](https://github.com/eggjs/security/) plugin built in Egg requires CSRF validation against all 'unsafe' request such as `POST`, `PUT`, `DELETE` requests.
8181

8282
The error will disappear in the presence of the correct csrf token in the request. For more implementation details, see [../core/security.md#csrf].
8383

site/docs/community/faq.zh-CN.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ pm2 start server.js
7979
- `missing csrf token`
8080
- `invalid csrf token`
8181

82-
Egg 内置的 [egg-security](https://github.com/eggjs/egg-security/) 插件默认对所有“非安全”的方法,例如 `POST``PUT``DELETE`,都进行 CSRF 校验。
82+
Egg 内置的 [@eggjs/security](https://github.com/eggjs/security/) 插件默认对所有“非安全”的方法,例如 `POST``PUT``DELETE`,都进行 CSRF 校验。
8383

8484
遇到 csrf 报错通常是因为没有加正确的 csrf token 导致的,具体实现方式,请阅读[安全威胁 CSRF 的防范](../core/security.md#安全威胁csrf的防范)
8585

site/docs/core/cookie-and-session.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ In web applications, Cookie is usually used to identify users.
127127
So the concept of Session, which is built on top of Cookie,
128128
was created to specifically handle user identification.
129129

130-
Egg.js built-in supports Session through [egg-session](https://github.com/eggjs/egg-session) plugin.
130+
Egg.js built-in supports Session through [@eggjs/session](https://github.com/eggjs/session) plugin.
131131
We can use `ctx.session` to read or modify current user session.
132132

133133
```js

site/docs/core/cookie-and-session.zh-CN.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ keys 配置成一个字符串,可以按照逗号分隔配置多个 key。Cooki
108108

109109
Cookie 通常用作 Web 应用中标识请求方身份的功能,基于此,Web 应用封装了 Session 概念,专用于用户身份识别。
110110

111-
框架内置了 [Session](https://github.com/eggjs/egg-session) 插件,提供了 `ctx.session` 用于访问或修改当前用户的 Session。
111+
框架内置了 [Session](https://github.com/eggjs/session) 插件,提供了 `ctx.session` 用于访问或修改当前用户的 Session。
112112

113113
```js
114114
class HomeController extends Controller {

site/docs/core/security.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ The framework itself has a rich solution for common security risks on the Web si
2222
- customizable white list for safe redirect and url filtering.
2323
- all kinds of template related tools for preprocessing.
2424

25-
Security plugins [egg-security](https://github.com/eggjs/egg-security) are built into the framework, provides default security practices.
25+
Security plugins [@eggjs/security](https://github.com/eggjs/security) are built into the framework, provides default security practices.
2626

2727
### Open or Close the Configuration
2828

site/docs/core/security.zh-CN.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ Web 应用中存在很多安全风险,这些风险可能会被黑客利用。
2222
- 可定制的白名单,用于安全跳转和 url 过滤。
2323
- 各种模板相关的工具函数做预处理。
2424

25-
框架内置了安全插件 [egg-security](https://github.com/eggjs/egg-security),提供了默认的安全实践。
25+
框架内置了安全插件 [@eggjs/security](https://github.com/eggjs/security),提供了默认的安全实践。
2626

2727
### 开启与关闭配置
2828

site/docs/core/view.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -218,8 +218,8 @@ await ctx.renderString('{{ helper.lowercaseFirst(name) }}', data);
218218

219219
## Security
220220

221-
The built-in plugin [egg-security] provides common security helper functions, including `helper.shtml / surl / sjs` and so on. It's strongly recommended to read [Security](./security.md).
221+
The built-in plugin [@eggjs/security] provides common security helper functions, including `helper.shtml / surl / sjs` and so on. It's strongly recommended to read [Security](./security.md).
222222

223-
[egg-security]: https://github.com/eggjs/egg-security
223+
[@eggjs/security]: https://github.com/eggjs/security
224224
[egg-view-nunjucks]: https://github.com/eggjs/egg-view-nunjucks
225225
[egg-view]: https://github.com/eggjs/egg-view

site/docs/core/view.zh-CN.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -197,8 +197,8 @@ await ctx.renderString('{{ helper.lowercaseFirst(name) }}', data);
197197

198198
## 安全性(Security)
199199

200-
框架内置的 [egg-security] 插件,提供了常见的安全辅助函数,包括 `helper.shtml``surl``sjs` 等,强烈建议阅读安全性相关的[文档内容](./security.md)
200+
框架内置的 [@eggjs/security] 插件,提供了常见的安全辅助函数,包括 `helper.shtml``surl``sjs` 等,强烈建议阅读安全性相关的[文档内容](./security.md)
201201

202-
[egg-security]: https://github.com/eggjs/egg-security
202+
[@eggjs/security]: https://github.com/eggjs/security
203203
[egg-view-nunjucks]: https://github.com/eggjs/egg-view-nunjucks
204204
[egg-view]: https://github.com/eggjs/egg-view

site/docs/intro/egg-and-koa.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ One plugin can include:
124124

125125
A stand-alone module plugin can provide rich features with high maintainability. You can almost forget the configuration as the plugin supports configuring the default value in different environments.
126126

127-
[egg-security](https://github.com/eggjs/egg-security) is a typical example.
127+
[@eggjs/security](https://github.com/eggjs/security) is a typical example.
128128

129129
More about plugin, please check [Plugin](../basics/plugin.md) section.
130130

site/docs/intro/egg-and-koa.zh-CN.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ exports.handler = (ctx) => {
125125

126126
在一个独立领域下实现的插件,可以在维护性非常高的情况下提供完善的功能。插件还支持配置各个环境下的默认(最佳)配置,使得使用插件时几乎无需修改配置项。
127127

128-
[egg-security](https://github.com/eggjs/egg-security) 插件是一个典型的例子。
128+
[@eggjs/security](https://github.com/eggjs/security) 插件是一个典型的例子。
129129

130130
更多关于插件的内容,请查看[插件](../basics/plugin.md)章节。
131131

src/config/plugin.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ export default {
1717
*/
1818
session: {
1919
enable: true,
20-
package: 'egg-session',
20+
package: '@eggjs/session',
2121
},
2222

2323
/**
@@ -61,7 +61,7 @@ export default {
6161
*/
6262
security: {
6363
enable: true,
64-
package: 'egg-security',
64+
package: '@eggjs/security',
6565
},
6666

6767
/**

src/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ export type {
2323
export * from './lib/egg.js';
2424
export * from './lib/types.js';
2525
export * from './lib/start.js';
26+
export * from './lib/core/singleton.js';
2627

2728
// export errors
2829
export * from './lib/error/index.js';

src/lib/core/singleton.ts

+17-12
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
import assert from 'node:assert';
22
import { isAsyncFunction } from 'is-type-of';
3-
import type { EggApplicationCore } from '../egg.js';
3+
import type { EggCore } from '@eggjs/core';
44

55
export type SingletonCreateMethod =
6-
(config: Record<string, any>, app: EggApplicationCore, clientName: string) => unknown | Promise<unknown>;
6+
(config: Record<string, any>, app: EggCore, clientName: string) => unknown | Promise<unknown>;
77

88
export interface SingletonOptions {
99
name: string;
10-
app: EggApplicationCore;
10+
app: EggCore;
1111
create: SingletonCreateMethod;
1212
}
1313

14-
export class Singleton {
15-
readonly clients = new Map<string, any>();
16-
readonly app: EggApplicationCore;
14+
export class Singleton<T = any> {
15+
readonly clients = new Map<string, T>();
16+
readonly app: EggCore;
1717
readonly create: SingletonCreateMethod;
1818
readonly name: string;
1919
readonly options: Record<string, any>;
@@ -46,7 +46,7 @@ export class Singleton {
4646
return;
4747
}
4848

49-
// multi client, use app[name].getInstance(id)
49+
// multi client, use app[name].getSingletonInstance(id)
5050
if (options.clients) {
5151
Object.keys(options.clients).forEach(id => {
5252
const client = this.createInstance(options.clients[id], id);
@@ -91,13 +91,18 @@ export class Singleton {
9191
Reflect.set(this.app, this.name, client);
9292
}
9393

94+
/**
95+
* @deprecated please use `getSingletonInstance(id)` instead
96+
*/
9497
get(id: string) {
95-
return this.clients.get(id);
98+
return this.clients.get(id)!;
9699
}
97100

98-
// alias to `get(id)`
101+
/**
102+
* Get singleton instance by id
103+
*/
99104
getSingletonInstance(id: string) {
100-
return this.clients.get(id);
105+
return this.clients.get(id)!;
101106
}
102107

103108
createInstance(config: Record<string, any>, clientName: string) {
@@ -109,7 +114,7 @@ export class Singleton {
109114
...this.options.default,
110115
...config,
111116
};
112-
return (this.create as SingletonCreateMethod)(config, this.app, clientName);
117+
return (this.create as SingletonCreateMethod)(config, this.app, clientName) as T;
113118
}
114119

115120
async createInstanceAsync(config: Record<string, any>, clientName: string) {
@@ -118,7 +123,7 @@ export class Singleton {
118123
...this.options.default,
119124
...config,
120125
};
121-
return await this.create(config, this.app, clientName);
126+
return await this.create(config, this.app, clientName) as T;
122127
}
123128

124129
#extendDynamicMethods(client: any) {

src/lib/egg.ts

+1
Original file line numberDiff line numberDiff line change
@@ -702,5 +702,6 @@ declare module '@eggjs/core' {
702702
HttpClient: typeof HttpClient;
703703
get httpClient(): HttpClient;
704704
curl<T = any>(url: HttpClientRequestURL, options?: HttpClientRequestOptions): Promise<HttpClientResponse<T>>;
705+
addSingleton(name: string, create: SingletonCreateMethod): void;
705706
}
706707
}

0 commit comments

Comments
 (0)