@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
|
@@ -1,68 +1,37 @@
|
|
|
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
9
|
});
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
-
switch (op[0]) {
|
|
21
|
-
case 0: case 1: t = op; break;
|
|
22
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
-
default:
|
|
26
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
-
if (t[2]) _.ops.pop();
|
|
31
|
-
_.trys.pop(); continue;
|
|
32
|
-
}
|
|
33
|
-
op = body.call(thisArg, _);
|
|
34
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
get Route () {
|
|
13
|
+
return Route;
|
|
14
|
+
},
|
|
15
|
+
get default () {
|
|
16
|
+
return _default;
|
|
36
17
|
}
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
var flink_1 = require("@flink-app/flink");
|
|
41
|
-
exports.Route = {
|
|
18
|
+
});
|
|
19
|
+
const _flink = require("@flink-app/flink");
|
|
20
|
+
const Route = {
|
|
42
21
|
path: "/user/:userid",
|
|
43
|
-
method:
|
|
22
|
+
method: _flink.HttpMethod.delete
|
|
44
23
|
};
|
|
45
24
|
// type Params = {
|
|
46
25
|
// userid: string;
|
|
47
26
|
// };
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
return [2 /*return*/, {
|
|
60
|
-
data: {},
|
|
61
|
-
status: 200,
|
|
62
|
-
}];
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
}); };
|
|
66
|
-
exports.default = DeleteUserByUserid;
|
|
67
|
-
exports.__assumedHttpMethod = "delete", exports.__file = "DeleteByUserid.ts", exports.__query = [], exports.__params = [];
|
|
68
|
-
exports.__schemas = { reqSchema: { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "additionalProperties": false, "properties": {}, "definitions": {} }, resSchema: { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "additionalProperties": false, "properties": {}, "definitions": {} } };
|
|
27
|
+
const DeleteUserByUserid = async ({ ctx, req })=>{
|
|
28
|
+
const count = await ctx.repos.managementuserRepo.deleteById(req.params.userid);
|
|
29
|
+
if (count == 0) {
|
|
30
|
+
return (0, _flink.notFound)();
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
data: {},
|
|
34
|
+
status: 200
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
const _default = DeleteUserByUserid;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/joel/projects/flink/flink-framework/packages/management-api-plugin/src/handlers/User/DeleteByUserid.ts"],"sourcesContent":["import { Handler, HttpMethod, notFound, RouteProps } from \"@flink-app/flink\";\nimport { Ctx } from \"../../Ctx\";\nimport { DeleteUserByUseridReq } from \"../../schemas/User/DeleteByUseridReq\";\nimport { DeleteUserByUseridRes } from \"../../schemas/User/DeleteByUseridRes\";\n\nexport const Route: RouteProps = {\n path: \"/user/:userid\",\n method: HttpMethod.delete,\n};\n\n// type Params = {\n// userid: string;\n// };\n\nconst DeleteUserByUserid: Handler<Ctx, DeleteUserByUseridReq, DeleteUserByUseridRes> = async ({ ctx, req }) => {\n const count = await ctx.repos.managementuserRepo.deleteById(req.params.userid);\n if (count == 0) {\n return notFound();\n }\n return {\n data: {},\n status: 200,\n };\n};\nexport default DeleteUserByUserid;\n"],"names":["Route","path","method","HttpMethod","delete","DeleteUserByUserid","ctx","req","count","repos","managementuserRepo","deleteById","params","userid","notFound","data","status"],"mappings":";;;;;;;;;;;QAKaA;eAAAA;;QAmBb;eAAA;;;uBAxB0D;AAKnD,MAAMA,QAAoB;IAC7BC,MAAM;IACNC,QAAQC,iBAAU,CAACC,MAAM;AAC7B;AAEA,kBAAkB;AAClB,qBAAqB;AACrB,KAAK;AAEL,MAAMC,qBAAiF,OAAO,EAAEC,GAAG,EAAEC,GAAG,EAAE;IACtG,MAAMC,QAAQ,MAAMF,IAAIG,KAAK,CAACC,kBAAkB,CAACC,UAAU,CAACJ,IAAIK,MAAM,CAACC,MAAM;IAC7E,IAAIL,SAAS,GAAG;QACZ,OAAOM,IAAAA,eAAQ;IACnB;IACA,OAAO;QACHC,MAAM,CAAC;QACPC,QAAQ;IACZ;AACJ;MACA,WAAeX"}
|
|
@@ -5,5 +5,4 @@ import { Ctx } from "../../Ctx";
|
|
|
5
5
|
export declare const Route: RouteProps;
|
|
6
6
|
declare const GetUserByUserid: Handler<Ctx, GetUserByUseridReq, GetUserByUseridRes>;
|
|
7
7
|
export default GetUserByUserid;
|
|
8
|
-
export declare const __assumedHttpMethod = "get", __file = "GetByUserid.ts", __query: never[], __params: never[];
|
|
9
|
-
export declare const __schemas: any;
|
|
8
|
+
export declare const __assumedHttpMethod = "get", __file = "src/handlers/User/GetByUserid.ts", __query: never[], __params: never[];
|
|
@@ -1,69 +1,38 @@
|
|
|
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
9
|
});
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
-
switch (op[0]) {
|
|
21
|
-
case 0: case 1: t = op; break;
|
|
22
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
-
default:
|
|
26
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
-
if (t[2]) _.ops.pop();
|
|
31
|
-
_.trys.pop(); continue;
|
|
32
|
-
}
|
|
33
|
-
op = body.call(thisArg, _);
|
|
34
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
get Route () {
|
|
13
|
+
return Route;
|
|
14
|
+
},
|
|
15
|
+
get default () {
|
|
16
|
+
return _default;
|
|
36
17
|
}
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
var ManagementUserViewModel_1 = require("../../schemas/ManagementUserViewModel");
|
|
42
|
-
exports.Route = {
|
|
18
|
+
});
|
|
19
|
+
const _flink = require("@flink-app/flink");
|
|
20
|
+
const _ManagementUserViewModel = require("../../schemas/ManagementUserViewModel");
|
|
21
|
+
const Route = {
|
|
43
22
|
path: "/user/:userid",
|
|
44
|
-
method:
|
|
23
|
+
method: _flink.HttpMethod.get
|
|
45
24
|
};
|
|
46
25
|
// type Params = {
|
|
47
26
|
// userid: string;
|
|
48
27
|
// };
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
return [2 /*return*/, {
|
|
61
|
-
data: (0, ManagementUserViewModel_1.GetManagementUserViewModel)(user),
|
|
62
|
-
status: 200,
|
|
63
|
-
}];
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
}); };
|
|
67
|
-
exports.default = GetUserByUserid;
|
|
68
|
-
exports.__assumedHttpMethod = "get", exports.__file = "GetByUserid.ts", exports.__query = [], exports.__params = [];
|
|
69
|
-
exports.__schemas = { reqSchema: { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "additionalProperties": false, "properties": {}, "definitions": {} }, resSchema: { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "additionalProperties": false, "properties": { "_id": { "type": "string" }, "username": { "type": "string" } }, "required": ["_id", "username"], "definitions": {} } };
|
|
28
|
+
const GetUserByUserid = async ({ ctx, req })=>{
|
|
29
|
+
const user = await ctx.repos.managementuserRepo.getById(req.params.userid);
|
|
30
|
+
if (user == null) {
|
|
31
|
+
return (0, _flink.notFound)();
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
data: (0, _ManagementUserViewModel.GetManagementUserViewModel)(user),
|
|
35
|
+
status: 200
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
const _default = GetUserByUserid;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/joel/projects/flink/flink-framework/packages/management-api-plugin/src/handlers/User/GetByUserid.ts"],"sourcesContent":["import { Handler, HttpMethod, notFound, RouteProps } from \"@flink-app/flink\";\nimport { GetUserByUseridReq } from \"../../schemas/User/GetByUseridReq\";\nimport { GetUserByUseridRes } from \"../../schemas/User/GetByUseridRes\";\nimport { Ctx } from \"../../Ctx\";\nimport { GetManagementUserViewModel } from \"../../schemas/ManagementUserViewModel\";\nexport const Route: RouteProps = {\n path: \"/user/:userid\",\n method: HttpMethod.get,\n};\n\n// type Params = {\n// userid: string;\n// };\n\nconst GetUserByUserid: Handler<Ctx, GetUserByUseridReq, GetUserByUseridRes> = async ({ ctx, req }) => {\n const user = await ctx.repos.managementuserRepo.getById(req.params.userid);\n if (user == null) {\n return notFound();\n }\n return {\n data: GetManagementUserViewModel(user),\n status: 200,\n };\n};\nexport default GetUserByUserid;\n"],"names":["Route","path","method","HttpMethod","get","GetUserByUserid","ctx","req","user","repos","managementuserRepo","getById","params","userid","notFound","data","GetManagementUserViewModel","status"],"mappings":";;;;;;;;;;;QAKaA;eAAAA;;QAmBb;eAAA;;;uBAxB0D;yCAIf;AACpC,MAAMA,QAAoB;IAC7BC,MAAM;IACNC,QAAQC,iBAAU,CAACC,GAAG;AAC1B;AAEA,kBAAkB;AAClB,qBAAqB;AACrB,KAAK;AAEL,MAAMC,kBAAwE,OAAO,EAAEC,GAAG,EAAEC,GAAG,EAAE;IAC7F,MAAMC,OAAO,MAAMF,IAAIG,KAAK,CAACC,kBAAkB,CAACC,OAAO,CAACJ,IAAIK,MAAM,CAACC,MAAM;IACzE,IAAIL,QAAQ,MAAM;QACd,OAAOM,IAAAA,eAAQ;IACnB;IACA,OAAO;QACHC,MAAMC,IAAAA,mDAA0B,EAACR;QACjCS,QAAQ;IACZ;AACJ;MACA,WAAeZ"}
|
|
@@ -5,4 +5,4 @@ import { GetUserListRes } from "../../schemas/User/GetListRes";
|
|
|
5
5
|
type Params = {};
|
|
6
6
|
declare const GetUserList: Handler<Ctx, GetUserListReq, GetUserListRes, Params>;
|
|
7
7
|
export default GetUserList;
|
|
8
|
-
export declare const __assumedHttpMethod = "get", __file = "GetList.ts", __query: never[], __params: never[];
|
|
8
|
+
export declare const __assumedHttpMethod = "get", __file = "src/handlers/User/GetList.ts", __query: never[], __params: never[];
|
|
@@ -1,61 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
13
|
-
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
-
function step(op) {
|
|
16
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
-
switch (op[0]) {
|
|
21
|
-
case 0: case 1: t = op; break;
|
|
22
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
-
default:
|
|
26
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
-
if (t[2]) _.ops.pop();
|
|
31
|
-
_.trys.pop(); continue;
|
|
32
|
-
}
|
|
33
|
-
op = body.call(thisArg, _);
|
|
34
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "default", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return _default;
|
|
36
9
|
}
|
|
10
|
+
});
|
|
11
|
+
const _ManagementUserViewModel = require("../../schemas/ManagementUserViewModel");
|
|
12
|
+
const GetUserList = async ({ ctx, req })=>{
|
|
13
|
+
const repo = ctx.repos.managementuserRepo;
|
|
14
|
+
const users = await repo.findAll();
|
|
15
|
+
return {
|
|
16
|
+
data: {
|
|
17
|
+
users: users.map(_ManagementUserViewModel.GetManagementUserViewModel)
|
|
18
|
+
},
|
|
19
|
+
status: 200
|
|
20
|
+
};
|
|
37
21
|
};
|
|
38
|
-
|
|
39
|
-
exports.__params = exports.__query = exports.__file = exports.__assumedHttpMethod = void 0;
|
|
40
|
-
var ManagementUserViewModel_1 = require("../../schemas/ManagementUserViewModel");
|
|
41
|
-
var GetUserList = function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) {
|
|
42
|
-
var repo, users;
|
|
43
|
-
var ctx = _b.ctx, req = _b.req;
|
|
44
|
-
return __generator(this, function (_c) {
|
|
45
|
-
switch (_c.label) {
|
|
46
|
-
case 0:
|
|
47
|
-
repo = ctx.repos.managementuserRepo;
|
|
48
|
-
return [4 /*yield*/, repo.findAll()];
|
|
49
|
-
case 1:
|
|
50
|
-
users = _c.sent();
|
|
51
|
-
return [2 /*return*/, {
|
|
52
|
-
data: {
|
|
53
|
-
users: users.map(ManagementUserViewModel_1.GetManagementUserViewModel),
|
|
54
|
-
},
|
|
55
|
-
status: 200,
|
|
56
|
-
}];
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
}); };
|
|
60
|
-
exports.default = GetUserList;
|
|
61
|
-
exports.__assumedHttpMethod = "get", exports.__file = "GetList.ts", exports.__query = [], exports.__params = [];
|
|
22
|
+
const _default = GetUserList;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/joel/projects/flink/flink-framework/packages/management-api-plugin/src/handlers/User/GetList.ts"],"sourcesContent":["import { Handler } from \"@flink-app/flink\";\nimport { Ctx } from \"../../Ctx\";\nimport { GetManagementUserViewModel } from \"../../schemas/ManagementUserViewModel\";\nimport { GetUserListReq } from \"../../schemas/User/GetListReq\";\nimport { GetUserListRes } from \"../../schemas/User/GetListRes\";\n\ntype Params = {};\n\nconst GetUserList: Handler<Ctx, GetUserListReq, GetUserListRes, Params> = async ({ ctx, req }) => {\n const repo = ctx.repos.managementuserRepo;\n const users = await repo.findAll();\n\n return {\n data: {\n users: users.map(GetManagementUserViewModel),\n },\n status: 200,\n };\n};\nexport default GetUserList;\n"],"names":["GetUserList","ctx","req","repo","repos","managementuserRepo","users","findAll","data","map","GetManagementUserViewModel","status"],"mappings":";;;;+BAmBA;;;eAAA;;;yCAjB2C;AAM3C,MAAMA,cAAoE,OAAO,EAAEC,GAAG,EAAEC,GAAG,EAAE;IACzF,MAAMC,OAAOF,IAAIG,KAAK,CAACC,kBAAkB;IACzC,MAAMC,QAAQ,MAAMH,KAAKI,OAAO;IAEhC,OAAO;QACHC,MAAM;YACFF,OAAOA,MAAMG,GAAG,CAACC,mDAA0B;QAC/C;QACAC,QAAQ;IACZ;AACJ;MACA,WAAeX"}
|
|
@@ -4,4 +4,4 @@ import { GetUserMeReq } from "../../schemas/User/GetMeReq";
|
|
|
4
4
|
import { GetUserMeRes } from "../../schemas/User/GetMeRes";
|
|
5
5
|
declare const GetUserMe: Handler<Ctx, GetUserMeReq, GetUserMeRes>;
|
|
6
6
|
export default GetUserMe;
|
|
7
|
-
export declare const __assumedHttpMethod = "get", __file = "GetMe.ts", __query: never[], __params: never[];
|
|
7
|
+
export declare const __assumedHttpMethod = "get", __file = "src/handlers/User/GetMe.ts", __query: never[], __params: never[];
|
|
@@ -1,78 +1,71 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
13
|
-
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
-
function step(op) {
|
|
16
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
-
switch (op[0]) {
|
|
21
|
-
case 0: case 1: t = op; break;
|
|
22
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
-
default:
|
|
26
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
-
if (t[2]) _.ops.pop();
|
|
31
|
-
_.trys.pop(); continue;
|
|
32
|
-
}
|
|
33
|
-
op = body.call(thisArg, _);
|
|
34
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "default", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return _default;
|
|
36
9
|
}
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
var jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
|
|
56
|
-
var GetUserMe = function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) {
|
|
57
|
-
var user, iat, rest;
|
|
58
|
-
var ctx = _b.ctx, req = _b.req;
|
|
59
|
-
return __generator(this, function (_c) {
|
|
60
|
-
try {
|
|
61
|
-
user = jsonwebtoken_1.default.verify(req.headers["management-token"], ctx.plugins.managementApi.jwtSecret);
|
|
62
|
-
iat = user.iat, rest = __rest(user, ["iat"]);
|
|
63
|
-
return [2 /*return*/, {
|
|
64
|
-
data: {
|
|
65
|
-
token: req.headers["management-token"],
|
|
66
|
-
user: rest
|
|
67
|
-
},
|
|
68
|
-
status: 200
|
|
69
|
-
}];
|
|
10
|
+
});
|
|
11
|
+
const _flink = require("@flink-app/flink");
|
|
12
|
+
const _jsonwebtoken = /*#__PURE__*/ _interop_require_default(require("jsonwebtoken"));
|
|
13
|
+
function _interop_require_default(obj) {
|
|
14
|
+
return obj && obj.__esModule ? obj : {
|
|
15
|
+
default: obj
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function _object_without_properties(source, excluded) {
|
|
19
|
+
if (source == null) return {};
|
|
20
|
+
var target = {}, sourceKeys, key, i;
|
|
21
|
+
if (typeof Reflect !== "undefined" && Reflect.ownKeys) {
|
|
22
|
+
sourceKeys = Reflect.ownKeys(Object(source));
|
|
23
|
+
for(i = 0; i < sourceKeys.length; i++){
|
|
24
|
+
key = sourceKeys[i];
|
|
25
|
+
if (excluded.indexOf(key) >= 0) continue;
|
|
26
|
+
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
|
27
|
+
target[key] = source[key];
|
|
70
28
|
}
|
|
71
|
-
|
|
72
|
-
|
|
29
|
+
return target;
|
|
30
|
+
}
|
|
31
|
+
target = _object_without_properties_loose(source, excluded);
|
|
32
|
+
if (Object.getOwnPropertySymbols) {
|
|
33
|
+
sourceKeys = Object.getOwnPropertySymbols(source);
|
|
34
|
+
for(i = 0; i < sourceKeys.length; i++){
|
|
35
|
+
key = sourceKeys[i];
|
|
36
|
+
if (excluded.indexOf(key) >= 0) continue;
|
|
37
|
+
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
|
38
|
+
target[key] = source[key];
|
|
73
39
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
|
|
40
|
+
}
|
|
41
|
+
return target;
|
|
42
|
+
}
|
|
43
|
+
function _object_without_properties_loose(source, excluded) {
|
|
44
|
+
if (source == null) return {};
|
|
45
|
+
var target = {}, sourceKeys = Object.getOwnPropertyNames(source), key, i;
|
|
46
|
+
for(i = 0; i < sourceKeys.length; i++){
|
|
47
|
+
key = sourceKeys[i];
|
|
48
|
+
if (excluded.indexOf(key) >= 0) continue;
|
|
49
|
+
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
|
50
|
+
target[key] = source[key];
|
|
51
|
+
}
|
|
52
|
+
return target;
|
|
53
|
+
}
|
|
54
|
+
const GetUserMe = async ({ ctx, req })=>{
|
|
55
|
+
try {
|
|
56
|
+
const user = _jsonwebtoken.default.verify(req.headers["management-token"], ctx.plugins.managementApi.jwtSecret);
|
|
57
|
+
const { iat } = user, rest = _object_without_properties(user, [
|
|
58
|
+
"iat"
|
|
59
|
+
]);
|
|
60
|
+
return {
|
|
61
|
+
data: {
|
|
62
|
+
token: req.headers["management-token"],
|
|
63
|
+
user: rest
|
|
64
|
+
},
|
|
65
|
+
status: 200
|
|
66
|
+
};
|
|
67
|
+
} catch (ex) {
|
|
68
|
+
return (0, _flink.unauthorized)();
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
const _default = GetUserMe;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/joel/projects/flink/flink-framework/packages/management-api-plugin/src/handlers/User/GetMe.ts"],"sourcesContent":["import { Handler, HttpMethod, notFound, RouteProps, unauthorized } from \"@flink-app/flink\";\nimport { Ctx } from \"../../Ctx\";\nimport { GetUserMeReq } from \"../../schemas/User/GetMeReq\";\nimport { GetUserMeRes } from \"../../schemas/User/GetMeRes\";\nimport jsonwebtoken from \"jsonwebtoken\";\nimport { ManagementUserViewModel } from \"../../schemas/ManagementUserViewModel\";\n\nconst GetUserMe: Handler<Ctx, GetUserMeReq, GetUserMeRes> = async ({ ctx, req }) => {\n try {\n const user = jsonwebtoken.verify(<string>req.headers[\"management-token\"], ctx.plugins.managementApi.jwtSecret) as any;\n const { iat, ...rest } = user;\n return {\n data: {\n token: <string>req.headers[\"management-token\"],\n user: rest,\n },\n status: 200,\n };\n } catch (ex) {\n return unauthorized();\n }\n};\nexport default GetUserMe;\n"],"names":["GetUserMe","ctx","req","user","jsonwebtoken","verify","headers","plugins","managementApi","jwtSecret","iat","rest","data","token","status","ex","unauthorized"],"mappings":";;;;+BAsBA;;;eAAA;;;uBAtBwE;qEAI/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGzB,MAAMA,YAAsD,OAAO,EAAEC,GAAG,EAAEC,GAAG,EAAE;IAC3E,IAAI;QACA,MAAMC,OAAOC,qBAAY,CAACC,MAAM,CAASH,IAAII,OAAO,CAAC,mBAAmB,EAAEL,IAAIM,OAAO,CAACC,aAAa,CAACC,SAAS;QAC7G,MAAM,EAAEC,GAAG,EAAW,GAAGP,MAATQ,kCAASR;;;QACzB,OAAO;YACHS,MAAM;gBACFC,OAAeX,IAAII,OAAO,CAAC,mBAAmB;gBAC9CH,MAAMQ;YACV;YACAG,QAAQ;QACZ;IACJ,EAAE,OAAOC,IAAI;QACT,OAAOC,IAAAA,mBAAY;IACvB;AACJ;MACA,WAAehB"}
|
|
@@ -6,5 +6,4 @@ export declare const Route: RouteProps;
|
|
|
6
6
|
type Params = {};
|
|
7
7
|
declare const PostUser: Handler<Ctx, PostUserReq, PostUserRes, Params>;
|
|
8
8
|
export default PostUser;
|
|
9
|
-
export declare const __assumedHttpMethod = "post", __file = "Post.ts", __query: never[], __params: never[];
|
|
10
|
-
export declare const __schemas: any;
|
|
9
|
+
export declare const __assumedHttpMethod = "post", __file = "src/handlers/User/Post.ts", __query: never[], __params: never[];
|
|
@@ -1,85 +1,49 @@
|
|
|
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
9
|
});
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
-
switch (op[0]) {
|
|
21
|
-
case 0: case 1: t = op; break;
|
|
22
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
-
default:
|
|
26
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
-
if (t[2]) _.ops.pop();
|
|
31
|
-
_.trys.pop(); continue;
|
|
32
|
-
}
|
|
33
|
-
op = body.call(thisArg, _);
|
|
34
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
get Route () {
|
|
13
|
+
return Route;
|
|
14
|
+
},
|
|
15
|
+
get default () {
|
|
16
|
+
return _default;
|
|
36
17
|
}
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
var bcrypt_1 = require("../../utils/bcrypt");
|
|
43
|
-
exports.Route = {
|
|
18
|
+
});
|
|
19
|
+
const _flink = require("@flink-app/flink");
|
|
20
|
+
const _ManagementUserViewModel = require("../../schemas/ManagementUserViewModel");
|
|
21
|
+
const _bcrypt = require("../../utils/bcrypt");
|
|
22
|
+
const Route = {
|
|
44
23
|
path: "/user",
|
|
45
|
-
method:
|
|
24
|
+
method: _flink.HttpMethod.post
|
|
46
25
|
};
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
if (req.body.username.length == 0 || req.body.password.length == 0) {
|
|
54
|
-
return [2 /*return*/, (0, flink_1.badRequest)("Username and password must be specified")];
|
|
55
|
-
}
|
|
56
|
-
return [4 /*yield*/, ctx.repos.managementuserRepo.getOne({ username: req.body.username })];
|
|
57
|
-
case 1:
|
|
58
|
-
existingUser = _c.sent();
|
|
59
|
-
if (existingUser != null) {
|
|
60
|
-
return [2 /*return*/, (0, flink_1.conflict)("Username already taken")];
|
|
61
|
-
}
|
|
62
|
-
return [4 /*yield*/, (0, bcrypt_1.genSalt)(10)];
|
|
63
|
-
case 2:
|
|
64
|
-
salt = _c.sent();
|
|
65
|
-
return [4 /*yield*/, (0, bcrypt_1.encrypt)(req.body.password, salt)];
|
|
66
|
-
case 3:
|
|
67
|
-
hash = _c.sent();
|
|
68
|
-
obj = {
|
|
69
|
-
username: req.body.username,
|
|
70
|
-
password: hash,
|
|
71
|
-
salt: salt,
|
|
72
|
-
};
|
|
73
|
-
return [4 /*yield*/, ctx.repos.managementuserRepo.create(obj)];
|
|
74
|
-
case 4:
|
|
75
|
-
user = _c.sent();
|
|
76
|
-
return [2 /*return*/, {
|
|
77
|
-
data: (0, ManagementUserViewModel_1.GetManagementUserViewModel)(user),
|
|
78
|
-
status: 200,
|
|
79
|
-
}];
|
|
80
|
-
}
|
|
26
|
+
const PostUser = async ({ ctx, req })=>{
|
|
27
|
+
if (req.body.username.length == 0 || req.body.password.length == 0) {
|
|
28
|
+
return (0, _flink.badRequest)("Username and password must be specified");
|
|
29
|
+
}
|
|
30
|
+
const existingUser = await ctx.repos.managementuserRepo.getOne({
|
|
31
|
+
username: req.body.username
|
|
81
32
|
});
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
33
|
+
if (existingUser != null) {
|
|
34
|
+
return (0, _flink.conflict)("Username already taken");
|
|
35
|
+
}
|
|
36
|
+
const salt = await (0, _bcrypt.genSalt)(10);
|
|
37
|
+
const hash = await (0, _bcrypt.encrypt)(req.body.password, salt);
|
|
38
|
+
var obj = {
|
|
39
|
+
username: req.body.username,
|
|
40
|
+
password: hash,
|
|
41
|
+
salt: salt
|
|
42
|
+
};
|
|
43
|
+
const user = await ctx.repos.managementuserRepo.create(obj);
|
|
44
|
+
return {
|
|
45
|
+
data: (0, _ManagementUserViewModel.GetManagementUserViewModel)(user),
|
|
46
|
+
status: 200
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
const _default = PostUser;
|