cantian-rest 0.0.63 → 0.0.65
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/BaseController.js +39 -34
- package/dist/BaseController.js.map +1 -1
- package/package.json +1 -1
package/dist/BaseController.js
CHANGED
|
@@ -62,7 +62,7 @@ export class BaseController {
|
|
|
62
62
|
data: this.data,
|
|
63
63
|
});
|
|
64
64
|
const constructor = this.constructor;
|
|
65
|
-
let
|
|
65
|
+
let error = null;
|
|
66
66
|
try {
|
|
67
67
|
await this.authorize();
|
|
68
68
|
// admin和public接口都不限流
|
|
@@ -86,16 +86,16 @@ export class BaseController {
|
|
|
86
86
|
await this.sendResponse(undefined, result);
|
|
87
87
|
return { result };
|
|
88
88
|
}
|
|
89
|
-
catch (
|
|
90
|
-
|
|
89
|
+
catch (err) {
|
|
90
|
+
error = true;
|
|
91
91
|
if (!this.res.headersSent) {
|
|
92
|
-
await this.sendResponse(
|
|
92
|
+
await this.sendResponse(err);
|
|
93
93
|
}
|
|
94
|
-
return { error };
|
|
94
|
+
return { error: err };
|
|
95
95
|
}
|
|
96
96
|
finally {
|
|
97
97
|
console.log({
|
|
98
|
-
|
|
98
|
+
error,
|
|
99
99
|
method: constructor.method,
|
|
100
100
|
path: constructor.path,
|
|
101
101
|
message: 'Request finished.',
|
|
@@ -120,41 +120,46 @@ export class BaseController {
|
|
|
120
120
|
}
|
|
121
121
|
async authorize() {
|
|
122
122
|
this.source = this.req.get('x-source');
|
|
123
|
-
|
|
124
|
-
return;
|
|
125
|
-
}
|
|
123
|
+
const isPublic = this.constructor.isPublic;
|
|
126
124
|
// Extract token
|
|
127
125
|
let token = (this.req.headers['token'] || this.req.headers['authorization']);
|
|
128
|
-
if (!token) {
|
|
126
|
+
if (!token && !isPublic) {
|
|
129
127
|
throw RestError.unauthorized('Authorization header is required.');
|
|
130
128
|
}
|
|
131
|
-
if (token
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
// Validate token
|
|
135
|
-
try {
|
|
136
|
-
const { payload } = await jwtVerify(token, this.constructor.jwts);
|
|
137
|
-
const scopes = payload.scope?.split(' ');
|
|
138
|
-
if (this.constructor.scope && !scopes?.includes(this.constructor.scope)) {
|
|
139
|
-
throw RestError.forbidden();
|
|
129
|
+
if (token) {
|
|
130
|
+
if (token.startsWith('Bearer ')) {
|
|
131
|
+
token = token.replace('Bearer ', '');
|
|
140
132
|
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
scopes
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
133
|
+
// Validate token
|
|
134
|
+
try {
|
|
135
|
+
const { payload } = await jwtVerify(token, this.constructor.jwts);
|
|
136
|
+
const scopes = payload.scope?.split(' ');
|
|
137
|
+
if (this.constructor.scope && !scopes?.includes(this.constructor.scope)) {
|
|
138
|
+
throw RestError.forbidden();
|
|
139
|
+
}
|
|
140
|
+
this.auth = {
|
|
141
|
+
sub: payload.sub,
|
|
142
|
+
name: payload.name,
|
|
143
|
+
scopes,
|
|
144
|
+
};
|
|
145
|
+
if (!this.source) {
|
|
146
|
+
this.source = payload.client_id;
|
|
147
|
+
}
|
|
148
|
+
if (scopes?.includes('*:admin')) {
|
|
149
|
+
this.auth.sub = this.req.headers['x-personate-sub'] || this.auth.sub;
|
|
150
|
+
}
|
|
151
151
|
}
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
152
|
+
catch (error) {
|
|
153
|
+
if (!isPublic) {
|
|
154
|
+
if (!(error instanceof RestError)) {
|
|
155
|
+
throw RestError.unauthorized();
|
|
156
|
+
}
|
|
157
|
+
throw error;
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
console.log(`PUBLIC_ACCESS_WITH_INVALID_TOKEN`);
|
|
161
|
+
}
|
|
156
162
|
}
|
|
157
|
-
throw error;
|
|
158
163
|
}
|
|
159
164
|
}
|
|
160
165
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseController.js","sourceRoot":"","sources":["../src/BaseController.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"BaseController.js","sourceRoot":"","sources":["../src/BaseController.ts"],"names":[],"mappings":"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"}
|