@flink-app/management-api-plugin 2.0.0-alpha.55 → 2.0.0-alpha.57
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/.flink/generatedAgents.ts +1 -1
- package/.flink/generatedHandlers.ts +2 -2
- package/.flink/generatedJobs.ts +1 -1
- package/.flink/generatedRepos.ts +1 -1
- package/.flink/generatedTools.ts +1 -1
- package/.flink/schema-cache.json +347 -0
- package/.flink/schemas/schemas.json +293 -113
- package/.flink/start.ts +1 -1
- package/CHANGELOG.md +25 -0
- package/dist/.flink/generatedAgents.js +13 -6
- package/dist/.flink/generatedAgents.js.map +1 -0
- package/dist/.flink/generatedHandlers.js +83 -32
- package/dist/.flink/generatedHandlers.js.map +1 -0
- package/dist/.flink/generatedJobs.js +13 -6
- package/dist/.flink/generatedJobs.js.map +1 -0
- package/dist/.flink/generatedRepos.js +25 -10
- package/dist/.flink/generatedRepos.js.map +1 -0
- package/dist/.flink/generatedTools.js +13 -6
- package/dist/.flink/generatedTools.js.map +1 -0
- package/dist/.flink/schema-manifest.json +297 -0
- package/dist/.flink/schemas/schemas.d.ts +10 -10
- package/dist/.flink/schemas/schemas.json +293 -113
- package/dist/.flink/start.js +12 -3
- package/dist/.flink/start.js.map +1 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/src/Ctx.js +3 -1
- package/dist/src/Ctx.js.map +1 -0
- package/dist/src/handlers/Management/GetManagement.d.ts +1 -1
- package/dist/src/handlers/Management/GetManagement.js +14 -47
- package/dist/src/handlers/Management/GetManagement.js.map +1 -0
- package/dist/src/handlers/User/DeleteByUserid.d.ts +1 -2
- package/dist/src/handlers/User/DeleteByUserid.js +29 -60
- package/dist/src/handlers/User/DeleteByUserid.js.map +1 -0
- package/dist/src/handlers/User/GetByUserid.d.ts +1 -2
- package/dist/src/handlers/User/GetByUserid.js +30 -61
- package/dist/src/handlers/User/GetByUserid.js.map +1 -0
- package/dist/src/handlers/User/GetList.d.ts +1 -1
- package/dist/src/handlers/User/GetList.js +19 -58
- package/dist/src/handlers/User/GetList.js.map +1 -0
- package/dist/src/handlers/User/GetMe.d.ts +1 -1
- package/dist/src/handlers/User/GetMe.js +67 -74
- package/dist/src/handlers/User/GetMe.js.map +1 -0
- package/dist/src/handlers/User/Post.d.ts +1 -2
- package/dist/src/handlers/User/Post.js +43 -79
- package/dist/src/handlers/User/Post.js.map +1 -0
- package/dist/src/handlers/User/PostLogin.d.ts +1 -2
- package/dist/src/handlers/User/PostLogin.js +47 -78
- package/dist/src/handlers/User/PostLogin.js.map +1 -0
- package/dist/src/handlers/User/PutByUserid.d.ts +1 -2
- package/dist/src/handlers/User/PutByUserid.js +47 -86
- package/dist/src/handlers/User/PutByUserid.js.map +1 -0
- package/dist/src/index.js +185 -117
- package/dist/src/index.js.map +1 -0
- package/dist/src/managementApiContext.js +3 -1
- package/dist/src/managementApiContext.js.map +1 -0
- package/dist/src/models/ManagementApi.js +12 -5
- package/dist/src/models/ManagementApi.js.map +1 -0
- package/dist/src/repos/ManagementUserRepo.js +12 -24
- package/dist/src/repos/ManagementUserRepo.js.map +1 -0
- package/dist/src/schemas/Management/GetReq.js +3 -1
- package/dist/src/schemas/Management/GetReq.js.map +1 -0
- package/dist/src/schemas/Management/GetRes.js +3 -1
- package/dist/src/schemas/Management/GetRes.js.map +1 -0
- package/dist/src/schemas/ManagementUser.js +3 -1
- package/dist/src/schemas/ManagementUser.js.map +1 -0
- package/dist/src/schemas/ManagementUserViewModel.js +49 -15
- package/dist/src/schemas/ManagementUserViewModel.js.map +1 -0
- package/dist/src/schemas/ModuleList.js +3 -1
- package/dist/src/schemas/ModuleList.js.map +1 -0
- package/dist/src/schemas/User/DeleteByUseridReq.js +3 -1
- package/dist/src/schemas/User/DeleteByUseridReq.js.map +1 -0
- package/dist/src/schemas/User/DeleteByUseridRes.js +3 -1
- package/dist/src/schemas/User/DeleteByUseridRes.js.map +1 -0
- package/dist/src/schemas/User/GetByUseridReq.js +3 -1
- package/dist/src/schemas/User/GetByUseridReq.js.map +1 -0
- package/dist/src/schemas/User/GetByUseridRes.js +3 -1
- package/dist/src/schemas/User/GetByUseridRes.js.map +1 -0
- package/dist/src/schemas/User/GetListReq.js +3 -1
- package/dist/src/schemas/User/GetListReq.js.map +1 -0
- package/dist/src/schemas/User/GetListRes.js +3 -1
- package/dist/src/schemas/User/GetListRes.js.map +1 -0
- package/dist/src/schemas/User/GetMeReq.js +3 -1
- package/dist/src/schemas/User/GetMeReq.js.map +1 -0
- package/dist/src/schemas/User/GetMeRes.js +3 -1
- package/dist/src/schemas/User/GetMeRes.js.map +1 -0
- package/dist/src/schemas/User/PostLoginReq.js +3 -1
- package/dist/src/schemas/User/PostLoginReq.js.map +1 -0
- package/dist/src/schemas/User/PostLoginRes.js +3 -1
- package/dist/src/schemas/User/PostLoginRes.js.map +1 -0
- package/dist/src/schemas/User/PostReq.js +3 -1
- package/dist/src/schemas/User/PostReq.js.map +1 -0
- package/dist/src/schemas/User/PostRes.js +3 -1
- package/dist/src/schemas/User/PostRes.js.map +1 -0
- package/dist/src/schemas/User/PutByUseridReq.js +3 -1
- package/dist/src/schemas/User/PutByUseridReq.js.map +1 -0
- package/dist/src/schemas/User/PutByUseridRes.js +3 -1
- package/dist/src/schemas/User/PutByUseridRes.js.map +1 -0
- package/dist/src/utils/bcrypt.js +30 -17
- package/dist/src/utils/bcrypt.js.map +1 -0
- package/package.json +3 -3
- package/src/handlers/User/DeleteByUserid.ts +11 -17
- package/src/handlers/User/GetByUserid.ts +7 -8
- package/src/handlers/User/GetMe.ts +15 -21
- package/src/handlers/User/PostLogin.ts +14 -24
- package/src/handlers/User/PutByUserid.ts +20 -30
- package/src/index.ts +26 -4
- package/.flink/schemas/schemas.ts +0 -31
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":""}
|
package/dist/src/utils/bcrypt.js
CHANGED
|
@@ -1,26 +1,39 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
get encrypt () {
|
|
13
|
+
return encrypt;
|
|
14
|
+
},
|
|
15
|
+
get genSalt () {
|
|
16
|
+
return genSalt;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
const _bcrypt = /*#__PURE__*/ _interop_require_default(require("bcrypt"));
|
|
20
|
+
function _interop_require_default(obj) {
|
|
21
|
+
return obj && obj.__esModule ? obj : {
|
|
22
|
+
default: obj
|
|
23
|
+
};
|
|
24
|
+
}
|
|
9
25
|
function encrypt(password, salt) {
|
|
10
|
-
return new Promise(
|
|
11
|
-
|
|
12
|
-
if (err)
|
|
13
|
-
reject(err);
|
|
26
|
+
return new Promise((resolve, reject)=>{
|
|
27
|
+
_bcrypt.default.hash(password, salt, (err, hash)=>{
|
|
28
|
+
if (err) reject(err);
|
|
14
29
|
resolve(hash);
|
|
15
30
|
});
|
|
16
31
|
});
|
|
17
32
|
}
|
|
18
|
-
function genSalt(rounds) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
if (err)
|
|
23
|
-
reject(err);
|
|
33
|
+
function genSalt(rounds = 10) {
|
|
34
|
+
return new Promise((resolve, reject)=>{
|
|
35
|
+
_bcrypt.default.genSalt(rounds, (err, salt)=>{
|
|
36
|
+
if (err) reject(err);
|
|
24
37
|
resolve(salt);
|
|
25
38
|
});
|
|
26
39
|
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/joel/projects/flink/flink-framework/packages/management-api-plugin/src/utils/bcrypt.ts"],"sourcesContent":["import bcrypt from \"bcrypt\";\n\nexport function encrypt(password: string, salt: string) {\n return new Promise<string>((resolve, reject) => {\n bcrypt.hash(password, salt, (err, hash) => {\n if (err) reject(err);\n resolve(hash);\n });\n });\n}\n\nexport function genSalt(rounds = 10) {\n return new Promise<string>((resolve, reject) => {\n bcrypt.genSalt(rounds, (err, salt) => {\n if (err) reject(err);\n resolve(salt);\n });\n });\n}\n"],"names":["encrypt","genSalt","password","salt","Promise","resolve","reject","bcrypt","hash","err","rounds"],"mappings":";;;;;;;;;;;QAEgBA;eAAAA;;QASAC;eAAAA;;;+DAXG;;;;;;AAEZ,SAASD,QAAQE,QAAgB,EAAEC,IAAY;IACpD,OAAO,IAAIC,QAAgB,CAACC,SAASC;QACnCC,eAAM,CAACC,IAAI,CAACN,UAAUC,MAAM,CAACM,KAAKD;YAChC,IAAIC,KAAKH,OAAOG;YAChBJ,QAAQG;QACV;IACF;AACF;AAEO,SAASP,QAAQS,SAAS,EAAE;IACjC,OAAO,IAAIN,QAAgB,CAACC,SAASC;QACnCC,eAAM,CAACN,OAAO,CAACS,QAAQ,CAACD,KAAKN;YAC3B,IAAIM,KAAKH,OAAOG;YAChBJ,QAAQF;QACV;IACF;AACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flink-app/management-api-plugin",
|
|
3
|
-
"version": "2.0.0-alpha.
|
|
3
|
+
"version": "2.0.0-alpha.57",
|
|
4
4
|
"description": "Flink plugin that makes it possible to expose management api:s for other plugins",
|
|
5
5
|
"author": "johan@frost.se",
|
|
6
6
|
"publishConfig": {
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"bcrypt": "^5.0.1",
|
|
14
14
|
"jsonwebtoken": "^8.5.1",
|
|
15
|
-
"@flink-app/flink": "2.0.0-alpha.
|
|
15
|
+
"@flink-app/flink": "2.0.0-alpha.57"
|
|
16
16
|
},
|
|
17
17
|
"devDependencies": {
|
|
18
18
|
"@types/bcrypt": "^5.0.0",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
},
|
|
24
24
|
"gitHead": "4243e3b3cd6d4e1ca001a61baa8436bf2bbe4113",
|
|
25
25
|
"peerDependencies": {
|
|
26
|
-
"@flink-app/flink": ">=2.0.0-alpha.
|
|
26
|
+
"@flink-app/flink": ">=2.0.0-alpha.57"
|
|
27
27
|
},
|
|
28
28
|
"scripts": {
|
|
29
29
|
"test": "echo \"Error: no test specified\"",
|
|
@@ -4,28 +4,22 @@ import { DeleteUserByUseridReq } from "../../schemas/User/DeleteByUseridReq";
|
|
|
4
4
|
import { DeleteUserByUseridRes } from "../../schemas/User/DeleteByUseridRes";
|
|
5
5
|
|
|
6
6
|
export const Route: RouteProps = {
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
path: "/user/:userid",
|
|
8
|
+
method: HttpMethod.delete,
|
|
9
9
|
};
|
|
10
10
|
|
|
11
11
|
// type Params = {
|
|
12
12
|
// userid: string;
|
|
13
13
|
// };
|
|
14
14
|
|
|
15
|
-
const DeleteUserByUserid: Handler<
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
return notFound();
|
|
25
|
-
}
|
|
26
|
-
return {
|
|
27
|
-
data: {},
|
|
28
|
-
status: 200,
|
|
29
|
-
};
|
|
15
|
+
const DeleteUserByUserid: Handler<Ctx, DeleteUserByUseridReq, DeleteUserByUseridRes> = async ({ ctx, req }) => {
|
|
16
|
+
const count = await ctx.repos.managementuserRepo.deleteById(req.params.userid);
|
|
17
|
+
if (count == 0) {
|
|
18
|
+
return notFound();
|
|
19
|
+
}
|
|
20
|
+
return {
|
|
21
|
+
data: {},
|
|
22
|
+
status: 200,
|
|
23
|
+
};
|
|
30
24
|
};
|
|
31
25
|
export default DeleteUserByUserid;
|
|
@@ -4,23 +4,22 @@ import { GetUserByUseridRes } from "../../schemas/User/GetByUseridRes";
|
|
|
4
4
|
import { Ctx } from "../../Ctx";
|
|
5
5
|
import { GetManagementUserViewModel } from "../../schemas/ManagementUserViewModel";
|
|
6
6
|
export const Route: RouteProps = {
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
path: "/user/:userid",
|
|
8
|
+
method: HttpMethod.get,
|
|
9
9
|
};
|
|
10
10
|
|
|
11
11
|
// type Params = {
|
|
12
12
|
// userid: string;
|
|
13
13
|
// };
|
|
14
14
|
|
|
15
|
-
const GetUserByUserid: Handler<Ctx, GetUserByUseridReq, GetUserByUseridRes> =
|
|
16
|
-
async ({ ctx, req }) => {
|
|
15
|
+
const GetUserByUserid: Handler<Ctx, GetUserByUseridReq, GetUserByUseridRes> = async ({ ctx, req }) => {
|
|
17
16
|
const user = await ctx.repos.managementuserRepo.getById(req.params.userid);
|
|
18
17
|
if (user == null) {
|
|
19
|
-
|
|
18
|
+
return notFound();
|
|
20
19
|
}
|
|
21
20
|
return {
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
data: GetManagementUserViewModel(user),
|
|
22
|
+
status: 200,
|
|
24
23
|
};
|
|
25
|
-
|
|
24
|
+
};
|
|
26
25
|
export default GetUserByUserid;
|
|
@@ -6,24 +6,18 @@ import jsonwebtoken from "jsonwebtoken";
|
|
|
6
6
|
import { ManagementUserViewModel } from "../../schemas/ManagementUserViewModel";
|
|
7
7
|
|
|
8
8
|
const GetUserMe: Handler<Ctx, GetUserMeReq, GetUserMeRes> = async ({ ctx, req }) => {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
}
|
|
29
|
-
export default GetUserMe;
|
|
9
|
+
try {
|
|
10
|
+
const user = jsonwebtoken.verify(<string>req.headers["management-token"], ctx.plugins.managementApi.jwtSecret) as any;
|
|
11
|
+
const { iat, ...rest } = user;
|
|
12
|
+
return {
|
|
13
|
+
data: {
|
|
14
|
+
token: <string>req.headers["management-token"],
|
|
15
|
+
user: rest,
|
|
16
|
+
},
|
|
17
|
+
status: 200,
|
|
18
|
+
};
|
|
19
|
+
} catch (ex) {
|
|
20
|
+
return unauthorized();
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
export default GetUserMe;
|
|
@@ -1,9 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
Handler,
|
|
3
|
-
HttpMethod,
|
|
4
|
-
RouteProps,
|
|
5
|
-
unauthorized,
|
|
6
|
-
} from "@flink-app/flink";
|
|
1
|
+
import { Handler, HttpMethod, RouteProps, unauthorized } from "@flink-app/flink";
|
|
7
2
|
import jsonwebtoken from "jsonwebtoken";
|
|
8
3
|
import { Ctx } from "../../Ctx";
|
|
9
4
|
import { GetManagementUserViewModel } from "../../schemas/ManagementUserViewModel";
|
|
@@ -12,40 +7,35 @@ import { PostUserLoginRes } from "../../schemas/User/PostLoginRes";
|
|
|
12
7
|
import { encrypt } from "../../utils/bcrypt";
|
|
13
8
|
|
|
14
9
|
export const Route: RouteProps = {
|
|
15
|
-
|
|
16
|
-
|
|
10
|
+
path: "/user/login",
|
|
11
|
+
method: HttpMethod.post,
|
|
17
12
|
};
|
|
18
13
|
|
|
19
14
|
type Params = {};
|
|
20
15
|
|
|
21
|
-
const PostUserLogin: Handler<Ctx, PostUserLoginReq, PostUserLoginRes, Params> =
|
|
22
|
-
async ({ ctx, req }) => {
|
|
23
|
-
|
|
16
|
+
const PostUserLogin: Handler<Ctx, PostUserLoginReq, PostUserLoginRes, Params> = async ({ ctx, req }) => {
|
|
24
17
|
const user = await ctx.repos.managementuserRepo.getOne({
|
|
25
|
-
|
|
18
|
+
username: req.body.username,
|
|
26
19
|
});
|
|
27
20
|
if (user == null) {
|
|
28
|
-
|
|
21
|
+
return unauthorized("Username or password invalid");
|
|
29
22
|
}
|
|
30
23
|
|
|
31
24
|
const hashCandidate = await encrypt(req.body.password, user.salt);
|
|
32
25
|
if (hashCandidate !== user.password) {
|
|
33
|
-
|
|
26
|
+
return unauthorized("Username or password invalid");
|
|
34
27
|
}
|
|
35
28
|
|
|
36
29
|
const viewUser = GetManagementUserViewModel(user);
|
|
37
30
|
|
|
38
|
-
const token = jsonwebtoken.sign(
|
|
39
|
-
viewUser,
|
|
40
|
-
ctx.plugins.managementApi.jwtSecret
|
|
41
|
-
);
|
|
31
|
+
const token = jsonwebtoken.sign(viewUser, ctx.plugins.managementApi.jwtSecret);
|
|
42
32
|
|
|
43
33
|
return {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
34
|
+
data: {
|
|
35
|
+
user: viewUser,
|
|
36
|
+
token,
|
|
37
|
+
},
|
|
38
|
+
status: 200,
|
|
49
39
|
};
|
|
50
|
-
|
|
40
|
+
};
|
|
51
41
|
export default PostUserLogin;
|
|
@@ -1,10 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
conflict,
|
|
3
|
-
Handler,
|
|
4
|
-
HttpMethod,
|
|
5
|
-
notFound,
|
|
6
|
-
RouteProps,
|
|
7
|
-
} from "@flink-app/flink";
|
|
1
|
+
import { conflict, Handler, HttpMethod, notFound, RouteProps } from "@flink-app/flink";
|
|
8
2
|
import { Ctx } from "../../Ctx";
|
|
9
3
|
import { ManagementUser } from "../../schemas/ManagementUser";
|
|
10
4
|
import { GetManagementUserViewModel } from "../../schemas/ManagementUserViewModel";
|
|
@@ -13,47 +7,43 @@ import { PutUserByUseridRes } from "../../schemas/User/PutByUseridRes";
|
|
|
13
7
|
import { encrypt, genSalt } from "../../utils/bcrypt";
|
|
14
8
|
|
|
15
9
|
export const Route: RouteProps = {
|
|
16
|
-
|
|
17
|
-
|
|
10
|
+
path: "/user/:userid",
|
|
11
|
+
method: HttpMethod.put,
|
|
18
12
|
};
|
|
19
13
|
|
|
20
14
|
// type Params = {
|
|
21
15
|
// userid: string;
|
|
22
16
|
// };
|
|
23
17
|
|
|
24
|
-
const PutUserByUserid: Handler<Ctx, PutUserByUseridReq, PutUserByUseridRes> =
|
|
25
|
-
async ({ ctx, req }) => {
|
|
18
|
+
const PutUserByUserid: Handler<Ctx, PutUserByUseridReq, PutUserByUseridRes> = async ({ ctx, req }) => {
|
|
26
19
|
var model: Partial<ManagementUser> = req.body;
|
|
27
20
|
|
|
28
21
|
if (model.username != null) {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
22
|
+
const existingUser = await ctx.repos.managementuserRepo.getOne({
|
|
23
|
+
username: model.username,
|
|
24
|
+
});
|
|
25
|
+
if (existingUser != null) {
|
|
26
|
+
if (existingUser._id != req.params.userid) {
|
|
27
|
+
return conflict("Username already taken");
|
|
28
|
+
}
|
|
35
29
|
}
|
|
36
|
-
}
|
|
37
30
|
}
|
|
38
31
|
|
|
39
32
|
if (model.password != null) {
|
|
40
|
-
|
|
41
|
-
|
|
33
|
+
const salt = await genSalt(10);
|
|
34
|
+
const hash = await encrypt(model.password, salt);
|
|
42
35
|
|
|
43
|
-
|
|
44
|
-
|
|
36
|
+
model.password = hash;
|
|
37
|
+
model.salt = salt;
|
|
45
38
|
}
|
|
46
39
|
|
|
47
|
-
const updated = await ctx.repos.managementuserRepo.updateOne(
|
|
48
|
-
req.params.userid,
|
|
49
|
-
model
|
|
50
|
-
);
|
|
40
|
+
const updated = await ctx.repos.managementuserRepo.updateOne(req.params.userid, model);
|
|
51
41
|
if (updated == null) {
|
|
52
|
-
|
|
42
|
+
return notFound();
|
|
53
43
|
}
|
|
54
44
|
return {
|
|
55
|
-
|
|
56
|
-
|
|
45
|
+
data: GetManagementUserViewModel(updated),
|
|
46
|
+
status: 200,
|
|
57
47
|
};
|
|
58
|
-
|
|
48
|
+
};
|
|
59
49
|
export default PutUserByUserid;
|
package/src/index.ts
CHANGED
|
@@ -3,6 +3,7 @@ import {
|
|
|
3
3
|
FlinkPlugin,
|
|
4
4
|
HttpMethod,
|
|
5
5
|
unauthorized,
|
|
6
|
+
loadPluginSchemas,
|
|
6
7
|
} from "@flink-app/flink";
|
|
7
8
|
import jsonwebtoken from "jsonwebtoken";
|
|
8
9
|
import * as GetManagement from "./handlers/Management/GetManagement";
|
|
@@ -23,9 +24,14 @@ import { Module, ModuleList } from "./schemas/ModuleList";
|
|
|
23
24
|
|
|
24
25
|
export * from "./models/ManagementApi";
|
|
25
26
|
|
|
27
|
+
const PLUGIN_ID = "managementApi";
|
|
28
|
+
|
|
26
29
|
export const managementApiPlugin = (
|
|
27
30
|
options: ManagementApiOptions
|
|
28
31
|
): FlinkPlugin => {
|
|
32
|
+
const pluginSchemas = loadPluginSchemas("@flink-app/management-api-plugin");
|
|
33
|
+
const schemas = (filePath: string) => pluginSchemas.getHandlerSchemas(PLUGIN_ID, filePath);
|
|
34
|
+
|
|
29
35
|
let managementApiModule: ManagementApiModule = {
|
|
30
36
|
id: "managementapiuser",
|
|
31
37
|
type: ManagementApiType.managementUser,
|
|
@@ -45,6 +51,7 @@ export const managementApiPlugin = (
|
|
|
45
51
|
method: HttpMethod.get,
|
|
46
52
|
path: "",
|
|
47
53
|
docs: "List all management users",
|
|
54
|
+
...schemas("src/handlers/User/GetList.ts"),
|
|
48
55
|
},
|
|
49
56
|
});
|
|
50
57
|
|
|
@@ -54,6 +61,7 @@ export const managementApiPlugin = (
|
|
|
54
61
|
method: HttpMethod.get,
|
|
55
62
|
path: "/me",
|
|
56
63
|
docs: "Get current user information",
|
|
64
|
+
...schemas("src/handlers/User/GetMe.ts"),
|
|
57
65
|
},
|
|
58
66
|
});
|
|
59
67
|
|
|
@@ -63,6 +71,7 @@ export const managementApiPlugin = (
|
|
|
63
71
|
method: HttpMethod.get,
|
|
64
72
|
path: "/:userid",
|
|
65
73
|
docs: "Get one management user by id",
|
|
74
|
+
...schemas("src/handlers/User/GetByUserid.ts"),
|
|
66
75
|
},
|
|
67
76
|
});
|
|
68
77
|
|
|
@@ -73,6 +82,7 @@ export const managementApiPlugin = (
|
|
|
73
82
|
method: HttpMethod.post,
|
|
74
83
|
path: "",
|
|
75
84
|
docs: "Create a new management user",
|
|
85
|
+
...schemas("src/handlers/User/Post.ts"),
|
|
76
86
|
},
|
|
77
87
|
});
|
|
78
88
|
|
|
@@ -83,6 +93,7 @@ export const managementApiPlugin = (
|
|
|
83
93
|
method: HttpMethod.delete,
|
|
84
94
|
path: "/:userid",
|
|
85
95
|
docs: "Deletes a management user",
|
|
96
|
+
...schemas("src/handlers/User/DeleteByUserid.ts"),
|
|
86
97
|
},
|
|
87
98
|
});
|
|
88
99
|
|
|
@@ -92,6 +103,7 @@ export const managementApiPlugin = (
|
|
|
92
103
|
method: HttpMethod.put,
|
|
93
104
|
path: "/:userid",
|
|
94
105
|
docs: "Updates a management user",
|
|
106
|
+
...schemas("src/handlers/User/PutByUserid.ts"),
|
|
95
107
|
},
|
|
96
108
|
});
|
|
97
109
|
|
|
@@ -101,6 +113,7 @@ export const managementApiPlugin = (
|
|
|
101
113
|
method: HttpMethod.post,
|
|
102
114
|
path: "/login",
|
|
103
115
|
docs: "Authenticates a management user",
|
|
116
|
+
...schemas("src/handlers/User/PostLogin.ts"),
|
|
104
117
|
},
|
|
105
118
|
});
|
|
106
119
|
|
|
@@ -124,7 +137,7 @@ export const managementApiPlugin = (
|
|
|
124
137
|
// let url = options.baseUrl || "/managementapi";
|
|
125
138
|
// url += "/" + m.id + e.routeProps.path;
|
|
126
139
|
// // module.endpoints.push({
|
|
127
|
-
// // method : e.config.routeProps.method?.toString() ||
|
|
140
|
+
// // method : e.config.routeProps.method?.toString() || "get",
|
|
128
141
|
// // url : url
|
|
129
142
|
// // });
|
|
130
143
|
// });
|
|
@@ -132,8 +145,8 @@ export const managementApiPlugin = (
|
|
|
132
145
|
});
|
|
133
146
|
|
|
134
147
|
return {
|
|
135
|
-
id:
|
|
136
|
-
init: (app) => init(app, options),
|
|
148
|
+
id: PLUGIN_ID,
|
|
149
|
+
init: (app) => init(app, options, pluginSchemas),
|
|
137
150
|
ctx: {
|
|
138
151
|
jwtSecret: options.jwtSecret,
|
|
139
152
|
moduleList,
|
|
@@ -141,7 +154,7 @@ export const managementApiPlugin = (
|
|
|
141
154
|
};
|
|
142
155
|
};
|
|
143
156
|
|
|
144
|
-
function init(app: FlinkApp<any>, options: ManagementApiOptions) {
|
|
157
|
+
function init(app: FlinkApp<any>, options: ManagementApiOptions, pluginSchemas: ReturnType<typeof loadPluginSchemas>) {
|
|
145
158
|
let baseUrl = options.baseUrl || "/managementapi";
|
|
146
159
|
if (!baseUrl.startsWith("/")) baseUrl = "/" + baseUrl;
|
|
147
160
|
|
|
@@ -151,6 +164,12 @@ function init(app: FlinkApp<any>, options: ManagementApiOptions) {
|
|
|
151
164
|
throw new Error("Express app not initialized");
|
|
152
165
|
}
|
|
153
166
|
|
|
167
|
+
// Register all plugin schemas for $ref resolution
|
|
168
|
+
const allSchemas = pluginSchemas.getAllSchemas(PLUGIN_ID);
|
|
169
|
+
if (Object.keys(allSchemas).length > 0) {
|
|
170
|
+
app.registerSchemas(PLUGIN_ID, allSchemas);
|
|
171
|
+
}
|
|
172
|
+
|
|
154
173
|
expressApp.use(baseUrl + "/*", (req: any, res: any, next: any) => {
|
|
155
174
|
//Allow unauthenticated login requests
|
|
156
175
|
if (req.baseUrl.startsWith(baseUrl + "/managementapiuser/login")) {
|
|
@@ -173,10 +192,13 @@ function init(app: FlinkApp<any>, options: ManagementApiOptions) {
|
|
|
173
192
|
}
|
|
174
193
|
});
|
|
175
194
|
|
|
195
|
+
const schemas = (filePath: string) => pluginSchemas.getHandlerSchemas(PLUGIN_ID, filePath);
|
|
196
|
+
|
|
176
197
|
app.addHandler(GetManagement, {
|
|
177
198
|
path: baseUrl,
|
|
178
199
|
method: HttpMethod.get,
|
|
179
200
|
docs: "Gets information about configured management api",
|
|
201
|
+
...schemas("src/handlers/Management/GetManagement.ts"),
|
|
180
202
|
});
|
|
181
203
|
|
|
182
204
|
if (app.db != null) {
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { DeleteUserByUseridReq } from "../../src/schemas/User/DeleteByUseridReq";
|
|
2
|
-
import { DeleteUserByUseridRes } from "../../src/schemas/User/DeleteByUseridRes";
|
|
3
|
-
import { GetUserByUseridReq } from "../../src/schemas/User/GetByUseridReq";
|
|
4
|
-
import { GetUserByUseridRes } from "../../src/schemas/User/GetByUseridRes";
|
|
5
|
-
import { PostUserReq } from "../../src/schemas/User/PostReq";
|
|
6
|
-
import { PostUserRes } from "../../src/schemas/User/PostRes";
|
|
7
|
-
import { PostUserLoginReq } from "../../src/schemas/User/PostLoginReq";
|
|
8
|
-
import { PostUserLoginRes } from "../../src/schemas/User/PostLoginRes";
|
|
9
|
-
import { PutUserByUseridReq } from "../../src/schemas/User/PutByUseridReq";
|
|
10
|
-
import { PutUserByUseridRes } from "../../src/schemas/User/PutByUseridRes";
|
|
11
|
-
|
|
12
|
-
// Generated Sat Feb 14 2026 15:43:04 GMT+0100 (Central European Standard Time)
|
|
13
|
-
export interface DeleteByUserid_15_ReqSchema extends DeleteUserByUseridReq {}
|
|
14
|
-
|
|
15
|
-
export interface DeleteByUserid_15_ResSchema extends DeleteUserByUseridRes {}
|
|
16
|
-
|
|
17
|
-
export interface GetByUserid_15_ReqSchema extends GetUserByUseridReq {}
|
|
18
|
-
|
|
19
|
-
export interface GetByUserid_15_ResSchema extends GetUserByUseridRes {}
|
|
20
|
-
|
|
21
|
-
export interface Post_14_ReqSchema extends PostUserReq {}
|
|
22
|
-
|
|
23
|
-
export interface Post_14_ResSchema extends PostUserRes {}
|
|
24
|
-
|
|
25
|
-
export interface PostLogin_21_ReqSchema extends PostUserLoginReq {}
|
|
26
|
-
|
|
27
|
-
export interface PostLogin_21_ResSchema extends PostUserLoginRes {}
|
|
28
|
-
|
|
29
|
-
export interface PutByUserid_24_ReqSchema extends PutUserByUseridReq {}
|
|
30
|
-
|
|
31
|
-
export interface PutByUserid_24_ResSchema extends PutUserByUseridRes {}
|