@urga-panel/ur-panels-core 1.0.9 → 1.0.11
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/services/abstract/authServices/AuthService.d.ts +3 -5
- package/dist/services/abstract/authServices/AuthService.js +68 -30
- package/dist/services/abstract/pageServices/controllers/SVPageControllerService.js +0 -1
- package/dist/services/main/httpServices/RequestHandlerService.js +3 -5
- package/package.json +1 -1
- package/src/services/abstract/authServices/AuthService.ts +33 -9
- package/src/services/abstract/pageServices/controllers/SVPageControllerService.ts +1 -1
- package/src/services/main/httpServices/RequestHandlerService.ts +4 -5
|
@@ -52,16 +52,14 @@ export declare abstract class AuthService extends Service {
|
|
|
52
52
|
request: any;
|
|
53
53
|
url: any;
|
|
54
54
|
}): Promise<any>;
|
|
55
|
-
checkToken({
|
|
56
|
-
|
|
57
|
-
refreshToken: string;
|
|
55
|
+
checkToken({ panel_token, options }: {
|
|
56
|
+
panel_token: string;
|
|
58
57
|
options?: {
|
|
59
58
|
role?: string;
|
|
60
59
|
};
|
|
61
60
|
}): Promise<{
|
|
62
61
|
valid: boolean;
|
|
63
|
-
|
|
64
|
-
newRefreshToken?: string;
|
|
62
|
+
newPanelToken?: string;
|
|
65
63
|
user?: any;
|
|
66
64
|
}>;
|
|
67
65
|
deneme({ params, request, url }: {
|
|
@@ -133,9 +133,8 @@ export class AuthService extends Service {
|
|
|
133
133
|
return this.resposeHandler({ status: "error", message: "An error occurred during login" });
|
|
134
134
|
}
|
|
135
135
|
}
|
|
136
|
-
async checkToken({
|
|
137
|
-
this.log.OK("
|
|
138
|
-
this.log.OK("Refresh Token:", refreshToken);
|
|
136
|
+
async checkToken({ panel_token, options }) {
|
|
137
|
+
this.log.OK("panel_token Token:", panel_token);
|
|
139
138
|
//debugger;
|
|
140
139
|
try {
|
|
141
140
|
// 1. Access token'ı doğrula
|
|
@@ -143,74 +142,113 @@ export class AuthService extends Service {
|
|
|
143
142
|
if (typeof window === "undefined") {
|
|
144
143
|
jwt = (await import("jsonwebtoken")).default;
|
|
145
144
|
}
|
|
146
|
-
const decoded = jwt.verify(
|
|
145
|
+
const decoded = jwt.verify(panel_token, JWT_SECRET);
|
|
147
146
|
const res = await this.getUserInfo({
|
|
148
147
|
userId: decoded.id,
|
|
149
148
|
userName: decoded.username,
|
|
150
149
|
userRole: decoded.role || "user" // Varsayılan rol
|
|
151
150
|
});
|
|
151
|
+
const newPanelToken = jwt.sign({
|
|
152
|
+
id: decoded.id,
|
|
153
|
+
username: decoded.username,
|
|
154
|
+
role: decoded.role,
|
|
155
|
+
databases: decoded.databases // databases eklendi
|
|
156
|
+
}, JWT_REFRESH_SECRET, { expiresIn: '7d' });
|
|
157
|
+
/*
|
|
158
|
+
const newRefreshToken = jwt.sign(
|
|
159
|
+
{
|
|
160
|
+
id: user.id,
|
|
161
|
+
username: user.username,
|
|
162
|
+
role: user.role,
|
|
163
|
+
databases: user.databases // databases eklendi
|
|
164
|
+
},
|
|
165
|
+
JWT_REFRESH_SECRET,
|
|
166
|
+
{ expiresIn: '7d' }
|
|
167
|
+
);
|
|
168
|
+
*/
|
|
152
169
|
//debugger;
|
|
153
170
|
if (!res.success) {
|
|
154
171
|
return { valid: false, user: res.user };
|
|
155
172
|
}
|
|
156
173
|
// Admin ise onay ver
|
|
157
174
|
if (options?.role && res.user?.role == 'admin') {
|
|
158
|
-
return { valid: true, user: res.user };
|
|
175
|
+
return { valid: true, user: res.user, newPanelToken };
|
|
159
176
|
}
|
|
160
177
|
//Check role here
|
|
161
178
|
if (options?.role && res.user?.role !== options.role) {
|
|
162
179
|
return { valid: false };
|
|
163
180
|
}
|
|
164
|
-
return { valid: true, user: res.user };
|
|
181
|
+
return { valid: true, user: res.user, newPanelToken };
|
|
165
182
|
}
|
|
166
183
|
catch (err) {
|
|
184
|
+
return { valid: false };
|
|
185
|
+
/*
|
|
167
186
|
// Access token geçersiz veya süresi dolmuşsa
|
|
168
187
|
try {
|
|
169
|
-
let jwt;
|
|
188
|
+
let jwt: typeof import("jsonwebtoken") | undefined;
|
|
170
189
|
if (typeof window === "undefined") {
|
|
171
190
|
jwt = (await import("jsonwebtoken")).default;
|
|
172
191
|
}
|
|
173
192
|
// 2. Refresh token'ı doğrula
|
|
174
|
-
const decodedRefresh
|
|
193
|
+
const decodedRefresh: {
|
|
194
|
+
id: number;
|
|
195
|
+
username: string;
|
|
196
|
+
role: string; // Refresh token'da rol bilgisi varsa
|
|
197
|
+
databaseId?: string;
|
|
198
|
+
databases?: string[];
|
|
199
|
+
} = jwt.verify(refreshToken, JWT_REFRESH_SECRET) as unknown as any;
|
|
175
200
|
//debugger;
|
|
201
|
+
|
|
176
202
|
const res = await this.getUserInfo({
|
|
177
|
-
userId: decodedRefresh.id,
|
|
178
|
-
userName: decodedRefresh.username,
|
|
179
|
-
userRole: decodedRefresh.role || "user" // Varsayılan rol
|
|
203
|
+
userId: (decodedRefresh as any).id,
|
|
204
|
+
userName: (decodedRefresh as any).username,
|
|
205
|
+
userRole: (decodedRefresh as any).role || "user" // Varsayılan rol
|
|
180
206
|
});
|
|
207
|
+
|
|
181
208
|
if (!res.success) {
|
|
182
209
|
return { valid: false };
|
|
183
210
|
}
|
|
211
|
+
|
|
184
212
|
//Check role here
|
|
185
213
|
// Admin ise onay ver
|
|
214
|
+
|
|
186
215
|
// Admin ise devam etsin
|
|
187
216
|
if (options?.role && res.user?.role === 'admin') {
|
|
188
217
|
// admin ise role kontrolü atlanır, devam edilir
|
|
189
|
-
}
|
|
190
|
-
else if (options?.role && res.user?.role !== options.role) {
|
|
218
|
+
} else if (options?.role && res.user?.role !== options.role) {
|
|
191
219
|
return { valid: false };
|
|
192
220
|
}
|
|
221
|
+
|
|
193
222
|
// Refresh token geçerli, yeni access token üret
|
|
194
|
-
const newAccessToken = jwt.sign(
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
223
|
+
const newAccessToken = jwt.sign(
|
|
224
|
+
{
|
|
225
|
+
id: decodedRefresh.id,
|
|
226
|
+
username: decodedRefresh.username,
|
|
227
|
+
role: decodedRefresh.role,
|
|
228
|
+
databaseId: decodedRefresh.databaseId, // databaseId eklendi
|
|
229
|
+
databases: decodedRefresh.databases // databases eklendi
|
|
230
|
+
},
|
|
231
|
+
JWT_SECRET,
|
|
232
|
+
{ expiresIn: '15m' }
|
|
233
|
+
);
|
|
234
|
+
const newRefreshToken = jwt.sign(
|
|
235
|
+
{
|
|
236
|
+
id: decodedRefresh.id,
|
|
237
|
+
username: decodedRefresh.username,
|
|
238
|
+
role: decodedRefresh.role,
|
|
239
|
+
databaseId: decodedRefresh.databaseId, // databaseId eklendi
|
|
240
|
+
databases: decodedRefresh.databases // databases eklendi
|
|
241
|
+
},
|
|
242
|
+
JWT_REFRESH_SECRET,
|
|
243
|
+
{ expiresIn: '7d' }
|
|
244
|
+
);
|
|
245
|
+
|
|
246
|
+
|
|
208
247
|
return { valid: true, newAccessToken, newRefreshToken, user: res.user };
|
|
209
|
-
}
|
|
210
|
-
catch (refreshErr) {
|
|
248
|
+
} catch (refreshErr) {
|
|
211
249
|
// Refresh token da geçersiz
|
|
212
250
|
return { valid: false };
|
|
213
|
-
}
|
|
251
|
+
}*/
|
|
214
252
|
}
|
|
215
253
|
}
|
|
216
254
|
// async checkToken(accessToken: string, refreshToken): Promise<boolean> {
|
|
@@ -67,12 +67,10 @@ export class RequestHandlerService extends Service {
|
|
|
67
67
|
return this.resposeHandler({ status: "error", message: "Authentication service not available" });
|
|
68
68
|
}
|
|
69
69
|
const cookieHeader = request.headers.get('cookie');
|
|
70
|
-
const
|
|
71
|
-
const refreshToken = this.getCookie(cookieHeader, 'refreshToken');
|
|
70
|
+
const panel_token = this.getCookie(cookieHeader, 'panel_token');
|
|
72
71
|
// Check authentication and role
|
|
73
72
|
const isAuthenticated = await authService.checkToken({
|
|
74
|
-
|
|
75
|
-
refreshToken,
|
|
73
|
+
panel_token,
|
|
76
74
|
options: {
|
|
77
75
|
role: handler.options?.role
|
|
78
76
|
}
|
|
@@ -86,7 +84,7 @@ export class RequestHandlerService extends Service {
|
|
|
86
84
|
// Update cookies with new tokens
|
|
87
85
|
console.log("update token");
|
|
88
86
|
header = {
|
|
89
|
-
"Set-Cookie": `
|
|
87
|
+
"Set-Cookie": `panel_token=${isAuthenticated.newAccessToken}; Path=/; HttpOnly; Secure; SameSite=Strict; Max-Age=900, refreshToken=${isAuthenticated.newRefreshToken}; Path=/; HttpOnly; Secure; SameSite=Strict; Max-Age=604800`,
|
|
90
88
|
};
|
|
91
89
|
// const response = new Response(JSON.stringify({ status: "success", message: "Authenticated with new token" }), {
|
|
92
90
|
// status: 200,
|
package/package.json
CHANGED
|
@@ -209,13 +209,12 @@ export abstract class AuthService extends Service {
|
|
|
209
209
|
return this.resposeHandler({ status: "error", message: "An error occurred during login" });
|
|
210
210
|
}
|
|
211
211
|
}
|
|
212
|
-
async checkToken({
|
|
213
|
-
|
|
212
|
+
async checkToken({ panel_token, options }: {
|
|
213
|
+
panel_token: string, options?: {
|
|
214
214
|
role?: string;
|
|
215
215
|
}
|
|
216
|
-
}): Promise<{ valid: boolean;
|
|
217
|
-
this.log.OK("
|
|
218
|
-
this.log.OK("Refresh Token:", refreshToken);
|
|
216
|
+
}): Promise<{ valid: boolean; newPanelToken?: string, user?: any }> {
|
|
217
|
+
this.log.OK("panel_token Token:", panel_token);
|
|
219
218
|
//debugger;
|
|
220
219
|
try {
|
|
221
220
|
// 1. Access token'ı doğrula
|
|
@@ -223,12 +222,35 @@ export abstract class AuthService extends Service {
|
|
|
223
222
|
if (typeof window === "undefined") {
|
|
224
223
|
jwt = (await import("jsonwebtoken")).default;
|
|
225
224
|
}
|
|
226
|
-
const decoded = jwt.verify(
|
|
225
|
+
const decoded: any = jwt.verify(panel_token, JWT_SECRET);
|
|
227
226
|
const res = await this.getUserInfo({
|
|
228
227
|
userId: (decoded as any).id,
|
|
229
228
|
userName: (decoded as any).username,
|
|
230
229
|
userRole: (decoded as any).role || "user" // Varsayılan rol
|
|
231
230
|
});
|
|
231
|
+
|
|
232
|
+
const newPanelToken = jwt.sign(
|
|
233
|
+
{
|
|
234
|
+
id: decoded.id,
|
|
235
|
+
username: decoded.username,
|
|
236
|
+
role: decoded.role,
|
|
237
|
+
databases: decoded.databases // databases eklendi
|
|
238
|
+
},
|
|
239
|
+
JWT_REFRESH_SECRET,
|
|
240
|
+
{ expiresIn: '7d' }
|
|
241
|
+
);
|
|
242
|
+
/*
|
|
243
|
+
const newRefreshToken = jwt.sign(
|
|
244
|
+
{
|
|
245
|
+
id: user.id,
|
|
246
|
+
username: user.username,
|
|
247
|
+
role: user.role,
|
|
248
|
+
databases: user.databases // databases eklendi
|
|
249
|
+
},
|
|
250
|
+
JWT_REFRESH_SECRET,
|
|
251
|
+
{ expiresIn: '7d' }
|
|
252
|
+
);
|
|
253
|
+
*/
|
|
232
254
|
//debugger;
|
|
233
255
|
|
|
234
256
|
if (!res.success) {
|
|
@@ -237,15 +259,17 @@ export abstract class AuthService extends Service {
|
|
|
237
259
|
|
|
238
260
|
// Admin ise onay ver
|
|
239
261
|
if (options?.role && res.user?.role == 'admin') {
|
|
240
|
-
return { valid: true, user: res.user };
|
|
262
|
+
return { valid: true, user: res.user, newPanelToken };
|
|
241
263
|
}
|
|
242
264
|
|
|
243
265
|
//Check role here
|
|
244
266
|
if (options?.role && res.user?.role !== options.role) {
|
|
245
267
|
return { valid: false };
|
|
246
268
|
}
|
|
247
|
-
return { valid: true, user: res.user };
|
|
269
|
+
return { valid: true, user: res.user, newPanelToken };
|
|
248
270
|
} catch (err) {
|
|
271
|
+
return { valid: false };
|
|
272
|
+
/*
|
|
249
273
|
// Access token geçersiz veya süresi dolmuşsa
|
|
250
274
|
try {
|
|
251
275
|
let jwt: typeof import("jsonwebtoken") | undefined;
|
|
@@ -311,7 +335,7 @@ export abstract class AuthService extends Service {
|
|
|
311
335
|
} catch (refreshErr) {
|
|
312
336
|
// Refresh token da geçersiz
|
|
313
337
|
return { valid: false };
|
|
314
|
-
}
|
|
338
|
+
}*/
|
|
315
339
|
}
|
|
316
340
|
}
|
|
317
341
|
|
|
@@ -95,12 +95,11 @@ export class RequestHandlerService extends Service {
|
|
|
95
95
|
}
|
|
96
96
|
|
|
97
97
|
const cookieHeader = request.headers.get('cookie');
|
|
98
|
-
const
|
|
99
|
-
const refreshToken = this.getCookie(cookieHeader, 'refreshToken');
|
|
98
|
+
const panel_token = this.getCookie(cookieHeader, 'panel_token');
|
|
100
99
|
// Check authentication and role
|
|
100
|
+
|
|
101
101
|
const isAuthenticated = await authService.checkToken({
|
|
102
|
-
|
|
103
|
-
refreshToken,
|
|
102
|
+
panel_token,
|
|
104
103
|
options: {
|
|
105
104
|
role: handler.options?.role
|
|
106
105
|
}
|
|
@@ -118,7 +117,7 @@ export class RequestHandlerService extends Service {
|
|
|
118
117
|
console.log("update token");
|
|
119
118
|
header = {
|
|
120
119
|
"Set-Cookie":
|
|
121
|
-
`
|
|
120
|
+
`panel_token=${isAuthenticated.newAccessToken}; Path=/; HttpOnly; Secure; SameSite=Strict; Max-Age=900, refreshToken=${isAuthenticated.newRefreshToken}; Path=/; HttpOnly; Secure; SameSite=Strict; Max-Age=604800`,
|
|
122
121
|
}
|
|
123
122
|
// const response = new Response(JSON.stringify({ status: "success", message: "Authenticated with new token" }), {
|
|
124
123
|
// status: 200,
|