@flink-app/generic-auth-plugin 1.0.0 → 2.0.0-alpha.101
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 +5 -0
- package/.flink/generatedHandlers.ts +22 -22
- package/.flink/generatedJobs.ts +1 -1
- package/.flink/generatedRepos.ts +1 -1
- package/.flink/generatedServices.ts +5 -0
- package/.flink/generatedTools.ts +5 -0
- package/.flink/start.ts +4 -1
- package/CHANGELOG.md +597 -0
- package/dist/.flink/generatedAgents.d.ts +1 -0
- package/dist/.flink/generatedAgents.js +14 -0
- package/dist/.flink/generatedAgents.js.map +1 -0
- package/dist/.flink/generatedHandlers.js +13 -6
- 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 +13 -6
- package/dist/.flink/generatedRepos.js.map +1 -0
- package/dist/.flink/generatedServices.js +14 -0
- package/dist/.flink/generatedServices.js.map +1 -0
- package/dist/.flink/generatedTools.d.ts +1 -0
- package/dist/.flink/generatedTools.js +14 -0
- package/dist/.flink/generatedTools.js.map +1 -0
- package/dist/.flink/schema-manifest.json +588 -0
- package/dist/.flink/schemas/schemas.js +1 -1
- package/dist/.flink/start.d.ts +2 -0
- package/dist/.flink/start.js +15 -3
- package/dist/.flink/start.js.map +1 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/src/coreFunctions.js +356 -412
- package/dist/src/coreFunctions.js.map +1 -0
- package/dist/src/genericAuthContext.js +3 -1
- package/dist/src/genericAuthContext.js.map +1 -0
- package/dist/src/genericAuthPluginOptions.js +3 -1
- package/dist/src/genericAuthPluginOptions.js.map +1 -0
- package/dist/src/handlers/Management/DeleteUserByUserid.d.ts +1 -1
- package/dist/src/handlers/Management/DeleteUserByUserid.js +21 -60
- package/dist/src/handlers/Management/DeleteUserByUserid.js.map +1 -0
- package/dist/src/handlers/Management/GetSchema.d.ts +1 -1
- package/dist/src/handlers/Management/GetSchema.js +16 -50
- package/dist/src/handlers/Management/GetSchema.js.map +1 -0
- package/dist/src/handlers/Management/GetUser.d.ts +1 -1
- package/dist/src/handlers/Management/GetUser.js +25 -59
- package/dist/src/handlers/Management/GetUser.js.map +1 -0
- package/dist/src/handlers/Management/GetUserByUserid.d.ts +1 -1
- package/dist/src/handlers/Management/GetUserByUserid.js +60 -71
- package/dist/src/handlers/Management/GetUserByUserid.js.map +1 -0
- package/dist/src/handlers/Management/GetUserViewByUserid.d.ts +1 -1
- package/dist/src/handlers/Management/GetUserViewByUserid.js +35 -74
- package/dist/src/handlers/Management/GetUserViewByUserid.js.map +1 -0
- package/dist/src/handlers/Management/PutUserPasswordByUserid.d.ts +1 -1
- package/dist/src/handlers/Management/PutUserPasswordByUserid.js +37 -85
- package/dist/src/handlers/Management/PutUserPasswordByUserid.js.map +1 -0
- package/dist/src/handlers/Management/PutUserProfileByUserid.d.ts +1 -1
- package/dist/src/handlers/Management/PutUserProfileByUserid.js +27 -70
- package/dist/src/handlers/Management/PutUserProfileByUserid.js.map +1 -0
- package/dist/src/handlers/Management/PutUserProfileByUseridAppend.d.ts +1 -1
- package/dist/src/handlers/Management/PutUserProfileByUseridAppend.js +53 -76
- package/dist/src/handlers/Management/PutUserProfileByUseridAppend.js.map +1 -0
- package/dist/src/handlers/Management/PutUserRolesByUserid.d.ts +1 -1
- package/dist/src/handlers/Management/PutUserRolesByUserid.js +24 -63
- package/dist/src/handlers/Management/PutUserRolesByUserid.js.map +1 -0
- package/dist/src/handlers/Management/PutUserUsernameByUserid.d.ts +1 -1
- package/dist/src/handlers/Management/PutUserUsernameByUserid.js +31 -72
- package/dist/src/handlers/Management/PutUserUsernameByUserid.js.map +1 -0
- package/dist/src/handlers/UserCreate.d.ts +1 -1
- package/dist/src/handlers/UserCreate.js +44 -84
- package/dist/src/handlers/UserCreate.js.map +1 -0
- package/dist/src/handlers/UserLogin.d.ts +1 -1
- package/dist/src/handlers/UserLogin.js +45 -88
- package/dist/src/handlers/UserLogin.js.map +1 -0
- package/dist/src/handlers/UserLoginByToken.d.ts +1 -1
- package/dist/src/handlers/UserLoginByToken.js +24 -63
- package/dist/src/handlers/UserLoginByToken.js.map +1 -0
- package/dist/src/handlers/UserPasswordPut.d.ts +1 -1
- package/dist/src/handlers/UserPasswordPut.js +24 -60
- package/dist/src/handlers/UserPasswordPut.js.map +1 -0
- package/dist/src/handlers/UserPasswordResetComplete.d.ts +1 -1
- package/dist/src/handlers/UserPasswordResetComplete.js +30 -66
- package/dist/src/handlers/UserPasswordResetComplete.js.map +1 -0
- package/dist/src/handlers/UserPasswordResetForm.d.ts +1 -1
- package/dist/src/handlers/UserPasswordResetForm.js +155 -110
- package/dist/src/handlers/UserPasswordResetForm.js.map +1 -0
- package/dist/src/handlers/UserPasswordResetStart.d.ts +1 -1
- package/dist/src/handlers/UserPasswordResetStart.js +66 -95
- package/dist/src/handlers/UserPasswordResetStart.js.map +1 -0
- package/dist/src/handlers/UserProfileGet.d.ts +1 -1
- package/dist/src/handlers/UserProfileGet.js +21 -60
- package/dist/src/handlers/UserProfileGet.js.map +1 -0
- package/dist/src/handlers/UserProfilePut.d.ts +1 -1
- package/dist/src/handlers/UserProfilePut.js +55 -81
- package/dist/src/handlers/UserProfilePut.js.map +1 -0
- package/dist/src/handlers/UserPushRegisterToken.d.ts +1 -1
- package/dist/src/handlers/UserPushRegisterToken.js +119 -118
- package/dist/src/handlers/UserPushRegisterToken.js.map +1 -0
- package/dist/src/handlers/UserPushRemoveToken.d.ts +1 -1
- package/dist/src/handlers/UserPushRemoveToken.js +26 -63
- package/dist/src/handlers/UserPushRemoveToken.js.map +1 -0
- package/dist/src/handlers/UserToken.d.ts +1 -1
- package/dist/src/handlers/UserToken.js +29 -63
- package/dist/src/handlers/UserToken.js.map +1 -0
- package/dist/src/index.js +133 -50
- package/dist/src/index.js.map +1 -0
- package/dist/src/init.js +160 -101
- package/dist/src/init.js.map +1 -0
- package/dist/src/management.js +109 -86
- package/dist/src/management.js.map +1 -0
- package/dist/src/schemas/Management/DeleteUserByUseridReq.js +3 -1
- package/dist/src/schemas/Management/DeleteUserByUseridReq.js.map +1 -0
- package/dist/src/schemas/Management/DeleteUserByUseridRes.js +3 -1
- package/dist/src/schemas/Management/DeleteUserByUseridRes.js.map +1 -0
- package/dist/src/schemas/Management/GetUserByUseridReq.js +3 -1
- package/dist/src/schemas/Management/GetUserByUseridReq.js.map +1 -0
- package/dist/src/schemas/Management/GetUserByUseridRes.js +3 -1
- package/dist/src/schemas/Management/GetUserByUseridRes.js.map +1 -0
- package/dist/src/schemas/Management/GetUserReq.js +3 -1
- package/dist/src/schemas/Management/GetUserReq.js.map +1 -0
- package/dist/src/schemas/Management/GetUserRes.js +3 -1
- package/dist/src/schemas/Management/GetUserRes.js.map +1 -0
- package/dist/src/schemas/Management/GetUserViewByUseridReq.js +3 -1
- package/dist/src/schemas/Management/GetUserViewByUseridReq.js.map +1 -0
- package/dist/src/schemas/Management/GetUserViewByUseridRes.js +3 -1
- package/dist/src/schemas/Management/GetUserViewByUseridRes.js.map +1 -0
- package/dist/src/schemas/Management/PutUserPasswordByUseridReq.js +3 -1
- package/dist/src/schemas/Management/PutUserPasswordByUseridReq.js.map +1 -0
- package/dist/src/schemas/Management/PutUserPasswordByUseridRes.js +3 -1
- package/dist/src/schemas/Management/PutUserPasswordByUseridRes.js.map +1 -0
- package/dist/src/schemas/Management/PutUserProfileByUseridReq.js +3 -1
- package/dist/src/schemas/Management/PutUserProfileByUseridReq.js.map +1 -0
- package/dist/src/schemas/Management/PutUserProfileByUseridRes.js +3 -1
- package/dist/src/schemas/Management/PutUserProfileByUseridRes.js.map +1 -0
- package/dist/src/schemas/Management/PutUserRolesByUseridReq.js +3 -1
- package/dist/src/schemas/Management/PutUserRolesByUseridReq.js.map +1 -0
- package/dist/src/schemas/Management/PutUserRolesByUseridRes.js +3 -1
- package/dist/src/schemas/Management/PutUserRolesByUseridRes.js.map +1 -0
- package/dist/src/schemas/Management/PutUserUsernameByUseridReq.js +3 -1
- package/dist/src/schemas/Management/PutUserUsernameByUseridReq.js.map +1 -0
- package/dist/src/schemas/Management/PutUserUsernameByUseridRes.js +3 -1
- package/dist/src/schemas/Management/PutUserUsernameByUseridRes.js.map +1 -0
- package/dist/src/schemas/PushNotificationToken.js +3 -1
- package/dist/src/schemas/PushNotificationToken.js.map +1 -0
- package/dist/src/schemas/PushNotificationTokenRes.js +3 -1
- package/dist/src/schemas/PushNotificationTokenRes.js.map +1 -0
- package/dist/src/schemas/User.js +3 -1
- package/dist/src/schemas/User.js.map +1 -0
- package/dist/src/schemas/UserCreateReq.js +3 -1
- package/dist/src/schemas/UserCreateReq.js.map +1 -0
- package/dist/src/schemas/UserCreateRes.js +3 -1
- package/dist/src/schemas/UserCreateRes.js.map +1 -0
- package/dist/src/schemas/UserLoginByTokenReq.js +3 -1
- package/dist/src/schemas/UserLoginByTokenReq.js.map +1 -0
- package/dist/src/schemas/UserLoginReq.js +3 -1
- package/dist/src/schemas/UserLoginReq.js.map +1 -0
- package/dist/src/schemas/UserLoginRes.js +3 -1
- package/dist/src/schemas/UserLoginRes.js.map +1 -0
- package/dist/src/schemas/UserPasswordChangeReq.js +3 -1
- package/dist/src/schemas/UserPasswordChangeReq.js.map +1 -0
- package/dist/src/schemas/UserPasswordChangeRes.js +3 -1
- package/dist/src/schemas/UserPasswordChangeRes.js.map +1 -0
- package/dist/src/schemas/UserPasswordResetCompleteReq.js +3 -1
- package/dist/src/schemas/UserPasswordResetCompleteReq.js.map +1 -0
- package/dist/src/schemas/UserPasswordResetCompleteRes.js +3 -1
- package/dist/src/schemas/UserPasswordResetCompleteRes.js.map +1 -0
- package/dist/src/schemas/UserPasswordResetSettings.js +3 -1
- package/dist/src/schemas/UserPasswordResetSettings.js.map +1 -0
- package/dist/src/schemas/UserPasswordResetStartReq.js +3 -1
- package/dist/src/schemas/UserPasswordResetStartReq.js.map +1 -0
- package/dist/src/schemas/UserPasswordResetStartRes.js +3 -1
- package/dist/src/schemas/UserPasswordResetStartRes.js.map +1 -0
- package/dist/src/schemas/UserPasswordResetStartResPublic.js +3 -1
- package/dist/src/schemas/UserPasswordResetStartResPublic.js.map +1 -0
- package/dist/src/schemas/UserProfile.js +3 -1
- package/dist/src/schemas/UserProfile.js.map +1 -0
- package/dist/src/schemas/UserTokenRes.js +3 -1
- package/dist/src/schemas/UserTokenRes.js.map +1 -0
- package/package.json +9 -6
- package/src/coreFunctions.ts +3 -3
- package/src/handlers/Management/DeleteUserByUserid.ts +10 -14
- package/src/handlers/Management/GetSchema.ts +6 -12
- package/src/handlers/Management/GetUser.ts +11 -15
- package/src/handlers/Management/GetUserByUserid.ts +13 -23
- package/src/handlers/Management/PutUserPasswordByUserid.ts +39 -45
- package/src/handlers/Management/PutUserProfileByUserid.ts +21 -27
- package/src/handlers/Management/PutUserProfileByUseridAppend.ts +22 -28
- package/src/handlers/Management/PutUserRolesByUserid.ts +17 -23
- package/src/handlers/Management/PutUserUsernameByUserid.ts +24 -31
- package/src/handlers/UserLoginByToken.ts +20 -27
- package/src/handlers/UserPasswordPut.ts +17 -24
- package/src/handlers/UserPasswordResetComplete.ts +31 -40
- package/src/handlers/UserPasswordResetForm.ts +25 -29
- package/src/handlers/UserPasswordResetStart.ts +13 -5
- package/src/handlers/UserProfileGet.ts +11 -14
- package/src/handlers/UserProfilePut.ts +1 -1
- package/src/handlers/UserPushRegisterToken.ts +2 -2
- package/src/handlers/UserPushRemoveToken.ts +12 -18
- package/src/handlers/UserToken.ts +13 -24
- package/src/init.ts +23 -1
- package/tsconfig.json +1 -1
- package/.flink/schemas/schemas.ts +0 -1
|
@@ -4,32 +4,25 @@ import { genericAuthContext } from "../genericAuthContext";
|
|
|
4
4
|
import { UserPasswordChangeReq } from "../schemas/UserPasswordChangeReq";
|
|
5
5
|
import { UserPasswordChangeRes } from "../schemas/UserPasswordChangeRes";
|
|
6
6
|
|
|
7
|
-
const putUserPasswordHandler: Handler<
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
req.user._id,
|
|
18
|
-
req.body.password,
|
|
19
|
-
ctx.plugins.genericAuthPlugin.createPasswordHashAndSaltMethod
|
|
20
|
-
);
|
|
7
|
+
const putUserPasswordHandler: Handler<FlinkContext<genericAuthContext>, UserPasswordChangeReq, UserPasswordChangeRes> = async ({ ctx, req, origin }) => {
|
|
8
|
+
let pluginName = origin || "genericAuthPlugin";
|
|
9
|
+
let repo = ctx.repos[(<any>ctx.plugins)[pluginName].repoName];
|
|
10
|
+
const resp = await ctx.plugins.genericAuthPlugin.changePassword(
|
|
11
|
+
repo,
|
|
12
|
+
<JwtAuthPlugin>ctx.auth,
|
|
13
|
+
req.user._id,
|
|
14
|
+
req.body.password,
|
|
15
|
+
ctx.plugins.genericAuthPlugin.createPasswordHashAndSaltMethod
|
|
16
|
+
);
|
|
21
17
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
case "passwordError":
|
|
29
|
-
return badRequest("Invalid password", resp.status);
|
|
30
|
-
}
|
|
18
|
+
switch (resp.status) {
|
|
19
|
+
case "failed":
|
|
20
|
+
return badRequest("Password could not be changed on this user", resp.status);
|
|
21
|
+
case "passwordError":
|
|
22
|
+
return badRequest("Invalid password", resp.status);
|
|
23
|
+
}
|
|
31
24
|
|
|
32
|
-
|
|
25
|
+
return { data: resp, status: 200 };
|
|
33
26
|
};
|
|
34
27
|
|
|
35
28
|
export default putUserPasswordHandler;
|
|
@@ -1,52 +1,43 @@
|
|
|
1
|
-
import {
|
|
2
|
-
badRequest,
|
|
3
|
-
FlinkContext,
|
|
4
|
-
Handler,
|
|
5
|
-
internalServerError,
|
|
6
|
-
notFound,
|
|
7
|
-
} from "@flink-app/flink";
|
|
1
|
+
import { badRequest, FlinkContext, Handler, internalServerError, notFound } from "@flink-app/flink";
|
|
8
2
|
import { JwtAuthPlugin } from "@flink-app/jwt-auth-plugin";
|
|
9
3
|
import { genericAuthContext } from "../genericAuthContext";
|
|
10
4
|
import { UserPasswordResetCompleteReq } from "../schemas/UserPasswordResetCompleteReq";
|
|
11
5
|
import { UserPasswordResetCompleteRes } from "../schemas/UserPasswordResetCompleteRes";
|
|
12
6
|
|
|
13
|
-
const postPasswordResetCompleteHandler: Handler<
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
7
|
+
const postPasswordResetCompleteHandler: Handler<FlinkContext<genericAuthContext>, UserPasswordResetCompleteReq, UserPasswordResetCompleteRes> = async ({
|
|
8
|
+
ctx,
|
|
9
|
+
req,
|
|
10
|
+
origin,
|
|
11
|
+
}) => {
|
|
12
|
+
let pluginName = origin || "genericAuthPlugin";
|
|
13
|
+
let repo = ctx.repos[(<any>ctx.plugins)[pluginName].repoName];
|
|
20
14
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
);
|
|
25
|
-
}
|
|
15
|
+
if (ctx.plugins.genericAuthPlugin.passwordResetSettings == null) {
|
|
16
|
+
return internalServerError("Password reset settings is needed to use password-reset");
|
|
17
|
+
}
|
|
26
18
|
|
|
27
|
-
|
|
28
|
-
(<any>ctx.plugins)[pluginName].passwordResetSettings.code;
|
|
19
|
+
const { jwtSecret /*, numberOfDigits, lifeTime*/ } = (<any>ctx.plugins)[pluginName].passwordResetSettings.code;
|
|
29
20
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
21
|
+
const resp = await ctx.plugins.genericAuthPlugin.passwordResetComplete(
|
|
22
|
+
repo,
|
|
23
|
+
<JwtAuthPlugin>ctx.auth,
|
|
24
|
+
jwtSecret,
|
|
25
|
+
req.body.passwordResetToken,
|
|
26
|
+
req.body.code,
|
|
27
|
+
req.body.password,
|
|
28
|
+
ctx.plugins.genericAuthPlugin.createPasswordHashAndSaltMethod,
|
|
29
|
+
ctx.plugins.genericAuthPlugin.passwordResetSettings.passwordResetReusableTokens
|
|
30
|
+
);
|
|
40
31
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
32
|
+
switch (resp.status) {
|
|
33
|
+
case "invalidCode":
|
|
34
|
+
return badRequest("Invalid validation code", resp.status);
|
|
35
|
+
case "passwordError":
|
|
36
|
+
return badRequest("Invalid password", resp.status);
|
|
37
|
+
case "userNotFound":
|
|
38
|
+
return notFound("User not found", resp.status);
|
|
39
|
+
}
|
|
40
|
+
return { data: resp, status: 200 };
|
|
50
41
|
};
|
|
51
42
|
|
|
52
43
|
export default postPasswordResetCompleteHandler;
|
|
@@ -76,7 +76,7 @@ const script = `
|
|
|
76
76
|
};
|
|
77
77
|
`;
|
|
78
78
|
|
|
79
|
-
const style
|
|
79
|
+
const style = ` * {
|
|
80
80
|
box-sizing: border-box;
|
|
81
81
|
font-family: Arial, Helvetica, sans-serif;
|
|
82
82
|
}
|
|
@@ -109,50 +109,46 @@ const style =` * {
|
|
|
109
109
|
`;
|
|
110
110
|
|
|
111
111
|
export async function handleUserPasswordResetForm(
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
112
|
+
_req: ExpressRequest,
|
|
113
|
+
res: ExpressResponse,
|
|
114
|
+
{ templateFile, completeUrl }: { templateFile?: string; completeUrl: string }
|
|
115
115
|
) {
|
|
116
|
-
|
|
116
|
+
const tpl = await readTemplate(templateFile);
|
|
117
117
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
118
|
+
const html = Handlebars.compile(tpl)({
|
|
119
|
+
completeUrl,
|
|
120
|
+
});
|
|
121
121
|
|
|
122
|
-
|
|
122
|
+
res.send(html);
|
|
123
123
|
}
|
|
124
124
|
|
|
125
125
|
export async function resetPasswordFormScript(req: ExpressRequest, res: ExpressResponse, { completeUrl }: { completeUrl: string }) {
|
|
126
126
|
res.header("Content-Type", "application/javascript");
|
|
127
|
-
const js = Handlebars.compile(script)({completeUrl});
|
|
127
|
+
const js = Handlebars.compile(script)({ completeUrl });
|
|
128
128
|
res.send(js);
|
|
129
129
|
}
|
|
130
130
|
|
|
131
131
|
export async function resetPasswordFormCss(res: ExpressResponse) {
|
|
132
|
-
|
|
133
|
-
|
|
132
|
+
res.header("Content-Type", "text/css");
|
|
133
|
+
res.send(style);
|
|
134
134
|
}
|
|
135
135
|
|
|
136
136
|
let cachedTemplate = "";
|
|
137
137
|
|
|
138
138
|
async function readTemplate(templateFilename?: string) {
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
}
|
|
152
|
-
} else {
|
|
153
|
-
cachedTemplate = defaultTemplate;
|
|
139
|
+
if (!cachedTemplate) {
|
|
140
|
+
if (templateFilename) {
|
|
141
|
+
try {
|
|
142
|
+
const buff = await fs.readFile(templateFilename);
|
|
143
|
+
cachedTemplate = buff.toString();
|
|
144
|
+
} catch (err) {
|
|
145
|
+
log.error("Failed reading template file for password reset", templateFilename, err);
|
|
146
|
+
throw err;
|
|
147
|
+
}
|
|
148
|
+
} else {
|
|
149
|
+
cachedTemplate = defaultTemplate;
|
|
150
|
+
}
|
|
154
151
|
}
|
|
155
|
-
}
|
|
156
152
|
|
|
157
|
-
|
|
153
|
+
return cachedTemplate;
|
|
158
154
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { EmailPluginContext } from "@flink-app/email-plugin";
|
|
2
2
|
import { FlinkContext, Handler, internalServerError } from "@flink-app/flink";
|
|
3
3
|
import { JwtAuthPlugin } from "@flink-app/jwt-auth-plugin";
|
|
4
4
|
import Handlebars from "handlebars";
|
|
@@ -7,7 +7,7 @@ import { UserPasswordResetStartReq } from "../schemas/UserPasswordResetStartReq"
|
|
|
7
7
|
import { UserPasswordResetStartResPublic } from "../schemas/UserPasswordResetStartResPublic";
|
|
8
8
|
|
|
9
9
|
const postPasswordResetStartHandler: Handler<
|
|
10
|
-
FlinkContext<genericAuthContext &
|
|
10
|
+
FlinkContext<genericAuthContext & EmailPluginContext>,
|
|
11
11
|
UserPasswordResetStartReq,
|
|
12
12
|
UserPasswordResetStartResPublic
|
|
13
13
|
> = async ({ ctx, req, origin }) => {
|
|
@@ -27,10 +27,18 @@ const postPasswordResetStartHandler: Handler<
|
|
|
27
27
|
|
|
28
28
|
const { jwtSecret, numberOfDigits, lifeTime } = genericAuthPlugin.passwordResetSettings.code;
|
|
29
29
|
|
|
30
|
-
const resp = await genericAuthPlugin.passwordResetStart(
|
|
30
|
+
const resp = await genericAuthPlugin.passwordResetStart(
|
|
31
|
+
repo,
|
|
32
|
+
<JwtAuthPlugin>ctx.auth,
|
|
33
|
+
jwtSecret,
|
|
34
|
+
req.body.username,
|
|
35
|
+
numberOfDigits,
|
|
36
|
+
lifeTime,
|
|
37
|
+
genericAuthPlugin.passwordResetSettings.passwordResetReusableTokens
|
|
38
|
+
);
|
|
31
39
|
|
|
32
40
|
if (resp.status != "success") {
|
|
33
|
-
|
|
41
|
+
return { data: { status: "success", passwordResetToken: resp.passwordResetToken } };
|
|
34
42
|
}
|
|
35
43
|
|
|
36
44
|
const emailCtx = {
|
|
@@ -40,7 +48,7 @@ const postPasswordResetStartHandler: Handler<
|
|
|
40
48
|
profile: resp.profile,
|
|
41
49
|
template: req.body.template,
|
|
42
50
|
additionalAuth: req.body.additionalAuth,
|
|
43
|
-
resetPasswordFormBaseUrl: genericAuthPlugin.passwordResetSettings.resetPasswordFormBaseUrl
|
|
51
|
+
resetPasswordFormBaseUrl: genericAuthPlugin.passwordResetSettings.resetPasswordFormBaseUrl,
|
|
44
52
|
};
|
|
45
53
|
|
|
46
54
|
let emailSettings = genericAuthPlugin.passwordResetSettings.email;
|
|
@@ -2,22 +2,19 @@ import { FlinkContext, Handler, notFound } from "@flink-app/flink";
|
|
|
2
2
|
import { genericAuthContext } from "../genericAuthContext";
|
|
3
3
|
import { UserProfile } from "../schemas/UserProfile";
|
|
4
4
|
|
|
5
|
-
const getProfileHandler: Handler<
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
> = async ({ ctx, req, origin }) => {
|
|
9
|
-
let pluginName = origin || "genericAuthPlugin";
|
|
10
|
-
let repo = ctx.repos[(<any>ctx.plugins)[pluginName].repoName];
|
|
5
|
+
const getProfileHandler: Handler<FlinkContext<genericAuthContext>, UserProfile> = async ({ ctx, req, origin }) => {
|
|
6
|
+
let pluginName = origin || "genericAuthPlugin";
|
|
7
|
+
let repo = ctx.repos[(<any>ctx.plugins)[pluginName].repoName];
|
|
11
8
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
9
|
+
let userId = req.user._id;
|
|
10
|
+
let user = await repo.getById(userId);
|
|
11
|
+
if (user == null) {
|
|
12
|
+
return notFound();
|
|
13
|
+
}
|
|
17
14
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
15
|
+
return {
|
|
16
|
+
data: user.profile,
|
|
17
|
+
};
|
|
21
18
|
};
|
|
22
19
|
|
|
23
20
|
export default getProfileHandler;
|
|
@@ -17,7 +17,7 @@ const putUserProfileHandler: Handler<FlinkContext<genericAuthContext>, UserProfi
|
|
|
17
17
|
...req.body,
|
|
18
18
|
};
|
|
19
19
|
|
|
20
|
-
await repo.
|
|
20
|
+
await repo.updateById(userId, { profile: updatedProfile });
|
|
21
21
|
|
|
22
22
|
user = await repo.getById(userId);
|
|
23
23
|
|
|
@@ -36,7 +36,7 @@ const postUserPushRegisterTokenHandler: Handler<FlinkContext<genericAuthContext>
|
|
|
36
36
|
user.pushNotificationTokens = user.pushNotificationTokens.filter((t) => t.deviceId === req.body.deviceId);
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
await repo.
|
|
39
|
+
await repo.updateById(user._id, {
|
|
40
40
|
pushNotificationTokens: user.pushNotificationTokens,
|
|
41
41
|
});
|
|
42
42
|
|
|
@@ -60,7 +60,7 @@ const postUserPushRegisterTokenHandler: Handler<FlinkContext<genericAuthContext>
|
|
|
60
60
|
} claimed this device`
|
|
61
61
|
);
|
|
62
62
|
|
|
63
|
-
await repo.
|
|
63
|
+
await repo.updateById(other._id, {
|
|
64
64
|
pushNotificationTokens: other.pushNotificationTokens,
|
|
65
65
|
});
|
|
66
66
|
} catch (e) {
|
|
@@ -4,29 +4,23 @@ import { PushNotificationToken } from "../schemas/PushNotificationToken";
|
|
|
4
4
|
import { PushNotificatioNTokenRes } from "../schemas/PushNotificationTokenRes";
|
|
5
5
|
import { User } from "../schemas/User";
|
|
6
6
|
|
|
7
|
-
const postUserRemoveTokenHandler: Handler<
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
PushNotificatioNTokenRes
|
|
11
|
-
> = async ({ ctx, req, origin }) => {
|
|
12
|
-
let pluginName = origin || "genericAuthPlugin";
|
|
13
|
-
let repo = ctx.repos[(<any>ctx.plugins)[pluginName].repoName];
|
|
7
|
+
const postUserRemoveTokenHandler: Handler<FlinkContext<genericAuthContext>, PushNotificationToken, PushNotificatioNTokenRes> = async ({ ctx, req, origin }) => {
|
|
8
|
+
let pluginName = origin || "genericAuthPlugin";
|
|
9
|
+
let repo = ctx.repos[(<any>ctx.plugins)[pluginName].repoName];
|
|
14
10
|
|
|
15
|
-
|
|
11
|
+
const user = <User>await repo.getById(req.user._id);
|
|
16
12
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
13
|
+
if (user == null) {
|
|
14
|
+
return notFound("User not found");
|
|
15
|
+
}
|
|
20
16
|
|
|
21
|
-
|
|
22
|
-
(t) => t.deviceId != req.body.deviceId
|
|
23
|
-
);
|
|
17
|
+
user.pushNotificationTokens = user.pushNotificationTokens.filter((t) => t.deviceId != req.body.deviceId);
|
|
24
18
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
19
|
+
await repo.updateById(user._id, {
|
|
20
|
+
pushNotificationTokens: user.pushNotificationTokens,
|
|
21
|
+
});
|
|
28
22
|
|
|
29
|
-
|
|
23
|
+
return { data: { status: "success" } };
|
|
30
24
|
};
|
|
31
25
|
|
|
32
26
|
export default postUserRemoveTokenHandler;
|
|
@@ -1,33 +1,22 @@
|
|
|
1
|
-
import {
|
|
2
|
-
FlinkContext,
|
|
3
|
-
Handler,
|
|
4
|
-
internalServerError,
|
|
5
|
-
notFound,
|
|
6
|
-
} from "@flink-app/flink";
|
|
1
|
+
import { FlinkContext, Handler, internalServerError, notFound } from "@flink-app/flink";
|
|
7
2
|
import { genericAuthContext } from "../genericAuthContext";
|
|
8
3
|
import { UserTokenRes } from "../schemas/UserTokenRes";
|
|
9
4
|
|
|
10
|
-
const getUserTokenHandler: Handler<
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
> = async ({ ctx, req, origin }) => {
|
|
14
|
-
let pluginName = origin || "genericAuthPlugin";
|
|
15
|
-
let repo = ctx.repos[(<any>ctx.plugins)[pluginName].repoName];
|
|
5
|
+
const getUserTokenHandler: Handler<FlinkContext<genericAuthContext>, UserTokenRes> = async ({ ctx, req, origin }) => {
|
|
6
|
+
let pluginName = origin || "genericAuthPlugin";
|
|
7
|
+
let repo = ctx.repos[(<any>ctx.plugins)[pluginName].repoName];
|
|
16
8
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
9
|
+
const user = await repo.getById(req.user._id);
|
|
10
|
+
if (user == null) {
|
|
11
|
+
return notFound("User not found");
|
|
12
|
+
}
|
|
13
|
+
if (ctx.auth == null) {
|
|
14
|
+
return internalServerError();
|
|
15
|
+
}
|
|
24
16
|
|
|
25
|
-
|
|
26
|
-
{ username: user.username.toLowerCase(), _id: user._id },
|
|
27
|
-
user.roles
|
|
28
|
-
);
|
|
17
|
+
const token = await ctx.auth.createToken({ username: user.username.toLowerCase(), _id: user._id }, user.roles);
|
|
29
18
|
|
|
30
|
-
|
|
19
|
+
return { data: { token: token } };
|
|
31
20
|
};
|
|
32
21
|
|
|
33
22
|
export default getUserTokenHandler;
|
package/src/init.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FlinkApp, HttpMethod, ExpressRequest, ExpressResponse } from "@flink-app/flink";
|
|
1
|
+
import { FlinkApp, HttpMethod, ExpressRequest, ExpressResponse, loadPluginSchemas } from "@flink-app/flink";
|
|
2
2
|
import * as userLoginHandler from "./handlers/UserLogin";
|
|
3
3
|
import * as userLoginByTokenHandler from "./handlers/UserLoginByToken";
|
|
4
4
|
import * as userCreateHandler from "./handlers/UserCreate";
|
|
@@ -21,6 +21,17 @@ export function init(app: FlinkApp<any>, options: GenericAuthPluginOptions) {
|
|
|
21
21
|
|
|
22
22
|
if (options.baseUrl == null) options.baseUrl = "/user";
|
|
23
23
|
|
|
24
|
+
// Load plugin schemas and register them for $ref resolution
|
|
25
|
+
const pluginId = options.pluginId || "genericAuth";
|
|
26
|
+
const pluginSchemas = loadPluginSchemas("@flink-app/generic-auth-plugin");
|
|
27
|
+
const allSchemas = pluginSchemas.getAllSchemas(pluginId);
|
|
28
|
+
if (Object.keys(allSchemas).length > 0) {
|
|
29
|
+
app.registerSchemas(pluginId, allSchemas);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/** Helper to get prefixed handler schemas by file path */
|
|
33
|
+
const schemas = (filePath: string) => pluginSchemas.getHandlerSchemas(pluginId, filePath);
|
|
34
|
+
|
|
24
35
|
if (options.enableRoutes) {
|
|
25
36
|
if (options.enableUserLogin) {
|
|
26
37
|
app.addHandler(userLoginHandler, {
|
|
@@ -28,6 +39,7 @@ export function init(app: FlinkApp<any>, options: GenericAuthPluginOptions) {
|
|
|
28
39
|
path: options.baseUrl + "/login",
|
|
29
40
|
docs: "Authenticates a user",
|
|
30
41
|
origin: options.pluginId,
|
|
42
|
+
...schemas("src/handlers/UserLogin.ts"),
|
|
31
43
|
});
|
|
32
44
|
}
|
|
33
45
|
if (options.sms) {
|
|
@@ -36,6 +48,7 @@ export function init(app: FlinkApp<any>, options: GenericAuthPluginOptions) {
|
|
|
36
48
|
path: options.baseUrl + "/login-by-token",
|
|
37
49
|
docs: "Authenticates a user by token",
|
|
38
50
|
origin: options.pluginId,
|
|
51
|
+
...schemas("src/handlers/UserLoginByToken.ts"),
|
|
39
52
|
});
|
|
40
53
|
}
|
|
41
54
|
if (options.enableUserCreation) {
|
|
@@ -44,6 +57,7 @@ export function init(app: FlinkApp<any>, options: GenericAuthPluginOptions) {
|
|
|
44
57
|
path: options.baseUrl + "/create",
|
|
45
58
|
docs: "Creates a new user",
|
|
46
59
|
origin: options.pluginId,
|
|
60
|
+
...schemas("src/handlers/UserCreate.ts"),
|
|
47
61
|
});
|
|
48
62
|
}
|
|
49
63
|
|
|
@@ -53,6 +67,7 @@ export function init(app: FlinkApp<any>, options: GenericAuthPluginOptions) {
|
|
|
53
67
|
docs: "Gets the user profile",
|
|
54
68
|
permissions: "authenticated",
|
|
55
69
|
origin: options.pluginId,
|
|
70
|
+
...schemas("src/handlers/UserProfileGet.ts"),
|
|
56
71
|
});
|
|
57
72
|
|
|
58
73
|
app.addHandler(getUserTokenHandler, {
|
|
@@ -61,6 +76,7 @@ export function init(app: FlinkApp<any>, options: GenericAuthPluginOptions) {
|
|
|
61
76
|
docs: "Gets a refreshed token for the user",
|
|
62
77
|
permissions: "authenticated",
|
|
63
78
|
origin: options.pluginId,
|
|
79
|
+
...schemas("src/handlers/UserToken.ts"),
|
|
64
80
|
});
|
|
65
81
|
|
|
66
82
|
if (options.enableProfileUpdate) {
|
|
@@ -70,6 +86,7 @@ export function init(app: FlinkApp<any>, options: GenericAuthPluginOptions) {
|
|
|
70
86
|
docs: "Updates the user profile",
|
|
71
87
|
permissions: "authenticated",
|
|
72
88
|
origin: options.pluginId,
|
|
89
|
+
...schemas("src/handlers/UserProfilePut.ts"),
|
|
73
90
|
});
|
|
74
91
|
}
|
|
75
92
|
|
|
@@ -80,6 +97,7 @@ export function init(app: FlinkApp<any>, options: GenericAuthPluginOptions) {
|
|
|
80
97
|
docs: "Updates the user password",
|
|
81
98
|
permissions: "authenticated",
|
|
82
99
|
origin: options.pluginId,
|
|
100
|
+
...schemas("src/handlers/UserPasswordPut.ts"),
|
|
83
101
|
});
|
|
84
102
|
}
|
|
85
103
|
|
|
@@ -89,6 +107,7 @@ export function init(app: FlinkApp<any>, options: GenericAuthPluginOptions) {
|
|
|
89
107
|
path: options.baseUrl + "/password/reset",
|
|
90
108
|
docs: "Start the password reset process for a user",
|
|
91
109
|
origin: options.pluginId,
|
|
110
|
+
...schemas("src/handlers/UserPasswordResetStart.ts"),
|
|
92
111
|
});
|
|
93
112
|
|
|
94
113
|
app.addHandler(postPasswordResetCompleteHandler, {
|
|
@@ -96,6 +115,7 @@ export function init(app: FlinkApp<any>, options: GenericAuthPluginOptions) {
|
|
|
96
115
|
path: options.baseUrl + "/password/reset/complete",
|
|
97
116
|
docs: "Completes a password reset for a user",
|
|
98
117
|
origin: options.pluginId,
|
|
118
|
+
...schemas("src/handlers/UserPasswordResetComplete.ts"),
|
|
99
119
|
});
|
|
100
120
|
|
|
101
121
|
if (options.passwordResetSettings?.enablePasswordResetForm) {
|
|
@@ -122,6 +142,7 @@ export function init(app: FlinkApp<any>, options: GenericAuthPluginOptions) {
|
|
|
122
142
|
docs: "Register a push notification on current user",
|
|
123
143
|
permissions: "authenticated",
|
|
124
144
|
origin: options.pluginId,
|
|
145
|
+
...schemas("src/handlers/UserPushRegisterToken.ts"),
|
|
125
146
|
});
|
|
126
147
|
|
|
127
148
|
app.addHandler(postUserRemoveTokenHandler, {
|
|
@@ -130,6 +151,7 @@ export function init(app: FlinkApp<any>, options: GenericAuthPluginOptions) {
|
|
|
130
151
|
docs: "Removes a push notification token from current user",
|
|
131
152
|
permissions: "authenticated",
|
|
132
153
|
origin: options.pluginId,
|
|
154
|
+
...schemas("src/handlers/UserPushRemoveToken.ts"),
|
|
133
155
|
});
|
|
134
156
|
}
|
|
135
157
|
}
|
package/tsconfig.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
// Generated Sun Feb 01 2026 17:37:47 GMT+0100 (Central European Standard Time)
|