@flink-app/generic-auth-plugin 2.0.0-alpha.73 → 2.0.0-alpha.74
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 +1 -1
- package/.flink/generatedJobs.ts +1 -1
- package/.flink/generatedRepos.ts +1 -1
- package/.flink/generatedTools.ts +1 -1
- package/.flink/start.ts +1 -1
- package/CHANGELOG.md +12 -0
- package/dist/.flink/generatedAgents.js +1 -1
- package/dist/.flink/generatedAgents.js.map +1 -1
- package/dist/.flink/generatedHandlers.js +1 -1
- package/dist/.flink/generatedHandlers.js.map +1 -1
- package/dist/.flink/generatedJobs.js +1 -1
- package/dist/.flink/generatedJobs.js.map +1 -1
- package/dist/.flink/generatedRepos.js +1 -1
- package/dist/.flink/generatedRepos.js.map +1 -1
- package/dist/.flink/generatedTools.js +1 -1
- package/dist/.flink/generatedTools.js.map +1 -1
- package/dist/.flink/schema-manifest.json +1 -1
- package/dist/.flink/start.js +1 -1
- package/dist/.flink/start.js.map +1 -1
- package/dist/src/coreFunctions.js +3 -3
- package/dist/src/coreFunctions.js.map +1 -1
- package/dist/src/handlers/Management/PutUserPasswordByUserid.js +1 -1
- package/dist/src/handlers/Management/PutUserPasswordByUserid.js.map +1 -1
- package/dist/src/handlers/Management/PutUserProfileByUserid.js +1 -1
- package/dist/src/handlers/Management/PutUserProfileByUserid.js.map +1 -1
- package/dist/src/handlers/Management/PutUserProfileByUseridAppend.js +1 -1
- package/dist/src/handlers/Management/PutUserProfileByUseridAppend.js.map +1 -1
- package/dist/src/handlers/Management/PutUserRolesByUserid.js +1 -1
- package/dist/src/handlers/Management/PutUserRolesByUserid.js.map +1 -1
- package/dist/src/handlers/Management/PutUserUsernameByUserid.js +1 -1
- package/dist/src/handlers/Management/PutUserUsernameByUserid.js.map +1 -1
- package/dist/src/handlers/UserProfilePut.js +1 -1
- package/dist/src/handlers/UserProfilePut.js.map +1 -1
- package/dist/src/handlers/UserPushRegisterToken.js +2 -2
- package/dist/src/handlers/UserPushRegisterToken.js.map +1 -1
- package/dist/src/handlers/UserPushRemoveToken.js +1 -1
- package/dist/src/handlers/UserPushRemoveToken.js.map +1 -1
- package/package.json +7 -7
- package/src/coreFunctions.ts +3 -3
- package/src/handlers/Management/PutUserPasswordByUserid.ts +1 -1
- package/src/handlers/Management/PutUserProfileByUserid.ts +1 -1
- package/src/handlers/Management/PutUserProfileByUseridAppend.ts +1 -1
- package/src/handlers/Management/PutUserRolesByUserid.ts +1 -1
- package/src/handlers/Management/PutUserUsernameByUserid.ts +1 -1
- package/src/handlers/UserProfilePut.ts +1 -1
- package/src/handlers/UserPushRegisterToken.ts +2 -2
- package/src/handlers/UserPushRemoveToken.ts +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Generated
|
|
1
|
+
// Generated Mon Mar 23 2026 11:57:44 GMT+0100 (Central European Standard Time)
|
|
2
2
|
import { autoRegisteredAgents } from "@flink-app/flink";
|
|
3
3
|
export const agents = [];
|
|
4
4
|
autoRegisteredAgents.push(...agents);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Generated
|
|
1
|
+
// Generated Mon Mar 23 2026 11:57:44 GMT+0100 (Central European Standard Time)
|
|
2
2
|
import { autoRegisteredHandlers, HttpMethod } from "@flink-app/flink";
|
|
3
3
|
import * as UserCreate_0 from "../src/handlers/UserCreate";
|
|
4
4
|
import * as UserLogin_1 from "../src/handlers/UserLogin";
|
package/.flink/generatedJobs.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Generated
|
|
1
|
+
// Generated Mon Mar 23 2026 11:57:44 GMT+0100 (Central European Standard Time)
|
|
2
2
|
import { autoRegisteredJobs } from "@flink-app/flink";
|
|
3
3
|
export const jobs = [];
|
|
4
4
|
autoRegisteredJobs.push(...jobs);
|
package/.flink/generatedRepos.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Generated
|
|
1
|
+
// Generated Mon Mar 23 2026 11:57:44 GMT+0100 (Central European Standard Time)
|
|
2
2
|
import { autoRegisteredRepos } from "@flink-app/flink";
|
|
3
3
|
export const repos = [];
|
|
4
4
|
autoRegisteredRepos.push(...repos);
|
package/.flink/generatedTools.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Generated
|
|
1
|
+
// Generated Mon Mar 23 2026 11:57:44 GMT+0100 (Central European Standard Time)
|
|
2
2
|
import { autoRegisteredTools } from "@flink-app/flink";
|
|
3
3
|
export const tools = [];
|
|
4
4
|
autoRegisteredTools.push(...tools);
|
package/.flink/start.ts
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @flink-app/generic-auth-plugin
|
|
2
2
|
|
|
3
|
+
## 2.0.0-alpha.74
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies
|
|
8
|
+
- Updated dependencies
|
|
9
|
+
- @flink-app/flink@2.0.0-alpha.74
|
|
10
|
+
- @flink-app/email-plugin@2.0.0-alpha.74
|
|
11
|
+
- @flink-app/jwt-auth-plugin@2.0.0-alpha.74
|
|
12
|
+
- @flink-app/management-api-plugin@2.0.0-alpha.74
|
|
13
|
+
- @flink-app/sms-plugin@2.0.0-alpha.74
|
|
14
|
+
|
|
3
15
|
## 2.0.0-alpha.73
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/joel/projects/flink/flink-framework/packages/generic-auth-plugin/.flink/generatedAgents.ts"],"sourcesContent":["// Generated
|
|
1
|
+
{"version":3,"sources":["/Users/joel/projects/flink/flink-framework/packages/generic-auth-plugin/.flink/generatedAgents.ts"],"sourcesContent":["// Generated Mon Mar 23 2026 11:57:44 GMT+0100 (Central European Standard Time)\nimport { autoRegisteredAgents } from \"@flink-app/flink\";\nexport const agents = [];\nautoRegisteredAgents.push(...agents);\n "],"names":["agents","autoRegisteredAgents","push"],"mappings":"AAAA,+EAA+E;;;;;+BAElEA;;;eAAAA;;;uBADwB;AAC9B,MAAMA,SAAS,EAAE;AACxBC,2BAAoB,CAACC,IAAI,IAAIF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/joel/projects/flink/flink-framework/packages/generic-auth-plugin/.flink/generatedHandlers.ts"],"sourcesContent":["// Generated
|
|
1
|
+
{"version":3,"sources":["/Users/joel/projects/flink/flink-framework/packages/generic-auth-plugin/.flink/generatedHandlers.ts"],"sourcesContent":["// Generated Mon Mar 23 2026 11:57:44 GMT+0100 (Central European Standard Time)\nimport { autoRegisteredHandlers, HttpMethod } from \"@flink-app/flink\";\nimport * as UserCreate_0 from \"../src/handlers/UserCreate\";\nimport * as UserLogin_1 from \"../src/handlers/UserLogin\";\nimport * as UserLoginByToken_2 from \"../src/handlers/UserLoginByToken\";\nimport * as UserPasswordPut_3 from \"../src/handlers/UserPasswordPut\";\nimport * as UserPasswordResetComplete_4 from \"../src/handlers/UserPasswordResetComplete\";\nimport * as UserPasswordResetForm_5 from \"../src/handlers/UserPasswordResetForm\";\nimport * as UserPasswordResetStart_6 from \"../src/handlers/UserPasswordResetStart\";\nimport * as UserProfileGet_7 from \"../src/handlers/UserProfileGet\";\nimport * as UserProfilePut_8 from \"../src/handlers/UserProfilePut\";\nimport * as UserPushRegisterToken_9 from \"../src/handlers/UserPushRegisterToken\";\nimport * as UserPushRemoveToken_10 from \"../src/handlers/UserPushRemoveToken\";\nimport * as UserToken_11 from \"../src/handlers/UserToken\";\nimport * as DeleteUserByUserid_12 from \"../src/handlers/Management/DeleteUserByUserid\";\nimport * as GetSchema_13 from \"../src/handlers/Management/GetSchema\";\nimport * as GetUser_14 from \"../src/handlers/Management/GetUser\";\nimport * as GetUserByUserid_15 from \"../src/handlers/Management/GetUserByUserid\";\nimport * as GetUserViewByUserid_16 from \"../src/handlers/Management/GetUserViewByUserid\";\nimport * as PutUserPasswordByUserid_17 from \"../src/handlers/Management/PutUserPasswordByUserid\";\nimport * as PutUserProfileByUserid_18 from \"../src/handlers/Management/PutUserProfileByUserid\";\nimport * as PutUserProfileByUseridAppend_19 from \"../src/handlers/Management/PutUserProfileByUseridAppend\";\nimport * as PutUserRolesByUserid_20 from \"../src/handlers/Management/PutUserRolesByUserid\";\nimport * as PutUserUsernameByUserid_21 from \"../src/handlers/Management/PutUserUsernameByUserid\";\n\nexport const handlers = [];\nautoRegisteredHandlers.push(...handlers);\n "],"names":["handlers","autoRegisteredHandlers","push"],"mappings":"AAAA,+EAA+E;;;;;+BAyBlEA;;;eAAAA;;;uBAxBsC;AAwB5C,MAAMA,WAAW,EAAE;AAC1BC,6BAAsB,CAACC,IAAI,IAAIF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/joel/projects/flink/flink-framework/packages/generic-auth-plugin/.flink/generatedJobs.ts"],"sourcesContent":["// Generated
|
|
1
|
+
{"version":3,"sources":["/Users/joel/projects/flink/flink-framework/packages/generic-auth-plugin/.flink/generatedJobs.ts"],"sourcesContent":["// Generated Mon Mar 23 2026 11:57:44 GMT+0100 (Central European Standard Time)\nimport { autoRegisteredJobs } from \"@flink-app/flink\";\nexport const jobs = [];\nautoRegisteredJobs.push(...jobs);\n "],"names":["jobs","autoRegisteredJobs","push"],"mappings":"AAAA,+EAA+E;;;;;+BAElEA;;;eAAAA;;;uBADsB;AAC5B,MAAMA,OAAO,EAAE;AACtBC,yBAAkB,CAACC,IAAI,IAAIF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/joel/projects/flink/flink-framework/packages/generic-auth-plugin/.flink/generatedRepos.ts"],"sourcesContent":["// Generated
|
|
1
|
+
{"version":3,"sources":["/Users/joel/projects/flink/flink-framework/packages/generic-auth-plugin/.flink/generatedRepos.ts"],"sourcesContent":["// Generated Mon Mar 23 2026 11:57:44 GMT+0100 (Central European Standard Time)\n import { autoRegisteredRepos } from \"@flink-app/flink\";\n export const repos = [];\n autoRegisteredRepos.push(...repos);\n "],"names":["repos","autoRegisteredRepos","push"],"mappings":"AAAA,+EAA+E;;;;;+BAEhEA;;;eAAAA;;;uBADuB;AAC7B,MAAMA,QAAQ,EAAE;AACvBC,0BAAmB,CAACC,IAAI,IAAIF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/joel/projects/flink/flink-framework/packages/generic-auth-plugin/.flink/generatedTools.ts"],"sourcesContent":["// Generated
|
|
1
|
+
{"version":3,"sources":["/Users/joel/projects/flink/flink-framework/packages/generic-auth-plugin/.flink/generatedTools.ts"],"sourcesContent":["// Generated Mon Mar 23 2026 11:57:44 GMT+0100 (Central European Standard Time)\nimport { autoRegisteredTools } from \"@flink-app/flink\";\nexport const tools = [];\nautoRegisteredTools.push(...tools);\n "],"names":["tools","autoRegisteredTools","push"],"mappings":"AAAA,+EAA+E;;;;;+BAElEA;;;eAAAA;;;uBADuB;AAC7B,MAAMA,QAAQ,EAAE;AACvBC,0BAAmB,CAACC,IAAI,IAAIF"}
|
package/dist/.flink/start.js
CHANGED
package/dist/.flink/start.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/joel/projects/flink/flink-framework/packages/generic-auth-plugin/.flink/start.ts"],"sourcesContent":["// Generated
|
|
1
|
+
{"version":3,"sources":["/Users/joel/projects/flink/flink-framework/packages/generic-auth-plugin/.flink/start.ts"],"sourcesContent":["// Generated Mon Mar 23 2026 11:57:44 GMT+0100 (Central European Standard Time)\nimport \"./generatedHandlers\";\nimport \"./generatedRepos\";\nimport \"./generatedTools\";\nimport \"./generatedAgents\";\nimport \"./generatedJobs\";\nimport \"../src/index\";\nexport default {}; // Export an empty object to make it a module\n"],"names":[],"mappings":"AAAA,+EAA+E;;;;;+BAO/E,UAAmB,6CAA6C;;;;eAAhE;;;QANO;QACA;QACA;QACA;QACA;QACA;MACP,WAAe,CAAC"}
|
|
@@ -270,7 +270,7 @@ async function changePassword(repo, auth, userId, newPassword, createPasswordHas
|
|
|
270
270
|
status: "passwordError"
|
|
271
271
|
};
|
|
272
272
|
}
|
|
273
|
-
await repo.
|
|
273
|
+
await repo.updateById(userId, {
|
|
274
274
|
password: passwordAndSalt.hash,
|
|
275
275
|
salt: passwordAndSalt.salt
|
|
276
276
|
});
|
|
@@ -314,7 +314,7 @@ async function passwordResetStart(repo, auth, jwtSecret, username, numberOfDigit
|
|
|
314
314
|
secret = jwtSecret + ":" + code;
|
|
315
315
|
} else {
|
|
316
316
|
secret = jwtSecret + ":" + code + ":" + pwdResetStartedAt;
|
|
317
|
-
await repo.
|
|
317
|
+
await repo.updateById(user._id, {
|
|
318
318
|
pwdResetStartedAt
|
|
319
319
|
});
|
|
320
320
|
}
|
|
@@ -371,7 +371,7 @@ async function passwordResetComplete(repo, auth, jwtSecret, passwordResetToken,
|
|
|
371
371
|
status: "passwordError"
|
|
372
372
|
};
|
|
373
373
|
}
|
|
374
|
-
await repo.
|
|
374
|
+
await repo.updateById(user._id, {
|
|
375
375
|
password: passwordAndSalt.hash,
|
|
376
376
|
salt: passwordAndSalt.salt,
|
|
377
377
|
pwdResetStartedAt: null
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/joel/projects/flink/flink-framework/packages/generic-auth-plugin/src/coreFunctions.ts"],"sourcesContent":["import { FlinkRepo, FlinkAuthUser, log, FlinkRequest } from \"@flink-app/flink\";\nimport { JwtAuthPlugin, jwtAuthPlugin } from \"@flink-app/jwt-auth-plugin\";\n\nimport { User } from \"./schemas/User\";\nimport { UserCreateRes } from \"./schemas/UserCreateRes\";\nimport { UserLoginRes } from \"./schemas/UserLoginRes\";\nimport { UserProfile } from \"./schemas/UserProfile\";\nimport { UserPasswordChangeRes } from \"./schemas/UserPasswordChangeRes\";\nimport { UserPasswordResetStartRes } from \"./schemas/UserPasswordResetStartRes\";\nimport { UserPasswordResetCompleteRes } from \"./schemas/UserPasswordResetCompleteRes\";\n\nimport jsonwebtoken from \"jsonwebtoken\";\nimport { GenericAuthsmsOptions } from \"./genericAuthPluginOptions\";\n\nexport function getJtwTokenPlugin(secret: string, rolePermissions?: { [role: string]: string[] }, passwordPolicy?: RegExp, tokenTTL?: number) {\n if (passwordPolicy == undefined) {\n passwordPolicy = /.{1,}$/;\n }\n if (rolePermissions == undefined) {\n rolePermissions = {};\n }\n if (rolePermissions[\"user\"] == null) {\n rolePermissions[\"user\"] = [];\n }\n if (!rolePermissions[\"user\"].includes(\"authenticated\")) rolePermissions[\"user\"].push(\"authenticated\");\n\n return jwtAuthPlugin({\n secret,\n getUser: (tokenData: any) => {\n return new Promise<FlinkAuthUser>((res) => {\n res({\n username: tokenData.username,\n _id: tokenData._id,\n });\n });\n },\n passwordPolicy,\n rolePermissions,\n tokenTTL,\n });\n}\n\nexport async function createUser(\n repo: FlinkRepo<any, User>,\n auth: JwtAuthPlugin,\n username: string,\n password: string,\n authentificationMethod: \"password\" | \"sms\" | \"bankid\",\n roles: string[],\n profile: UserProfile,\n createPasswordHashAndSaltMethod?: {\n (password: string): Promise<{ hash: string; salt: string } | null>;\n },\n onUserCreated?: {\n (user: User): Promise<void>;\n },\n personalNumber?: string\n): Promise<UserCreateRes> {\n if (!roles.includes(\"user\")) roles.push(\"user\");\n\n const existingUser = await repo.getOne({ username: username.toLowerCase() });\n if (existingUser != null) {\n return {\n status: \"userExists\",\n };\n }\n let userData: Omit<User, \"_id\"> = {\n username: username.toLowerCase(),\n roles,\n profile,\n authentificationMethod,\n pushNotificationTokens: [],\n };\n\n if (personalNumber) {\n userData.personalNumber = personalNumber;\n }\n\n if (authentificationMethod == \"bankid\") {\n if (!personalNumber) {\n log.warn(\"BankID login requested but no personal number found for user\");\n return { status: \"error\" };\n }\n }\n\n if (authentificationMethod == \"password\") {\n let passwordAndSalt = null;\n if (createPasswordHashAndSaltMethod != null) {\n passwordAndSalt = await createPasswordHashAndSaltMethod(password);\n } else {\n passwordAndSalt = await auth.createPasswordHashAndSalt(password);\n }\n\n if (passwordAndSalt == null) {\n return {\n status: \"passwordError\",\n };\n }\n userData.password = passwordAndSalt.hash;\n userData.salt = passwordAndSalt.salt;\n }\n\n const user = await repo.create(userData);\n\n if (onUserCreated) {\n await onUserCreated(user);\n }\n\n const token = await auth.createToken({ username: username.toLowerCase(), _id: user._id }, roles);\n\n if (user.authentificationMethod == \"sms\") {\n return {\n status: \"success\",\n };\n }\n\n return {\n status: \"success\",\n user: {\n _id: user._id,\n token: token,\n username: username.toLowerCase(),\n },\n };\n}\n\nexport async function loginByToken(repo: FlinkRepo<any, User>, auth: JwtAuthPlugin, token: string, code: string, jwtSecret: string): Promise<UserLoginRes> {\n let payload: { type: string; userId: string };\n try {\n payload = jsonwebtoken.verify(token, jwtSecret + \":\" + code) as { type: string; userId: string };\n } catch (ex) {\n return { status: \"failed\" };\n }\n\n if (payload.type != \"smsLogin\") {\n return { status: \"failed\" };\n }\n\n const user = await repo.getById(payload.userId);\n if (user == null) {\n return { status: \"failed\" };\n }\n\n const authToken = await auth.createToken({ username: user.username.toLowerCase(), _id: user._id }, user.roles);\n\n return {\n status: \"success\",\n user: {\n _id: user._id,\n username: user.username,\n token: authToken,\n profile: user.profile,\n },\n };\n}\n\nexport async function loginUser(\n repo: FlinkRepo<any, User>,\n auth: JwtAuthPlugin,\n username: string,\n password: string | undefined,\n validatePasswordMethod?: {\n (password: string, hash: string, salt: string): Promise<boolean>;\n },\n smsOptions?: GenericAuthsmsOptions,\n onSuccessfulLogin?: {\n (user: User, req?: FlinkRequest): Promise<void>;\n },\n req?: FlinkRequest\n): Promise<UserLoginRes> {\n const user = await repo.getOne({ username: username.toLowerCase() });\n if (user == null) {\n return { status: \"failed\" };\n }\n\n let valid: boolean = false;\n\n if (user.authentificationMethod == \"password\") {\n if (password == null) password = \"\";\n\n if (validatePasswordMethod) {\n valid = await validatePasswordMethod(password, <string>user.password, <string>user.salt);\n\n //If not valid, try to use default auth\n if (!valid) {\n try {\n valid = await auth.validatePassword(password, <string>user.password, <string>user.salt);\n } catch (ex) {}\n }\n } else {\n valid = await auth.validatePassword(password, <string>user.password, <string>user.salt);\n }\n }\n if (user.authentificationMethod == \"sms\") {\n if (!smsOptions) throw \"SMS options must be specified to use SMS login\";\n let code = smsOptions.codeType == \"numeric\" ? generate(smsOptions.codeLength) : generateString(smsOptions.codeLength);\n smsOptions.smsClient.send({\n to: [user.username],\n from: smsOptions.smsFrom,\n message: smsOptions.smsMessage.replace(\"{{code}}\", code),\n });\n\n const payload = {\n type: \"smsLogin\",\n userId: user._id,\n };\n\n const secret = smsOptions.jwtToken + \":\" + code;\n\n const options: jsonwebtoken.SignOptions = {\n expiresIn: \"1h\",\n };\n\n const token = jsonwebtoken.sign(payload, secret, options);\n\n return {\n status: \"success\",\n validationToken: token,\n };\n }\n if (user.authentificationMethod == \"bankid\") {\n if (!user.personalNumber) {\n log.warn(\"BankID login requested but no personal number found for user\");\n return { status: \"failed\" };\n }\n\n log.warn(\"BankID login required to be handled in other way, i.e. using flink bankid plugin\");\n return { status: \"failed\" };\n }\n\n if (valid) {\n const token = await auth.createToken({ username: username.toLowerCase(), _id: user._id }, user.roles);\n\n if (onSuccessfulLogin) {\n await onSuccessfulLogin(user, req);\n }\n\n return {\n status: \"success\",\n user: {\n _id: user._id,\n username: user.username,\n token,\n profile: user.profile,\n },\n };\n } else {\n return { status: \"failed\" };\n }\n}\n\nexport async function changePassword(\n repo: FlinkRepo<any, User>,\n auth: JwtAuthPlugin,\n userId: string,\n newPassword: string,\n createPasswordHashAndSaltMethod?: {\n (password: string): Promise<{ hash: string; salt: string } | null>;\n }\n): Promise<UserPasswordChangeRes> {\n const user = await repo.getById(userId);\n if (user == null) {\n return { status: \"failed\" };\n }\n\n if (user.authentificationMethod != \"password\") {\n return { status: \"failed\" };\n }\n\n let passwordAndSalt = null;\n\n if (createPasswordHashAndSaltMethod == null) {\n passwordAndSalt = await auth.createPasswordHashAndSalt(newPassword);\n } else {\n passwordAndSalt = await createPasswordHashAndSaltMethod(newPassword);\n }\n\n if (passwordAndSalt == null) {\n return {\n status: \"passwordError\",\n };\n }\n\n await repo.updateOne(userId, {\n password: passwordAndSalt.hash,\n salt: passwordAndSalt.salt,\n });\n\n return { status: \"success\" };\n}\n\nexport async function passwordResetStart(\n repo: FlinkRepo<any, User>,\n auth: JwtAuthPlugin,\n jwtSecret: string,\n username: string,\n numberOfDigits?: number,\n lifeTime?: string,\n passwordResetReusableTokens: boolean = true\n): Promise<UserPasswordResetStartRes> {\n const user = await repo.getOne({ username: username.toLowerCase() });\n\n const fakepayload = {\n type: \"passwordReset\",\n username: username.toLocaleLowerCase(),\n };\n const fakeToken = jsonwebtoken.sign(fakepayload, \"fake_payload\", { expiresIn: lifeTime });\n\n if (user == null) {\n return { status: \"userNotFound\", passwordResetToken: fakeToken };\n }\n\n if (user.authentificationMethod != \"password\") {\n return { status: \"userNotFound\", passwordResetToken: fakeToken };\n }\n\n if (numberOfDigits == null) numberOfDigits = 6;\n if (lifeTime == null) lifeTime = \"1h\";\n\n const payload = {\n type: \"passwordReset\",\n username: username.toLocaleLowerCase(),\n };\n const code = generate(numberOfDigits);\n\n const pwdResetStartedAt = new Date().toISOString();\n let secret;\n if (passwordResetReusableTokens) {\n secret = jwtSecret + \":\" + code;\n } else {\n secret = jwtSecret + \":\" + code + \":\" + pwdResetStartedAt;\n await repo.updateOne(user._id, { pwdResetStartedAt });\n }\n\n const options: jsonwebtoken.SignOptions = {\n expiresIn: lifeTime,\n };\n\n const token = jsonwebtoken.sign(payload, secret, options);\n\n return {\n status: \"success\",\n passwordResetToken: token,\n code,\n profile: user.profile,\n };\n}\n\nexport async function passwordResetComplete(\n repo: FlinkRepo<any, User>,\n auth: JwtAuthPlugin,\n jwtSecret: string,\n passwordResetToken: string,\n code: string,\n newPassword: string,\n createPasswordHashAndSaltMethod?: {\n (password: string): Promise<{ hash: string; salt: string } | null>;\n },\n passwordResetReusableTokens: boolean = true\n): Promise<UserPasswordResetCompleteRes> {\n const payload = <{ username: string }>jsonwebtoken.decode(passwordResetToken);\n\n if (!payload || !payload.username) return { status: \"invalidCode\" };\n\n const user = await repo.getOne({ username: payload.username });\n\n if (!user || user == null || user.authentificationMethod != \"password\") {\n return { status: \"userNotFound\" };\n }\n\n let secret;\n if (passwordResetReusableTokens === true) {\n secret = jwtSecret + \":\" + code;\n } else {\n if (!user.pwdResetStartedAt || user.pwdResetStartedAt === null) {\n return { status: \"userNotFound\" };\n }\n secret = jwtSecret + \":\" + code + \":\" + user.pwdResetStartedAt;\n }\n\n try {\n jsonwebtoken.verify(passwordResetToken, secret);\n } catch (ex) {\n return { status: \"invalidCode\" };\n }\n\n let passwordAndSalt = null;\n\n if (createPasswordHashAndSaltMethod == null) {\n passwordAndSalt = await auth.createPasswordHashAndSalt(newPassword);\n } else {\n passwordAndSalt = await createPasswordHashAndSaltMethod(newPassword);\n }\n\n if (passwordAndSalt == null) {\n return {\n status: \"passwordError\",\n };\n }\n\n await repo.updateOne(user._id, {\n password: passwordAndSalt.hash,\n salt: passwordAndSalt.salt,\n pwdResetStartedAt: null,\n });\n\n return { status: \"success\", user };\n}\n\nfunction generate(n: number): string {\n var add = 1,\n max = 12 - add;\n\n if (n > max) {\n return generate(max) + generate(n - max);\n }\n\n max = Math.pow(10, n + add);\n var min = max / 10;\n var number = Math.floor(Math.random() * (max - min + 1)) + min;\n\n return (\"\" + number).substring(add);\n}\n\nfunction generateString(length: number) {\n const characters = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\";\n let result = \" \";\n const charactersLength = characters.length;\n for (let i = 0; i < length; i++) {\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\n }\n\n return result;\n}\n"],"names":["changePassword","createUser","getJtwTokenPlugin","loginByToken","loginUser","passwordResetComplete","passwordResetStart","secret","rolePermissions","passwordPolicy","tokenTTL","undefined","includes","push","jwtAuthPlugin","getUser","tokenData","Promise","res","username","_id","repo","auth","password","authentificationMethod","roles","profile","createPasswordHashAndSaltMethod","onUserCreated","personalNumber","existingUser","getOne","toLowerCase","status","userData","pushNotificationTokens","log","warn","passwordAndSalt","createPasswordHashAndSalt","hash","salt","user","create","token","createToken","code","jwtSecret","payload","jsonwebtoken","verify","ex","type","getById","userId","authToken","validatePasswordMethod","smsOptions","onSuccessfulLogin","req","valid","validatePassword","codeType","generate","codeLength","generateString","smsClient","send","to","from","smsFrom","message","smsMessage","replace","jwtToken","options","expiresIn","sign","validationToken","newPassword","updateOne","numberOfDigits","lifeTime","passwordResetReusableTokens","fakepayload","toLocaleLowerCase","fakeToken","passwordResetToken","pwdResetStartedAt","Date","toISOString","decode","n","add","max","Math","pow","min","number","floor","random","substring","length","characters","result","charactersLength","i","charAt"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["/Users/joel/projects/flink/flink-framework/packages/generic-auth-plugin/src/coreFunctions.ts"],"sourcesContent":["import { FlinkRepo, FlinkAuthUser, log, FlinkRequest } from \"@flink-app/flink\";\nimport { JwtAuthPlugin, jwtAuthPlugin } from \"@flink-app/jwt-auth-plugin\";\n\nimport { User } from \"./schemas/User\";\nimport { UserCreateRes } from \"./schemas/UserCreateRes\";\nimport { UserLoginRes } from \"./schemas/UserLoginRes\";\nimport { UserProfile } from \"./schemas/UserProfile\";\nimport { UserPasswordChangeRes } from \"./schemas/UserPasswordChangeRes\";\nimport { UserPasswordResetStartRes } from \"./schemas/UserPasswordResetStartRes\";\nimport { UserPasswordResetCompleteRes } from \"./schemas/UserPasswordResetCompleteRes\";\n\nimport jsonwebtoken from \"jsonwebtoken\";\nimport { GenericAuthsmsOptions } from \"./genericAuthPluginOptions\";\n\nexport function getJtwTokenPlugin(secret: string, rolePermissions?: { [role: string]: string[] }, passwordPolicy?: RegExp, tokenTTL?: number) {\n if (passwordPolicy == undefined) {\n passwordPolicy = /.{1,}$/;\n }\n if (rolePermissions == undefined) {\n rolePermissions = {};\n }\n if (rolePermissions[\"user\"] == null) {\n rolePermissions[\"user\"] = [];\n }\n if (!rolePermissions[\"user\"].includes(\"authenticated\")) rolePermissions[\"user\"].push(\"authenticated\");\n\n return jwtAuthPlugin({\n secret,\n getUser: (tokenData: any) => {\n return new Promise<FlinkAuthUser>((res) => {\n res({\n username: tokenData.username,\n _id: tokenData._id,\n });\n });\n },\n passwordPolicy,\n rolePermissions,\n tokenTTL,\n });\n}\n\nexport async function createUser(\n repo: FlinkRepo<any, User>,\n auth: JwtAuthPlugin,\n username: string,\n password: string,\n authentificationMethod: \"password\" | \"sms\" | \"bankid\",\n roles: string[],\n profile: UserProfile,\n createPasswordHashAndSaltMethod?: {\n (password: string): Promise<{ hash: string; salt: string } | null>;\n },\n onUserCreated?: {\n (user: User): Promise<void>;\n },\n personalNumber?: string\n): Promise<UserCreateRes> {\n if (!roles.includes(\"user\")) roles.push(\"user\");\n\n const existingUser = await repo.getOne({ username: username.toLowerCase() });\n if (existingUser != null) {\n return {\n status: \"userExists\",\n };\n }\n let userData: Omit<User, \"_id\"> = {\n username: username.toLowerCase(),\n roles,\n profile,\n authentificationMethod,\n pushNotificationTokens: [],\n };\n\n if (personalNumber) {\n userData.personalNumber = personalNumber;\n }\n\n if (authentificationMethod == \"bankid\") {\n if (!personalNumber) {\n log.warn(\"BankID login requested but no personal number found for user\");\n return { status: \"error\" };\n }\n }\n\n if (authentificationMethod == \"password\") {\n let passwordAndSalt = null;\n if (createPasswordHashAndSaltMethod != null) {\n passwordAndSalt = await createPasswordHashAndSaltMethod(password);\n } else {\n passwordAndSalt = await auth.createPasswordHashAndSalt(password);\n }\n\n if (passwordAndSalt == null) {\n return {\n status: \"passwordError\",\n };\n }\n userData.password = passwordAndSalt.hash;\n userData.salt = passwordAndSalt.salt;\n }\n\n const user = await repo.create(userData);\n\n if (onUserCreated) {\n await onUserCreated(user);\n }\n\n const token = await auth.createToken({ username: username.toLowerCase(), _id: user._id }, roles);\n\n if (user.authentificationMethod == \"sms\") {\n return {\n status: \"success\",\n };\n }\n\n return {\n status: \"success\",\n user: {\n _id: user._id,\n token: token,\n username: username.toLowerCase(),\n },\n };\n}\n\nexport async function loginByToken(repo: FlinkRepo<any, User>, auth: JwtAuthPlugin, token: string, code: string, jwtSecret: string): Promise<UserLoginRes> {\n let payload: { type: string; userId: string };\n try {\n payload = jsonwebtoken.verify(token, jwtSecret + \":\" + code) as { type: string; userId: string };\n } catch (ex) {\n return { status: \"failed\" };\n }\n\n if (payload.type != \"smsLogin\") {\n return { status: \"failed\" };\n }\n\n const user = await repo.getById(payload.userId);\n if (user == null) {\n return { status: \"failed\" };\n }\n\n const authToken = await auth.createToken({ username: user.username.toLowerCase(), _id: user._id }, user.roles);\n\n return {\n status: \"success\",\n user: {\n _id: user._id,\n username: user.username,\n token: authToken,\n profile: user.profile,\n },\n };\n}\n\nexport async function loginUser(\n repo: FlinkRepo<any, User>,\n auth: JwtAuthPlugin,\n username: string,\n password: string | undefined,\n validatePasswordMethod?: {\n (password: string, hash: string, salt: string): Promise<boolean>;\n },\n smsOptions?: GenericAuthsmsOptions,\n onSuccessfulLogin?: {\n (user: User, req?: FlinkRequest): Promise<void>;\n },\n req?: FlinkRequest\n): Promise<UserLoginRes> {\n const user = await repo.getOne({ username: username.toLowerCase() });\n if (user == null) {\n return { status: \"failed\" };\n }\n\n let valid: boolean = false;\n\n if (user.authentificationMethod == \"password\") {\n if (password == null) password = \"\";\n\n if (validatePasswordMethod) {\n valid = await validatePasswordMethod(password, <string>user.password, <string>user.salt);\n\n //If not valid, try to use default auth\n if (!valid) {\n try {\n valid = await auth.validatePassword(password, <string>user.password, <string>user.salt);\n } catch (ex) {}\n }\n } else {\n valid = await auth.validatePassword(password, <string>user.password, <string>user.salt);\n }\n }\n if (user.authentificationMethod == \"sms\") {\n if (!smsOptions) throw \"SMS options must be specified to use SMS login\";\n let code = smsOptions.codeType == \"numeric\" ? generate(smsOptions.codeLength) : generateString(smsOptions.codeLength);\n smsOptions.smsClient.send({\n to: [user.username],\n from: smsOptions.smsFrom,\n message: smsOptions.smsMessage.replace(\"{{code}}\", code),\n });\n\n const payload = {\n type: \"smsLogin\",\n userId: user._id,\n };\n\n const secret = smsOptions.jwtToken + \":\" + code;\n\n const options: jsonwebtoken.SignOptions = {\n expiresIn: \"1h\",\n };\n\n const token = jsonwebtoken.sign(payload, secret, options);\n\n return {\n status: \"success\",\n validationToken: token,\n };\n }\n if (user.authentificationMethod == \"bankid\") {\n if (!user.personalNumber) {\n log.warn(\"BankID login requested but no personal number found for user\");\n return { status: \"failed\" };\n }\n\n log.warn(\"BankID login required to be handled in other way, i.e. using flink bankid plugin\");\n return { status: \"failed\" };\n }\n\n if (valid) {\n const token = await auth.createToken({ username: username.toLowerCase(), _id: user._id }, user.roles);\n\n if (onSuccessfulLogin) {\n await onSuccessfulLogin(user, req);\n }\n\n return {\n status: \"success\",\n user: {\n _id: user._id,\n username: user.username,\n token,\n profile: user.profile,\n },\n };\n } else {\n return { status: \"failed\" };\n }\n}\n\nexport async function changePassword(\n repo: FlinkRepo<any, User>,\n auth: JwtAuthPlugin,\n userId: string,\n newPassword: string,\n createPasswordHashAndSaltMethod?: {\n (password: string): Promise<{ hash: string; salt: string } | null>;\n }\n): Promise<UserPasswordChangeRes> {\n const user = await repo.getById(userId);\n if (user == null) {\n return { status: \"failed\" };\n }\n\n if (user.authentificationMethod != \"password\") {\n return { status: \"failed\" };\n }\n\n let passwordAndSalt = null;\n\n if (createPasswordHashAndSaltMethod == null) {\n passwordAndSalt = await auth.createPasswordHashAndSalt(newPassword);\n } else {\n passwordAndSalt = await createPasswordHashAndSaltMethod(newPassword);\n }\n\n if (passwordAndSalt == null) {\n return {\n status: \"passwordError\",\n };\n }\n\n await repo.updateById(userId, {\n password: passwordAndSalt.hash,\n salt: passwordAndSalt.salt,\n });\n\n return { status: \"success\" };\n}\n\nexport async function passwordResetStart(\n repo: FlinkRepo<any, User>,\n auth: JwtAuthPlugin,\n jwtSecret: string,\n username: string,\n numberOfDigits?: number,\n lifeTime?: string,\n passwordResetReusableTokens: boolean = true\n): Promise<UserPasswordResetStartRes> {\n const user = await repo.getOne({ username: username.toLowerCase() });\n\n const fakepayload = {\n type: \"passwordReset\",\n username: username.toLocaleLowerCase(),\n };\n const fakeToken = jsonwebtoken.sign(fakepayload, \"fake_payload\", { expiresIn: lifeTime });\n\n if (user == null) {\n return { status: \"userNotFound\", passwordResetToken: fakeToken };\n }\n\n if (user.authentificationMethod != \"password\") {\n return { status: \"userNotFound\", passwordResetToken: fakeToken };\n }\n\n if (numberOfDigits == null) numberOfDigits = 6;\n if (lifeTime == null) lifeTime = \"1h\";\n\n const payload = {\n type: \"passwordReset\",\n username: username.toLocaleLowerCase(),\n };\n const code = generate(numberOfDigits);\n\n const pwdResetStartedAt = new Date().toISOString();\n let secret;\n if (passwordResetReusableTokens) {\n secret = jwtSecret + \":\" + code;\n } else {\n secret = jwtSecret + \":\" + code + \":\" + pwdResetStartedAt;\n await repo.updateById(user._id, { pwdResetStartedAt });\n }\n\n const options: jsonwebtoken.SignOptions = {\n expiresIn: lifeTime,\n };\n\n const token = jsonwebtoken.sign(payload, secret, options);\n\n return {\n status: \"success\",\n passwordResetToken: token,\n code,\n profile: user.profile,\n };\n}\n\nexport async function passwordResetComplete(\n repo: FlinkRepo<any, User>,\n auth: JwtAuthPlugin,\n jwtSecret: string,\n passwordResetToken: string,\n code: string,\n newPassword: string,\n createPasswordHashAndSaltMethod?: {\n (password: string): Promise<{ hash: string; salt: string } | null>;\n },\n passwordResetReusableTokens: boolean = true\n): Promise<UserPasswordResetCompleteRes> {\n const payload = <{ username: string }>jsonwebtoken.decode(passwordResetToken);\n\n if (!payload || !payload.username) return { status: \"invalidCode\" };\n\n const user = await repo.getOne({ username: payload.username });\n\n if (!user || user == null || user.authentificationMethod != \"password\") {\n return { status: \"userNotFound\" };\n }\n\n let secret;\n if (passwordResetReusableTokens === true) {\n secret = jwtSecret + \":\" + code;\n } else {\n if (!user.pwdResetStartedAt || user.pwdResetStartedAt === null) {\n return { status: \"userNotFound\" };\n }\n secret = jwtSecret + \":\" + code + \":\" + user.pwdResetStartedAt;\n }\n\n try {\n jsonwebtoken.verify(passwordResetToken, secret);\n } catch (ex) {\n return { status: \"invalidCode\" };\n }\n\n let passwordAndSalt = null;\n\n if (createPasswordHashAndSaltMethod == null) {\n passwordAndSalt = await auth.createPasswordHashAndSalt(newPassword);\n } else {\n passwordAndSalt = await createPasswordHashAndSaltMethod(newPassword);\n }\n\n if (passwordAndSalt == null) {\n return {\n status: \"passwordError\",\n };\n }\n\n await repo.updateById(user._id, {\n password: passwordAndSalt.hash,\n salt: passwordAndSalt.salt,\n pwdResetStartedAt: null,\n });\n\n return { status: \"success\", user };\n}\n\nfunction generate(n: number): string {\n var add = 1,\n max = 12 - add;\n\n if (n > max) {\n return generate(max) + generate(n - max);\n }\n\n max = Math.pow(10, n + add);\n var min = max / 10;\n var number = Math.floor(Math.random() * (max - min + 1)) + min;\n\n return (\"\" + number).substring(add);\n}\n\nfunction generateString(length: number) {\n const characters = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\";\n let result = \" \";\n const charactersLength = characters.length;\n for (let i = 0; i < length; i++) {\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\n }\n\n return result;\n}\n"],"names":["changePassword","createUser","getJtwTokenPlugin","loginByToken","loginUser","passwordResetComplete","passwordResetStart","secret","rolePermissions","passwordPolicy","tokenTTL","undefined","includes","push","jwtAuthPlugin","getUser","tokenData","Promise","res","username","_id","repo","auth","password","authentificationMethod","roles","profile","createPasswordHashAndSaltMethod","onUserCreated","personalNumber","existingUser","getOne","toLowerCase","status","userData","pushNotificationTokens","log","warn","passwordAndSalt","createPasswordHashAndSalt","hash","salt","user","create","token","createToken","code","jwtSecret","payload","jsonwebtoken","verify","ex","type","getById","userId","authToken","validatePasswordMethod","smsOptions","onSuccessfulLogin","req","valid","validatePassword","codeType","generate","codeLength","generateString","smsClient","send","to","from","smsFrom","message","smsMessage","replace","jwtToken","options","expiresIn","sign","validationToken","newPassword","updateById","numberOfDigits","lifeTime","passwordResetReusableTokens","fakepayload","toLocaleLowerCase","fakeToken","passwordResetToken","pwdResetStartedAt","Date","toISOString","decode","n","add","max","Math","pow","min","number","floor","random","substring","length","characters","result","charactersLength","i","charAt"],"mappings":"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"}
|
|
@@ -28,7 +28,7 @@ const PutManagementUserPasswordByUserid = async ({ ctx, req, origin })=>{
|
|
|
28
28
|
if (passwordAndSalt == null) {
|
|
29
29
|
return (0, _flink.badRequest)("Password not accepted");
|
|
30
30
|
}
|
|
31
|
-
await repo.
|
|
31
|
+
await repo.updateById(req.params.userid, {
|
|
32
32
|
password: passwordAndSalt.hash,
|
|
33
33
|
salt: passwordAndSalt.salt
|
|
34
34
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/joel/projects/flink/flink-framework/packages/generic-auth-plugin/src/handlers/Management/PutUserPasswordByUserid.ts"],"sourcesContent":["import { badRequest, FlinkContext, Handler, notFound } from \"@flink-app/flink\";\nimport { JwtAuthPlugin } from \"@flink-app/jwt-auth-plugin\";\nimport { PutManagementUserPasswordByUseridReq } from \"../../schemas/Management/PutUserPasswordByUseridReq\";\nimport { PutManagementUserPasswordByUseridRes } from \"../../schemas/Management/PutUserPasswordByUseridRes\";\n\nconst PutManagementUserPasswordByUserid: Handler<FlinkContext, PutManagementUserPasswordByUseridReq, PutManagementUserPasswordByUseridRes> = async ({\n ctx,\n req,\n origin,\n}) => {\n let pluginName = origin || \"genericAuthPlugin\";\n let repo = ctx.repos[(<any>ctx.plugins)[pluginName].repoName];\n\n const user = await repo.getById(req.params.userid);\n if (user == null) {\n return notFound();\n }\n\n const resp = await ctx.plugins.genericAuthPlugin.changePassword(repo, <JwtAuthPlugin>ctx.auth, user._id, req.body.password);\n\n const auth = <JwtAuthPlugin>ctx.auth;\n\n const createPasswordHashAndSaltMethod = ctx.plugins.genericAuthPlugin.createPasswordHashAndSaltMethod;\n let passwordAndSalt = null;\n\n if (createPasswordHashAndSaltMethod == null) {\n passwordAndSalt = await auth.createPasswordHashAndSalt(req.body.password);\n } else {\n passwordAndSalt = await createPasswordHashAndSaltMethod(req.body.password);\n }\n\n if (passwordAndSalt == null) {\n return badRequest(\"Password not accepted\");\n }\n\n await repo.
|
|
1
|
+
{"version":3,"sources":["/Users/joel/projects/flink/flink-framework/packages/generic-auth-plugin/src/handlers/Management/PutUserPasswordByUserid.ts"],"sourcesContent":["import { badRequest, FlinkContext, Handler, notFound } from \"@flink-app/flink\";\nimport { JwtAuthPlugin } from \"@flink-app/jwt-auth-plugin\";\nimport { PutManagementUserPasswordByUseridReq } from \"../../schemas/Management/PutUserPasswordByUseridReq\";\nimport { PutManagementUserPasswordByUseridRes } from \"../../schemas/Management/PutUserPasswordByUseridRes\";\n\nconst PutManagementUserPasswordByUserid: Handler<FlinkContext, PutManagementUserPasswordByUseridReq, PutManagementUserPasswordByUseridRes> = async ({\n ctx,\n req,\n origin,\n}) => {\n let pluginName = origin || \"genericAuthPlugin\";\n let repo = ctx.repos[(<any>ctx.plugins)[pluginName].repoName];\n\n const user = await repo.getById(req.params.userid);\n if (user == null) {\n return notFound();\n }\n\n const resp = await ctx.plugins.genericAuthPlugin.changePassword(repo, <JwtAuthPlugin>ctx.auth, user._id, req.body.password);\n\n const auth = <JwtAuthPlugin>ctx.auth;\n\n const createPasswordHashAndSaltMethod = ctx.plugins.genericAuthPlugin.createPasswordHashAndSaltMethod;\n let passwordAndSalt = null;\n\n if (createPasswordHashAndSaltMethod == null) {\n passwordAndSalt = await auth.createPasswordHashAndSalt(req.body.password);\n } else {\n passwordAndSalt = await createPasswordHashAndSaltMethod(req.body.password);\n }\n\n if (passwordAndSalt == null) {\n return badRequest(\"Password not accepted\");\n }\n\n await repo.updateById(req.params.userid, {\n password: passwordAndSalt.hash,\n salt: passwordAndSalt.salt,\n });\n\n return {\n data: {},\n status: 200,\n };\n};\nexport default PutManagementUserPasswordByUserid;\n"],"names":["PutManagementUserPasswordByUserid","ctx","req","origin","pluginName","repo","repos","plugins","repoName","user","getById","params","userid","notFound","resp","genericAuthPlugin","changePassword","auth","_id","body","password","createPasswordHashAndSaltMethod","passwordAndSalt","createPasswordHashAndSalt","badRequest","updateById","hash","salt","data","status"],"mappings":";;;;+BA6CA;;;eAAA;;;uBA7C4D;AAK5D,MAAMA,oCAAuI,OAAO,EAChJC,GAAG,EACHC,GAAG,EACHC,MAAM,EACT;IACG,IAAIC,aAAaD,UAAU;IAC3B,IAAIE,OAAOJ,IAAIK,KAAK,CAAC,AAAML,IAAIM,OAAO,AAAC,CAACH,WAAW,CAACI,QAAQ,CAAC;IAE7D,MAAMC,OAAO,MAAMJ,KAAKK,OAAO,CAACR,IAAIS,MAAM,CAACC,MAAM;IACjD,IAAIH,QAAQ,MAAM;QACd,OAAOI,IAAAA,eAAQ;IACnB;IAEA,MAAMC,OAAO,MAAMb,IAAIM,OAAO,CAACQ,iBAAiB,CAACC,cAAc,CAACX,MAAqBJ,IAAIgB,IAAI,EAAER,KAAKS,GAAG,EAAEhB,IAAIiB,IAAI,CAACC,QAAQ;IAE1H,MAAMH,OAAsBhB,IAAIgB,IAAI;IAEpC,MAAMI,kCAAkCpB,IAAIM,OAAO,CAACQ,iBAAiB,CAACM,+BAA+B;IACrG,IAAIC,kBAAkB;IAEtB,IAAID,mCAAmC,MAAM;QACzCC,kBAAkB,MAAML,KAAKM,yBAAyB,CAACrB,IAAIiB,IAAI,CAACC,QAAQ;IAC5E,OAAO;QACHE,kBAAkB,MAAMD,gCAAgCnB,IAAIiB,IAAI,CAACC,QAAQ;IAC7E;IAEA,IAAIE,mBAAmB,MAAM;QACzB,OAAOE,IAAAA,iBAAU,EAAC;IACtB;IAEA,MAAMnB,KAAKoB,UAAU,CAACvB,IAAIS,MAAM,CAACC,MAAM,EAAE;QACrCQ,UAAUE,gBAAgBI,IAAI;QAC9BC,MAAML,gBAAgBK,IAAI;IAC9B;IAEA,OAAO;QACHC,MAAM,CAAC;QACPC,QAAQ;IACZ;AACJ;MACA,WAAe7B"}
|
|
@@ -16,7 +16,7 @@ const PutManagementUserProfileByUserid = async ({ ctx, req, origin })=>{
|
|
|
16
16
|
if (user == null) {
|
|
17
17
|
return (0, _flink.notFound)();
|
|
18
18
|
}
|
|
19
|
-
await repo.
|
|
19
|
+
await repo.updateById(user._id, {
|
|
20
20
|
profile: req.body
|
|
21
21
|
});
|
|
22
22
|
const updatedUser = await repo.getById(req.params.userid);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/joel/projects/flink/flink-framework/packages/generic-auth-plugin/src/handlers/Management/PutUserProfileByUserid.ts"],"sourcesContent":["import { FlinkContext, Handler, HttpMethod, notFound, RouteProps } from \"@flink-app/flink\";\nimport { PutManagementUserProfileByUseridReq } from \"../../schemas/Management/PutUserProfileByUseridReq\";\nimport { PutManagementUserProfileByUseridRes } from \"../../schemas/Management/PutUserProfileByUseridRes\";\n\nconst PutManagementUserProfileByUserid: Handler<FlinkContext, PutManagementUserProfileByUseridReq, PutManagementUserProfileByUseridRes> = async ({\n ctx,\n req,\n origin,\n}) => {\n let pluginName = origin || \"genericAuthPlugin\";\n let repo = ctx.repos[(<any>ctx.plugins)[pluginName].repoName];\n\n const user = await repo.getById(req.params.userid);\n if (user == null) {\n return notFound();\n }\n\n await repo.
|
|
1
|
+
{"version":3,"sources":["/Users/joel/projects/flink/flink-framework/packages/generic-auth-plugin/src/handlers/Management/PutUserProfileByUserid.ts"],"sourcesContent":["import { FlinkContext, Handler, HttpMethod, notFound, RouteProps } from \"@flink-app/flink\";\nimport { PutManagementUserProfileByUseridReq } from \"../../schemas/Management/PutUserProfileByUseridReq\";\nimport { PutManagementUserProfileByUseridRes } from \"../../schemas/Management/PutUserProfileByUseridRes\";\n\nconst PutManagementUserProfileByUserid: Handler<FlinkContext, PutManagementUserProfileByUseridReq, PutManagementUserProfileByUseridRes> = async ({\n ctx,\n req,\n origin,\n}) => {\n let pluginName = origin || \"genericAuthPlugin\";\n let repo = ctx.repos[(<any>ctx.plugins)[pluginName].repoName];\n\n const user = await repo.getById(req.params.userid);\n if (user == null) {\n return notFound();\n }\n\n await repo.updateById(user._id, { profile: req.body });\n\n const updatedUser = await repo.getById(req.params.userid);\n\n if ((<any>ctx.plugins)[pluginName].onUserUpdated) {\n await (<any>ctx.plugins)[pluginName].onUserUpdated(updatedUser, req.body);\n }\n\n return {\n data: {},\n status: 200,\n };\n};\nexport default PutManagementUserProfileByUserid;\n"],"names":["PutManagementUserProfileByUserid","ctx","req","origin","pluginName","repo","repos","plugins","repoName","user","getById","params","userid","notFound","updateById","_id","profile","body","updatedUser","onUserUpdated","data","status"],"mappings":";;;;+BA8BA;;;eAAA;;;uBA9BwE;AAIxE,MAAMA,mCAAoI,OAAO,EAC7IC,GAAG,EACHC,GAAG,EACHC,MAAM,EACT;IACG,IAAIC,aAAaD,UAAU;IAC3B,IAAIE,OAAOJ,IAAIK,KAAK,CAAC,AAAML,IAAIM,OAAO,AAAC,CAACH,WAAW,CAACI,QAAQ,CAAC;IAE7D,MAAMC,OAAO,MAAMJ,KAAKK,OAAO,CAACR,IAAIS,MAAM,CAACC,MAAM;IACjD,IAAIH,QAAQ,MAAM;QACd,OAAOI,IAAAA,eAAQ;IACnB;IAEA,MAAMR,KAAKS,UAAU,CAACL,KAAKM,GAAG,EAAE;QAAEC,SAASd,IAAIe,IAAI;IAAC;IAEpD,MAAMC,cAAc,MAAMb,KAAKK,OAAO,CAACR,IAAIS,MAAM,CAACC,MAAM;IAExD,IAAI,AAAMX,IAAIM,OAAO,AAAC,CAACH,WAAW,CAACe,aAAa,EAAE;QAC9C,MAAM,AAAMlB,IAAIM,OAAO,AAAC,CAACH,WAAW,CAACe,aAAa,CAACD,aAAahB,IAAIe,IAAI;IAC5E;IAEA,OAAO;QACHG,MAAM,CAAC;QACPC,QAAQ;IACZ;AACJ;MACA,WAAerB"}
|
|
@@ -46,7 +46,7 @@ const PutManagementUserProfileByUserid = async ({ ctx, req, origin })=>{
|
|
|
46
46
|
}
|
|
47
47
|
if (user.profile == null) user.profile = {};
|
|
48
48
|
const profile = _object_spread({}, user.profile, req.body);
|
|
49
|
-
await repo.
|
|
49
|
+
await repo.updateById(user._id, {
|
|
50
50
|
profile: profile
|
|
51
51
|
});
|
|
52
52
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/joel/projects/flink/flink-framework/packages/generic-auth-plugin/src/handlers/Management/PutUserProfileByUseridAppend.ts"],"sourcesContent":["import { FlinkContext, Handler, HttpMethod, notFound, RouteProps } from \"@flink-app/flink\";\nimport { PutManagementUserProfileByUseridReq } from \"../../schemas/Management/PutUserProfileByUseridReq\";\nimport { PutManagementUserProfileByUseridRes } from \"../../schemas/Management/PutUserProfileByUseridRes\";\n\nconst PutManagementUserProfileByUserid: Handler<FlinkContext, PutManagementUserProfileByUseridReq, PutManagementUserProfileByUseridRes> = async ({\n ctx,\n req,\n origin,\n}) => {\n let pluginName = origin || \"genericAuthPlugin\";\n let repo = ctx.repos[(<any>ctx.plugins)[pluginName].repoName];\n\n const user = await repo.getById(req.params.userid);\n if (user == null) {\n return notFound();\n }\n\n if (user.profile == null) user.profile = {};\n\n const profile = {\n ...user.profile,\n ...req.body,\n };\n\n await repo.
|
|
1
|
+
{"version":3,"sources":["/Users/joel/projects/flink/flink-framework/packages/generic-auth-plugin/src/handlers/Management/PutUserProfileByUseridAppend.ts"],"sourcesContent":["import { FlinkContext, Handler, HttpMethod, notFound, RouteProps } from \"@flink-app/flink\";\nimport { PutManagementUserProfileByUseridReq } from \"../../schemas/Management/PutUserProfileByUseridReq\";\nimport { PutManagementUserProfileByUseridRes } from \"../../schemas/Management/PutUserProfileByUseridRes\";\n\nconst PutManagementUserProfileByUserid: Handler<FlinkContext, PutManagementUserProfileByUseridReq, PutManagementUserProfileByUseridRes> = async ({\n ctx,\n req,\n origin,\n}) => {\n let pluginName = origin || \"genericAuthPlugin\";\n let repo = ctx.repos[(<any>ctx.plugins)[pluginName].repoName];\n\n const user = await repo.getById(req.params.userid);\n if (user == null) {\n return notFound();\n }\n\n if (user.profile == null) user.profile = {};\n\n const profile = {\n ...user.profile,\n ...req.body,\n };\n\n await repo.updateById(user._id, { profile: profile });\n\n return {\n data: {},\n status: 200,\n };\n};\nexport default PutManagementUserProfileByUserid;\n"],"names":["PutManagementUserProfileByUserid","ctx","req","origin","pluginName","repo","repos","plugins","repoName","user","getById","params","userid","notFound","profile","body","updateById","_id","data","status"],"mappings":";;;;+BA+BA;;;eAAA;;;uBA/BwE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIxE,MAAMA,mCAAoI,OAAO,EAC7IC,GAAG,EACHC,GAAG,EACHC,MAAM,EACT;IACG,IAAIC,aAAaD,UAAU;IAC3B,IAAIE,OAAOJ,IAAIK,KAAK,CAAC,AAAML,IAAIM,OAAO,AAAC,CAACH,WAAW,CAACI,QAAQ,CAAC;IAE7D,MAAMC,OAAO,MAAMJ,KAAKK,OAAO,CAACR,IAAIS,MAAM,CAACC,MAAM;IACjD,IAAIH,QAAQ,MAAM;QACd,OAAOI,IAAAA,eAAQ;IACnB;IAEA,IAAIJ,KAAKK,OAAO,IAAI,MAAML,KAAKK,OAAO,GAAG,CAAC;IAE1C,MAAMA,UAAU,mBACTL,KAAKK,OAAO,EACZZ,IAAIa,IAAI;IAGf,MAAMV,KAAKW,UAAU,CAACP,KAAKQ,GAAG,EAAE;QAAEH,SAASA;IAAQ;IAEnD,OAAO;QACHI,MAAM,CAAC;QACPC,QAAQ;IACZ;AACJ;MACA,WAAenB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/joel/projects/flink/flink-framework/packages/generic-auth-plugin/src/handlers/Management/PutUserRolesByUserid.ts"],"sourcesContent":["import { FlinkContext, Handler, HttpMethod, notFound, RouteProps } from \"@flink-app/flink\";\nimport { PutManagementUserRolesByUseridReq } from \"../../schemas/Management/PutUserRolesByUseridReq\";\nimport { PutManagementUserRolesByUseridRes } from \"../../schemas/Management/PutUserRolesByUseridRes\";\n\nconst PutManagementUserRolesByUserid: Handler<FlinkContext, PutManagementUserRolesByUseridReq, PutManagementUserRolesByUseridRes> = async ({\n ctx,\n req,\n origin,\n}) => {\n let pluginName = origin || \"genericAuthPlugin\";\n let repo = ctx.repos[(<any>ctx.plugins)[pluginName].repoName];\n\n const user = await repo.getById(req.params.userid);\n if (user == null) {\n return notFound();\n }\n\n await repo.
|
|
1
|
+
{"version":3,"sources":["/Users/joel/projects/flink/flink-framework/packages/generic-auth-plugin/src/handlers/Management/PutUserRolesByUserid.ts"],"sourcesContent":["import { FlinkContext, Handler, HttpMethod, notFound, RouteProps } from \"@flink-app/flink\";\nimport { PutManagementUserRolesByUseridReq } from \"../../schemas/Management/PutUserRolesByUseridReq\";\nimport { PutManagementUserRolesByUseridRes } from \"../../schemas/Management/PutUserRolesByUseridRes\";\n\nconst PutManagementUserRolesByUserid: Handler<FlinkContext, PutManagementUserRolesByUseridReq, PutManagementUserRolesByUseridRes> = async ({\n ctx,\n req,\n origin,\n}) => {\n let pluginName = origin || \"genericAuthPlugin\";\n let repo = ctx.repos[(<any>ctx.plugins)[pluginName].repoName];\n\n const user = await repo.getById(req.params.userid);\n if (user == null) {\n return notFound();\n }\n\n await repo.updateById(user._id, { roles: req.body.roles });\n\n return {\n data: {},\n status: 200,\n };\n};\nexport default PutManagementUserRolesByUserid;\n"],"names":["PutManagementUserRolesByUserid","ctx","req","origin","pluginName","repo","repos","plugins","repoName","user","getById","params","userid","notFound","updateById","_id","roles","body","data","status"],"mappings":";;;;+BAwBA;;;eAAA;;;uBAxBwE;AAIxE,MAAMA,iCAA8H,OAAO,EACvIC,GAAG,EACHC,GAAG,EACHC,MAAM,EACT;IACG,IAAIC,aAAaD,UAAU;IAC3B,IAAIE,OAAOJ,IAAIK,KAAK,CAAC,AAAML,IAAIM,OAAO,AAAC,CAACH,WAAW,CAACI,QAAQ,CAAC;IAE7D,MAAMC,OAAO,MAAMJ,KAAKK,OAAO,CAACR,IAAIS,MAAM,CAACC,MAAM;IACjD,IAAIH,QAAQ,MAAM;QACd,OAAOI,IAAAA,eAAQ;IACnB;IAEA,MAAMR,KAAKS,UAAU,CAACL,KAAKM,GAAG,EAAE;QAAEC,OAAOd,IAAIe,IAAI,CAACD,KAAK;IAAC;IAExD,OAAO;QACHE,MAAM,CAAC;QACPC,QAAQ;IACZ;AACJ;MACA,WAAenB"}
|
|
@@ -24,7 +24,7 @@ const PutManagementUserUsernameByUserid = async ({ ctx, req, origin })=>{
|
|
|
24
24
|
return (0, _flink.conflict)("Username already taken");
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
|
-
await repo.
|
|
27
|
+
await repo.updateById(user._id, {
|
|
28
28
|
username: req.body.username.toLowerCase()
|
|
29
29
|
});
|
|
30
30
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/joel/projects/flink/flink-framework/packages/generic-auth-plugin/src/handlers/Management/PutUserUsernameByUserid.ts"],"sourcesContent":["import { conflict, FlinkContext, Handler, HttpMethod, notFound, RouteProps } from \"@flink-app/flink\";\nimport { PutManagementUserUsernameByUseridReq } from \"../../schemas/Management/PutUserUsernameByUseridReq\";\nimport { PutManagementUserUsernameByUseridRes } from \"../../schemas/Management/PutUserUsernameByUseridRes\";\n\nconst PutManagementUserUsernameByUserid: Handler<FlinkContext, PutManagementUserUsernameByUseridReq, PutManagementUserUsernameByUseridRes> = async ({\n ctx,\n req,\n origin,\n}) => {\n let pluginName = origin || \"genericAuthPlugin\";\n let repo = ctx.repos[(<any>ctx.plugins)[pluginName].repoName];\n\n const user = await repo.getById(req.params.userid);\n if (user == null) {\n return notFound();\n }\n\n const existingUser = await repo.getOne({\n username: req.body.username.toLowerCase(),\n });\n if (existingUser != null) {\n if (existingUser._id + \"\" != user._id + \"\") {\n return conflict(\"Username already taken\");\n }\n }\n\n await repo.
|
|
1
|
+
{"version":3,"sources":["/Users/joel/projects/flink/flink-framework/packages/generic-auth-plugin/src/handlers/Management/PutUserUsernameByUserid.ts"],"sourcesContent":["import { conflict, FlinkContext, Handler, HttpMethod, notFound, RouteProps } from \"@flink-app/flink\";\nimport { PutManagementUserUsernameByUseridReq } from \"../../schemas/Management/PutUserUsernameByUseridReq\";\nimport { PutManagementUserUsernameByUseridRes } from \"../../schemas/Management/PutUserUsernameByUseridRes\";\n\nconst PutManagementUserUsernameByUserid: Handler<FlinkContext, PutManagementUserUsernameByUseridReq, PutManagementUserUsernameByUseridRes> = async ({\n ctx,\n req,\n origin,\n}) => {\n let pluginName = origin || \"genericAuthPlugin\";\n let repo = ctx.repos[(<any>ctx.plugins)[pluginName].repoName];\n\n const user = await repo.getById(req.params.userid);\n if (user == null) {\n return notFound();\n }\n\n const existingUser = await repo.getOne({\n username: req.body.username.toLowerCase(),\n });\n if (existingUser != null) {\n if (existingUser._id + \"\" != user._id + \"\") {\n return conflict(\"Username already taken\");\n }\n }\n\n await repo.updateById(user._id, { username: req.body.username.toLowerCase() });\n\n return {\n data: {},\n status: 200,\n };\n};\nexport default PutManagementUserUsernameByUserid;\n"],"names":["PutManagementUserUsernameByUserid","ctx","req","origin","pluginName","repo","repos","plugins","repoName","user","getById","params","userid","notFound","existingUser","getOne","username","body","toLowerCase","_id","conflict","updateById","data","status"],"mappings":";;;;+BAiCA;;;eAAA;;;uBAjCkF;AAIlF,MAAMA,oCAAuI,OAAO,EAChJC,GAAG,EACHC,GAAG,EACHC,MAAM,EACT;IACG,IAAIC,aAAaD,UAAU;IAC3B,IAAIE,OAAOJ,IAAIK,KAAK,CAAC,AAAML,IAAIM,OAAO,AAAC,CAACH,WAAW,CAACI,QAAQ,CAAC;IAE7D,MAAMC,OAAO,MAAMJ,KAAKK,OAAO,CAACR,IAAIS,MAAM,CAACC,MAAM;IACjD,IAAIH,QAAQ,MAAM;QACd,OAAOI,IAAAA,eAAQ;IACnB;IAEA,MAAMC,eAAe,MAAMT,KAAKU,MAAM,CAAC;QACnCC,UAAUd,IAAIe,IAAI,CAACD,QAAQ,CAACE,WAAW;IAC3C;IACA,IAAIJ,gBAAgB,MAAM;QACtB,IAAIA,aAAaK,GAAG,GAAG,MAAMV,KAAKU,GAAG,GAAG,IAAI;YACxC,OAAOC,IAAAA,eAAQ,EAAC;QACpB;IACJ;IAEA,MAAMf,KAAKgB,UAAU,CAACZ,KAAKU,GAAG,EAAE;QAAEH,UAAUd,IAAIe,IAAI,CAACD,QAAQ,CAACE,WAAW;IAAG;IAE5E,OAAO;QACHI,MAAM,CAAC;QACPC,QAAQ;IACZ;AACJ;MACA,WAAevB"}
|
|
@@ -46,7 +46,7 @@ const putUserProfileHandler = async ({ ctx, req, origin })=>{
|
|
|
46
46
|
return (0, _flink.notFound)();
|
|
47
47
|
}
|
|
48
48
|
const updatedProfile = _object_spread({}, user.profile, req.body);
|
|
49
|
-
await repo.
|
|
49
|
+
await repo.updateById(userId, {
|
|
50
50
|
profile: updatedProfile
|
|
51
51
|
});
|
|
52
52
|
user = await repo.getById(userId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/joel/projects/flink/flink-framework/packages/generic-auth-plugin/src/handlers/UserProfilePut.ts"],"sourcesContent":["import { FlinkContext, Handler, notFound } from \"@flink-app/flink\";\nimport { genericAuthContext } from \"../genericAuthContext\";\nimport { UserProfile } from \"../schemas/UserProfile\";\n\nconst putUserProfileHandler: Handler<FlinkContext<genericAuthContext>, UserProfile, UserProfile> = async ({ ctx, req, origin }) => {\n let pluginName = origin || \"genericAuthPlugin\";\n let repo = ctx.repos[(<any>ctx.plugins)[pluginName].repoName];\n\n let userId = req.user._id;\n let user = await repo.getById(userId);\n if (user == null) {\n return notFound();\n }\n\n const updatedProfile = {\n ...user.profile,\n ...req.body,\n };\n\n await repo.
|
|
1
|
+
{"version":3,"sources":["/Users/joel/projects/flink/flink-framework/packages/generic-auth-plugin/src/handlers/UserProfilePut.ts"],"sourcesContent":["import { FlinkContext, Handler, notFound } from \"@flink-app/flink\";\nimport { genericAuthContext } from \"../genericAuthContext\";\nimport { UserProfile } from \"../schemas/UserProfile\";\n\nconst putUserProfileHandler: Handler<FlinkContext<genericAuthContext>, UserProfile, UserProfile> = async ({ ctx, req, origin }) => {\n let pluginName = origin || \"genericAuthPlugin\";\n let repo = ctx.repos[(<any>ctx.plugins)[pluginName].repoName];\n\n let userId = req.user._id;\n let user = await repo.getById(userId);\n if (user == null) {\n return notFound();\n }\n\n const updatedProfile = {\n ...user.profile,\n ...req.body,\n };\n\n await repo.updateById(userId, { profile: updatedProfile });\n\n user = await repo.getById(userId);\n\n if ((<any>ctx.plugins)[pluginName].onUserUpdated) {\n await (<any>ctx.plugins)[pluginName].onUserUpdated(user, req.body);\n }\n\n return {\n data: user.profile,\n };\n};\n\nexport default putUserProfileHandler;\n"],"names":["putUserProfileHandler","ctx","req","origin","pluginName","repo","repos","plugins","repoName","userId","user","_id","getById","notFound","updatedProfile","profile","body","updateById","onUserUpdated","data"],"mappings":";;;;+BAgCA;;;eAAA;;;uBAhCgD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIhD,MAAMA,wBAA6F,OAAO,EAAEC,GAAG,EAAEC,GAAG,EAAEC,MAAM,EAAE;IAC1H,IAAIC,aAAaD,UAAU;IAC3B,IAAIE,OAAOJ,IAAIK,KAAK,CAAC,AAAML,IAAIM,OAAO,AAAC,CAACH,WAAW,CAACI,QAAQ,CAAC;IAE7D,IAAIC,SAASP,IAAIQ,IAAI,CAACC,GAAG;IACzB,IAAID,OAAO,MAAML,KAAKO,OAAO,CAACH;IAC9B,IAAIC,QAAQ,MAAM;QACd,OAAOG,IAAAA,eAAQ;IACnB;IAEA,MAAMC,iBAAiB,mBAChBJ,KAAKK,OAAO,EACZb,IAAIc,IAAI;IAGf,MAAMX,KAAKY,UAAU,CAACR,QAAQ;QAAEM,SAASD;IAAe;IAExDJ,OAAO,MAAML,KAAKO,OAAO,CAACH;IAE1B,IAAI,AAAMR,IAAIM,OAAO,AAAC,CAACH,WAAW,CAACc,aAAa,EAAE;QAC9C,MAAM,AAAMjB,IAAIM,OAAO,AAAC,CAACH,WAAW,CAACc,aAAa,CAACR,MAAMR,IAAIc,IAAI;IACrE;IAEA,OAAO;QACHG,MAAMT,KAAKK,OAAO;IACtB;AACJ;MAEA,WAAef"}
|
|
@@ -85,7 +85,7 @@ const postUserPushRegisterTokenHandler = async ({ ctx, req, origin })=>{
|
|
|
85
85
|
// Filter out all other devices except the newly registered one
|
|
86
86
|
user.pushNotificationTokens = user.pushNotificationTokens.filter((t)=>t.deviceId === req.body.deviceId);
|
|
87
87
|
}
|
|
88
|
-
await repo.
|
|
88
|
+
await repo.updateById(user._id, {
|
|
89
89
|
pushNotificationTokens: user.pushNotificationTokens
|
|
90
90
|
});
|
|
91
91
|
if (deregisterOtherDevices) {
|
|
@@ -108,7 +108,7 @@ const postUserPushRegisterTokenHandler = async ({ ctx, req, origin })=>{
|
|
|
108
108
|
let lengthBefore = other.pushNotificationTokens.length;
|
|
109
109
|
other.pushNotificationTokens = other.pushNotificationTokens.filter((t)=>t.deviceId !== req.body.deviceId && t.token !== req.body.token);
|
|
110
110
|
_flink.log.debug(`Deregistering ${lengthBefore - other.pushNotificationTokens.length} devices for user ${other._id} as other user ${user._id} claimed this device`);
|
|
111
|
-
await repo.
|
|
111
|
+
await repo.updateById(other._id, {
|
|
112
112
|
pushNotificationTokens: other.pushNotificationTokens
|
|
113
113
|
});
|
|
114
114
|
} catch (e) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/joel/projects/flink/flink-framework/packages/generic-auth-plugin/src/handlers/UserPushRegisterToken.ts"],"sourcesContent":["import { FlinkContext, Handler, log, notFound } from \"@flink-app/flink\";\nimport { genericAuthContext } from \"../genericAuthContext\";\nimport { PushNotificationToken } from \"../schemas/PushNotificationToken\";\nimport { PushNotificatioNTokenRes } from \"../schemas/PushNotificationTokenRes\";\nimport { User } from \"../schemas/User\";\nimport { GenericAuthPluginOptions } from \"../genericAuthPluginOptions\";\n\nconst postUserPushRegisterTokenHandler: Handler<FlinkContext<genericAuthContext>, PushNotificationToken, PushNotificatioNTokenRes> = async ({\n ctx,\n req,\n origin,\n}) => {\n const pluginName = origin || \"genericAuthPlugin\";\n const pluginOptions: GenericAuthPluginOptions = (ctx.plugins as any)[pluginName];\n const repo = ctx.repos[pluginOptions.repoName];\n const deregisterOtherDevices = pluginOptions.deregisterOtherDevices || false;\n const allowMultipleDevices = pluginOptions.allowMultipleDevices ?? true;\n\n const user = <User>await repo.getById(req.user._id);\n\n if (user == null) {\n return notFound(\"User not found\");\n }\n\n let exToken = user.pushNotificationTokens.find((t) => t.deviceId == req.body.deviceId);\n\n if (exToken != null) {\n exToken.token = req.body.token;\n exToken.type = req.body.type || \"firebase\";\n } else {\n user.pushNotificationTokens.push({ ...req.body, type: req.body.type || \"firebase\" });\n }\n\n if (!allowMultipleDevices) {\n // Filter out all other devices except the newly registered one\n user.pushNotificationTokens = user.pushNotificationTokens.filter((t) => t.deviceId === req.body.deviceId);\n }\n\n await repo.
|
|
1
|
+
{"version":3,"sources":["/Users/joel/projects/flink/flink-framework/packages/generic-auth-plugin/src/handlers/UserPushRegisterToken.ts"],"sourcesContent":["import { FlinkContext, Handler, log, notFound } from \"@flink-app/flink\";\nimport { genericAuthContext } from \"../genericAuthContext\";\nimport { PushNotificationToken } from \"../schemas/PushNotificationToken\";\nimport { PushNotificatioNTokenRes } from \"../schemas/PushNotificationTokenRes\";\nimport { User } from \"../schemas/User\";\nimport { GenericAuthPluginOptions } from \"../genericAuthPluginOptions\";\n\nconst postUserPushRegisterTokenHandler: Handler<FlinkContext<genericAuthContext>, PushNotificationToken, PushNotificatioNTokenRes> = async ({\n ctx,\n req,\n origin,\n}) => {\n const pluginName = origin || \"genericAuthPlugin\";\n const pluginOptions: GenericAuthPluginOptions = (ctx.plugins as any)[pluginName];\n const repo = ctx.repos[pluginOptions.repoName];\n const deregisterOtherDevices = pluginOptions.deregisterOtherDevices || false;\n const allowMultipleDevices = pluginOptions.allowMultipleDevices ?? true;\n\n const user = <User>await repo.getById(req.user._id);\n\n if (user == null) {\n return notFound(\"User not found\");\n }\n\n let exToken = user.pushNotificationTokens.find((t) => t.deviceId == req.body.deviceId);\n\n if (exToken != null) {\n exToken.token = req.body.token;\n exToken.type = req.body.type || \"firebase\";\n } else {\n user.pushNotificationTokens.push({ ...req.body, type: req.body.type || \"firebase\" });\n }\n\n if (!allowMultipleDevices) {\n // Filter out all other devices except the newly registered one\n user.pushNotificationTokens = user.pushNotificationTokens.filter((t) => t.deviceId === req.body.deviceId);\n }\n\n await repo.updateById(user._id, {\n pushNotificationTokens: user.pushNotificationTokens,\n });\n\n if (deregisterOtherDevices) {\n const otherRegistrations = <User[]>await repo.findAll({\n $or: [{ \"pushNotificationTokens.deviceId\": req.body.deviceId }, { \"pushNotificationTokens.token\": req.body.token }],\n _id: { $ne: repo.buildId(user._id) },\n });\n\n log.debug(`Found ${otherRegistrations.length} other registrations for device ${req.body.deviceId} or token ${req.body.token}`);\n\n for (let other of otherRegistrations) {\n try {\n let lengthBefore = other.pushNotificationTokens.length;\n\n other.pushNotificationTokens = other.pushNotificationTokens.filter((t) => t.deviceId !== req.body.deviceId && t.token !== req.body.token);\n\n log.debug(\n `Deregistering ${lengthBefore - other.pushNotificationTokens.length} devices for user ${other._id} as other user ${\n user._id\n } claimed this device`\n );\n\n await repo.updateById(other._id, {\n pushNotificationTokens: other.pushNotificationTokens,\n });\n } catch (e) {\n console.error(\"Error deregistering other devices\", e);\n }\n }\n }\n\n return { data: { status: \"success\" } };\n};\n\nexport default postUserPushRegisterTokenHandler;\n"],"names":["postUserPushRegisterTokenHandler","ctx","req","origin","pluginOptions","pluginName","plugins","repo","repos","repoName","deregisterOtherDevices","allowMultipleDevices","user","getById","_id","notFound","exToken","pushNotificationTokens","find","t","deviceId","body","token","type","push","filter","updateById","otherRegistrations","findAll","$or","$ne","buildId","log","debug","length","other","lengthBefore","e","console","error","data","status"],"mappings":"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"}
|
|
@@ -17,7 +17,7 @@ const postUserRemoveTokenHandler = async ({ ctx, req, origin })=>{
|
|
|
17
17
|
return (0, _flink.notFound)("User not found");
|
|
18
18
|
}
|
|
19
19
|
user.pushNotificationTokens = user.pushNotificationTokens.filter((t)=>t.deviceId != req.body.deviceId);
|
|
20
|
-
await repo.
|
|
20
|
+
await repo.updateById(user._id, {
|
|
21
21
|
pushNotificationTokens: user.pushNotificationTokens
|
|
22
22
|
});
|
|
23
23
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/joel/projects/flink/flink-framework/packages/generic-auth-plugin/src/handlers/UserPushRemoveToken.ts"],"sourcesContent":["import { FlinkContext, Handler, notFound } from \"@flink-app/flink\";\nimport { genericAuthContext } from \"../genericAuthContext\";\nimport { PushNotificationToken } from \"../schemas/PushNotificationToken\";\nimport { PushNotificatioNTokenRes } from \"../schemas/PushNotificationTokenRes\";\nimport { User } from \"../schemas/User\";\n\nconst postUserRemoveTokenHandler: Handler<FlinkContext<genericAuthContext>, PushNotificationToken, PushNotificatioNTokenRes> = async ({ ctx, req, origin }) => {\n let pluginName = origin || \"genericAuthPlugin\";\n let repo = ctx.repos[(<any>ctx.plugins)[pluginName].repoName];\n\n const user = <User>await repo.getById(req.user._id);\n\n if (user == null) {\n return notFound(\"User not found\");\n }\n\n user.pushNotificationTokens = user.pushNotificationTokens.filter((t) => t.deviceId != req.body.deviceId);\n\n await repo.
|
|
1
|
+
{"version":3,"sources":["/Users/joel/projects/flink/flink-framework/packages/generic-auth-plugin/src/handlers/UserPushRemoveToken.ts"],"sourcesContent":["import { FlinkContext, Handler, notFound } from \"@flink-app/flink\";\nimport { genericAuthContext } from \"../genericAuthContext\";\nimport { PushNotificationToken } from \"../schemas/PushNotificationToken\";\nimport { PushNotificatioNTokenRes } from \"../schemas/PushNotificationTokenRes\";\nimport { User } from \"../schemas/User\";\n\nconst postUserRemoveTokenHandler: Handler<FlinkContext<genericAuthContext>, PushNotificationToken, PushNotificatioNTokenRes> = async ({ ctx, req, origin }) => {\n let pluginName = origin || \"genericAuthPlugin\";\n let repo = ctx.repos[(<any>ctx.plugins)[pluginName].repoName];\n\n const user = <User>await repo.getById(req.user._id);\n\n if (user == null) {\n return notFound(\"User not found\");\n }\n\n user.pushNotificationTokens = user.pushNotificationTokens.filter((t) => t.deviceId != req.body.deviceId);\n\n await repo.updateById(user._id, {\n pushNotificationTokens: user.pushNotificationTokens,\n });\n\n return { data: { status: \"success\" } };\n};\n\nexport default postUserRemoveTokenHandler;\n"],"names":["postUserRemoveTokenHandler","ctx","req","origin","pluginName","repo","repos","plugins","repoName","user","getById","_id","notFound","pushNotificationTokens","filter","t","deviceId","body","updateById","data","status"],"mappings":";;;;+BAyBA;;;eAAA;;;uBAzBgD;AAMhD,MAAMA,6BAAyH,OAAO,EAAEC,GAAG,EAAEC,GAAG,EAAEC,MAAM,EAAE;IACtJ,IAAIC,aAAaD,UAAU;IAC3B,IAAIE,OAAOJ,IAAIK,KAAK,CAAC,AAAML,IAAIM,OAAO,AAAC,CAACH,WAAW,CAACI,QAAQ,CAAC;IAE7D,MAAMC,OAAa,MAAMJ,KAAKK,OAAO,CAACR,IAAIO,IAAI,CAACE,GAAG;IAElD,IAAIF,QAAQ,MAAM;QACd,OAAOG,IAAAA,eAAQ,EAAC;IACpB;IAEAH,KAAKI,sBAAsB,GAAGJ,KAAKI,sBAAsB,CAACC,MAAM,CAAC,CAACC,IAAMA,EAAEC,QAAQ,IAAId,IAAIe,IAAI,CAACD,QAAQ;IAEvG,MAAMX,KAAKa,UAAU,CAACT,KAAKE,GAAG,EAAE;QAC5BE,wBAAwBJ,KAAKI,sBAAsB;IACvD;IAEA,OAAO;QAAEM,MAAM;YAAEC,QAAQ;QAAU;IAAE;AACzC;MAEA,WAAepB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flink-app/generic-auth-plugin",
|
|
3
|
-
"version": "2.0.0-alpha.
|
|
3
|
+
"version": "2.0.0-alpha.74",
|
|
4
4
|
"description": "Flink plugin that provides a generic user authentification solution.",
|
|
5
5
|
"author": "johan@frost.se",
|
|
6
6
|
"publishConfig": {
|
|
@@ -12,20 +12,20 @@
|
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"handlebars": "^4.7.7",
|
|
14
14
|
"jsonwebtoken": "^8.5.1",
|
|
15
|
-
"@flink-app/
|
|
16
|
-
"@flink-app/email-plugin": "2.0.0-alpha.
|
|
17
|
-
"@flink-app/management-api-plugin": "2.0.0-alpha.
|
|
18
|
-
"@flink-app/
|
|
15
|
+
"@flink-app/jwt-auth-plugin": "2.0.0-alpha.74",
|
|
16
|
+
"@flink-app/email-plugin": "2.0.0-alpha.74",
|
|
17
|
+
"@flink-app/management-api-plugin": "2.0.0-alpha.74",
|
|
18
|
+
"@flink-app/sms-plugin": "2.0.0-alpha.74"
|
|
19
19
|
},
|
|
20
20
|
"devDependencies": {
|
|
21
21
|
"@types/jsonwebtoken": "^8.5.2",
|
|
22
22
|
"@types/node": "22.13.10",
|
|
23
23
|
"ts-node": "^10.9.2",
|
|
24
|
-
"@flink-app/flink": "2.0.0-alpha.
|
|
24
|
+
"@flink-app/flink": "2.0.0-alpha.74"
|
|
25
25
|
},
|
|
26
26
|
"gitHead": "4243e3b3cd6d4e1ca001a61baa8436bf2bbe4113",
|
|
27
27
|
"peerDependencies": {
|
|
28
|
-
"@flink-app/flink": ">=2.0.0-alpha.
|
|
28
|
+
"@flink-app/flink": ">=2.0.0-alpha.74"
|
|
29
29
|
},
|
|
30
30
|
"scripts": {
|
|
31
31
|
"test": "echo \"Error: no test specified\"",
|
package/src/coreFunctions.ts
CHANGED
|
@@ -281,7 +281,7 @@ export async function changePassword(
|
|
|
281
281
|
};
|
|
282
282
|
}
|
|
283
283
|
|
|
284
|
-
await repo.
|
|
284
|
+
await repo.updateById(userId, {
|
|
285
285
|
password: passwordAndSalt.hash,
|
|
286
286
|
salt: passwordAndSalt.salt,
|
|
287
287
|
});
|
|
@@ -329,7 +329,7 @@ export async function passwordResetStart(
|
|
|
329
329
|
secret = jwtSecret + ":" + code;
|
|
330
330
|
} else {
|
|
331
331
|
secret = jwtSecret + ":" + code + ":" + pwdResetStartedAt;
|
|
332
|
-
await repo.
|
|
332
|
+
await repo.updateById(user._id, { pwdResetStartedAt });
|
|
333
333
|
}
|
|
334
334
|
|
|
335
335
|
const options: jsonwebtoken.SignOptions = {
|
|
@@ -398,7 +398,7 @@ export async function passwordResetComplete(
|
|
|
398
398
|
};
|
|
399
399
|
}
|
|
400
400
|
|
|
401
|
-
await repo.
|
|
401
|
+
await repo.updateById(user._id, {
|
|
402
402
|
password: passwordAndSalt.hash,
|
|
403
403
|
salt: passwordAndSalt.salt,
|
|
404
404
|
pwdResetStartedAt: null,
|
|
@@ -33,7 +33,7 @@ const PutManagementUserPasswordByUserid: Handler<FlinkContext, PutManagementUser
|
|
|
33
33
|
return badRequest("Password not accepted");
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
await repo.
|
|
36
|
+
await repo.updateById(req.params.userid, {
|
|
37
37
|
password: passwordAndSalt.hash,
|
|
38
38
|
salt: passwordAndSalt.salt,
|
|
39
39
|
});
|
|
@@ -15,7 +15,7 @@ const PutManagementUserProfileByUserid: Handler<FlinkContext, PutManagementUserP
|
|
|
15
15
|
return notFound();
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
await repo.
|
|
18
|
+
await repo.updateById(user._id, { profile: req.body });
|
|
19
19
|
|
|
20
20
|
const updatedUser = await repo.getById(req.params.userid);
|
|
21
21
|
|
|
@@ -15,7 +15,7 @@ const PutManagementUserRolesByUserid: Handler<FlinkContext, PutManagementUserRol
|
|
|
15
15
|
return notFound();
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
await repo.
|
|
18
|
+
await repo.updateById(user._id, { roles: req.body.roles });
|
|
19
19
|
|
|
20
20
|
return {
|
|
21
21
|
data: {},
|
|
@@ -24,7 +24,7 @@ const PutManagementUserUsernameByUserid: Handler<FlinkContext, PutManagementUser
|
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
await repo.
|
|
27
|
+
await repo.updateById(user._id, { username: req.body.username.toLowerCase() });
|
|
28
28
|
|
|
29
29
|
return {
|
|
30
30
|
data: {},
|
|
@@ -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) {
|
|
@@ -16,7 +16,7 @@ const postUserRemoveTokenHandler: Handler<FlinkContext<genericAuthContext>, Push
|
|
|
16
16
|
|
|
17
17
|
user.pushNotificationTokens = user.pushNotificationTokens.filter((t) => t.deviceId != req.body.deviceId);
|
|
18
18
|
|
|
19
|
-
await repo.
|
|
19
|
+
await repo.updateById(user._id, {
|
|
20
20
|
pushNotificationTokens: user.pushNotificationTokens,
|
|
21
21
|
});
|
|
22
22
|
|